Créer commande à 3 arguments (Bukkit Plugin)

Résolu/Fermé
TriiNoxYs Messages postés 180 Date d'inscription lundi 14 juillet 2014 Statut Membre Dernière intervention 27 juin 2015 - Modifié par TriiNoxYs le 9/08/2014 à 18:10
TriiNoxYs Messages postés 180 Date d'inscription lundi 14 juillet 2014 Statut Membre Dernière intervention 27 juin 2015 - 19 août 2014 à 11:29
Salut,

Alors voila, en ce moment je bosse sur un plugin bukkit (pour serveurs Minecraft) d'admin tool nommé AdminPlugTool (APT).

Toutes les commandes ce forment comme ca /apt <arg1> <arg2> <arg3>

Pour les commandes a 1argument, j'y arrive (du genre: /apt clearchat)
Mais pour les commandes avec 2 ou 3 arguments, le plugin ignore totalement le code, et ne retourne aucune erreur, pas même la console :S

Voici mon code:

package TriiNoxYs.AdminPlugTool;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin implements Listener{
 private String prefix = ChatColor.GRAY + "[" + ChatColor.YELLOW + "AdminPlugTool" + ChatColor.GRAY + "] ";
 public void onEnable() {
  PluginManager pm = getServer().getPluginManager();
  pm.registerEvents(this, this);
 }
 
 public void onDisable() {
 }
 
public boolean onCommand(CommandSender sender, Command cmd, String label, String args[]) {
 
  
  Player player = (Player) sender;
  
  if (sender instanceof Player) {
   
   if (label.equalsIgnoreCase("apt")) {
    if(args.length == 0){
     sender.sendMessage(ChatColor.RED + "Usage: /apt <fakedeco | kill>");
    }
    else if(args.length == 1){
     if(args[0].equalsIgnoreCase("fakedeco")){ //cette cmd marche
      Bukkit.broadcastMessage(ChatColor.YELLOW + player.getDisplayName() + " left the game.");
     }
     else if(args[0].equalsIgnoreCase("kill")){
       if(args.length == 1){
       sender.sendMessage(ChatColor.RED + "Usage: /apt kill <player>");//jusqu'ici ca marche
      }
       else if(args.length == 2){ //et a partir de la, le plugin ignore tout
        Player target = getServer().getPlayer(args[1]);
        player.sendMessage(ChatColor.GREEN + "Vous avez tué " + ChatColor.RED + target.getName());
        target.sendMessage(ChatColor.RED + "vous avez été tué par " + ChatColor.GRAY + player.getName());
       }
     }
     else if(args[0].equalsIgnoreCase("clearchat")){ //cette cmd marche
      for(int i = 0; i < 150; i ++){
       Bukkit.broadcastMessage("");
      }
      Bukkit.broadcastMessage(ChatColor.GREEN + "Chat cleared by " + ChatColor.ITALIC + ChatColor.GOLD + player.getDisplayName() + ChatColor.RESET + ChatColor.GREEN + " !");
     }
     else if (args[0].equalsIgnoreCase("tp")){
      if(args.length == 1){
       player.sendMessage(ChatColor.RED + "Usage: /apt tp <player> [target]"); //jusqu'ici ca marche
                  //cmd  arg0  arg1    arg2  
      }
      else if(args.length == 2){ //et a partir de la, le plugin ignore tout
       Player targetPlayer = player.getServer().getPlayer(args[0]);
       Location targetPlayerLocation = targetPlayer.getLocation();
       player.teleport(targetPlayerLocation);
       player.sendMessage(ChatColor.GREEN + "Teleported to " + targetPlayer.getName());
      }
      else if(args.length == 3){ //la aussi, tout est ignoré
       Player targetPlayer1 = player.getServer().getPlayer(args[0]);
       Player targetPlayer2 = player.getServer().getPlayer(args[1]);
       Location targetPlayer2Location = targetPlayer2.getLocation();
       targetPlayer1.teleport(targetPlayer2Location);
       player.sendMessage(ChatColor.GREEN+ "Teleported " + targetPlayer1.getName() + " to " + targetPlayer2.getName() + "!");
      }
     }
     
    }
   }
  } 
  else if(sender instanceof ConsoleCommandSender){
   sender.sendMessage(ChatColor.RED + prefix + "You must be a player to perform this command !");
  }
  
  return false;
  
 }
}


Voila mon code, au cas ou je l'ai aussi mis sur Pastebin: http://pastebin.com/2Rp515My

J'espere que vous pourrez m'aider a comprendre pourquoi les args 1 et 2 sont ignorés, et merci d'avance :D

PS: Si vous avez besoin de plus d'infos demandez, et vous pouvez aussi me parler sur skype: TriiNoxYs

++, TriiNo'

L'informatique ca tue pas, mais ca énerve bien quand même !
A voir également:

2 réponses

yamdjio Messages postés 88 Date d'inscription lundi 18 août 2014 Statut Membre Dernière intervention 21 mai 2015 5
Modifié par yamdjio le 18/08/2014 à 18:04
salut, en ne prennant que cette partie
else if(args.length == 1){
     if(args[0].equalsIgnoreCase("fakedeco")){ //cette cmd marche
      Bukkit.broadcastMessage(ChatColor.YELLOW + player.getDisplayName() + " left the game.");
     }
     else if(args[0].equalsIgnoreCase("kill")){
       if(args.length == 1){
       sender.sendMessage(ChatColor.RED + "Usage: /apt kill <player>");//jusqu'ici <gras>ca marche
      }</gras>
       else if(args.length == 2){ //et a partir de la, le plugin ignore tout
        Player target = getServer().getPlayer(args[1]);
        player.sendMessage(ChatColor.GREEN + "Vous avez tué " + ChatColor.RED + target.getName());
        target.sendMessage(ChatColor.RED + "vous avez été tué par " + ChatColor.GRAY + player.getName());
       }
     }




dans ce else tu teste si il ya un seul argument ,
premier if tu demande si c'est fakedeco .........OK
deuxieme if tu teste si c'est kill , mais tu teste encore si la taille de args est 1.
le problème est que quand tu ferme juste après ici : ca marche
}

tu test directement après si la taille est 2 or ,ce else if n'est pas celui donc tu veut car en regardant ton code, c'est le else if de if(args.length == 1){ qui lui même se trouve dans else if(args[0].equalsIgnoreCase("kill")){ qui se trouve encore dans else if(args.length == 1){ .

donc logiquement on cherche if args.lenght==2 dans if args.lenght==1 , ce qui est impossible.

essai de repartit pas à pas et de bien imbriqué tes if tu verras un peu plus claire.

j'espere t'avoir donné un petit coup de main
2
TriiNoxYs Messages postés 180 Date d'inscription lundi 14 juillet 2014 Statut Membre Dernière intervention 27 juin 2015 43
19 août 2014 à 11:29
Salut, merci de ton aide, mais j'ai trouv l'erreur ^^
Jutse le 2eme if qui etait mal placé, dans le 1er alors qu'il devrait etre apres

mais merci quand meme ^^

2