2016-03-07 205 views
-2

我想用bukkit API做一些簡單的kitPvP(主要用於學習目的),但是我在爲選擇工具包前備份玩家的庫存而苦苦掙扎。bukkit API的簡單工具包

現在我的代碼:(文件:Commands.java,是接收來自主叫帶按需)

public boolean testkit(CommandSender sender, String[] args) { 
     if(sender instanceof Player) { 
      String kit = args[0]; // I know, may throw exception 
      Player player = (Player) sender; 
      PlayerInventory inventory = player.getInventory(); 
      // Backup inventory into HashMap(?) 

      if(kit.equalsIgnoreCase("basic")) { 
       // Clear inventory then give items to player (or replace) 
      } else if(kit.equalsIgnoreCase("out")) { 
       // Clear inventory then give backup to player (or replace) 
      } else { 
       sender.sendMessage("No such kit."); 
       return false; 
      } 
      return true; // Returns if a good kit selected 
     } else { 
      sender.sendMessage("Only players can select kits!"); 
      return false; 
     } 
    } 

現在,我有以下部分問題:

  • 備份玩家
  • 的庫存更換播放器的存貨與其他庫存

我不知道如何做這些事情,因爲你不能創建一個新的PlayerInventory實例(它是一個接口),我不知道什麼可以容納玩家的物品。 (另外我知道,如果服務器關閉,HashMap將被擦除,但這不是重點)

另外,我想有一種方法可以用另一種方法替換玩家的庫存,但我絕對不知道如何。

編輯:找到一個相當不合理的解決方案。通過here,發現瞭如何製作新的廣告資源,並且創建了一個函數來迭代播放器的廣告資源並將這些項目複製到備份中。

private void overwrite(Inventory source, Inventory dest) { 
    for(int i = 0; i < source.getSize(); i++) { 
     dest.setItem(i, source.getItem(i)); 
    } 
} 

private Inventory copy(Inventory inventory) { 
    Inventory copy = Bukkit.createInventory(inventory.getHolder(), inventory.getSize(), inventory.getName()); 
    overwrite(inventory, copy); 
    return copy; 
} 

但有一個問題:如果在舊庫存中更改ItemStack更新到新庫存? (這裏不是非常重要,但是瞭解IMO很重要) 如果會的話,有什麼辦法來防止這種情況發生?

回答

3

你應該做的是在播放器的庫存上調用getContents(),然後保存返回到HashMap的數組。然後,您可以clear()玩家的庫存,並單獨設置每個插槽的內容(或者,對於更優雅的解決方案,您可以使用ItemStack[]準備好每個套件的物品,您可以使用setContents()將其推入庫存中)。

一旦玩家完成了這個套件並且你想恢復他們的原始庫存,你只需要setContents()以及他們存儲在HashMap中的物品的副本。

請注意,getContents()setContents()不裝甲槽處理,所以要做到這一點,你要還getArmorContents()setArmorContents()

+1

其他用戶可能會讀到這一點非常重要:它不包括裝甲插槽,我不知道它是否包含副手插槽。 (包括清除,setcontents和getcontents) –

+0

好的,我編輯了答案@AmitGold – hintss