package darkknight.jewelrycraft.item; import java.util.ArrayList; import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import darkknight.jewelrycraft.JewelrycraftMod; import darkknight.jewelrycraft.affixes.AffixMods; import darkknight.jewelrycraft.api.IJewelryItem; import darkknight.jewelrycraft.api.ModifierEffect; import darkknight.jewelrycraft.config.ConfigHandler; import darkknight.jewelrycraft.util.JewelryNBT; import darkknight.jewelrycraft.util.JewelrycraftUtil; import darkknight.jewelrycraft.util.Variables; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.PlayerEvent; @SuppressWarnings({ "rawtypes", "unchecked" }) public abstract class ItemBaseJewelry extends Item { public ItemBaseJewelry() { super(); setMaxStackSize(1); setCreativeTab(JewelrycraftMod.jewelrycraft); } /** * @return Returns the id of the type, 0 is for ring, 1 is for bracelet, 2 is * for necklace and 3 is for earrings */ public abstract int type(); @Override public boolean requiresMultipleRenderPasses() { return true; } @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass) { if (pass == 0 && JewelryNBT.ingot(stack) != null) { return JewelrycraftUtil.getColor(JewelryNBT.ingot(stack)); } if (pass == 1 && JewelryNBT.gem(stack) != null) { return JewelrycraftUtil.getColor(JewelryNBT.gem(stack)); } else if (JewelryNBT.ingot(stack) != null) { return JewelrycraftUtil.getColor(JewelryNBT.ingot(stack)); } return 0xFFFFFF; } /** * @param stack * @return */ @Override public String getItemStackDisplayName(ItemStack stack) { String itemName = ("" + StatCollector.translateToLocal(getUnlocalizedNameInefficiently(stack) + ".name")) .trim(); String baseName = itemName; ItemStack gem = JewelryNBT.gem(stack); if (gem != null) { if (Item.getIdFromItem(gem.getItem()) > 0) { String gemName = gem.getDisplayName().replace("Gem|Crystal|Jewel", " ").trim(); baseName = gemName + " " + itemName; } } ItemStack ingot = JewelryNBT.ingot(stack); if (ingot != null) { if (Item.getIdFromItem(ingot.getItem()) > 0) { String ingotName = ingot.getDisplayName().replace("Ingot", " ").trim(); baseName = ingotName + " " + baseName; } } String prefix = JewelryNBT.prefix(stack); String suffix = JewelryNBT.suffix(stack); if (prefix != null && !prefix.equals("")) { String translatedPrefix = StatCollector.translateToLocal("prefix." + Variables.MODID + "." + prefix); baseName = translatedPrefix + " " + baseName; } if (suffix != null && !suffix.equals("")) { String translatedSuffix = StatCollector.translateToLocal("suffix." + Variables.MODID + "." + suffix); baseName = baseName + " " + translatedSuffix; } return baseName; } /** * allows items to add custom lines of information to the mouseover description. * * @param stack * @param player * @param list * @param par4 */ @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) { if (stack.hasTagCompound() && ConfigHandler.JEWELRY_INFO) { ItemStack ingot = JewelryNBT.ingot(stack); if (ingot != null && Item.getIdFromItem(ingot.getItem()) > 0) { String metalInfo = StatCollector.translateToLocal("info." + Variables.MODID + ".metal"); String ingotInfo = StatCollector.translateToLocal("info." + Variables.MODID + ".ingot"); list.add(metalInfo + ": " + EnumChatFormatting.YELLOW + ingot.getDisplayName().replace(ingotInfo, " ")); } ItemStack gem = JewelryNBT.gem(stack); if (gem != null) { list.add(StatCollector.translateToLocal("info." + Variables.MODID + ".gem") + ": " + EnumChatFormatting.BLUE + gem.getDisplayName()); } ArrayList modifier = JewelryNBT.modifier(stack); if (!modifier.isEmpty()) { list.add(StatCollector.translateToLocal("info." + Variables.MODID + ".modifiers") + ": "); } for (ItemStack is : modifier) { list.add(EnumChatFormatting.DARK_PURPLE + is.getDisplayName() + " x" + is.stackSize); } String prefix = JewelryNBT.prefix(stack); String suffix = JewelryNBT.suffix(stack); if (prefix != null && !prefix.equals("")) { String translatedPrefix = StatCollector.translateToLocal("prefix." + Variables.MODID + "." + prefix); String translatedDesc = StatCollector .translateToLocal("prefix." + Variables.MODID + "." + prefix + ".desc"); list.add(EnumChatFormatting.AQUA + translatedPrefix + ": " + translatedDesc); } if (suffix != null && !suffix.equals("")) { String translatedSuffix = StatCollector.translateToLocal("suffix." + Variables.MODID + "." + suffix); String translatedDesc = StatCollector .translateToLocal("suffix." + Variables.MODID + "." + suffix + ".desc"); list.add(EnumChatFormatting.AQUA + translatedSuffix + ": " + translatedDesc); } } } /** * @param stack * @param player */ public void action(ItemStack item, EntityPlayer player) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.action(item, player, this); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.action(item, player, this); if (suffix != null) suffix.action(item, player, this); } /** * @param item * @param player * @param source * @return */ public boolean onPlayerAttackedCacellable(ItemStack item, EntityPlayer player, DamageSource source, float amount) { boolean cancelEvent = false; for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { cancelEvent = mod.onPlayerAttackedCancellable(item, player, source, this, amount); if (cancelEvent) return true; } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) { cancelEvent = prefix.onPlayerAttackedCancellable(item, player, source, this, amount); if (cancelEvent) return true; } if (suffix != null) { cancelEvent = suffix.onPlayerAttackedCancellable(item, player, source, this, amount); if (cancelEvent) return true; } return cancelEvent; } /** * @param item * @param player * @param target * @return */ public boolean onEntityAttackedCancellable(ItemStack item, EntityPlayer player, Entity target, LivingAttackEvent event) { boolean cancelEvent = false; for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { cancelEvent = mod.onEntityAttackedCancellable(item, player, target, this, event); if (cancelEvent) return true; } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) { cancelEvent = prefix.onEntityAttackedCancellable(item, player, target, this, event); if (cancelEvent) return true; } if (suffix != null) { cancelEvent = suffix.onEntityAttackedCancellable(item, player, target, this, event); if (cancelEvent) return true; } return cancelEvent; } /** * @param item * @param player * @param source * @return */ public void onPlayerAttacked(ItemStack item, EntityPlayer player, DamageSource source, float amount) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onPlayerAttacked(item, player, source, this, amount); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onPlayerAttacked(item, player, source, this, amount); if (suffix != null) suffix.onPlayerAttacked(item, player, source, this, amount); } /** * @param item * @param player * @param target * @return */ public void onEntityAttacked(ItemStack item, EntityPlayer player, Entity target, LivingAttackEvent event) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onEntityAttacked(item, player, target, this, event); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onEntityAttacked(item, player, target, this, event); if (suffix != null) suffix.onEntityAttacked(item, player, target, this, event); } public void onPlayerDead(ItemStack item, EntityPlayer player, DamageSource source) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onPlayerDead(item, player, source, this); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onPlayerDead(item, player, source, this); if (suffix != null) suffix.onPlayerDead(item, player, source, this); } public void onPlayerRespawn(ItemStack item, PlayerEvent.Clone event) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onPlayerRespawn(item, event, this); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onPlayerRespawn(item, event, this); if (suffix != null) suffix.onPlayerRespawn(item, event, this); } public void onJewelryEquipped(ItemStack item, EntityPlayer player) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onJewelryEquipped(item, this, player); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onJewelryEquipped(item, this, player); if (suffix != null) suffix.onJewelryEquipped(item, this, player); } public void onJewelryUnequipped(ItemStack item, EntityPlayer player) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onJewelryUnequipped(item, this, player); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onJewelryUnequipped(item, this, player); if (suffix != null) suffix.onJewelryUnequipped(item, this, player); } public void onLivingDropItems(ItemStack item, EntityPlayer player, LivingDropsEvent event) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onLivingDropItems(item, player, event, this); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onLivingDropItems(item, player, event, this); if (suffix != null) suffix.onLivingDropItems(item, player, event, this); } public void onPlayerHurt(ItemStack item, EntityPlayer player, LivingHurtEvent event) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onPlayerHurt(item, player, event, this); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onPlayerHurt(item, player, event, this); if (suffix != null) suffix.onPlayerHurt(item, player, event, this); } public void onEntityHurt(ItemStack item, EntityPlayer player, LivingHurtEvent event) { for (ModifierEffect mod : ModifierEffect.getEffects()) { if (JewelryNBT.doesModifierExist(item, mod.getModifier())) { mod.onEntityHurt(item, player, event, this); } } ModifierEffect prefix = AffixMods.getPrefix(JewelryNBT.prefix(item)); ModifierEffect suffix = AffixMods.getSuffix(JewelryNBT.suffix(item)); if (prefix != null) prefix.onEntityHurt(item, player, event, this); if (suffix != null) suffix.onEntityHurt(item, player, event, this); } }