J'essaie de recréer une forme du jeu Runner dans un format spleef. En gros, je veux qu'un signal de redstone soit envoyé lorsque le joueur se trouve sur un bloc de neige afin de supprimer le bloc (le remplacer par de l'air en utilisant setblock) une ou deux secondes après. Comment pourrais-je réaliser cela ?
Réponses
Trop de publicités?En /execute
vous permettra de détecter les blocs relatifs à un joueur. La syntaxe est la suivante :
/execute <entity> <x> <y> <z> <command>
Ainsi, vous pouvez exécuter ce qui suit dans le bloc de commande :
execute @p ~ ~ ~ testforblock ~ ~-1 ~ snow
Ce qui précède donnera un signal de redstone lorsqu'il trouvera avec succès un bloc de neige sous le joueur, ce qui est ce que votre question demande.
Cependant, l'utilisation de commandes testfor et de comparateurs pour quelque chose comme ça est généralement une mauvaise idée ; comment saurez-vous quel bloc supprimer 2 secondes plus tard lorsque le joueur s'en est éloigné, par exemple ? De plus, ce sera complètement incompatible avec le multijoueur.
Vous pouvez, à la place, utiliser l'option /execute
de la commande detect
qui vous permet de détecter un bloc à partir d'une entité, puis d'exécuter une commande à partir de la même entité si ce bloc a été trouvé. Vous pourriez utiliser cette commande pour supprimer le bloc qui a été trouvé, ou convoquer un stand de marqueurs pour le supprimer après un délai :
execute @a ~ ~ ~ detect ~ ~-1 ~ snow 0 summon ArmorStand ~ ~-1 ~ {Marker:1b,Invisible:1b,NoGravity:1b,Invulnerable:1b,CustomName:"BlockRemover"}
/execute
comporte un detect
paramètre :
/execute @a ~ ~ ~ detect ~ ~-1 ~ minecraft:snow 0 /setblock ~ ~-1 ~ minecraft:air 0
Explication des paramètres :
@a : select all players
~ ~ ~ : execute at their position
detect : only execute if the following block is found
~ ~-1 ~ : check the block below the player
minecraft:snow 0 : check for snow with metadata = 0
/setblock ~ ~-1 ~ minecraft:air 0 : command to be executed by the player(sets the block below him to air)