package crazypants.enderio.item.darksteel.upgrade; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import com.enderio.core.client.handlers.SpecialTooltipHandler; import com.enderio.core.common.util.ItemUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import crazypants.enderio.EnderIO; public abstract class AbstractUpgrade implements IDarkSteelUpgrade { public static final String KEY_LEVEL_COST = "level_cost"; private static final String KEY_UNLOC_NAME = "unlocalized_name"; public static final String KEY_UPGRADE_PREFIX = "enderio.darksteel.upgrade."; private static final String KEY_UPGRADE_ITEM = "upgradeItem"; protected final int levelCost; protected final String id; protected final String unlocName; protected ItemStack upgradeItem; protected AbstractUpgrade(String id, String unlocName, ItemStack upgradeItem, int levelCost) { this.id = KEY_UPGRADE_PREFIX + id; this.unlocName = unlocName; this.upgradeItem = upgradeItem; this.levelCost = levelCost; } public AbstractUpgrade(String id, NBTTagCompound tag) { this.id = KEY_UPGRADE_PREFIX + id; levelCost = tag.getInteger(KEY_LEVEL_COST); unlocName = tag.getString(KEY_UNLOC_NAME); if(tag.hasKey(KEY_UPGRADE_ITEM)) { upgradeItem = ItemStack.loadItemStackFromNBT((NBTTagCompound) tag.getTag(KEY_UPGRADE_ITEM)); } } @Override public boolean isUpgradeItem(ItemStack stack) { if(stack == null || stack.getItem() == null || getUpgradeItem() == null) { return false; } return stack.isItemEqual(getUpgradeItem()) && stack.stackSize == getUpgradeItem().stackSize; } @Override public ItemStack getUpgradeItem() { return upgradeItem; } @Override public String getUpgradeItemName() { return getUpgradeItem().getDisplayName(); } @Override @SideOnly(Side.CLIENT) public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { SpecialTooltipHandler.addCommonTooltipFromResources(list, getUnlocalizedName()); } @Override @SideOnly(Side.CLIENT) public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { list.add(EnumChatFormatting.DARK_AQUA + EnderIO.lang.localizeExact(getUnlocalizedName() + ".name")); } @Override @SideOnly(Side.CLIENT) public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { list.add(EnumChatFormatting.DARK_AQUA + EnderIO.lang.localizeExact(getUnlocalizedName() + ".name")); SpecialTooltipHandler.addDetailedTooltipFromResources(list, getUnlocalizedName()); } @Override public int getLevelCost() { return levelCost; } @Override public String getUnlocalizedName() { return unlocName; } @Override @SideOnly(Side.CLIENT) public IRenderUpgrade getRender() { return null; } @Override public boolean hasUpgrade(ItemStack stack) { if(stack == null) { return false; } if(stack.stackTagCompound == null) { return false; } return stack.stackTagCompound.hasKey(id); } @Override public void writeToItem(ItemStack stack) { if(stack == null) { return; } NBTTagCompound upgradeRoot = new NBTTagCompound(); upgradeRoot.setInteger(KEY_LEVEL_COST, levelCost); upgradeRoot.setString(KEY_UNLOC_NAME, getUnlocalizedName()); if(getUpgradeItem() != null) { NBTTagCompound itemRoot = new NBTTagCompound(); getUpgradeItem().writeToNBT(itemRoot); upgradeRoot.setTag(KEY_UPGRADE_ITEM, itemRoot); } writeUpgradeToNBT(upgradeRoot); NBTTagCompound stackRoot = ItemUtil.getOrCreateNBT(stack); stackRoot.setTag(id, upgradeRoot); stack.setTagCompound(stackRoot); } public NBTTagCompound getUpgradeRoot(ItemStack stack) { if(!hasUpgrade(stack)) { return null; } return (NBTTagCompound) stack.stackTagCompound.getTag(id); } public abstract void writeUpgradeToNBT(NBTTagCompound upgradeRoot); @Override public void removeFromItem(ItemStack stack) { if(stack == null) { return; } if(stack.stackTagCompound == null) { return; } stack.stackTagCompound.removeTag(id); } }