CommandBlock [Demande] [1.7.10] Supprimer de la nourriture.

Nkarra

Aventurier
29 Janvier 2017
31
2
8
Bonjour, qq1 peut il me faire un zolie command block ou deux qui va supp. la nourriture crue des inventaires et coffres a une heure fix (ex: 20h (heure minecraft)) et la remplacer par de la chair putréfié, pour server en 1.7.10
Merci du coup de main.
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Pour les coffres, ce n'est pas possible, ou tout du moins, pas facilement et sans lag ;)
 

Nkarra

Aventurier
29 Janvier 2017
31
2
8
Bonsoir, ok va pour les inventaires des joueurs, leur coffres tampis, perso je stock très rarement de la nourritures crues.
Merci.
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Bon, alors, je tiens déjà à te prévenir que les items ne "remplaceront" pas ta nourriture, le moyen le plus simple et le plus compacte pour faire ce que tu souhaites est de give la rotten flesh tout en retirant la nourriture crue, cela te vas-t-il ?
 

Nkarra

Aventurier
29 Janvier 2017
31
2
8
Oui oui le command block /clear les nourritures crues et /give la rotten pas de prob.
La question que je me pose c'est comment savoir le bon nombre de rotten a /give ?
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
L'idée serait de donner un tag à tout joueur possédant certaines nourritures crue sur eux (tag chicken, tag pig, tag cow...), tag que l'on leur retire lorsqu'il ne possède plus la nourriture en question. Ensuite, une simple boucle : on clear 1 item de nourriture de chaque nourriture qu'il possède en fonction du/des tag(s) qu'il a et pour chaque item clear, on lui give une rotten flesh. Le système qui retire les tags sert de coupe-circuit empêchant ainsi la distribution si le joueur n'a pas de nourriture ^^
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Je te fais le système pour un type de nourritures ^^
Mais ça attendra un peu, je viens de me rendre compte que j'ai un très gros soucis avec mon compte, je règle ça d'abord...
 

Nkarra

Aventurier
29 Janvier 2017
31
2
8
Pas de prob. suis pas press :)
Avec une command de devais arriver a faire les autres ^^
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Me voici !
Donc voilà ce que je propose. À savoir que ce système fonctionne seulement pour un seul type de nourritures, tu devras donc faire la même chose pour les autres en changeant le tag (tu lui donnes le nom que tu veux) et l'objet à clear.
Pour commencer, tu donnes un tag que j'ai nommé "cow" à tout joueur possédant l'item "beef" (steak crue) sur lui :
Code:
/scoreboard players tag @a add cow {Inventory:[{id:"minecraft:beef"}]}
Ce command block est en repeat, need redstone.
Ensuite, tu clear un steak de l'inventaire des joueurs possédant le tag :
Code:
/clear @a[tag=cow] beef 0 1
Afin de leur donner une rotten flesh :
Code:
/give @a[tag=cow] rotten_flesh 1 0
Il ne reste plus que le coupe circuit/le reset retirant le tag en question :
Code:
/scoreboard players tag @a remove cow
Voilà ^^
Si le joueur a plus d'un steak, le système se bouclera jusqu'à ce qu'il en est plus ! ^^
Pour l'activer toute les 20h (heure IG), il suffit de faire un peu de maths :
Nous savons qu'une journée dans Minecraft dure 20 minutes, que le temps IG est compté en Minecraft Ticks et que 1 seconde correspond à 20 ticks.
Donc une journée Minecraft correspond à 20*60*20 ticks soit 24000 ticks.
Une journée IRL correspond à 24h00, on peut donc en déduire qu'une heure IRL vaut 1000 ticks IG.
Or, une journée Minecraft commence au levé du soleil donc 6h00 et non à minuit donc on sait que 6h00 du matin correspond à 0 tick (ou 24000, tout dépend du sens).
20 - 6 = 14 et 14 * 1000 (1 heure IG) vaut 14000.
Donc 20h00 IG correspond à 14000 ticks.
Maintenant, il faut pouvoir détecter cette heure-ci, pour cela, nous allons utiliser la commande /stats.
Pour commencer, créer un objectif que l'on va appeler "Time" en dummy :
Code:
/scoreboard objectif add Time dummy
Puis initialise un score sur un faux joueur :
Code:
/scoreboard players set time Time 0
Ensuite, pose un command block en repeat, always active et place cette commande dedans :
Code:
/time query daytime
Elle va nous permettre de récupérer le nombre de ticks passer depuis le début de la journée.
Place à la suite un command block chain dans lequel nous allons placer notre /stats :
Code:
/stats block x y z set QueryResult time Time
x y et z sont les coordonnées du command block contenant notre /time.
Cette commande va nous permettre de stocker les ticks dans un score, et donc pouvoir les tester !

Maintenant, dernière étape, c'est de tester notre score :
Code:
/scoreboard players test time Time 14000 14500
14000 et 14500 sont une borne de détection, le command block activera le reste de la chain si le nombre de ticks est compris entre ces deux chiffres (je prend une marge de sécurité en cas de lag serveur, c'est pour ça que l'intervalle est grand)
Puis l'ouput activant ton système de rotten flesh :
Code:
/setblock x y z redstone_block
x y et z étant les coordonnées d'un bloc limitrophe à ton tout premier command block violet.

Dernière étape, le reset du système, dans un command block violet :
Code:
/scoreboard players test time Time 15000 15500
Puis dans un chain, à la suite :
Code:
/setblock x y z air
Où x y et z sont les même coordonnées que pour déclencher ton système.
Voilà, c'est tout ! ^^
Tu n'as besoin de faire qu'une seule fois la seconde partie du système, mais la première, tu devras la faire autant de fois que tu as de viande crue à supprimer ^^