package com.vapourdrive.harderstart.events; import java.util.Map; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.event.AnvilUpdateEvent; import com.vapourdrive.harderstart.items.ItemEnchantmentGem; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class HS_AnvilEvent { @SubscribeEvent(priority = EventPriority.LOWEST) public void anvilEvent(AnvilUpdateEvent event) { ItemStack leftInput = event.left; ItemStack rightInput = event.right; if (leftInput == null || rightInput == null) { return; } Item leftItem = leftInput.getItem(); Item rightItem = rightInput.getItem(); if (rightItem instanceof ItemEnchantmentGem) { handleAnvilGem(leftInput, leftItem, rightInput, rightItem, event); } // // Map leftEnchantments = EnchantmentHelper.getEnchantments(leftInput); // Map rightEnchantments = // EnchantmentHelper.getEnchantments(rightInput); // Collection leftEnchantmentCollection = leftEnchantments.values(); // Collection rightEnchantmentCollection = rightEnchantments.values(); // // if(!leftEnchantmentCollection.containsAll(rightEnchantmentCollection)) // { // leftEnchantments.putAll(rightEnchantments); // ItemStack result = leftInput.copy(); // EnchantmentHelper.setEnchantments(leftEnchantments, result); // // event.output = result; // event.cost = 1; // } } public void handleAnvilGem(ItemStack leftInput, Item leftItem, ItemStack rightInput, Item rightItem, AnvilUpdateEvent event) { if (!(leftItem instanceof ItemEnchantmentGem) && rightItem instanceof ItemEnchantmentGem) { ItemEnchantmentGem gem = (ItemEnchantmentGem) rightItem; if (!rightInput.isItemEnchanted()) { if (leftItem.isItemTool(leftInput) && leftInput.getItemDamage() < (leftInput.getMaxDamage() / 4)) { handleEnchantGem(leftInput, leftItem, rightInput, gem, event); } } else if (rightInput.isItemEnchanted()) { handleEnchantTool(leftInput, leftItem, rightInput, gem, event); } } } public void handleEnchantGem(ItemStack toolStack, Item tool, ItemStack gemStack, ItemEnchantmentGem gem, AnvilUpdateEvent event) { Enchantment enchant = gem.getGemEnchantment(); int enchantID = enchant.effectId; Map enchantMap = EnchantmentHelper.getEnchantments(toolStack); if (enchantMap.containsKey(enchantID)) { int level = ((Integer) enchantMap.get(enchantID)); ItemStack outputStack = new ItemStack(gem); outputStack.addEnchantment(enchant, level); event.output = outputStack; event.cost = getEnchantmentCost(enchant, level); event.materialCost = 1; } } public void handleEnchantTool(ItemStack toolStack, Item tool, ItemStack gemStack, ItemEnchantmentGem gem, AnvilUpdateEvent event) { Enchantment enchant = gem.getGemEnchantment(); int enchantID = enchant.effectId; Map enchantMap = EnchantmentHelper.getEnchantments(gemStack); if (!EnchantmentHelper.getEnchantments(toolStack).containsKey(enchantID) && enchantMap.containsKey(enchantID) && enchant.canApply(toolStack)) { int level = ((Integer) enchantMap.get(enchantID)); ItemStack outputStack = toolStack.copy(); outputStack.addEnchantment(enchant, level); event.output = outputStack; event.cost = getEnchantmentCost(enchant, level); event.materialCost = 1; } } public static int getEnchantmentCost(Enchantment enchant, int level) { if (level > enchant.getMaxLevel()) { level = enchant.getMaxLevel(); } int costPerLevel = 0; switch (enchant.getWeight()) { case 1: costPerLevel = 8; break; case 2: costPerLevel = 4; case 3: case 4: case 6: case 7: case 8: case 9: default: break; case 5: costPerLevel = 2; break; case 10: costPerLevel = 1; } return (costPerLevel * level); } }