2015-04-04 17 views
-2
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { 
    Player player = player.getPlayer(); 
    if(cmd.getName().equalsIgnoreCase("StaffWand")) { 
     if(!sender.hasPermission("StaffWand.staff")) { 
       sender.sendMessage(ChatColor.RED + "Only Staff can use this!"); 
     if(sender.hasPermission("StaffWand.staff")) { 
      sender.sendMessage(ChatColor.GREEN + "Here is your staff wand!") 
      ItemStack item = new ItemStack(Material.STICK); 
       sender.getInventory.addItem(item); 

sender.getInventory部件是加下劃線的紅色?有沒有什麼辦法解決這一問題?Bukkit編碼幫助發件人

+0

這是一個101的面向對象編程的問題。我會建議拿起一本書,並確保我首先理解基礎知識! – 2015-04-16 14:09:36

+0

我個人推薦Ivor Horton的「Beginning Java」,但其他任何一本書都會對你非常有益。 – 2015-04-16 14:15:26

回答

2

sender.getInventory()下劃線爲紅色的原因是因爲類CommandSender沒有方法getInventory()

Player類確實有getInventory()方法,因此,所有你需要做的是檢查,以確保該senderPlayer,那麼你可以執行getInventory()方法。

要檢查senderPlayer使用instanceof關鍵字

例如

if (sender instanceof Player) 

然後以實際執行getInventory()你需要做一些所謂的「Casting」。所有的投射真的意味着將一個特定類型的對象和「變成」另一個對象類型。

例如,投發送到玩家你做

Player player = (Player) sender; 

注意:只有當您檢查的對象是什麼,你是它鑄造的一個實例,或者你會得到InvalidCastException投。

所以現在一起把這一切並執行getInventory()方法,你會做這樣的事情:

if (sender instanceof Player) { 
    Player player = (Player) sender; 
    Inventory inv = player.getInventory(); 

    //Do what you want to do with the inventory 

}