Ok ok imaginons que je fasse un execute testforblock sur un armorstand qui s'appelle Crafting ce serait quoi la syntaxe du /stats ? (J'ai beaucoup de connaissances en command blocks mais le /stats est la seule commande a laquelle je ne me suis pas encore interessé, oui je devrais). Si tu me donne une réponse fiable et qui marche en multijoueur je te considère officiellement comme un génie :)
Cliquez pour agrandir...
A l'invocation (imaginons qu'on utilise un œuf de Silverfish et que j'ai un objectif nommé "Craft") :
Code (cpp):
/ execute @e[ type= Silverfish,name= Dispenser] ~ ~ ~ summon ArmorStand ~ ~ ~ { CustomName: "Craft" ,Invisible: 1b,Marker: 1b,NoGravity: 1b,Invulnerable: 1b}
/ execute @e[ type= Silverfish,name= Dispenser] ~ ~ ~ setblock ~ ~ ~ minecraft: dispenser 1 { CustomName: "Crafting Device" }
/ execute @e[ type= Silverfish,name= Dispenser] ~ ~ ~ scoreboard players set @e[ type= ArmorStand,name= Craft,r= 1 ] Craft 0
/ execute @e[ type= Silverfish,name= Dispenser] ~ ~ ~ stats entity @e[ type= ArmorStand,name= Craft,r= 1 ] set SuccessCount @e[ type= ArmorStand,name= Craft,r= 1 ] Craft
/ kill @e[ type= Silverfish,name= Dispenser]
(J'ai choisi de diriger le dispenser vers le haut et de le nommer dans le GUI "Crafting Device" mais tu peux changer)
Ok donc ici nous avons des execute sur le SilverFish qui vont dans l'ordre : summon l'armorstand, setblock le dispenser, mettre le score de l'armorstand à 0 (c'est obligatoire avant de lier à un stats pour qu'il fonctionne), puis le /stats reliant le score de l'ArmorStand à son SuccessCount. Cela veut dire qu'à
chaque fois qu'une commande est réalisée en execute
par l'armorstand son score va prendre deux valeurs : 0 si elle réussi et 1 si elle échoue.
A partir de là il ne te reste qu'à tester chaque "motif" indépendamment :
Code (cpp):
/ scoreboard players set @e[ type= ArmorStand,name= Craft] Craft 0
/ execute @e[ type= ArmorStand,name= Craft] ~ ~ ~ testforblock ~ ~ ~ minecraft: dispenser 1 { NBT tag à tester}
/ execute @e[ type= ArmorStand,name= Craft,score_Craft_min= 1 ] ~ ~ ~ blockdata ~ ~ ~ { NBT tag à donner}
Ici on remet d'abord le score à 0 (à mettre avant chaque recette pour qu'il n'y ait pas d'interactions entre-elles). L'ArmorStand réalise l'execute sur le dispenser se trouvant à sa position en vérifiant s'il s'agit d'un dispenser possédant un certain tag. Le NBT doit contenir un tag "Items" listant les objets dans le dispenser et leur slot pour vérifier la recette (pense également à indiquer les count pour éviter qu'un joueur ne crafte qu'une mine avec des stacks de composants). Si le dispenser répond aux conditions la commande est un succès : le SuccessCount de l'armorstand passe à 1 et son score avec. Il ne reste plus qu'à remplacer la recette par la mine grâce à la dernière commande utilisant un sélecteur sur le score qui doit passer à 1.
Si tu n'arrives pas à créer les NBT entiers toi-même fait simplement un /blockdata vide sur dispenser contenant la recette ou l'obket fini pour que le jeu te ressorte tous ces tags et que tu n'ais plus qu'à copier-coller et enlever les tag inutiles.
Code (cpp):
/ blockdata < x> < y> < z> { }
Je précise que je n'ai
absolument pas testé ces commandes, donc qu'il y a
très probablement des erreurs . Néanmoins cela te permet de comprendre le moyen que j'évoquais et tu pourras de toi-même corriger ces erreurs (ce qui te dispense d'appliquer ta dernière phrase
).
Si tu as du mal avec le /stats je te renvoie vers ce tutoriel :
http://forum.minecraft-france.fr/threads/stats-introduction-de-labstrait-dans-les-commandes.27299/
Et sur l'introduction de la troisième et dernière partie de celui-ci :
http://forum.minecraft-france.fr/threads/des-shops-compacts-et-intuitifs.28382/
Cela nécéssite quand même trois commandes par craft dont deux impliquant une écriture/lecture de NBT. Par conséquent je recommande de ne pas mettre ce système sur une fill clock simple mais plutôt sur une lente (genre une activation toutes les 0.5 secondes serait le mieux).
Cliquez pour agrandir...