2015-12-07 3 views
0
public class Main extends JavaPlugin 
{ 

    // Logger variable 
    Logger myPluginLogger = Bukkit.getLogger(); 

    // Does when plugin is disabled - console logging 
    @Override 
    public void onDisable() 
    { 
     myPluginLogger.info("Disabling Political Parties..."); 
    } 

    // Plugin chat help function 
    public void sendPlayerHelp(String permissions, Player player) 
    { 
     // If player does not belong to a party, show them these commands 
     if (permissions == "nonpartisan") 
     { 
      player.sendMessage(ChatColor.YELLOW + "Political Parties by TerraCraft - version 1.0"); 
      player.sendMessage(ChatColor.RED + "/party create <party name> " + ChatColor.YELLOW + "Start a political party"); 
      player.sendMessage(ChatColor.RED + "/party list " + ChatColor.YELLOW + "Shows a list of all of the current political parties"); 
      player.sendMessage(ChatColor.RED + "/party info <party> " + ChatColor.YELLOW + "Shows info about a specific party"); 
     } 
     // If a player does belong to a party, show them these commands 
     else if (permissions == "inparty") 
     { 
      player.sendMessage(ChatColor.YELLOW + "Political Parties by TerraCraft - version 1.0"); 
      player.sendMessage(ChatColor.RED + "/party leave " + ChatColor.YELLOW + "Leave your current political party"); 
      player.sendMessage(ChatColor.RED + "/party list " + ChatColor.YELLOW + "Shows a list of all of the current political parties"); 
      player.sendMessage(ChatColor.RED + "/party info <party> " + ChatColor.YELLOW + "Shows info about a specific party"); 
      player.sendMessage(ChatColor.RED + "/party deposit <amount> " + ChatColor.YELLOW + "Deposit a specific sum into the party bank account"); 
      player.sendMessage(ChatColor.RED + "/party chat <message> " + ChatColor.YELLOW + "Say specified message in party chat"); 
     } 
     // If a player is the leader of a party, show them these commands 
     else if (permissions == "partyleader") 
     { 
      player.sendMessage(ChatColor.YELLOW + "Political Parties by TerraCraft - version 1.0"); 
      player.sendMessage(ChatColor.RED + "/party delete " + ChatColor.YELLOW + "Deletes your current political party"); 
      player.sendMessage(ChatColor.RED + "/party list " + ChatColor.YELLOW + "Shows a list of all of the current political parties"); 
      player.sendMessage(ChatColor.RED + "/party info <party> " + ChatColor.YELLOW + "Shows info about a specific party"); 
      player.sendMessage(ChatColor.RED + "/party deposit <amount> " + ChatColor.YELLOW + "Deposit a specific sum into the party bank account"); 
      player.sendMessage(ChatColor.RED + "/party withdraw <amount> " + ChatColor.YELLOW + "Withdraw a specific sum from the party bank account"); 
      player.sendMessage(ChatColor.RED + "/party policy <add|remove> [index] [message] " + ChatColor.YELLOW + "Add or remove a specific policy to/from your political party"); 
      player.sendMessage(ChatColor.RED + "/party invite <player> " + ChatColor.YELLOW + "Invite a player to your political party"); 
      player.sendMessage(ChatColor.RED + "/party kick <player> " + ChatColor.YELLOW + "Kick a player from your political party"); 
      player.sendMessage(ChatColor.RED + "/party giveleader <player> " + ChatColor.YELLOW + "Resign yourself as party leader and give it to another player"); 
      player.sendMessage(ChatColor.RED + "/party chat <message> " + ChatColor.YELLOW + "Say specified message in party chat");  
     } 
    } 

    // Command function 
    public boolean onCommand(CommandSender theSender, Command cmd, String[] args, String commandLabel) 
    { 
     // Party command 
     if (cmd.getName().equalsIgnoreCase("party")) 
     { 
      Player player = (Player) theSender; 

      // If no arguments are specified, or if the first argument is equal to help, or ?, show them help 
      if (args.length == 0 || args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) 
      { 
       sendPlayerHelp("nonpartisan", player); 
      } 
      else 
      { 

      } 
      return true; 
     } 
     else 
     { 
     } 
     return false; 
    } 

} 

Здравствуйте, я ранее создавал базовые плагины сервера Bukkit и работал правильно. Я создаю новый, но по какой-то причине он не будет запускать команду. Просто чтобы уточнить, плагин YAML правильно выполнен (и, соответственно, импорт, я просто не ощущал необходимости включать их), и компиляции ошибок нет. У меня есть команда в файле YAML команды, и когда я загружаю плагин, он появляется в моем списке плагинов и когда я делаю/помогаю. Когда я запустил команду, он просто возвращает использование: «/ party», но не будет делать другие вещи (отправьте игроку справочное сообщение). Я не совсем уверен, почему он не работает. Я что-то забыл по ошибке? Кроме того, это мой первый вопрос, поэтому приношу свои извинения, если он не соответствует стандартам.Команда не работает

+0

Почему он просит имя игрока? – RTarson

+0

Я предлагаю удалить пустые блоки 'else' и изменить способ сравнения строк с' == 'на' .equals() 'Это не устраняет проблему, просто некоторые советы – Jonah

+0

Единственный способ выполнения первой команды если имя игрока является стороной – RTarson

ответ

0

Проблема заключается в том, что у вас есть if(cmd.getName().equalsIgnoreCase("party")), который, если я не ошибаюсь, запрашивает командную строку/cmd, чтобы захватить имя пользователя.

Я считаю, что вы хотите массировать свои команды. Так, например, для. /party help, /party setup ...

В коде я добавил несколько комментариев, которые помогут вам применить к вашему плагину.

Для начала нужно настроить свою первую команду, делая что-то вроде этого:

if(label.equalsIgnoreCase("PoP") || label.equalsIgnoreCase("PoliticalParty")){ 
//this will be your first command so you want to replace cmd.getName().equalsIgnoreCase("party") as that is really wrong 


//below tells the user if command is just "POP" then give user message 
    if(args.length == 0){//if less then 0 input 
         player.sendMessage("Wrong command type /pop help"); 
        } 

Теперь перед закрытием команды пока вы теперь хотите, чтобы добавить аргумент, что если args.length является более один. Так под приведенный выше код поместить это в:

   else if(args.length >= 1){ 
      //this will ask args if it has a valid amount of args and will now check for word help 
     if(args[0].equalsIgnoreCase("help")){ 
     player.sendMessage("This is my plugin my only command so far is /pop") 
     } 

     //ok now if(args.length >= 1) has a invalid argument we should let the user now. so at the very end add else stament 
    else { 
        player.sendMessage("invalid argument"); 
} 
} 
//close from first argument} 
+0

Задайте любые вопросы, которые могут возникнуть у вас! – RTarson

+0

BTW Могу ли я предложить изменить вашу команду плагина/участник может запускаться в другой плагин для пользователей или необходимые для большинства серверов. попробуйте ex./pop – RTarson

+0

Да, спасибо. Разработчики Bukkit фактически советуют не использовать commandLabel, а не cmd.getName(), но я дам ему завихрение. –

1

Я не уверен, что человек выше меня говорит, но позвольте мне объяснить: Да, с помощью cmd.getName() лучше, чем commandLabel и вот почему: Когда вы регистрируете команду в своем plugin.yml, вы должны указать ей имя. Затем под этим именем вы можете установить такие вещи, как описание, разрешения и т. Д., А самое главное в этом случае - его псевдонимы. Когда вы задаете свои псевдонимы, команда будет запущена, когда любая из этих псевдонимов вызывается в команде. Метка будет точным псевдонимом, который был запущен, а cmd.getName() будет именем зарегистрированной вами команды. Что касается вашей проблемы, я предполагаю, что это на этой линии здесь:

public boolean onCommand(CommandSender theSender, Command cmd, String[] args, String commandLabel) 

Это должно быть

public boolean onCommand(CommandSender theSender, Command cmd, String commandLabel, String[] args) 

Порядок всегда CommandSender, Command, String, String []. Вы должны добавить тег @Override над вашим методом onCommand, чтобы такие ошибки были выброшены, и вы узнаете, что это проблема.

+0

Отлично, спасибо вам за помощь! –

Смежные вопросы