List of usage examples for net.minecraftforge.event AnvilUpdateEvent setOutput
public void setOutput(@Nonnull ItemStack output)
From source file:vazkii.quark.misc.feature.AncientTomes.java
License:Creative Commons License
@SubscribeEvent public void onAnvilUpdate(AnvilUpdateEvent event) { ItemStack left = event.getLeft();/* w ww. j ava 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); } } } } }
From source file:vazkii.quark.misc.feature.AncientTomes.java
License:Creative Commons License
private void handleTome(ItemStack book, ItemStack tome, AnvilUpdateEvent event) { Map<Enchantment, Integer> enchantsBook = EnchantmentHelper.getEnchantments(book); Map<Enchantment, Integer> enchantsTome = EnchantmentHelper.getEnchantments(tome); for (Map.Entry<Enchantment, Integer> entry : enchantsTome.entrySet()) { if (enchantsBook.getOrDefault(entry.getKey(), 0).equals(entry.getValue())) { enchantsBook.put(entry.getKey(), entry.getValue() + 1); } else {/*from w ww . ja va 2 s .c o m*/ return; } } ItemStack output = ProxyRegistry.newStack(Items.ENCHANTED_BOOK); for (Map.Entry<Enchantment, Integer> entry : enchantsBook.entrySet()) { ItemEnchantedBook.addEnchantment(output, new EnchantmentData(entry.getKey(), entry.getValue())); } event.setOutput(output); event.setCost(mergeTomeCost); }
From source file:vazkii.quark.misc.feature.ColorRunes.java
License:Creative Commons License
@SubscribeEvent public void onAnvilUpdate(AnvilUpdateEvent event) { ItemStack left = event.getLeft();//from w w w. j a va2s . c om ItemStack right = event.getRight(); if (!left.isEmpty() && !right.isEmpty() && left.isItemEnchanted() && right.getItem() == rune) { ItemStack out = left.copy(); ItemNBTHelper.setBoolean(out, TAG_RUNE_ATTACHED, true); ItemNBTHelper.setInt(out, TAG_RUNE_COLOR, right.getItemDamage()); event.setOutput(out); event.setCost(applyCost); } }
From source file:vazkii.quark.world.feature.AncientTomes.java
License:Creative Commons License
@SubscribeEvent public void onAnvilUpdate(AnvilUpdateEvent event) { ItemStack left = event.getLeft();/*from w ww.java2s . co m*/ ItemStack right = event.getRight(); if (left != null && right != null) { 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); if (enchants.size() == 1) { Enchantment ench = enchants.keySet().iterator().next(); int level = enchants.get(ench); if (level > ench.getMaxLevel() && ench.canApply(left)) { ItemStack out = left.copy(); Map<Enchantment, Integer> currentEnchants = EnchantmentHelper.getEnchantments(out); currentEnchants.put(ench, level); EnchantmentHelper.setEnchantments(currentEnchants, out); event.setOutput(out); event.setCost(35); } } } } }
From source file:vazkii.quark.world.feature.AncientTomes.java
License:Creative Commons License
private void handleTome(ItemStack book, ItemStack tome, AnvilUpdateEvent event) { Map<Enchantment, Integer> enchantsLeft = EnchantmentHelper.getEnchantments(book); Map<Enchantment, Integer> enchantsRight = EnchantmentHelper.getEnchantments(tome); if (enchantsLeft.equals(enchantsRight)) { Enchantment ench = enchantsRight.keySet().iterator().next(); ItemStack output = new ItemStack(Items.ENCHANTED_BOOK); ((ItemEnchantedBook) output.getItem()).addEnchantment(output, new EnchantmentData(ench, enchantsRight.get(ench) + 1)); event.setOutput(output); event.setCost(35);//from www.j av a2s.c om } }
From source file:vazkii.quark.world.feature.ColorRunes.java
License:Creative Commons License
@SubscribeEvent public void onAnvilUpdate(AnvilUpdateEvent event) { ItemStack left = event.getLeft();/*from w ww . j av a 2 s .c o m*/ ItemStack right = event.getRight(); if (left != null && right != null && left.isItemEnchanted() && right.getItem() == rune) { ItemStack out = left.copy(); ItemNBTHelper.setBoolean(out, TAG_RUNE_ATTACHED, true); ItemNBTHelper.setInt(out, TAG_RUNE_COLOR, right.getItemDamage()); event.setOutput(out); event.setCost(15); } }