2016-09-12 4 views
1

Я работаю над плагином, который, когда вы разбиваете блок, такой как камень, в зависимости от того, какой уровень удачи у вас на кирке зависит от того, сколько он будет помещен в ваш инвентарь.Minecraft Fortune Blocks

Plugin Детали:

  • Он автоматически помещает блоки и руды в инвентаре

  • Он автоматически плавит руду и блоки

Я точно не знаю, как сделать когда игрок разбивает блок, такой как камень, он кладет более 1 блок в свой инвентарь. И то, что я пытаюсь сделать в точности, это то, что они могут сказать, что на их кирке 6 удастся разместить, возможно, 5-7 блоков в инвентаре, но если у них будет такое же состояние, как 30, то в их инвентаре будет добавлено 10-15 блоков , Я просто пытался возиться с вариантами и видеть, могу ли я понять это, но я не могу понять это. У меня нет опыта с хэшмапами, поэтому я извиняюсь, если я делаю их неправильно.

Код:

@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 Я использую версию minecraft 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 Как я уже сказал, карта содержит 'Keys' и' Values'. Ваш 'Key' является индикатором' Value' your want .. с 'get (Key)' вы каким-то образом запрашиваете значение 'Value', связанное с этим уникальным' Key'. Элемент ItemStack не может иметь заклинание дважды, поэтому вы можете получить список с уникальными 'Keys' (Enchantment Type) с типом' Value' (Enchentment Level). В итоге карта - это просто хороший контейнер для хранения уникальных пар данных. – Drayke