Détection d'un bouton, avec un bloc

Fermé
Hiomir - 27 oct. 2016 à 00:29
 Hiomir - 29 oct. 2016 à 19:56
Bonjour,
J'ai un petit problème de command block. J'aimerais une commande ou une suite de commande effectuant la chose suivante:
Dans un cube de 50x50x50, un joueur pose un bloc et un bouton. Lorsque quelqu'un d'autre appuie sur le bouton, le bloc change (j'ai beaucoup simplifié pour que ça soit compréhensible). Problème: Le bouton peut être n'importe où, et je ne vais pas m'amuser à faire 18 000 /testforblock. Il y a aussi la commande execute, mais elle ne marche pas avec les blocs, seulement les entités. Je pourrais donc fonctionner avec un armor stand, mais comment faire pour placer une armor stand à l'endroit du bloc, sans utiliser des /testforblock?
Autre indication: je ne peux pas poser un armor stand sur la personne qui pose le bloc pour enregistrer l'endroit puis remplacer un bloc dans sa zone, puisque il y aura plusieurs blocs et boutons identique un peu partout. Merci d'avance!
A voir également:

1 réponse

Utilisateur anonyme
27 oct. 2016 à 11:38
Salut,

Ton problème est un peu compliqué à résoudre. Je vais essayer de te répondre au mieux mais il n'y a aucune solution "simple". J'ai recommencé ce message plusieurs fois donc il se peut que quelques coquilles et incohérences se soient glissées dans le texte. Je n'ai pas eu le temps de tester les commandes, il se peut qu'une erreur de syntaxe soit présente.

Tout d'abord, sache qu'il te faudra une bonne vingtaine de command_blocks pour la détection si tu veux pouvoir retrouver le bloc d'accroche.

Pour moi la meilleure approche serait de faire apparaître un ArmorStand sur chaque joueur pour quadriller la zone, via une série d'execute :
execute @a[coordonnées de la zone] ~ ~ ~ summon ArmorStand ~ ~ ~ {CustomName:"ButtonCheck"}

Cet ArmorStand va "scanner" une zone de 9x9x9 pour détecter les boutons de tout type. S'il en trouve un, il "marque" l'endroit via un autre ArmorStand.
execute @e[type=ArmorStand,name=ButtonCheck,coordonnées de la zone] ~1 ~ ~ detect ~ ~ ~ minecraft:stone_button -1 summon ArmorStand ~ ~ ~ {CustomName:"ButtonAction"}

Dans l'exemple ci-dessus nous vérifions le bloc à gauche de l'ArmorStand (à toi de dupliquer la commande en adaptant les coordonnées, pour analyser chaque bloc). Si nous trouvons un boutton, alors nous faisons apparaître "ButtonAction".
C'est ce nouvel ArmorStand qui va s'occuper de détecter le bouton appuyé. Chaque bouton possède sa propre datavalue :
  • Bas : 8
  • Est : 9
  • Ouest : 10
  • Sud : 11
  • Nord : 12
  • Haut : 13

execute @e[type=ArmorStand,name=ButtonAction,coordonnées de la zone] ~ ~ ~ detect ~ ~ ~ minecraft:stone_button 8 setblock ~ ~-1 ~ minecraft:stone 0

Dans l'exemple ci-dessus l'ArmorStand ButtonAction va détecter un bouton appuyé dirigé vers le bas. S'il le trouve, il remplace le bloc sous le bouton.
Et à la fin, tu lances un kill pour nettoyer la zone. Avec les command_blocks de la 1.9 ça devrait aller très vite, et pour les versions antérieures tu peux passer par une fill clock.

Comme tu le vois, c'est un peu laborieux mais je n'ai rien de mieux à te proposer. À défaut d'avoir pu t'aider efficacement, j'espère t'avoir donné un début de piste.

Bon mapping ! :-)
0
Je viens de voir que tu ne veux pas d'un ArmorStand sur la position d'un joueur. J'espère que la détection d'un bouton ne posera pas de souci (tu n'as pas vraiment le choix pour ce genre de détections).

Sache également que tu ne peux pas faire la différence entre celui qui a créé le bloc et celui qui va l'utiliser.
0
Hiomir > Utilisateur anonyme
29 oct. 2016 à 19:56
Merci pour ta réponse!
Je vais essayer, voir si il y a des choses à corriger, mais ça devrait être bon dans l'ensemble! ^^
0