package mekanism.common.tile; import java.util.ArrayList; import java.util.EnumSet; import mekanism.api.gas.Gas; import mekanism.api.gas.GasStack; import mekanism.api.gas.IGasHandler; import mekanism.api.gas.ITubeConnection; import mekanism.common.PacketHandler; import mekanism.common.content.teleportation.SharedInventory; import mekanism.common.content.teleportation.SharedInventoryManager; import mekanism.common.util.CableUtils; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import io.netty.buffer.ByteBuf; public class TileEntityEntangledBlock extends TileEntityElectricBlock implements IFluidHandler, IGasHandler, ITubeConnection { public SharedInventory sharedInventory; public static final EnumSet<ForgeDirection> nothing = EnumSet.noneOf(ForgeDirection.class); public TileEntityEntangledBlock() { super("Entangled", 0); inventory = new ItemStack[0]; } @Override public void onUpdate() { super.onUpdate(); CableUtils.emit(this); } public void setInventory(String frequency) { sharedInventory = SharedInventoryManager.getInventory(frequency); markDirty(); } @Override public void handlePacketData(ByteBuf dataStream) { if(!worldObj.isRemote) { switch(dataStream.readInt()) { case 0: setInventory(PacketHandler.readString(dataStream)); return; } } super.handlePacketData(dataStream); setEnergy(dataStream.readDouble()); } @Override public ArrayList getNetworkedData(ArrayList data) { super.getNetworkedData(data); data.add(getEnergy()); return data; } @Override public EnumSet<ForgeDirection> getOutputtingSides() { return sharedInventory == null ? nothing : EnumSet.of(ForgeDirection.UP); } @Override public EnumSet<ForgeDirection> getConsumingSides() { return sharedInventory == null ? nothing : EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN, ForgeDirection.UP)); } @Override public double getMaxOutput() { return sharedInventory == null ? 0 : 1000; } @Override public double getEnergy() { return sharedInventory == null ? 0 : sharedInventory.getEnergy(); } @Override public void setEnergy(double energy) { if(sharedInventory != null) { sharedInventory.setEnergy(energy); } } @Override public double getMaxEnergy() { return sharedInventory == null ? 0 : sharedInventory.getMaxEnergy(); } @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { return sharedInventory == null ? 0 : sharedInventory.fill(from, resource, doFill); } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { if(sharedInventory == null) { return null; } return sharedInventory.drain(from, resource, doDrain); } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { if(sharedInventory == null) { return null; } return sharedInventory.drain(from, maxDrain, doDrain); } @Override public boolean canFill(ForgeDirection from, Fluid fluid) { return sharedInventory == null ? false : sharedInventory.canFill(from, fluid); } @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { return sharedInventory == null ? false : sharedInventory.canDrain(from, fluid); } @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { return sharedInventory == null ? new FluidTankInfo[0] : sharedInventory.getTankInfo(from); } @Override public int receiveGas(ForgeDirection side, GasStack stack, boolean doTransfer) { return sharedInventory == null ? 0 : sharedInventory.receiveGas(side, stack, doTransfer); } @Override public int receiveGas(ForgeDirection side, GasStack stack) { return receiveGas(side, stack, true); } @Override public GasStack drawGas(ForgeDirection side, int amount, boolean doTransfer) { return sharedInventory == null ? null : sharedInventory.drawGas(side, amount, doTransfer); } @Override public GasStack drawGas(ForgeDirection side, int amount) { return drawGas(side, amount, true); } @Override public boolean canReceiveGas(ForgeDirection side, Gas type) { return sharedInventory == null ? false : sharedInventory.canReceiveGas(side, type); } @Override public boolean canDrawGas(ForgeDirection side, Gas type) { return sharedInventory == null ? false : sharedInventory.canDrawGas(side, type); } @Override public boolean canTubeConnect(ForgeDirection side) { return sharedInventory == null ? false : true; } }