4 votes

Créer un mécanisme de double saut dans Minecraft en utilisant des commandes

Je suis en train d'essayer de mettre en place un double saut, c'est-à-dire sauter à nouveau en plein air mais seulement une fois avant de toucher le sol à nouveau. En touchant le sol, vous devriez être prêt pour un autre double saut.

Ce que j'ai jusqu'à présent ne fonctionne pas vraiment. Est-ce que quelqu'un pourrait jeter un œil?

Voici mon code:

un bloc de commande répétitif avec

/scoreboard players set @a[scores={sneak=1}] sneak 0

menant à un autre bloc de commande répétitif avec conditionnel sur avec

/execute at @a[scores={sneak=1,double=0}] if block ~ ~-0.75 ~ air run effect give @p[scores={sneak=1}] minecraft:levitation 1 0 true

qui mène enfin à un autre bloc de commande répétitif conditionnel avec

execute at @a if block ~ ~-0.5 ~ air run effect clear @a minecraft:levitation

qui termine cette chaîne.

il y a d'autres commandes pour réinitialiser les scores au besoin, telles que

execute at @a if block ~ ~-0.5 ~ air run scoreboard players set @p[scores={sneak=..1}] sneak 0

ainsi que

execute at @a unless block ~ ~-0.5 ~ air run scoreboard players set @p[scores={double=..1}] double 0

Mais cela ne fonctionne pas. Est-ce que je peux avoir de l'aide s'il vous plaît?

0 votes

Bonjour Sebastian, pouvez-vous nous dire ce qui ne marche pas ? Que se passe-t-il exactement lorsque vous tentez un double saut ?

0 votes

Je ne peux pas dire. Je te le dirais, mais je ne peux pas le dire (je suis assez nouvelle)

0 votes

Qu'est-ce qui se passe lorsque vous essayez d'exécuter les commandes, recevez-vous des erreurs? Est-ce que cela fonctionne partiellement (c'est-à-dire que vous ne pouvez faire un double saut qu'une seule fois et plus jamais? ou pouvez-vous continuer à sauter indéfiniment?) Il est difficile de dire où vous rencontrez le problème.

2voto

Vous pouvez détecter si un joueur se faufile à l'aide de cette commande:

/scoreboard objectives add sneaks minecraft.custom:minecraft.sneak_time

Ensuite, exécutez cette commande dans un bloc de commande en mode répétition pour faire léviter chaque joueur qui s'est faufilé pendant 1 tick et qui n'est pas au sol (ce qui semble être la façon dont vous voulez que le second saut fonctionne)

/execute as @e[scores={sneaks=1},nbt={OnGround:0b}] run effect give @s minecraft:levitation 1 2 true

Vous pouvez utiliser un bloc de commande en mode chaîne pour exécuter cette commande, cela réinitialisera le temps de furtivité pour tout joueur qui est debout sur le sol:

/scoreboard players reset @a[nbt={OnGround:1b}] sneaks

Si vous vous faufilez pendant un très court laps de temps, alors vous pouvez avoir un temps de furtivité de 1, ce qui conduirait à léviter indéfiniment, car l'effet se réappliquerait à plusieurs reprises. Pour éviter cela, vous pouvez utiliser cette commande dans un second bloc de commande en chaîne:

/execute as @a[scores={sneaks=1}] run scoreboard players add @s sneaks 1

Lorsque le joueur touche sa tête, alors vous voulez qu'il cesse de léviter et tombe à nouveau, vous pouvez y parvenir avec un autre bloc de commande en chaîne et cette commande:

/execute as @a[scores={sneaks=2..}] at @s unless block ~ ~1.8 ~ minecraft:air run effect clear @s minecraft:levitation

Modifications après quelques ajustements

Vous pouvez mettre ces commandes dans un bloc de commande en répétition et 4 blocs de commandes en chaîne, cela fonctionne de manière similaire à ce que j'ai expliqué ci-dessus, mais cela donne vraiment l'impression de sauter en plein air, car l'effet de lévitation est beaucoup plus fort. J'ai ajouté un objectif de score fictif appelé "durée", qui reçoit une valeur de la balise ActiveEffects dans la 4ème commande. La 5ème commande efface l'effet de lévitation 17 ticks (0,85 seconde) avant qu'il ne disparaisse normalement:

/execute as @e[scores={sneaks=1},nbt={OnGround:0b}] run effect give @s minecraft:levitation 1 20 true
/scoreboard players reset @a[nbt={OnGround:1b}] sneaks
/execute as @a[scores={sneaks=1}] run scoreboard players add @s sneaks 1
/execute as @a store result score @s duration run data get entity @s ActiveEffects[{Id:25b}].Duration 1
/execute as @a[scores={duration=..17}] run effect clear @s

Remarque : J'ai supprimé la commande qui vérifie si vous touchez votre tête, car l'effet de lévitation sera si court que vous remarquerez à peine que vous lévitez contre un plafond.

Remarque 2 : cela a pour effet secondaire d'ajouter une sorte de super saut si vous vous faufilez et sautez tout en vous faufilant, ce saut est d'environ 4 blocs de haut et vous ne pouvez pas effectuer un double saut à partir de celui-ci. Un double saut vous élève d'environ 3 blocs de haut.

0 votes

J'ai donc essayé d'ajouter nbt={selectedItem:{"id":"minecraft:carrot_on_a_stick"}}, à toutes les commandes (sauf la quatrième ligne), afin que l'effet ne fonctionne qu'avec une carotte sur un bâton en main, mais cela a cessé de fonctionner. Des idées pourquoi ?

1 votes

@Nik3141 Vous devez vous assurer d'épeler correctement les choses dans les balises nbt, dans ce cas, il devrait être SelectedItem au lieu de seletedItem. Les commandes recherchaient des joueurs avec la balise nbt selectedItem, aucun joueur n'avait cette balise, donc aucun joueur n'a été ciblé.

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