package mods.ocminecart.common.items; import cpw.mods.fml.common.Loader; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import li.cil.oc.api.API; import mods.ocminecart.OCMinecart; import mods.ocminecart.common.items.interfaces.IComponentInventoryItem; import mods.ocminecart.common.minecart.ComputerCart; import mods.ocminecart.common.util.ComputerCartData; import mods.railcraft.client.emblems.Emblem; import mods.railcraft.client.emblems.EmblemToolsClient; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.GameSettings; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import org.lwjgl.input.Keyboard; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class ItemComputerCart extends MinecartItem implements IComponentInventoryItem{ private static final String __OBFID = "CL_00000049"; public static final int SLOT_ROM = 18; public ItemComputerCart() { super(); this.setUnlocalizedName(OCMinecart.MODID+".itemcomputercart"); this.setTextureName(OCMinecart.MODID+":computercartcase_1"); //random texture to prevent errors. You should not see this Icon because 3D Renderer. this.setHasSubtypes(true); } public EntityMinecart create(World w, double x,double y,double z,ItemStack stack){ return ComputerCart.create(w, x, y, z, ItemComputerCart.getData(stack)); } @Override public void getSubItems(Item item, CreativeTabs tab, List list){ if(tab!=OCMinecart.itemGroup || item!=ModItems.item_ComputerCart) return; ItemStack stack = new ItemStack(ModItems.item_ComputerCart,1); ComputerCartData data = new ComputerCartData(); HashMap<Integer,ItemStack> inv = new HashMap<Integer,ItemStack>(); //Container inv.put(0, API.items.get("cardContainer3").createItemStack(1)); inv.put(1, API.items.get("upgradeContainer3").createItemStack(1)); inv.put(2, API.items.get("diskDrive").createItemStack(1)); //Upgrades inv.put(3, API.items.get("inventoryUpgrade").createItemStack(1)); inv.put(4, API.items.get("inventoryUpgrade").createItemStack(1)); inv.put(5, API.items.get("inventoryUpgrade").createItemStack(1)); inv.put(6, API.items.get("inventoryUpgrade").createItemStack(1)); inv.put(7, API.items.get("inventoryControllerUpgrade").createItemStack(1)); inv.put(8, API.items.get("tankUpgrade").createItemStack(1)); inv.put(9, API.items.get("tankControllerUpgrade").createItemStack(1)); inv.put(10, API.items.get("screen1").createItemStack(1)); inv.put(11, API.items.get("keyboard").createItemStack(1)); //Cards inv.put(12, API.items.get("internetCard").createItemStack(1)); inv.put(13, API.items.get("wlanCard").createItemStack(1)); inv.put(14, null); //CPU - APU inv.put(15, API.items.get("apuCreative").createItemStack(1)); //RAM inv.put(16, API.items.get("ram6").createItemStack(1)); inv.put(17, API.items.get("ram6").createItemStack(1)); //EEPROM inv.put(18, API.items.get("luaBios").createItemStack(1)); //HDD inv.put(19, API.items.get("hdd3").createItemStack(1)); data.setComponents(inv); data.setTier(3); data.setEnergy(20000); setData(stack,data); list.add(stack); } public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int xb, int yb, int zb, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_){ if(!world.isRemote && getData(stack)==null){ player.inventory.setInventorySlotContents(player.inventory.currentItem , null); player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"Sorry! Removed the invalid item")); return false; } else{ return super.onItemUse(stack, player, world, xb, yb, zb, p_77648_7_, p_77648_8_, p_77648_9_, p_77648_10_); } } public static ComputerCartData getData(ItemStack stack){ if((stack.getItem() instanceof ItemComputerCart) && stack.hasTagCompound()){ ComputerCartData data = new ComputerCartData(); NBTTagCompound nbt = stack.getTagCompound(); if(nbt.hasKey("cartdata")){ data.loadItemData(nbt.getCompoundTag("cartdata")); } return data; } return null; } public static void setData(ItemStack stack,ComputerCartData data){ if(stack.getItem() instanceof ItemComputerCart){ NBTTagCompound nbt = (stack.hasTagCompound()) ? stack.getTagCompound() : new NBTTagCompound(); if(data !=null){ NBTTagCompound tag = new NBTTagCompound(); data.saveItemData(tag); nbt.setTag("cartdata", tag); } if(!stack.hasTagCompound())stack.setTagCompound(nbt); } } public String getItemStackDisplayName(ItemStack stack){ return this.getDisplayString(stack, false); } public String getDisplayString(ItemStack stack,boolean hasColor){ EnumChatFormatting color; String tier; ComputerCartData data = getData(stack); tier=StatCollector.translateToLocal("tooltip."+OCMinecart.MODID+".tier"+(data.getTier()+1)); switch((data!=null) ? data.getTier() : -1){ case 0: color = EnumChatFormatting.WHITE; break; case 1: color = EnumChatFormatting.YELLOW; break; case 2: color = EnumChatFormatting.AQUA; break; case 3: color = EnumChatFormatting.LIGHT_PURPLE; break; default: color = EnumChatFormatting.DARK_RED; tier = "ERROR!"; break; } if(!hasColor) color = EnumChatFormatting.RESET; return color+super.getItemStackDisplayName(stack)+" "+tier; } @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean adv) { super.addInformation(stack, player, list, adv); list.clear(); list.add(this.getDisplayString(stack, true)); ComputerCartData data = getData(stack); if(data==null) return ; String eloc = StatCollector.translateToLocal("tooltip."+OCMinecart.MODID+".storedenergy"); list.add(EnumChatFormatting.WHITE+eloc+": "+EnumChatFormatting.GREEN+String.format("%.0f", data.getEnergy())); String emblemid = data.getEmblem(); if(emblemid!=null && emblemid!="" && Loader.isModLoaded("Railcraft")) { Emblem emblem = EmblemToolsClient.packageManager.getEmblem(emblemid); if(emblem!=null){ list.add(EnumChatFormatting.GOLD+StatCollector.translateToLocal("tooltip."+OCMinecart.MODID+".emblem")+ EnumChatFormatting.WHITE+" "+emblem.displayName); } } if(!Keyboard.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode())){ String key = GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()); String formkey = "[" + EnumChatFormatting.WHITE + key + EnumChatFormatting.GRAY + "]"; list.add(StatCollector.translateToLocalFormatted("tooltip."+OCMinecart.MODID+".viewcomponents", formkey)); } else{ list.add(StatCollector.translateToLocal("tooltip."+OCMinecart.MODID+".instcomponents")+":"); Iterator<Entry<Integer, ItemStack>> components = data.getComponents().entrySet().iterator(); while(components.hasNext()){ list.add("- "+components.next().getValue().getDisplayName()); } } } @Override public void setComponentList(ItemStack stack, Map<Integer, ItemStack> components) { ComputerCartData data = ItemComputerCart.getData(stack); if(data!=null){ data.setComponents(components); ItemComputerCart.setData(stack, data); } } @Override public Map<Integer, ItemStack> getComponentList(ItemStack stack) { ComputerCartData data = ItemComputerCart.getData(stack); if(data!=null){ return data.getComponents(); } return null; } }