2016-03-07 206 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