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

Discussion dans 'Support serveur et plugins' créé par WorldWideWeb_, 19 Juillet 2019.

  1. WorldWideWeb_

    WorldWideWeb_ Nouveau

    Inscrit:
    19 Juillet 2019
    Messages:
    12
    J'aime reçus:
    0
    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
     
  2. Cercus

    Cercus Un modérateur chat trop mignon
    Staff Modérateur

    Inscrit:
    6 Octobre 2013
    Messages:
    776
    J'aime reçus:
    71
    Avec un fichier de config, y'a moyen de le faire. Après je pense que c'est pas la seul solution.
     
  3. Alex Fatta

    Alex Fatta Commandant de la Flotte et de la Horde

    Inscrit:
    13 Août 2014
    Messages:
    1 271
    J'aime reçus:
    169
    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
     
  4. WorldWideWeb_

    WorldWideWeb_ Nouveau

    Inscrit:
    19 Juillet 2019
    Messages:
    12
    J'aime reçus:
    0
    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
     
  5. Cercus

    Cercus Un modérateur chat trop mignon
    Staff Modérateur

    Inscrit:
    6 Octobre 2013
    Messages:
    776
    J'aime reçus:
    71
    Il manque une parenthèse avant le { Et egalement un Main.getInstance().saveConfig() après le Main.getInstance().getConfig().set()
     
  6. DiscowZombie

    DiscowZombie Dev passionné
    Staff Modérateur Support

    Inscrit:
    2 Mars 2017
    Messages:
    2 583
    J'aime reçus:
    859
    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
     

Partager cette page