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

WorldWideWeb_

Bucheron
19 Juillet 2019
12
0
12
22
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
 
Avec un fichier de config, y'a moyen de le faire. Après je pense que c'est pas la seul solution.
 
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
 
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
 
Il manque une parenthèse avant le { Et egalement un Main.getInstance().saveConfig() après le Main.getInstance().getConfig().set()
 
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