CommandBlock Résolu Execution d'une partie de la fonction que une seule fois

sixcrocs

Bucheron
10 Mars 2018
9
0
12
28
Bonjour,

Je suis en train de faire des fonctions, j'ai ainsi créer une fonction qui s’exécute a chaque lancement de la partie ou /reload (avec le fichier tick.json). Ce que je souhaite faire, c'est exécuter ce qu'il y a dans le fichier que une seul fois (quad on le lance mais pas a chaque fois qu'on relance) ou alors quand on le fait manuellement.

Explication avec des commande :

Initialisation
/scoreboard objectives add options trigger
/scoreboard players set preparation options 0

Toute mes options :
/execute if score preparation options matches 0 run ......
...

Et a chaque lancement de la partie ça exécute ça, je voudrais savoir si il y avait un moyen pour ne pas exécuter toutes mes options à chaque démarrage(juste la première fois et c'est tout)

Merci d'avance
 

FunkyToc

Map Baker
26 Mars 2013
511
112
155
33
France, Paris
funkytoc.fr
Oui. Il faut utiliser un fichier load.json qui est lu a chaque /reload, et non le tick.json qui se lance à chaque tick, donc 20 fois par secondes. Leur fonctionnement est le même.

load json.png


Une autre solution serait de créer un fichier reload.mcfunction, qui redéfini tes paramètres comme tu le souhaite, et que tu lances à la fin de tes parties.
 

sixcrocs

Bucheron
10 Mars 2018
9
0
12
28
Oui j'ai fais avec ce fichier (erreur dans le post) mais dans ma fonctions je load des structures et je initialise des scoreboards. Je veux que ça s'exécute que une seule fois, la première fois pour ne pas les remettre a chaque fois et afin de garder les options.
 

FunkyToc

Map Baker
26 Mars 2013
511
112
155
33
France, Paris
funkytoc.fr
Désolé, mais j'ai du mal a comprendre ce que tu veux faire.

Je pense que c'est la deuxième solution qu'il te faut. Un nouveau fichier mcfunction qui gère le lancement de la partie.

Le load.json charge un fichier qui gère les créations de score (mais pas leur définition).
Une autre mcfunction gère les définitions du score option SEULEMENT SI ce score n'est pas égal a 1.
Un autre fichier gère le chargement de la partie.
 

sixcrocs

Bucheron
10 Mars 2018
9
0
12
28
Pour mieux expliquer voila le fichier qui s’exécute a chaque fois que l'on load mais je veux que ça s’exécute que une seul fois:
upload_2019-10-4_20-32-55.png

c'est pourquoi la j'ai mis des execute if, mais cela ne marche pas.
Je voudrais savoir comment éxecuter que une seul fois les commandes avec execute devant
 

FunkyToc

Map Baker
26 Mars 2013
511
112
155
33
France, Paris
funkytoc.fr
En théorie, pour qu'une commande ne s’exécute qu'une fois, il faut une condition qui ne sera vrai qu'une fois.

Pour quoi ne pas créer un score "init" que tu passe a 1 quand ton fichier est lu la première fois. Et ensuite tu execute tes commandes if score @ init matches 0.
Code:
/scoreboard objectives add init dummy
/execute unless score preparation init matches 1 run scoreboard players set preparation init 0

/execute if score preparation init matches 0 run [ton code]

# et tout à la fin de ton fichier
/scoreboard players set preparation init 1

La ligne intéressante est la 2ème. On initie le score à 0 que s'il n'est pas encore égal a 1.
 

sixcrocs

Bucheron
10 Mars 2018
9
0
12
28
Super Merci !!!
Il me manquait juste la deuxième ligne et remplacer mon if par un unless