Créer commande à 3 arguments (Bukkit Plugin)

Résolu
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 !

2 réponses

  1. 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
    1. 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 ^^