diff --git a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java index bd1533a63..3e04a7b55 100644 --- a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java +++ b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java @@ -66,7 +66,7 @@ public abstract class DynamicNetwork> implemen World world = getWorld(); - if(acceptor.getTileEntity(world) == null || acceptor.getTileEntity(world).isInvalid() || transmitter.canConnectToAcceptor(side, true)) + if(acceptor.getTileEntity(world) == null || acceptor.getTileEntity(world).isInvalid() || !transmitter.canConnectToAcceptor(side, true)) { acceptorDirections.get(acceptor).remove(side.getOpposite()); diff --git a/src/main/java/mekanism/client/render/RenderPartTransmitter.java b/src/main/java/mekanism/client/render/RenderPartTransmitter.java index 01a2cdd8e..3cf66dc4b 100644 --- a/src/main/java/mekanism/client/render/RenderPartTransmitter.java +++ b/src/main/java/mekanism/client/render/RenderPartTransmitter.java @@ -358,7 +358,6 @@ public class RenderPartTransmitter implements IIconSelfRegister pop(); } - } private DisplayInteger[] getListAndRender(ForgeDirection side, Fluid fluid) @@ -492,6 +491,7 @@ public class RenderPartTransmitter implements IIconSelfRegister } push(); + CCRenderState.reset(); CCRenderState.useNormals = true; CCRenderState.startDrawing(); @@ -509,6 +509,7 @@ public class RenderPartTransmitter implements IIconSelfRegister MekanismRenderer.disableCullFace(); MekanismRenderer.glowOff(); + pop(); } diff --git a/src/main/java/mekanism/client/render/tileentity/RenderDynamicTank.java b/src/main/java/mekanism/client/render/tileentity/RenderDynamicTank.java index 1c31745bd..48a39bef2 100644 --- a/src/main/java/mekanism/client/render/tileentity/RenderDynamicTank.java +++ b/src/main/java/mekanism/client/render/tileentity/RenderDynamicTank.java @@ -79,7 +79,6 @@ public class RenderDynamicTank extends TileEntitySpecialRenderer { push(); - MekanismRenderer.glowOn(tileEntity.structure.fluidStored.getFluid().getLuminosity()); GL11.glTranslated(getX(valveData.location.xCoord), getY(valveData.location.yCoord), getZ(valveData.location.zCoord)); MekanismRenderer.glowOn(tileEntity.structure.fluidStored.getFluid().getLuminosity()); diff --git a/src/main/java/mekanism/common/FluidNetwork.java b/src/main/java/mekanism/common/FluidNetwork.java index 4a37c3c94..10dce1d6c 100644 --- a/src/main/java/mekanism/common/FluidNetwork.java +++ b/src/main/java/mekanism/common/FluidNetwork.java @@ -7,7 +7,6 @@ import java.util.EnumSet; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import mekanism.api.Coord4D; @@ -18,7 +17,6 @@ import mekanism.api.transmitters.TransmissionType; import mekanism.api.util.ListUtils; import mekanism.common.util.LangUtils; import mekanism.common.util.PipeUtils; - import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; @@ -374,7 +372,7 @@ public class FluidNetwork extends DynamicNetwork IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors(transmitter.getTile()); clearAround(transmitter); - + for(IFluidHandler acceptor : acceptors) { ForgeDirection side = ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)); diff --git a/src/main/java/mekanism/common/content/tank/DynamicFluidTank.java b/src/main/java/mekanism/common/content/tank/DynamicFluidTank.java index 722f87593..4753685ba 100644 --- a/src/main/java/mekanism/common/content/tank/DynamicFluidTank.java +++ b/src/main/java/mekanism/common/content/tank/DynamicFluidTank.java @@ -4,7 +4,6 @@ import mekanism.api.Coord4D; import mekanism.common.content.tank.SynchronizedTankData.ValveData; import mekanism.common.tile.TileEntityDynamicTank; import mekanism.common.util.MekanismUtils; - import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; @@ -39,6 +38,11 @@ public class DynamicFluidTank implements IFluidTank { return 0; } + + if(dynamicTank.structure.fluidStored != null && !dynamicTank.structure.fluidStored.isFluidEqual(resource)) + { + return 0; + } if(dynamicTank.structure.fluidStored == null || dynamicTank.structure.fluidStored.fluidID <= 0) { @@ -47,14 +51,14 @@ public class DynamicFluidTank implements IFluidTank if(doFill) { dynamicTank.structure.fluidStored = resource.copy(); - } - - if(resource.amount > 0 && doFill) - { - MekanismUtils.saveChunk(dynamicTank); - updateValveData(true); - dynamicTank.sendPacketToRenderer(); - updateValveData(false); + + if(resource.amount > 0) + { + MekanismUtils.saveChunk(dynamicTank); + updateValveData(true); + dynamicTank.sendPacketToRenderer(); + updateValveData(false); + } } return resource.amount; @@ -64,40 +68,32 @@ public class DynamicFluidTank implements IFluidTank { dynamicTank.structure.fluidStored = resource.copy(); dynamicTank.structure.fluidStored.amount = getCapacity(); + + if(getCapacity() > 0) + { + MekanismUtils.saveChunk(dynamicTank); + updateValveData(true); + dynamicTank.sendPacketToRenderer(); + updateValveData(false); + } } - if(getCapacity() > 0 && doFill) + return getCapacity(); + } + } + else if(resource.amount <= getNeeded()) + { + if(doFill) + { + dynamicTank.structure.fluidStored.amount += resource.amount; + + if(resource.amount > 0) { MekanismUtils.saveChunk(dynamicTank); updateValveData(true); dynamicTank.sendPacketToRenderer(); updateValveData(false); } - - return getCapacity(); - } - } - - if(!dynamicTank.structure.fluidStored.isFluidEqual(resource)) - { - return 0; - } - - int space = getCapacity() - dynamicTank.structure.fluidStored.amount; - - if(resource.amount <= space) - { - if(doFill) - { - dynamicTank.structure.fluidStored.amount += resource.amount; - } - - if(resource.amount > 0 && doFill) - { - MekanismUtils.saveChunk(dynamicTank); - updateValveData(true); - dynamicTank.sendPacketToRenderer(); - updateValveData(false); } return resource.amount; @@ -106,17 +102,17 @@ public class DynamicFluidTank implements IFluidTank if(doFill) { dynamicTank.structure.fluidStored.amount = getCapacity(); + + if(getNeeded() > 0) + { + MekanismUtils.saveChunk(dynamicTank); + updateValveData(true); + dynamicTank.sendPacketToRenderer(); + updateValveData(false); + } } - if(space > 0 && doFill) - { - MekanismUtils.saveChunk(dynamicTank); - updateValveData(true); - dynamicTank.sendPacketToRenderer(); - updateValveData(false); - } - - return space; + return getNeeded(); } } @@ -182,6 +178,11 @@ public class DynamicFluidTank implements IFluidTank return null; } + + public int getNeeded() + { + return getCapacity()-getFluidAmount(); + } @Override public int getFluidAmount() diff --git a/src/main/java/mekanism/common/multipart/PartTransmitter.java b/src/main/java/mekanism/common/multipart/PartTransmitter.java index c01e6b46d..08bdb7096 100644 --- a/src/main/java/mekanism/common/multipart/PartTransmitter.java +++ b/src/main/java/mekanism/common/multipart/PartTransmitter.java @@ -12,10 +12,8 @@ import mekanism.client.ClientTickHandler; import mekanism.common.Mekanism; import mekanism.common.network.PacketTransmitterUpdate.PacketType; import mekanism.common.network.PacketTransmitterUpdate.TransmitterUpdateMessage; - import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; - import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; import codechicken.multipart.TMultiPart; @@ -44,7 +42,7 @@ public abstract class PartTransmitter> extends Pa @Override public void refreshTransmitterNetwork() { - getTransmitterNetwork().refresh(this); + getTransmitterNetwork().refresh((IGridTransmitter)tile()); getTransmitterNetwork().refresh(); } @@ -245,6 +243,8 @@ public abstract class PartTransmitter> extends Pa protected void onModeChange(ForgeDirection side) { super.onModeChange(side); + + getTransmitterNetwork().refresh((IGridTransmitter)tile()); if(!world().isRemote) { diff --git a/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java b/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java index 02d491af8..03fad1a4d 100644 --- a/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java +++ b/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java @@ -89,6 +89,11 @@ public class TileEntityDynamicTank extends TileEntityMultiblock 0) + ValveData data = new ValveData(); + data.location = Coord4D.read(dataStream); + data.side = ForgeDirection.getOrientation(dataStream.readInt()); + int viewingTicks = 0; + + if(dataStream.readBoolean()) { - continue; + viewingTicks = 30; } - } - valveViewing.put(data, viewingTicks); + if(viewingTicks == 0) + { + if(valveViewing.containsKey(data) && valveViewing.get(data) > 0) + { + continue; + } + } - TileEntityDynamicTank tileEntity = (TileEntityDynamicTank)data.location.getTileEntity(worldObj); + valveViewing.put(data, viewingTicks); - if(tileEntity != null) - { - tileEntity.clientHasStructure = true; + TileEntityDynamicTank tileEntity = (TileEntityDynamicTank)data.location.getTileEntity(worldObj); + + if(tileEntity != null) + { + tileEntity.clientHasStructure = true; + } } } } diff --git a/src/main/java/mekanism/common/tile/TileEntityDynamicValve.java b/src/main/java/mekanism/common/tile/TileEntityDynamicValve.java index 2554e8d57..ce33c43b0 100644 --- a/src/main/java/mekanism/common/tile/TileEntityDynamicValve.java +++ b/src/main/java/mekanism/common/tile/TileEntityDynamicValve.java @@ -1,8 +1,8 @@ package mekanism.common.tile; import mekanism.common.content.tank.DynamicFluidTank; +import mekanism.common.util.MekanismUtils; import mekanism.common.util.PipeUtils; - import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; @@ -59,12 +59,18 @@ public class TileEntityDynamicValve extends TileEntityDynamicTank implements IFl @Override public boolean canFill(ForgeDirection from, Fluid fluid) { - return true; + return ((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)); } @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { - return true; + return ((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)); + } + + @Override + public String getInventoryName() + { + return MekanismUtils.localize("gui.dynamicTank"); } } diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 0810c1105..5bd0c194f 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -412,6 +412,7 @@ gui.constituents=Constituents gui.cells=cells gui.providers=providers gui.structure=Structure +gui.dynamicTank=Dynamic Tank gui.reactor.injectionRate=Injection Rate