List of usage examples for net.minecraftforge.event AnvilUpdateEvent getName
public String getName()
From source file:vazkii.quark.misc.feature.AncientTomes.java
License:Creative Commons License
@SubscribeEvent public void onAnvilUpdate(AnvilUpdateEvent event) { ItemStack left = event.getLeft();//from w ww. j av a 2s. com ItemStack right = event.getRight(); if (!left.isEmpty() && !right.isEmpty()) { if (left.getItem() == Items.ENCHANTED_BOOK && right.getItem() == ancient_tome) handleTome(left, right, event); else if (right.getItem() == Items.ENCHANTED_BOOK && left.getItem() == ancient_tome) handleTome(right, left, event); else if (right.getItem() == Items.ENCHANTED_BOOK) { Map<Enchantment, Integer> enchants = EnchantmentHelper.getEnchantments(right); Map<Enchantment, Integer> currentEnchants = EnchantmentHelper.getEnchantments(left); boolean hasOverLevel = false; boolean hasMatching = false; for (Map.Entry<Enchantment, Integer> entry : enchants.entrySet()) { Enchantment ench = entry.getKey(); if (ench == null) continue; int level = entry.getValue(); if (level > ench.getMaxLevel()) { hasOverLevel = true; if (ench.canApply(left)) { hasMatching = true; //remove incompatible enchantments for (Iterator<Enchantment> iterator = currentEnchants.keySet().iterator(); iterator .hasNext();) { Enchantment enchCompare = iterator.next(); if (enchCompare == ench) continue; if (!enchCompare.isCompatibleWith(ench)) { iterator.remove(); } } currentEnchants.put(ench, level); } } else if (ench.canApply(left)) { boolean compatible = true; //don't apply incompatible enchantments for (Enchantment enchCompare : currentEnchants.keySet()) { if (enchCompare == ench) continue; if (enchCompare != null && !enchCompare.isCompatibleWith(ench)) { compatible = false; break; } } if (compatible) { currentEnchants.put(ench, level); } } } if (hasOverLevel) { if (hasMatching) { ItemStack out = left.copy(); EnchantmentHelper.setEnchantments(currentEnchants, out); String name = event.getName(); int cost = applyTomeCost; if (name != null && !name.isEmpty()) { out.setStackDisplayName(name); cost++; } event.setOutput(out); event.setCost(cost); } else { event.setCanceled(true); } } } } }