package zmaster587.advancedRocketry.tile.hatch; import io.netty.buffer.ByteBuf; import java.util.LinkedList; import java.util.List; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import zmaster587.advancedRocketry.api.DataStorage; import zmaster587.advancedRocketry.api.DataStorage.DataType; import zmaster587.advancedRocketry.inventory.modules.ModuleData; import zmaster587.advancedRocketry.item.ItemData; import zmaster587.advancedRocketry.util.IDataInventory; import zmaster587.libVulpes.inventory.modules.IModularInventory; import zmaster587.libVulpes.inventory.modules.ModuleBase; import zmaster587.libVulpes.network.PacketHandler; import zmaster587.libVulpes.network.PacketMachine; import zmaster587.libVulpes.tile.multiblock.hatch.TileInventoryHatch; import zmaster587.libVulpes.util.INetworkMachine; //TODO: allow dataCable connections public class TileDataBus extends TileInventoryHatch implements IDataInventory, INetworkMachine { int maxData; DataStorage data; public TileDataBus() { data = new DataStorage(DataStorage.DataType.UNDEFINED); data.setMaxData(2000); } public TileDataBus(int number) { super(number); data = new DataStorage(DataStorage.DataType.UNDEFINED); data.setMaxData(2000); } @Override public void loadData() { ItemStack itemStack = inventory.getStackInSlot(0); if(itemStack != null && itemStack.getItem() instanceof ItemData) { ItemData itemData = (ItemData)itemStack.getItem(); itemData.removeData(itemStack, this.data.addData(itemData.getData(itemStack), itemData.getDataType(itemStack), true), DataStorage.DataType.UNDEFINED); //this.data.removeData(itemData.removeData(inv[0], this.data.getData(), this.data.getDataType())); } if(worldObj.isRemote) { PacketHandler.sendToServer(new PacketMachine(this, (byte)-2)); } } @Override public String getModularInventoryName() { return "tile.loader.0.name"; } @Override public void storeData() { ItemStack itemStack = inventory.getStackInSlot(0); if(itemStack != null && itemStack.getItem() instanceof ItemData && itemStack.stackSize == 1) { ItemData itemData = (ItemData)itemStack.getItem(); this.data.removeData(itemData.addData(itemStack, this.data.getData(), this.data.getDataType()), true); } if(worldObj.isRemote) { PacketHandler.sendToServer(new PacketMachine(this, (byte)-1)); } } public void setData(int data, DataStorage.DataType dataType) { this.data.setData(data, dataType); } @Override public int addData(int data, DataStorage.DataType dataType, ForgeDirection dir, boolean commit) { return this.data.addData(data, dataType, commit); } public int getData() { return data.getData(); } public final DataStorage getDataObject() { return data; } public int setMaxData() { return data.getMaxData(); } public void setMaxData(int maxData) { data.setMaxData(maxData); } /** * @param type the datatype to lock the tile to or null to unlock * @see DataStorage */ public void lockData(DataStorage.DataType type) { data.lockDataType(type); } @Override public List<ModuleBase> getModules(int ID, EntityPlayer player) { LinkedList<ModuleBase> modules = new LinkedList<ModuleBase>(); modules.add(new ModuleData(40, 20, 0, this, data)); return modules; } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); data.writeToNBT(nbt); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); data.readFromNBT(nbt); } @Override public void writeDataToNetwork(ByteBuf out, byte id) { } @Override public void readDataFromNetwork(ByteBuf in, byte packetId, NBTTagCompound nbt) { } @Override public void useNetworkData(EntityPlayer player, Side side, byte id, NBTTagCompound nbt) { if(id == -1) { storeData(); } else if(id == -2) loadData(); } @Override public int extractData(int maxAmount, DataType type, ForgeDirection dir, boolean commit) { if(type == DataStorage.DataType.UNDEFINED || this.data.getDataType() == type) return this.data.removeData(maxAmount, commit); return 0; } }