Récupéré tout les joueurs du serveur dans un menu (JAVA)

Kenda

Architecte en herbe
16 Juillet 2016
316
1
2
125
32
www.youtube.com
Bonjour/Bonsoir,


Actuellement en train de crée un plugin, je cherche un moyen de récupéré TOUT les joueurs connectés sur le serveur, et les affichés un à un dans un menu (qu'on ouvre avec une commande, et que j'ai déjà fais), hors, je ne sais pas trop comment m'y prendre. J'avais pensé à une boucle for, mais je ne pense pas que sa sois la meilleur solution pour optimisé...

Quelqu'un aurait-il une idée pour m'aider ?


Merci grandement de l'aide :)
 
Bonsoir,

Je ne sais pas trop où tu coinces, mais oui il faut passer par une boucle, tu n'as pas trop d'autre choix.
Après pour récupérer tous les joueurs, tu peux utiliser Bukkit#getOnlinePlayers().

Cordialement,
ShE3py.

Je connais le système, mais je ne sais pas vraiment l'appliqué. J'ai déjà regardé des tutoriels dessus, mais bon... je reste toujours coincé à ne pas savoir l'utilisé ;-;
Aurais-tu une vidéo ou un forum qui pourrais m'en apprendre d'avantage ?


Ensuite, petit autre problème que je viens de remarqué (alors que pourtant tout me semble bon), c'est sur le calcule de 2 HashMap.


Java:
if (label.equalsIgnoreCase("mine")) {
    player.sendMessage("Tu as " + Main.getInstance().getBlocsMines().get(player) + " de blocs de minés au total.");
    player.sendMessage("Tu as §b" + Main.getInstance().getDiamant().get(player) + " de blocs diamant de minés au total.");
    player.sendMessage("Tu as un ratio de : §a" + (Main.getInstance().getDiamant().get(player) / Main.getInstance().getBlocsMines().get(player)));
}

Le ratio me renvoie 0 alors que pourtant il devrais me renvoyer quelques choses autre que 0 (genre 1, 2, 40, 80 etc...).
 
Je connais le système, mais je ne sais pas vraiment l'appliqué. J'ai déjà regardé des tutoriels dessus, mais bon... je reste toujours coincé à ne pas savoir l'utilisé ;-;
Aurais-tu une vidéo ou un forum qui pourrais m'en apprendre d'avantage ?
Java:
for(Player player : Bukkit.getOnlinePlayers())
    System.out.println(player);
Je ne comprends pas trop où est le problème, c'est un peu de la programmation de base.


Le ratio me renvoie 0 alors que pourtant il devrais me renvoyer quelques choses autre que 0 (genre 1, 2, 40, 80 etc...).
Le nombre de diamants minés sera toujours inférieur ou égal au nombre de blocs minés, donc ton ratio sera toujours entre 0 et 1, jamais 2 et encore moins 80.
Après en Java, si tu fais int / int tu obtiendras un int, donc nombre entier divisé par nombre entier donnera un nombre entier. 0,5 n'est pas un nombre entier, tu dois convertir une opérande en un nombre flottant.
2 / 4 == 0, 2.0 / 4.0 == 0.5

Java:
if(label.equalsIgnoreCase("mine")) {
    // ce sera plus compréhensible d'appeler ta classe principale
    // MonPlugin ou que sais-je
    Main plugin = Main.getInstance();
    
    // soit tu nommes tout en français, soit tout en anglais,
    // mais pas un mix des deux
    // + blocs minés au pluriel mais diamants minés au singulier ?
    int mined = plugin.getBlocsMines().get(player);
    int diamonds = plugin.getDiamant().get(player);
    
    float ratio = diamonds / (float) mined;
    
    player.sendMessage("Tu as " + mined + " de blocs de minés au total.");
    player.sendMessage("Tu as §b" + diamonds + " de blocs diamant de minés au total.");
    player.sendMessage("Tu as un ratio de : §a" + ratio);
}

// je ne sais pas comment tu récupères `player`,
// mais si tu es à l'intérieur d'une boucle pas besoin de faire un
// `if(...)` pour chaque élément de la liste si ta condition est toujours vraie
// ou toujours fausse qu'importe l'élément
 
Java:
for(Player player : Bukkit.getOnlinePlayers())
System.out.println(player);
Je ne comprends pas trop où est le problème, c'est un peu de la programmation de base.

Merci bien, j'ai du mal l'écrire au début car j'avais une erreur.


Le nombre de diamants minés sera toujours inférieur ou égal au nombre de blocs minés, donc ton ratio sera toujours entre 0 et 1, jamais 2 et encore moins 80.
Après en Java, si tu fais int / int tu obtiendras un int, donc nombre entier divisé par nombre entier donnera un nombre entier. 0,5 n'est pas un nombre entier, tu dois convertir une opérande en un nombre flottant.
2 / 4 == 0, 2.0 / 4.0 == 0.5

Java:
if(label.equalsIgnoreCase("mine")) {
// ce sera plus compréhensible d'appeler ta classe principale
// MonPlugin ou que sais-je
Main plugin = Main.getInstance();

// soit tu nommes tout en français, soit tout en anglais,
// mais pas un mix des deux
// + blocs minés au pluriel mais diamants minés au singulier ?
int mined = plugin.getBlocsMines().get(player);
int diamonds = plugin.getDiamant().get(player);

float ratio = diamonds / (float) mined;

player.sendMessage("Tu as " + mined + " de blocs de minés au total.");
player.sendMessage("Tu as §b" + diamonds + " de blocs diamant de minés au total.");
player.sendMessage("Tu as un ratio de : §a" + ratio);
}

// je ne sais pas comment tu récupères `player`,
// mais si tu es à l'intérieur d'une boucle pas besoin de faire un
// `if(...)` pour chaque élément de la liste si ta condition est toujours vraie
// ou toujours fausse qu'importe l'élément

Je sais bien que c'étais 2 int, mais, par exemple, si je minais plus de diamants que de bloc, j'avais quand même 0 (5 / 1) donc là étais mon erreur.

Ensuite, pour répondre à tes propos sur le fait que je devrais tout mettre en anglais ou en français, c'est une question d'habitude. J'ai toujours appris avec ma classe principale "Main" , et après c'est beaucoup de prototype que je fais et jamais de plugin public (donc si je dois modif des choses, je sais ou les trouvé), mais c'est vrai que après, c'est une question de technique, car mélangé les deux, pourrais devenir complexe sur certains points. Enfin après j'ai toujours eu cette habitude en utilisant "Main" ou mettre des variables en français donc.. Faudrait que je me mette à jour.

En tout cas, je te remercie beaucoup pour cette aide :)