Résolu Bug du spreadplayer ?

Chenille33

Aventurier
21 Mai 2020
11
2
3
33
Bonjour à toutes et à tous,

Je développe actuellement un datapack en version 1.16.3 de la Java edition.

Est-ce que quelqu'un peut m'expliquer pourquoi mon spreadplayer ne marche pas dans ce cas ci :
Appeler au load :
Code:
scoreboard objectives add nbDeath minecraft.custom:minecraft.deaths "Nb death"
Appeler à chaque tick :
Code:
execute as @a[tag=play,scores={nbDeath=1..}] run function ma:fonction
ma:fonction:
Code:
# Spread player : NE MARCHE PAS !!!
execute at @e[tag=mapspawn,scores={map_n=1..10},limit=1,sort=nearest,distance=..3] run spreadplayers ~ ~ 30 30 under 5 false @s

# Reset nb death : marche très bien
scoreboard players reset @s nbDeath

Si dans ma:fonction je rajoute pour débugger la ligne :
Code:
tellraw @a [{"selector":"@s"},{"text":" / "},{"score":{"name":"@e[tag=mapspawn,scores={map_n=1..10},limit=1,sort=nearest,distance=..3]","objective":"map_n"}}]
Cela m'affiche :
Code:
pseudo /
au lieu de
Code:
pseudo / 2
par exemple...
genre en gros minecraft ne détecte pas du tout la position du joueur malgré mon
Code:
execute at
d'appel....
vu que c'est au moment de la mort, je me dis "bon aller, vive les lags mais peut-être qu'il faut décaler l'appel via un schedule" mais rien n'y fait, même si je met 30sec de décalage...
Chose étrange : si le joueur exécute lui même la fonction commande :
Code:
execute as @a[tag=play,scores={nbDeath=1..}] run function ma:fonction
cela fonctionne...

Du coup je suis un peut perdu si quelqu'un a une idée ? Merci d'avance :)
 
Dernière édition:
Salut Chenille,

Sans tester c'est compliqué =) , mais en partant du principe que tes scores sont bon :

C'est parce que la commande n'a pas encore de position au moment de l'appel de la fonction mafonction.
N'ayant pas de position (at ...), le sélecteur at est exécuté par le serveur, et donc a sa propre position, ce qui équivaut a l'endroit du /setworldspawn en gros. Donc il ne trouve aucune entité dans un rayon de 3 bloc du world spawn. Ce qui, sans prendre trop de risque, ne m'étonne pas =)

@e[tag=mapspawn,scores={map_n=1..10},limit=1,sort=nearest,[B]distance=..3[/B]]

La solution est peut etre de définir une position, et de ne pas brider a 3 bloc la recherche.
Code:
execute as @a[tag=play,scores={nbDeath=1..}] at @s run function ma:fonction
Code:
execute at @e[tag=mapspawn,scores={map_n=1..10},limit=1,sort=nearest] run spreadplayers ~ ~ 30 30 under 5 false @s

Et dernière chose, le under 5 tu en es certain ? ton spawn est si bas ?
 
Dernière édition:
Salut FunkyToc !

Merci pour ta réponse :)

Alors je veux bien croire ta proposition mais j'ai essayer avec un schedule (pour lancer la fonction après un certain temps) et ça ne change rien... Car au début je pensais comme toi d'où mes tests en décalés...
Mais ça fonctionne !!! Donc il me manquais ce "at @s" de malheur !!! Gros merci à toi ;)

Et dernière chose, le under 5 tu en es certain ? ton spawn est si bas ?
Bas là j'ai une map type flat pour les tests mais en effet cela peut ne pas fonctionner sur tout type de carte... Je me rends compte que j'ai peut-être mal compris cette option : pour moi cela signifiait qu'on peut placer le joueur jusqu'à 5 blocs au dessus du sol mais au vu de ton commentaire il s'agirait du Y max ? Du coup petite question: comment je peux rendre cela dynamique pour que ça s'adapte à tout les coups ? J'ai juste à ne pas mettre cette option ou il y a une astuce ?

Merci à toi en tout cas !