我想用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很重要) 如果會的話,有什麼辦法來防止這種情況發生?
其他用戶可能會讀到這一點非常重要:它不包括裝甲插槽,我不知道它是否包含副手插槽。 (包括清除,setcontents和getcontents) –
好的,我編輯了答案@AmitGold – hintss