2015-12-07 247 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'塊並改變你如何比較'Strings'從'=='到'.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

順便說一句,我建議改變你的插件命令/派對可能會遇到另一個用戶插件或大多數服務器所具有的基本要素。嘗試前。/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,命令字符串,字符串[]。 你應該在@ onCommand方法上面添加@Override標籤,這樣就會拋出類似的錯誤,你會知道這就是問題所在。

+0

完美,謝謝你的幫助! –