2016-09-12 74 views
1

我正在研究一個插件,當你打破一塊石頭時,取決於你在鎬上有多少財富,取決於它將投入到你的庫存中的多少。Minecraft Fortune Blocks

插件詳細信息:

  • 它會自動將塊和礦石的庫存

  • 它會自動冶煉礦石和塊

我不完全知道如何做當玩家擊破石塊時,它會在他們的庫存中放置更多的1塊。而我想要做的就是如果他們有可能在他們的鎬上說財富6,那麼他們可能會在庫存中放置5-7塊,但如果他們有財富30,它們會在庫存中放置10-15塊。我只是試圖搞亂選項,看看我能否搞清楚,但我無法弄清楚。我對hashmaps沒有任何經驗,所以我很抱歉,如果我也做錯了。

代碼:

@EventHandler 
public void fortuneBlock(BlockBreakEvent e) { 
    Player p = (Player) e.getPlayer(); 
    Block b = (Block) e.getBlock(); 

    ItemStack DP = new ItemStack(Material.DIAMOND_PICKAXE); 

    if (p.getInventory().contains(DP)) { 
     if (DP.containsEnchantment(Enchantment.LOOT_BONUS_BLOCKS)) { 
      HashMap<Enchantment, Integer> pickaxe = p.getInventory().getItem(Material.DIAMOND_PICKAXE); 
     } 
    } 
} 

如果您需要任何其他信息,讓我知道。

+0

首先:您正在使用哪個版本的Minecraft Forge?我可以告訴它不是最新的,因爲它現在是'EntityPlayer'而不是'Player'。 –

+0

@SomePerson我正在使用我的世界版本1.10。我不使用僞造我可能應該包括這是一個插件而不是一個國防部。 – MrSanfrinsisco

+0

在這個Bukkit插件呢? – 4castle

回答

1

getEnchantments()

//Map containing all enchantments of the ItemStack 
//The Map looks like: [KEY,VALUE] 
// [Enchantment.DURABILITY,2], 
// [Enchantment.LOOT_BONUS_BLOCKS,4] 
HashMap<Enchantment, Integer> enchantmentMap = YourItemStack.getEnchantments(); 
//Check if this map contains the wanted Enchantment 
if(enchantmentMap.containsKey(Enchantment.LOOT_BONUS_BLOCKS)) 
//Get VALUE of KEY which is the enchantLevel "4" 
Integer enchantmentLevel = enchantmentMap.get(Enchantment.LOOT_BONUS_BLOCKS); 

你能想象像一個表中的地圖,每個KEY都有自己的value。因此KEY是唯一的。

+0

*對於遲到的回覆抱歉*好吧,我明白你在這裏做什麼。如果我能夠以它的方式快速解釋它是如何工作的,那麼我也知道如何以其他方式使用它。 Integer enchantmentLevel = enchantmentMap.get(Enchantment.LOOT_BONUS_BLOCKS); 這是如何工作來獲得附魔的等級?就像它知道你正在尋找魔法級別。 – MrSanfrinsisco

+0

@MrSanfrinsisco就像我說過的,Map包含'Keys'和'Values'。你的'Key'就是你想要的'Value'的指示符,通過get(Key)''你以某種方式請求與這個唯一'Key'相連的'Value'。 一個ItemStack不能有兩次附魔,所以你可以通過'Value'(Enchentment Level)獲得帶有唯一'Keys'(附魔類型)的List。最後,地圖只是一個很好的容器來存儲唯一的數據對。 – Drayke