Plugin Résolu Problème de variables et de coordonnées...

WorldWideWeb_

Bucheron
19 Juillet 2019
12
0
12
20
Bonsoir, je suis un développeur débutant en java, je fais un plugin avec un pote, et cela fais 1 ou 2 jour qu'on cherche à faire quelque chose mais on y arrive pas, nous ce qu'on veut c'est récupérer les coordonnées d'un joueur quand il bouge et les stocker dans un variable, ou plusieurs "X,Y,Z" (En java l’évent c'est PlayerMoveEvent ), et avec ça détecter quand le joueur arrive à une position définie.

Exemple : Mon joueur est en X=156 Y=1 Z=56 et quand il passe en X=-43 Y=1 Z=-229 ça active autre chose comme du texte ou autre....

Si vous pouvez m'aider ça serais très sympas de votre part !


Mon code que j'ai essayé, ça fonctionne mais je n'arrive pas à faire en sorte que mon message ne s'affiche qu'une fois et qu'il ne s'affiche plus jamais, genre je passe une fois et après si je passe ça fais rien...

Mon Code :

Code.png


Version : Minecraft 1.14.3
Java 1.8 sur Eclipse
 

Cercus

Un modérateur chat trop mignon
Staff
Modérateur
6 Octobre 2013
791
77
152
26
Avec un fichier de config, y'a moyen de le faire. Après je pense que c'est pas la seul solution.
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Soit tu utilises un fichier de config, soit tu peux faire une liste. Tu ajoute le joueur en question dans la liste et avant de lui envoyer le message, tu regardes si il est dans la liste. Si il y est, c'est qu'il a déjà recu le message. Sinon, tu lui envois le message ;)

AlexFatta
 

WorldWideWeb_

Bucheron
19 Juillet 2019
12
0
12
20
Re-Bonjour

J'ai essayé le code que @Cercus m'a envoyé, j'ai tout compris sauf un petit détail qui à attiré ma curiosité.

Le deuxième if est pas complété et j'ai pas tellement compris pourquoi...

Vous pouvez m'éclairer un peu plus s'il vous plait ?


Le code:
Code(1).png
 

Cercus

Un modérateur chat trop mignon
Staff
Modérateur
6 Octobre 2013
791
77
152
26
Il manque une parenthèse avant le { Et egalement un Main.getInstance().saveConfig() après le Main.getInstance().getConfig().set()
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Salut,

je ne sais pas ce que tu essaies de faire, mais utiliser un PlayerMoveEvent ne me semble pas être la meilleure solution. En effet, cet événement est appelé extrêmement souvent (plusieurs dizaines de fois par seconde et par joueur en ligne), ce qui a un cout en performances. Même avec peu d'actions comme c'est le cas ici, il me semble bon de réfléchir à une optimisation. Dans ton cas, je conseillerais une détection par entité. Le but est simple, mettre une entité à l'endroit où tu souhaites faire la détection (dans ton cas c'est très simple car tu as des coordonnées X, Y et Z très précise et bien défini) et regarder régulièrement tous les joueurs qui sont autour de cette entité. Si le joueur est à une distance assez proche de l'entité (disons qu'il est aux coordonnées de l'entité ± 0.2 blocs), tu déclenches ta détection. Niveau performances, c'est bien moins couteux (un unique Scheduler et un appelle à l'API Bukkit quel que soit le nombre de joueurs) plutôt que des dizaines de vérifications par seconde, qui, dans +99,9% des cas seront faux (plus tu auras de joueurs, plus la différence sera importante). Ce n'est pas une optimisation visible, mais c'est pas non plus une nana-optimisation donc ça me semble intéressant à mettre en place (surtout que ça ne prend que 5 minutes à faire, il suffit de remplacer ton event par un Scheduler).

En outre, il y a un petit problème d'inattention dans ton code actuel. Tu vérifies seulement les coordonnées X, Y et Z du joueur. Or, tu ne vérifies pas le monde du joueur. C'est-à-dire que s'il est à ces mêmes coordonnées dans le nether ou l'end, la détection se déclenchera aussi. Je ne sais pas si c'est ce que tu souhaites, mais à mon avis non. :p