package zmaster587.advancedRocketry.tile; import java.util.LinkedList; import java.util.List; import zmaster587.libVulpes.api.IArmorComponent; import zmaster587.libVulpes.api.IModularArmor; import zmaster587.libVulpes.inventory.modules.IModularInventory; import zmaster587.libVulpes.inventory.modules.ModuleBase; import zmaster587.libVulpes.inventory.modules.ModuleLimitedSlotArray; import zmaster587.libVulpes.inventory.modules.ModuleSlotArmor; import zmaster587.libVulpes.inventory.modules.ModuleSlotArray; import zmaster587.libVulpes.util.EmbeddedInventory; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class TileSuitWorkStation extends TileEntity implements IModularInventory, IInventory { EmbeddedInventory inventory; public TileSuitWorkStation() { inventory = new EmbeddedInventory(getSizeInventory()); } @Override public List<ModuleBase> getModules(int id, EntityPlayer player) { List<ModuleBase> modules = new LinkedList<ModuleBase>(); modules.add(new ModuleSlotArray(15, 15, this, 0, 1)); modules.add(new ModuleLimitedSlotArray(15, 35, this, 1, 5)); modules.add(new ModuleSlotArmor(150, 8, player)); return modules; } @Override public String getModularInventoryName() { return "tile.suitWorkStation.name"; } @Override public boolean canInteractWithContainer(EntityPlayer entity) { return true; } @Override public int getSizeInventory() { return 5; } @Override public ItemStack getStackInSlot(int slot) { if(slot == 0) { return inventory.getStackInSlot(slot); } else if(inventory.getStackInSlot(0) != null && inventory.getStackInSlot(0).getItem() instanceof IModularArmor) { return ((IModularArmor)inventory.getStackInSlot(0).getItem()).getComponentInSlot(inventory.getStackInSlot(0), slot-1); } return null; } @Override public ItemStack decrStackSize(int slot, int amt) { if(slot == 0) { return inventory.decrStackSize(slot, amt); } else if(inventory.getStackInSlot(0) != null && inventory.getStackInSlot(0).getItem() instanceof IModularArmor) { return ((IModularArmor)inventory.getStackInSlot(0).getItem()).removeComponent(worldObj, inventory.getStackInSlot(0), slot - 1); } return null; //return inventory.decrStackSize(i, j); } @Override public ItemStack getStackInSlotOnClosing(int slot) { return inventory.getStackInSlotOnClosing(slot); } @Override public void setInventorySlotContents(int slot, ItemStack contents) { if(slot == 0) { if(contents != null && contents.getItem() instanceof IModularArmor) { List<ItemStack> list = ((IModularArmor)contents.getItem()).getComponents(contents); for(int i = 0; i < getSizeInventory() -1; i++) { if(i >= list.size()) inventory.setInventorySlotContents(i+1, null); else inventory.setInventorySlotContents(i+1, list.get(i)); } } inventory.setInventorySlotContents(slot, contents); } else if(inventory.getStackInSlot(0) != null && inventory.getStackInSlot(0).getItem() instanceof IModularArmor) { //TODO if(contents != null && contents.getItem() instanceof IArmorComponent) ((IModularArmor)inventory.getStackInSlot(0).getItem()).addArmorComponent(worldObj, inventory.getStackInSlot(0), contents, slot - 1); else if(contents != null) { //If somehow an item gets forced into the slot } else ((IModularArmor)inventory.getStackInSlot(0).getItem()).removeComponent(worldObj, inventory.getStackInSlot(0), slot - 1); } } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); inventory.writeToNBT(nbt); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); inventory.readFromNBT(nbt); } @Override public String getInventoryName() { return getModularInventoryName(); } @Override public boolean hasCustomInventoryName() { return true; } @Override public int getInventoryStackLimit() { return 1; } @Override public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { return true; } @Override public void openInventory() { inventory.openInventory(); } @Override public void closeInventory() { inventory.closeInventory(); } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return (slot == 0 && stack.getItem() instanceof IModularArmor) || (inventory.getStackInSlot(0) != null && inventory.getStackInSlot(0).getItem() instanceof IModularArmor && slot != 0 && stack.getItem() instanceof IArmorComponent && ((IArmorComponent)stack.getItem()).isAllowedInSlot(stack, ((ItemArmor)inventory.getStackInSlot(0).getItem()).armorType)); } }