Créer commande à 3 arguments (Bukkit Plugin)
Résolu
TriiNoxYs
Messages postés
182
Date d'inscription
Statut
Membre
Dernière intervention
-
TriiNoxYs Messages postés 182 Date d'inscription Statut Membre Dernière intervention -
TriiNoxYs Messages postés 182 Date d'inscription Statut Membre Dernière intervention -
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:
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 !
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:
- Créer commande à 3 arguments (Bukkit Plugin)
- Invite de commande - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Commande terminal mac - Guide
2 réponses
salut, en ne prennant que cette partie
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
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