Créer commande à 3 arguments (Bukkit Plugin)
Résolu
TriiNoxYs
Messages postés
216
Statut
Membre
-
TriiNoxYs Messages postés 216 Statut Membre -
TriiNoxYs Messages postés 216 Statut Membre -
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
- Créer un compte gmail - 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