package crazypants.enderio.machine.capbank.network; import io.netty.buffer.ByteBuf; import com.enderio.core.common.util.BlockCoord; import crazypants.enderio.machine.RedstoneControlMode; import crazypants.enderio.machine.capbank.TileCapBank; public class NetworkState { private final long energyStored; private final long maxEnergyStored; private final int maxIO; private final int maxInput; private final int maxOutput; private final RedstoneControlMode inputMode; private final RedstoneControlMode outputMode; private final BlockCoord invImplLoc; private final float averageInput; private final float averageOutput; public NetworkState(long energyStored, long maxEnergyStored, int maxIO, int maxInput, int maxOutput, RedstoneControlMode inputMode, RedstoneControlMode outputMode, BlockCoord invImplLoc, float averageInput, float averageOutput) { this.energyStored = energyStored; this.maxEnergyStored = maxEnergyStored; this.maxIO = maxIO; this.maxInput = maxInput; this.maxOutput = maxOutput; this.inputMode = inputMode; this.outputMode = outputMode; this.invImplLoc = invImplLoc; this.averageInput = averageInput; this.averageOutput = averageOutput; } public NetworkState(ICapBankNetwork network) { energyStored = network.getEnergyStoredL(); maxEnergyStored = network.getMaxEnergyStoredL(); maxIO = network.getMaxIO(); maxInput = network.getMaxInput(); maxOutput = network.getMaxOutput(); inputMode = network.getInputControlMode(); outputMode = network.getOutputControlMode(); TileCapBank cb = network.getInventory().getCapBank(); if(cb != null) { invImplLoc = cb.getLocation(); } else { invImplLoc = null; } averageInput = network.getAverageInputPerTick(); averageOutput = network.getAverageOutputPerTick(); } public long getEnergyStored() { return energyStored; } public long getMaxEnergyStored() { return maxEnergyStored; } public int getMaxOutput() { return maxOutput; } public int getMaxInput() { return maxInput; } public int getMaxIO() { return maxIO; } public RedstoneControlMode getInputMode() { return inputMode; } public RedstoneControlMode getOutputMode() { return outputMode; } public BlockCoord getInventoryImplLocation() { return invImplLoc; } public float getAverageInput() { return averageInput; } public float getAverageOutput() { return averageOutput; } public void writeToBuf(ByteBuf buf) { buf.writeLong(energyStored); buf.writeLong(maxEnergyStored); buf.writeInt(maxIO); buf.writeInt(maxInput); buf.writeInt(maxOutput); buf.writeShort(inputMode.ordinal()); buf.writeShort(outputMode.ordinal()); buf.writeBoolean(invImplLoc != null); if(invImplLoc != null) { invImplLoc.writeToBuf(buf); } buf.writeFloat(averageInput); buf.writeFloat(averageOutput); } public static NetworkState readFromBuf(ByteBuf buf) { return new NetworkState(buf.readLong(), buf.readLong(), buf.readInt(), buf.readInt(), buf.readInt(), RedstoneControlMode.values()[buf.readShort()], RedstoneControlMode.values()[buf.readShort()], buf.readBoolean() ? BlockCoord.readFromBuf(buf) : null, buf.readFloat(), buf.readFloat()); } @Override public String toString() { return "NetworkClientState [energyStored=" + energyStored + ", maxEnergyStored=" + maxEnergyStored + ", maxIO=" + maxIO + ", maxInput=" + maxInput + ", maxOutput=" + maxOutput + "]"; } }