Plugin Résolu [Aide] >> Besoin d'aide pour mon plugin (Broadcast)

C

Compte supprimé

Invité
Bonjour, je suis actuellement en train d'améliorer mon plugin Minecraft (Version 1.12.2 / Spigot)

J'ai déjà bien avancé mais je rencontre problème.

La commande : /custombr <prefix> <text>
Rendu : [<prefix>] <text>


Voici le code :

Code:
        if(sender instanceof Player) {
            Player player = (Player)sender;
            
            if(cmd.getName().equalsIgnoreCase("custombr")) {
                
                
                if(args.length == 0) {
                    
                    player.sendMessage("§c[Error : /custombr <prefix> <text>]");
                }
                if(args.length == 1) {
                    
                    player.sendMessage("§c[Error : /custombr <prefix> <text>]");
                }
                if(args.length != 0 && args.length != 1) {
                    
                    StringBuilder br = new StringBuilder();
                    for(String part : args) {
                        br.append(part + " ");
                    }
                    Bukkit.broadcastMessage("§2[§f" + args[0] + "§2] " + br.toString());
                }
            }
                
        }

Le problème, le voici :

Si je fais : /custombr Help J'ai besoin d'aide, aidez moi svp !

Cela va m'afficher le message : [Help] Help J'ai besoin d'aide, aidez moi svp !
Au lieu de : [Help] J'ai besoin d'aide, aidez moi svp !

Ma question : Comment faire pour n'afficher l'argument 0 que comme préfix ??

Je suis encore un débutant en programmation Java, alors attendez vous à ce que je ne comprenne pas directement. Merci.
 

DiscowZombie

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

tu dois modifier la boucle qui append() ton StringBuilder() (à l'état actuel elle ne sert à rien d'ailleurs). En utilisant un fori qui démarre index = 1 ça devrait être bon !
Code:
for (int i = 1; i < args.length; i++) {
    br.append(args).append(" ");
}
 
C

Compte supprimé

Invité
@DiscowZombie, cela n'a pas marché.

Voici le message erreur et le code (Je sens que c'est moi qui fais n'importe quoi) :

Code:
        if(sender instanceof Player) {
            Player player = (Player)sender;
            
            if(cmd.getName().equalsIgnoreCase("custombr")) {
                
                
                if(args.length == 0) {
                    
                    player.sendMessage("§c[Error : /custombr <prefix> <text>]");
                }
                if(args.length == 1) {
                    
                    player.sendMessage("§c[Error : /custombr <prefix> <text>]");
                }
                if(args.length != 0 && args.length != 1) {
                    
                    StringBuilder br = new StringBuilder();
                        for (int i = 1; i < args.length; i++) {
                            br.append(args).append(" ");
                    }
                    Bukkit.broadcastMessage("§2[§f" + args[0] + "§2] " + br.toString());
                }
            }
                
        }
 

Fichiers joints

  • Capture d’écran (71).png
    Capture d’écran (71).png
    534.2 KB · Affichages: 457

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
162
464
247
21
Mìlhüsa
Bonsoir,

Il y a une faute, la syntaxe correcte est :
Code:
br.append(args[i])
(Je ne dirais rien à propos de cette faute, hein?)

Ici, args est un tableau de String. Pour accéder à un élément d'un tableau, il faut faire args[a], où a est l'indice (index en anglais) de l'élément, qui commence à l'indice 0 donc il doit être compris entre 0 et length - 1, sinon ArrayIndexOutOfBoundException.

Code:
Faire :
for(String arg : args)

équivaut à faire :
for(int i = 0; i < length; i++) {
   String arg = args[i];
}

La condition est vérifiée avant l'entrée dans la boucle, donc i ne sera jamais égal ou supérieur à length, pas d'exception possible.
Pour commencer au deuxième élément, il suffit de remplacer l'initialisation int i = 0 par int i = 1.

Sinon, je vois que tu vérifies si la commande est égale à un nom, je te conseille d'utiliser une classe par commande comme expliquer ici, je trouve que ça organise mieux le code.

Ça donnerais un truc dans le style :
Code:
if(args.length >= 2) {
   StringBuilder br = new StringBuilder();
   for(int i = 1; i < args.length; i++)
       br.append(args[i]).append(' ');
  
   Bukkit.broadcastMessage("§2[§f" + args[0] + "§2] " + br.toString());
}
else
   player.sendMessage("§c[Error: /custombr <prefix> <text>]");

Cordialement,
ShE3py.
 
  • J'aime
Reactions: DiscowZombie

DiscowZombie

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

bon j'étais en train de rédiger la réponse mais @ShE3py m'a devancé...

(Je ne dirais rien à propos de cette faute, hein?)
Je sort d'une journée complète de prog (2h de Front / 3h de Back Web (Php) / 1 heure de Kotlin et 2h de C) donc j'ai pu toutes mes capacités. Ça m'apprendra à répondre en sortant des cours. :bave:
Btw, cette erreur aura été l'occasion d’expliquer quelques trucs Java, c'est pas une mauvaise chose. ;)