3 votes

Comment détecter la partie fractionnaire de la coordonnée y du joueur ? [1.15]

Mon objectif est de pouvoir détecter si la partie fractionnaire de la coordonnée y du joueur est comprise dans les plages :

  • .0 à .4
  • 0,41 à 0,5
  • .51 à 1

Ainsi, par exemple, si le joueur a une valeur y de 64,375, il entre dans la catégorie des 0 à 4.

3voto

ginkgo Points 2439

Je réponds en fait à ma propre question, car j'ai trouvé une réponse.


D'abord, j'aligne les entités en bas du bloc dans lequel se trouve le joueur, avec /execute align y Cela permet de s'assurer que les entités commencent à une valeur y d'un nombre entier.

Puis je les positionne à une certaine distance vers le haut, en les téléportant vers le haut. Exemple : tp ~ ~0.2 ~ Maintenant les entités sont toujours à une valeur y de 21.2 o 64.2 etc.

Enfin, j'utilise le [distance=..<number>] sélecteur.


J'ai créé ce diagramme en vue latérale 2D pour aider à la démonstration :

Dans le diagramme, le carré orange représente le bloc dans lequel se trouve le joueur. Les nuages d'effet de zone sont représentés par les points noirs, et se trouvent à des coordonnées x et z identiques à celles du joueur.

Disons que le joueur vérifie s'il se trouve n'importe où entre y=0 et y=0.4, avec execute if entity @e[tag=customTag,distance=..0.2]

Si la commande renvoie vrai, nous savons maintenant que le joueur se trouve à moins de 0,2 bloc de cette entité. Ceci peut être répété pour les 3 autres sections.

2voto

Fabian Röling Points 19325

Vous pouvez le faire uniquement avec les tableaux d'affichage et /execute store sans avoir besoin d'entités factices, de téléportation, d'images fantaisistes, etc., mais en utilisant le fait que toutes les entités (y compris les joueurs) stockent leurs coordonnées dans le fichier Pos dans NBT et que les tableaux d'affichage utilisent l'arrondi des nombres entiers (toujours vers le bas).

Tout d'abord, deux tableaux d'affichage sont nécessaires :

/scoreboard objectives add y dummy
/scoreboard objectives add y_10 dummy

De plus, une norme dans les commandes est d'avoir une const tableau d'affichage, donc je vais mettre un 10 à la place d'un des deux existants :

/scoreboard objectives add const dummy
/scoreboard players set 10 const 10

Vous pouvez alors simplement enregistrer votre coordonnée Y dans les deux premiers tableaux de bord, mais une fois multipliée par 10 :

/execute store result score @s y run data get entity @s Pos[1]
/execute store result score @s y_10 run data get entity @s Pos[1] 10

Comme les tableaux de bord sont des entiers, vous obtiendrez par exemple 56 y 563 en eux, si votre position Y est 56.39154.

Maintenant, vous pouvez multiplier la plus petite par 10 :

/scoreboard players operation @s y *= 10 const

Cela mettrait votre y à 560 dans mon exemple.

Ensuite, soustrayez les deux :

/scoreboard players operation @s y_10 -= @s y

Et voilà, la valeur 3 dans le tableau d'affichage y_10 . Vous pouvez par exemple faire quelque chose en fonction de la plage souhaitée de .0 à .4 comme ceci :

/execute if score @s y_10 matches 0..3 run …

J'ai fixé la limite supérieure à 3, car ce 3 est le résultat de l'arrondi des nombres entiers, de sorte que la commande se déclenchera si la partie fractionnaire de votre coordonnée Y est comprise entre 0 et 0,399999 ..

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