3 votes

Dans Minecraft bedrock, puis-je créer un bloc fonction qui n'exécute qu'une seule fois une autre fonction ?

Dans Minecraft bedrock, j'essaie d'exécuter une fonction si elle n'a pas encore été exécutée pour initialiser une carte de bataille de construction. Il y a un bloc de commande avec un bouton et la commande qu'il exécute est "/function buildBattle". Lorsque j'appuie sur le bouton pour la première fois, la fonction d'initialisation doit être appelée. Si j'appuie à nouveau sur le bouton, il ne devrait pas le faire.

buildBattle.mcfunction

#assume activeGame is not null for any user and is set to 0 somewhere else
execute @p[scores={activeGame=0}] ~ ~ ~ function initialize

initialiser.mcfonction

scoreboard players set @a activeGame 1
...

La logique de ma fonction n'est pas tout à fait correcte. Si un joueur rejoint le jeu avec un activeGame de 0 et appuie sur le bouton, la fonction initialize sera appelée. Y a-t-il une autre façon de procéder ?

1voto

Penguin Points 4911

Voici quelque chose de très simple : utilisez un bloc qui se trouve à proximité du bloc de commande, juste à côté ou un peu en dessous, par exemple. Au lieu d'avoir un bloc de commande, faites-en deux (faites-en une chaîne et le second est conditionnel) et faites en sorte que la première commande soit

testforblock 5 10 7 bedrock

Remplacer évidemment 5 10 7 avec les coordonnées appropriées, puis dans le deuxième bloc de commande qui est conditionnel, en chaîne, et toujours actif :

function initialize

Ensuite, au début de la fonction, ajoutez la ligne :

setblock 5 10 7 bedrock

Encore une fois, remplacez 5 10 7 avec ce que vous avez mis avant, et vous avez terminé ! Si vous souhaitez le réactiver, il vous suffit de remplacer le bloc à l'endroit suivant 5 10 7 ou n'importe où, à n'importe quoi sauf à la roche-mère (comme l'air).

Ces systèmes sont vraiment pratiques car non seulement vous pouvez stocker des informations binaires (vrai/faux, etc.), mais vous pouvez en stocker un grand nombre, comme 4 options différentes, 10 différentes, etc. Ils sont également très faciles à réinitialiser manuellement sans avoir à entrer des commandes dans le chat à chaque fois, et ils vous montrent immédiatement pourquoi quelque chose se comporte mal.

1voto

Moshe Points 23825

La bonne façon de procéder est d'utiliser un support d'armure global. C'est-à-dire un stand d'armure qui utilise ses tableaux d'affichage comme variables.

Dans votre monde, créez un stand d'armure portant le nom de "global" :

summon minecraft:armor_stand 0 255 0 {CustomName:'{"text":"global"}',NoAi:1b}

Maintenant, vous pouvez stocker des variables globalement à l'intérieur de cette entité, comme ceci :

scoreboard players set @e[type=armor_stand,name="global"] activeGame 1

0voto

BoJack Horseman Points 111

Vous pourriez peut-être faire en sorte qu'il place une étiquette sur tous les joueurs qui se joignent à lui une fois qu'il a commencé et qu'il l'enlève à la fin.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X