package zmaster587.advancedRocketry.tile.Satellite; import java.util.LinkedList; import java.util.List; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.ForgeDirection; import zmaster587.advancedRocketry.api.AdvancedRocketryItems; import zmaster587.advancedRocketry.api.SatelliteRegistry; import zmaster587.advancedRocketry.api.satellite.SatelliteProperties; import zmaster587.advancedRocketry.dimension.DimensionManager; import zmaster587.advancedRocketry.inventory.TextureResources; import zmaster587.advancedRocketry.item.ItemSatellite; import zmaster587.advancedRocketry.item.ItemSatelliteIdentificationChip; import zmaster587.libVulpes.client.util.ProgressBarImage; import zmaster587.libVulpes.inventory.modules.IButtonInventory; import zmaster587.libVulpes.inventory.modules.IModularInventory; import zmaster587.libVulpes.inventory.modules.ModuleBase; import zmaster587.libVulpes.inventory.modules.ModuleButton; import zmaster587.libVulpes.inventory.modules.ModuleOutputSlotArray; import zmaster587.libVulpes.inventory.modules.ModulePower; import zmaster587.libVulpes.inventory.modules.ModuleProgress; import zmaster587.libVulpes.inventory.modules.ModuleTexturedSlotArray; import zmaster587.libVulpes.network.PacketHandler; import zmaster587.libVulpes.network.PacketMachine; import zmaster587.libVulpes.tile.multiblock.TileMultiPowerConsumer; public class TileChipStorage extends TileMultiPowerConsumer implements IModularInventory, IInventory, IButtonInventory { public static final Object[][][] structure = new Object[][][] { {{'c'}}, {{'*'}} }; ItemStack inventory[]; @Override protected void processComplete() { super.processComplete(); ItemStack stack0 = getStackInSlot(0); ItemStack stack1 = getStackInSlot(1); stack1.setTagCompound(stack0.getTagCompound()); } @Override public void useNetworkData(EntityPlayer player, Side side, byte id, NBTTagCompound nbt) { super.useNetworkData(player, side, id, nbt); if(id == 100) { if(canCopy()) beginCopy(); } } private void beginCopy() { completionTime = 100; } private boolean canCopy() { ItemStack stack0 = getStackInSlot(0); ItemStack stack1 = getStackInSlot(1); return !isRunning() && stack0 != null && stack0.getItem() instanceof ItemSatelliteIdentificationChip && stack0.hasTagCompound() && stack1 != null && stack1.getItem() instanceof ItemSatelliteIdentificationChip; } @Override public List<ModuleBase> getModules(int ID, EntityPlayer player) { List<ModuleBase> modules = new LinkedList<ModuleBase>(); modules.add(new ModulePower(18, 20, getBatteries())); modules.add(new ModuleTexturedSlotArray(58, 16, this, 0, 1, TextureResources.idChip)); // Output modules.add(new ModuleTexturedSlotArray(58, 36, this, 1, 2, TextureResources.idChip)); // Id chip modules.add(new ModuleProgress(75, 36, 0, new ProgressBarImage(217,0, 17, 17, 234, 0, ForgeDirection.DOWN, TextureResources.progressBars), this)); modules.add(new ModuleButton(40, 56, 0, "Copy", this, zmaster587.libVulpes.inventory.TextureResources.buttonBuild)); return modules; } @Override public void onInventoryButtonPressed(int buttonId) { PacketHandler.sendToServer(new PacketMachine(this, (byte)(buttonId + 100)) ); } @Override public String getMachineName() { return "tile.satelliteBuilder.name"; } @Override public int getSizeInventory() { return inventory.length - 1; } @Override public ItemStack getStackInSlot(int slot) { return inventory[slot]; } @Override public ItemStack decrStackSize(int slot, int amt) { if(inventory[slot] != null) { ItemStack stack = inventory[slot].splitStack(amt); if(inventory[slot].stackSize == 0) inventory[slot] = null; return stack; } return null; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return inventory[slot]; } @Override public void setInventorySlotContents(int slot, ItemStack stack) { inventory[slot] = stack; if(isRunning() && slot > 2) { super.processComplete(); } } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return player.getDistanceSq(xCoord, yCoord, zCoord) < 64; } @Override public void openInventory() {} @Override public void closeInventory() {} @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList list = new NBTTagList(); for(int i = 0; i < inventory.length; i++) { ItemStack stack = inventory[i]; if(stack != null) { NBTTagCompound tag = new NBTTagCompound(); tag.setByte("Slot", (byte)(i)); stack.writeToNBT(tag); list.appendTag(tag); } } nbt.setTag("outputItems", list); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList list = nbt.getTagList("outputItems", 10); for (int i = 0; i < list.tagCount(); i++) { NBTTagCompound tag = (NBTTagCompound) list.getCompoundTagAt(i); byte slot = tag.getByte("Slot"); if (slot >= 0 && slot < inventory.length) { inventory[slot] = ItemStack.loadItemStackFromNBT(tag); } } } @Override public String getInventoryName() { return null; } }