2 votes

Comment exécuter plusieurs fonctions à l'intérieur d'une autre fonction ?

En Minecraft 1.13.2 Java

Le titre précédent de cette question était : Quelle est la commande de la console pour voler en mode créatif ? supposer un problème de "vol".

Je souhaite exécuter plusieurs fonctions (à partir de fichiers de fonctions).

Il s'agit d'exécuter une série de plotages circulaires afin de créer une tour circulaire.

Le code du fichier de fonction circle:05 fonctionne comme prévu dans le jeu. Il clone le bloc sous l'exécuteur pour tracer un cercle autour de @s puis téléporter @s 1 bloc plus loin.

cercle:05

clone ~ ~-1 ~ ~ ~-1 ~ ~-5 ~ ~0
clone ~ ~-1 ~ ~ ~-1 ~ ~-4 ~ ~-3
clone ~ ~-1 ~ ~ ~-1 ~ ~-4 ~ ~-2
clone ~ ~-1 ~ ~ ~-1 ~ ~-4 ~ ~-1
clone ~ ~-1 ~ ~ ~-1 ~ ~-4 ~ ~1
clone ~ ~-1 ~ ~ ~-1 ~ ~-4 ~ ~2
clone ~ ~-1 ~ ~ ~-1 ~ ~-4 ~ ~3
clone ~ ~-1 ~ ~ ~-1 ~ ~-3 ~ ~-4
clone ~ ~-1 ~ ~ ~-1 ~ ~-3 ~ ~-3
clone ~ ~-1 ~ ~ ~-1 ~ ~-3 ~ ~3
clone ~ ~-1 ~ ~ ~-1 ~ ~-3 ~ ~4
clone ~ ~-1 ~ ~ ~-1 ~ ~-2 ~ ~-4
clone ~ ~-1 ~ ~ ~-1 ~ ~-2 ~ ~4
clone ~ ~-1 ~ ~ ~-1 ~ ~-1 ~ ~-4
clone ~ ~-1 ~ ~ ~-1 ~ ~-1 ~ ~4
clone ~ ~-1 ~ ~ ~-1 ~ ~0 ~ ~-5
clone ~ ~-1 ~ ~ ~-1 ~ ~0 ~ ~5
clone ~ ~-1 ~ ~ ~-1 ~ ~1 ~ ~-4
clone ~ ~-1 ~ ~ ~-1 ~ ~1 ~ ~4
clone ~ ~-1 ~ ~ ~-1 ~ ~2 ~ ~-4
clone ~ ~-1 ~ ~ ~-1 ~ ~2 ~ ~4
clone ~ ~-1 ~ ~ ~-1 ~ ~3 ~ ~-4
clone ~ ~-1 ~ ~ ~-1 ~ ~3 ~ ~-3
clone ~ ~-1 ~ ~ ~-1 ~ ~3 ~ ~3
clone ~ ~-1 ~ ~ ~-1 ~ ~3 ~ ~4
clone ~ ~-1 ~ ~ ~-1 ~ ~4 ~ ~-3
clone ~ ~-1 ~ ~ ~-1 ~ ~4 ~ ~-2
clone ~ ~-1 ~ ~ ~-1 ~ ~4 ~ ~-1
clone ~ ~-1 ~ ~ ~-1 ~ ~4 ~ ~1
clone ~ ~-1 ~ ~ ~-1 ~ ~4 ~ ~2
clone ~ ~-1 ~ ~ ~-1 ~ ~4 ~ ~3
clone ~ ~-1 ~ ~ ~-1 ~ ~5 ~ ~0
clone ~ ~-1 ~ ~ ~-1 ~ ~ ~ ~
tp ~ ~1 ~

Mon problème est d'exécuter plusieurs fois cette fonction (cercles:05)

J'ai essayé d'écrire une ligne de code de base function circles:05 alors execute as @s ~ ~ ~ run function circles:05 mais rien ne fonctionne.

maketower

execute as @s run function circles:05
execute as @s run function circles:05
execute as @s run function circles:05
execute as @s run function circles:05

Les deux fichiers sont dans le bon dossier, disponible dans la ligne de commande ingame mais le résultat ne fonctionne pas car @s semble tomber sur le bloc précédent après /tp .

Une idée sur la façon de faire fonctionner ce système / la commande de la console pour voler ?

ps. Est-ce que quelqu'un qui a une réputation de 300 peut créer des tags 1.13 , ability pour moi ?

0 votes

I

0 votes

Höling , bien, non ce n'est pas google.translations mais n'hésitez pas à corriger mon anglais si cela peut rendre plus fluide. Je vais modifier le titre pour qu'il soit plus clair. Je veux que la commande /console vole. En outre, il y a une différence significative entre la version 1.13 et les versions antérieures à la 1.13 de Minecraft, c'est pourquoi j'ai suggéré la création d'une balise. Donc, oui, exécuter une fonction un certain nombre de fois, mais cela ne fonctionne pas. Je pense que c'est parce que @s retombe sur le bloc au lieu d'être téléporté 1 bloc plus haut.

0 votes

Y

1voto

SpiceWeasel Points 1074

Je n'ai aucune idée de la raison pour laquelle cela ne fonctionne pas. Cela devrait fonctionner et j'ai essayé tous les trucs que je connais. Ma suggestion ? Se débarrasser de cette fonction et copier l'ensemble des commandes quatre fois, mais avec un ajout - utiliser

execute as @a[tag=tower] at @s run clone <x> <y> <z>

Lorsque vous souhaitez simplement obtenir ce cercle, utilisez la fonction. Si vous voulez la tour, marquez-vous avec "tower" et exécutez la même fonction.

Désolé, c'est tout ce que j'ai trouvé. Il pourrait s'agir d'un bogue ou d'une fonctionnalité supprimée permettant d'utiliser la commande function au sein d'autres fonctions (ce dont je doute). Je vous dirai si je trouve la vraie réponse plus tard.

0 votes

Merci, mais votre suggestion de copier l'ensemble des commandes ne fonctionnera pas pour moi, je fais cela pour pouvoir créer des tours de rayon et de hauteur différents. Je vais essayer avec "execute as @a[tag=tower] at @s run clone...". Post edit : nous avons progressé

0 votes

J'ai une réponse à ce problème. Elle vous permettra de créer un cylindre entièrement personnalisable, qu'il s'agisse du type de blocs utilisés, de sa longueur ou de son rayon. Voulez-vous que je vous explique comment faire cela avec une seule fonction ? (c'est très complexe) EDIT : En y repensant, ce n'est pas seulement très complexe mais ça peut aussi devenir très laggy, et je ne sais pas quelle utilité vous pourrez en tirer. Peut-être serait-il préférable que je continue à vous aider avec la réponse originale ?

0 votes

Post édition : nous avons progressé avec 'execute as @s .. at @s ... " Je pourrais exécuter les 4 fonctions ... je reviens vers vous plus tard avec des progres ... ! !!

1voto

Moshe Points 23825

Je suis peut-être en retard, mais vous ne pouvez pas vous attendre à ce que le joueur se téléporte dès que vous exécutez la commande tp commande. Minecraft fonctionne selon un système de tic-tac, où tout se fait en un seul tic-tac (1/20 de seconde).

La position du joueur n'est mise à jour qu'à la fin de chaque game-tick, donc l'exécution de la fonction tp ne fait que mettre en attente la téléportation jusqu'à ce que toutes les commandes suivantes soient exécutées. Vous pouvez vous en rendre compte en écrivant quelques blocs say dans la fonction, puisque cela prouve que circles:05 est en effet exécutée 5 fois, mais la position du joueur n'est mise à jour qu'une fois que toutes les commandes de ce tick de jeu ont été exécutées.

C'est bien beau, mais comment remédier à cette situation ? Nous devons créer un for en utilisant une fonction avec l'attribut tick étiquette ( Plus d'informations ici ). Cette balise entraînera l'exécution d'une commande en succession rapide. Ensuite, nous devons créer un tableau d'affichage qui servira de variable d'incrémentation. circles_i par exemple.

Modifier maintenant circles:05 de sorte qu'avant chaque clone il y a une commande execute if score @s circles_i matches 0..5 run . Par exemple :

execute if score @s circles_i matches 0..5 run clone ~ ~-1 ~ ~ ~-1 ~ ~-5 ~ ~0

Enfin, à la fin de la fonction, ajoutez une nouvelle commande :

scoreboard players remove @s circles_i 1

pour décrémenter le tableau d'affichage

Aujourd'hui, dans le maketower la fonction de calcul de l'indice de performance pour circles_i à 5 (ou à la hauteur que vous souhaitez) :

scoreboard players set @s circles_i 5

Cette opération doit exécuter le programme circles:05 fonctionne 5 fois, une fois par tic de jeu, soit un quart de seconde au total. Malheureusement, c'est la façon la plus rapide de procéder avec des résultats prévisibles.

1 votes

En fait, il est possible d'effectuer plusieurs tp au cours d'un même tick. La raison pour laquelle cela ne fonctionne probablement pas pour vous est qu'il vous manque execute at @s avant la commande tp. Si vous n'utilisez pas cette commande d'exécution, la commande pense que vous êtes toujours à votre emplacement précédent (avant la téléportation).

1voto

cweiske Points 13722

Créez un objectif fictif appelé "comptage". Insérez-le avant votre commande tp. "'scoreboard players remove @s count 1"'.

Remplacez votre '''tp ~1''' par "'execute positioned ~1 run function namespace:make_circle''".

Dans la fonction tick, écrivez ceci --- "'execute as @a[scores={count=1..}] at @s run function namespace:make_circle''".

Il ne vous reste plus qu'à fixer votre nombre de points à un nombre entier et vous pourrez construire une tour de la même hauteur que le nombre entier que vous avez indiqué.

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