2015-04-24 54 views
1

我編寫了一個沒有錯誤的Bukkit插件,但是在遊戲中它有一個問題。Bukkit命令重複嗎?

無論什麼時候使用該命令,它都不會做它應該做的事情。相反,它向我發送了一條大膽的消息,說明我輸入的內容是/leaving

這裏是我的代碼:

public class SeeYouSoon extends JavaPlugin{ 

// Start 
@Override 
public void onEnable(){ 
} 

@Override 
public void onDisable() { 
} 

//Commands 



public boolean onCommand(CommandSender sender, Command cmd, String[] args){ 
    if(cmd.getName().equalsIgnoreCase("leaving")){ 
     Player player = (Player) sender; 
     Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!"); 
     Bukkit.getScheduler().runTaskLater(this, new Runnable() { 
      public void run() { 
       //Run your function or change stuff here. 
       player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave."); 
      } 
     }, 20 * 30);// There are 20 ticks in one second so we can just multiply seconds by 20. 
    } 
    return false; 

} 
} 

的plugin.yml是我所期望的問題是。這裏是plugin.yml:

name: SeeYouSoon 
main: me.mark.SeeYouSoon 
version: 1.0 
commands: 
    leaving: 
     description: Announce your leave 
+0

請包括一個更好的問題說明,並實際負責代碼 – Felk

+0

@jojodmo現在命令不會做任何事 –

回答

5

首先,在JavaPluginonCommand()方法格式爲:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ 

你的下一個理由,爲什麼出現這種情況是因爲你,你的行爲後不return true根據命令。例如,你應該使用:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ 
    if(cmd.getName().equalsIgnoreCase("leaving")){ 
     //your code 
     return true; 
    } 
} 

所以,你的最終代碼應該是這樣的:

public boolean onCommand(CommandSender sender, Command cmd, String[] args){ 
    if(cmd.getName().equalsIgnoreCase("leaving")){ 
     Player player = (Player) sender; 
     Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!"); 
     Bukkit.getScheduler().runTaskLater(this, new Runnable() { 
      public void run() { 
       player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave."); 
      } 
     }, 20 * 30); 
     return true; 
    } 
    return false; 
} 
1

你是不是安全地投放到玩家:

Player player = (Player)sender; 

雖然這是正確的java,這可能會導致錯誤。確保發送者在投射前實際上是一名玩家。

if (!sender instanceof Player) 
{ 
    sender.sendMessage("Some error message"); 
    return true; 
} 
// Now you can cast to a player and continue with your code.