CommandBlock Résolu [1.13] Comment détecter que l'on appuie sur un bouton avec /execute ?

ewenadou

Bucheron
28 Octobre 2017
6
1
14
Bretagne !
Bonjour,

J'ai un problème je voudrais faire en sorte que quand j'appuie sur un bouton ( ou plusieurs ), cela soit détecté par un commande block, pour ensuite exécuter une fonction ( sans que le commande block soit dessous le bouton, si je veux ça c'est parce que je ne peux pas le faire sinon on le verras ) !
Vous savez comment faire ?
Tout ceci est en 1.13 donc plus de /testfor mais en revanche le /execute à repris les fonctionnalité de ce dernier je crois ?

Merci d'avance !
 

Daminator4113

Êtres humain (je crois)
15 Juin 2016
79
35
121
24
Il te faut minimum 2 commandes, celle(s) qui détecte(nt) lorsque le bouton est pressé, et celle qui remet le bouton en position désactivé, sinon ta commande sera répété le temps que le bouton soit désactivé.

Tu commences par mettre cette commande que tu complètes par ce que tu veux (tu peux la dupliquer autant de fois que tu en auras besoin) :
Code:
/execute if block <coordonnées> <type de bouton>_button[powered=true] run <ta commande>

Et tu finis par cette commande qui devra s'exécuter en dernier, et évité de répété toutes les commandes plusieurs fois :
Code:
/execute if block <coordonnées> <type de bouton>_button[powered=true] run setblock <coordonnées> <type de bouton>_button[facing=<orientation du bouton>,face=<la surface sur laquel il est posé>,powered=false]

pour les conditions entre [ ] tu peux les voir quand tu fais F3, en haut à droite de l'écran en dessous de "Targeted Block"
 
Dernière édition:

ewenadou

Bucheron
28 Octobre 2017
6
1
14
Bretagne !
Salut !

Merci de ton aide, mais quand j'essaye de faire la première commande il ne se passe absolument rien !

J'ai fait un test dont voici le screen :

1529581901-2018-06-21-13-49-56.png


La commande que j'ai faite :

Code:
execute if block 70 1 -71 stone_button[powered=true] run msg @a hello

ou

execute if block 70 1 -71 #minecraft:buttons[powered=true] run msg @a hello

Aucun des deux ne fonctionne ... Il y a-t-il une configuration à faire dans le commande block ( = toujours actif/par la redstone ... ) ?

Merci d'avance !
 

Daminator4113

Êtres humain (je crois)
15 Juin 2016
79
35
121
24
Tu dois mettre ces commandes à la chaine, avec un repeat_command_block et un chain_command_block, en toujours actif, ou avec la redstone, ça dépend de ce que tu fais avec ^^
Sans titre 1.png
 
Dernière édition:

ewenadou

Bucheron
28 Octobre 2017
6
1
14
Bretagne !
Merci, j'ai enfin réussi !!

Pour résumer il faut taper la commande :
Code:
/execute if block <coordonnées> <type de bouton>_button[powered=true] run <ta commande>
( qui détecte l'appuie sur le bouton et lance la commande souhaité ) ,dans un commande block en répétition et toujours actif . celui-ci tourné vers un deuxième commande bloc qui est en mode chaîne et toujours actif avec la commande :
Code:
/execute if block <coordonnées> <type de bouton>_button[powered=true] run setblock <coordonnées> <type de bouton>_button[facing=<orientation du bouton>,face=<la surface sur laquelle il est posé>,powered=false]
( qui remplace le bouton pour n'exécuter qu'une seule fois la commande )

Merci grandement de ton aide !!
Bonne continuation ;)
 
Dernière édition:
  • J'aime
Reactions: Daminator4113

Flymeth

Aventurier
16 Février 2020
2
0
6
24
Bonjour ! Je viens de tomber sur le forum, et j'aimerai savoir:
Comment puis-je, quand un joueur appui sur le bouton, lui ajouter un score (dans mon cas ce serait un score de mort=1).

En suivant les conseils de ce forum, j'ai mis cette commande dans un commande block (repeat + toujours actif), mais rien ne se passe lorsque j'appui sur le bouton en question:
/execute if block 276 128 213 minecraft:stone_button[powered=true] run scoreboard players set @s mort 1

Des solutions à ce problème ?
 
Dernière édition:

Daminator4113

Êtres humain (je crois)
15 Juin 2016
79
35
121
24
C'est parce que le "set @s" renvoie au command_bloc.
Le mieux c'est d'executer à la position du bouton, et de prendre le joueur le plus proche.
Ça donne ça : /execute positioned 276 128 213 if block ~ ~ ~ stone_button[powered=true] run scoreboard players set @p mort 1

Le seul problème avec ça, c'est que si un joueur est plus proche du bouton que celui qui appuie dessus, ça va prendre ce joueur là, et pas celui qui appuie.
 

Flymeth

Aventurier
16 Février 2020
2
0
6
24
C'est parce que le "set @s" renvoie au command_bloc.
Le mieux c'est d'executer à la position du bouton, et de prendre le joueur le plus proche.
Ça donne ça : /execute positioned 276 128 213 if block ~ ~ ~ stone_button[powered=true] run scoreboard players set @p mort 1

Le seul problème avec ça, c'est que si un joueur est plus proche du bouton que celui qui appuie dessus, ça va prendre ce joueur là, et pas celui qui appuie.
Mais justement, le problème, c'est que j'ai mis le bouton sur un mur de vitre, et rien derrière. Si je place un commande block dans ma salle de commande block, alors le @p ne sera plus dutous fonctionnel (car la salle où il y a le bouton est en 0 150 0 et entièrement faite de vitre). Comment je peux faire ?
 

Thomassupercool

Aventurier
13 Juin 2020
1
0
1
20
Bonjour, Je suis tombé sur ce forum en cherchant une information similaire... Je cherche à pouvoir ouvrir et fermer une porte de pont levis (faite en planche de chêne noir uniquement)
Je n'ai trouvé que la commande /clone replace move, pour stocker une porte quelque part pendant que l'autre est en place et vice-versa... Je cherche donc à pouvoir appuyer sur un bouton pour exécuter la commande et faire apparaître une porte couchée et cacher l'autre, et une nouvelle fois pour faire disparaître la porte ouverte et faire apparaître celle fermée. Pouvez-vous m'aider svp ?
Si quelqu'un à une autre commande qui pourrait être adaptée et serait + facile ...
Je précise que la porte n'est pas carrée ou rectangulaire... mais arrondie sur le dessus. Elle fait un bloc d'épaisseur.
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
24
En gros tu veux détecter le bouton qui changerait de "mode" de porte?

Si tu peux utiliser de la redstone reliée au bouton, c'est toujours mieux.

Si vraiment tu ne veux pas mettre de redstone, tu peux détecter le fait qu'il soit activé ou non avec cette commande :

execute positioned x y z if block ~ ~ ~ minecraft:button[powered=1]
(C'est écrit de tête, je garantis pas la syntaxe...)

Sachant que xyz doivent être fixés selon les coordonnées de ton bouton, si tu mets cette commande dans un bloc de commande à répétition, tu peux détecter quand le bouton est appuyé sans relier de redstone.

Il ne te reste plus qu'à placer un comparateur reliant le command block à répétition à celui contenant le /clone.
Le comparateur restera allumé tant que le bouton sera appuyé.

D'ordinaire, les comparateurs avec les command blocks, c'est tabou...
Mais là, c'est un système unique et simple, et c'est plutôt une bonne solution, je pense