package com.amadornes.framez.item; import java.util.ArrayList; import java.util.List; import net.minecraft.client.resources.I18n; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import codechicken.lib.vec.BlockCoord; import codechicken.lib.vec.Vector3; import codechicken.multipart.JItemMultiPart; import codechicken.multipart.TMultiPart; import com.amadornes.framez.api.modifier.IFrameModifierMaterial; import com.amadornes.framez.api.modifier.IFrameModifier; import com.amadornes.framez.modifier.FrameFactory; import com.amadornes.framez.modifier.FrameModifierRegistry; import com.amadornes.framez.part.PartFrame; import com.amadornes.framez.ref.ModInfo; import com.amadornes.framez.ref.References; public class ItemPartFrame extends JItemMultiPart { public ItemPartFrame() { setUnlocalizedName(ModInfo.MODID + ":" + References.Item.FRAME); } @Override public TMultiPart newPart(ItemStack item, EntityPlayer player, World world, BlockCoord loc, int side, Vector3 hit) { NBTTagCompound tag = item.getTagCompound(); if (tag == null) return null; if (!tag.hasKey("modifiers")) return null; NBTTagList l = tag.getTagList("modifiers", new NBTTagString().getId()); List<IFrameModifier> mods = new ArrayList<IFrameModifier>(); for (int i = 0; i < l.tagCount(); i++) { IFrameModifier mod = FrameModifierRegistry.instance().findModifier(l.getStringTagAt(i)); if (mod != null) mods.add(mod); } return FrameFactory.createFrame(PartFrame.class, mods); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void getSubItems(Item i, CreativeTabs t, List l) { for (List<IFrameModifier> mods : FrameModifierRegistry.instance().getAllCombinations(PartFrame.class)) { NBTTagList tagList = new NBTTagList(); for (IFrameModifier mod : mods) tagList.appendTag(new NBTTagString(mod.getType())); NBTTagCompound tag = new NBTTagCompound(); tag.setTag("modifiers", tagList); ItemStack is = new ItemStack(this); is.setTagCompound(tag); l.add(is); } } @Override public boolean getHasSubtypes() { return true; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void addInformation(ItemStack stack, EntityPlayer player, List tip, boolean shift) { NBTTagCompound tag = stack.getTagCompound(); if (tag == null) return; if (!tag.hasKey("modifiers")) return; tip.add(I18n.format("tooltip." + ModInfo.MODID + ":modifiers") + ":"); NBTTagList l = tag.getTagList("modifiers", new NBTTagString().getId()); for (int i = 0; i < l.tagCount(); i++) { String type = l.getStringTagAt(i); IFrameModifier mod = FrameModifierRegistry.instance().findModifier(type); boolean found = mod != null; tip.add((!found ? EnumChatFormatting.RED : "") + " - " + I18n.format("tooltip." + ModInfo.MODID + ":modifier." + type + ".name") + (mod != null && mod instanceof IFrameModifierMaterial ? " [" + I18n.format("tooltip." + ModInfo.MODID + ":modifier.material") + "]" : "")); } } @Override public String getUnlocalizedName(ItemStack stack) { NBTTagCompound tag = stack.getTagCompound(); if (tag == null) return super.getUnlocalizedName(stack); if (!tag.hasKey("modifiers")) return super.getUnlocalizedName(stack); NBTTagList l = tag.getTagList("modifiers", new NBTTagString().getId()); for (int i = 0; i < l.tagCount(); i++) { String type = l.getStringTagAt(i); IFrameModifier mod = FrameModifierRegistry.instance().findModifier(type); if (mod != null && mod instanceof IFrameModifierMaterial) return super.getUnlocalizedName(stack) + "." + type; } return super.getUnlocalizedName(stack); } }