diff --git a/common/mekanism/api/gas/GasNetwork.java b/common/mekanism/api/gas/GasNetwork.java index 59a44f3d4..6229ca2de 100644 --- a/common/mekanism/api/gas/GasNetwork.java +++ b/common/mekanism/api/gas/GasNetwork.java @@ -27,6 +27,11 @@ public class GasNetwork extends DynamicNetwork public boolean prevTransfer; public float gasScale; + public float prevScale; + + /** Sent from server to client, actual stored buffer scale */ + public float definedScale; + public Gas refGas = null; public GasStack gasStored; @@ -156,9 +161,16 @@ public class GasNetwork extends DynamicNetwork transferDelay--; } + if(Math.abs(getScale()-prevScale) > 0.01 || (getScale() != prevScale && (getScale() == 0 || getScale() == 1))) + { + needsUpdate = true; + } + + prevScale = getScale(); + if(didTransfer != prevTransfer || needsUpdate) { - MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, refGas != null ? refGas.getID() : -1, didTransfer)); + MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, refGas != null ? refGas.getID() : -1, didTransfer, getScale())); needsUpdate = false; } @@ -183,11 +195,11 @@ public class GasNetwork extends DynamicNetwork if(didTransfer && gasScale < 1) { - gasScale = Math.min(1, gasScale+0.02F); + gasScale = Math.max(definedScale, Math.min(1, gasScale+0.02F)); } else if(!didTransfer && gasScale > 0) { - gasScale = Math.max(0, gasScale-0.02F); + gasScale = Math.max(definedScale, Math.max(0, gasScale-0.02F)); if(gasScale == 0) { @@ -275,15 +287,22 @@ public class GasNetwork extends DynamicNetwork public final int transferType; public final boolean didTransfer; + public final float gasScale; - public GasTransferEvent(GasNetwork network, int type, boolean did) + public GasTransferEvent(GasNetwork network, int type, boolean did, float scale) { gasNetwork = network; transferType = type; didTransfer = did; + gasScale = scale; } } + public float getScale() + { + return (gasStored != null ? gasStored.amount : 0)/getCapacity(); + } + @Override public String toString() { diff --git a/common/mekanism/common/FluidNetwork.java b/common/mekanism/common/FluidNetwork.java index 52839f1ad..a5b216da0 100644 --- a/common/mekanism/common/FluidNetwork.java +++ b/common/mekanism/common/FluidNetwork.java @@ -33,6 +33,11 @@ public class FluidNetwork extends DynamicNetwork public boolean prevTransfer; public float fluidScale; + public float prevScale; + + /** Sent from server to client, actual stored buffer scale */ + public float definedScale; + public Fluid refFluid = null; public FluidStack fluidStored; @@ -161,9 +166,16 @@ public class FluidNetwork extends DynamicNetwork transferDelay--; } + if(Math.abs(getScale()-prevScale) > 0.01 || (getScale() != prevScale && (getScale() == 0 || getScale() == 1))) + { + needsUpdate = true; + } + + prevScale = getScale(); + if(didTransfer != prevTransfer || needsUpdate) { - MinecraftForge.EVENT_BUS.post(new FluidTransferEvent(this, refFluid != null ? refFluid.getID() : -1, didTransfer)); + MinecraftForge.EVENT_BUS.post(new FluidTransferEvent(this, refFluid != null ? refFluid.getID() : -1, didTransfer, getScale())); needsUpdate = false; } @@ -188,11 +200,11 @@ public class FluidNetwork extends DynamicNetwork if(didTransfer && fluidScale < 1) { - fluidScale = Math.min(1, fluidScale+0.02F); + fluidScale = Math.max(definedScale, Math.min(1, fluidScale+0.02F)); } else if(!didTransfer && fluidScale > 0) { - fluidScale = Math.max(0, fluidScale-0.02F); + fluidScale = Math.max(definedScale, Math.max(0, fluidScale-0.02F)); if(fluidScale == 0) { @@ -282,14 +294,21 @@ public class FluidNetwork extends DynamicNetwork public final int fluidType; public final boolean didTransfer; + public final float fluidScale; - public FluidTransferEvent(FluidNetwork network, int type, boolean did) + public FluidTransferEvent(FluidNetwork network, int type, boolean did, float scale) { fluidNetwork = network; fluidType = type; didTransfer = did; + fluidScale = scale; } } + + public float getScale() + { + return (fluidStored != null ? fluidStored.amount : 0)/getCapacity(); + } @Override public String toString() diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 7196176ef..01e44a076 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -1340,7 +1340,7 @@ public class Mekanism public void onGasTransferred(GasTransferEvent event) { try { - PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.GAS, event.gasNetwork.transmitters.iterator().next(), event.transferType, event.didTransfer)); + PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.GAS, event.gasNetwork.transmitters.iterator().next(), event.transferType, event.didTransfer, event.gasScale)); } catch(Exception e) {} } @@ -1348,7 +1348,7 @@ public class Mekanism public void onLiquidTransferred(FluidTransferEvent event) { try { - PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.FLUID, event.fluidNetwork.transmitters.iterator().next(), event.fluidType, event.didTransfer)); + PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.FLUID, event.fluidNetwork.transmitters.iterator().next(), event.fluidType, event.didTransfer, event.fluidScale)); } catch(Exception e) {} } diff --git a/common/mekanism/common/network/PacketTransmitterUpdate.java b/common/mekanism/common/network/PacketTransmitterUpdate.java index 3f015b9bf..c4d6d20dc 100644 --- a/common/mekanism/common/network/PacketTransmitterUpdate.java +++ b/common/mekanism/common/network/PacketTransmitterUpdate.java @@ -31,6 +31,8 @@ public class PacketTransmitterUpdate implements IMekanismPacket public int fluidType; public boolean didFluidTransfer; + public float scale; + @Override public String getName() { @@ -51,10 +53,12 @@ public class PacketTransmitterUpdate implements IMekanismPacket case GAS: gasType = (Integer)data[2]; didGasTransfer = (Boolean)data[3]; + scale = (Float)data[4]; break; case FLUID: fluidType = (Integer)data[2]; didFluidTransfer = (Boolean)data[3]; + scale = (Float)data[4]; break; } @@ -96,11 +100,13 @@ public class PacketTransmitterUpdate implements IMekanismPacket Gas gasType = GasRegistry.getGas(dataStream.readInt()); didGasTransfer = dataStream.readBoolean(); + scale = dataStream.readFloat(); if(tileEntity != null) { ((ITransmitter)tileEntity).getTransmitterNetwork().refGas = gasType; ((ITransmitter)tileEntity).getTransmitterNetwork().didTransfer = didGasTransfer; + ((ITransmitter)tileEntity).getTransmitterNetwork().definedScale = scale; } } else if(transmitterType == 3) @@ -110,11 +116,13 @@ public class PacketTransmitterUpdate implements IMekanismPacket int type = dataStream.readInt(); Fluid fluidType = type != -1 ? FluidRegistry.getFluid(type) : null; didFluidTransfer = dataStream.readBoolean(); + scale = dataStream.readFloat(); if(tileEntity != null) { ((ITransmitter)tileEntity).getTransmitterNetwork().refFluid = fluidType; ((ITransmitter)tileEntity).getTransmitterNetwork().didTransfer = didFluidTransfer; + ((ITransmitter)tileEntity).getTransmitterNetwork().definedScale = scale; } } } @@ -136,10 +144,12 @@ public class PacketTransmitterUpdate implements IMekanismPacket case GAS: dataStream.writeInt(gasType); dataStream.writeBoolean(didGasTransfer); + dataStream.writeFloat(scale); break; case FLUID: dataStream.writeInt(fluidType); dataStream.writeBoolean(didFluidTransfer); + dataStream.writeFloat(scale); break; } }