Fixed many bugs!
- Asset issue with Dynamic Valve fixed - Fixed pipes connecting to Dynamic Valves when not part of structure - Fixed stack overflow when rendering valve fluids - Fixed transmitter networks considering pull-based block connections as acceptor connections - Fixed dynamic tanks maintaining a fluid type even when it has been depleted - Fixed "clearIfNecessary()" transmitter calls not working
This commit is contained in:
parent
09f1a04764
commit
6f0cf3a166
9 changed files with 118 additions and 108 deletions
|
@ -66,7 +66,7 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> 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());
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
@ -40,6 +39,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)
|
||||
{
|
||||
if(resource.amount <= getCapacity())
|
||||
|
@ -47,15 +51,15 @@ public class DynamicFluidTank implements IFluidTank
|
|||
if(doFill)
|
||||
{
|
||||
dynamicTank.structure.fluidStored = resource.copy();
|
||||
}
|
||||
|
||||
if(resource.amount > 0 && doFill)
|
||||
if(resource.amount > 0)
|
||||
{
|
||||
MekanismUtils.saveChunk(dynamicTank);
|
||||
updateValveData(true);
|
||||
dynamicTank.sendPacketToRenderer();
|
||||
updateValveData(false);
|
||||
}
|
||||
}
|
||||
|
||||
return resource.amount;
|
||||
}
|
||||
|
@ -64,41 +68,33 @@ public class DynamicFluidTank implements IFluidTank
|
|||
{
|
||||
dynamicTank.structure.fluidStored = resource.copy();
|
||||
dynamicTank.structure.fluidStored.amount = getCapacity();
|
||||
}
|
||||
|
||||
if(getCapacity() > 0 && doFill)
|
||||
if(getCapacity() > 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)
|
||||
else if(resource.amount <= getNeeded())
|
||||
{
|
||||
if(doFill)
|
||||
{
|
||||
dynamicTank.structure.fluidStored.amount += resource.amount;
|
||||
}
|
||||
|
||||
if(resource.amount > 0 && doFill)
|
||||
if(resource.amount > 0)
|
||||
{
|
||||
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(space > 0 && doFill)
|
||||
if(getNeeded() > 0)
|
||||
{
|
||||
MekanismUtils.saveChunk(dynamicTank);
|
||||
updateValveData(true);
|
||||
dynamicTank.sendPacketToRenderer();
|
||||
updateValveData(false);
|
||||
}
|
||||
}
|
||||
|
||||
return space;
|
||||
return getNeeded();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -183,6 +179,11 @@ public class DynamicFluidTank implements IFluidTank
|
|||
return null;
|
||||
}
|
||||
|
||||
public int getNeeded()
|
||||
{
|
||||
return getCapacity()-getFluidAmount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFluidAmount()
|
||||
{
|
||||
|
|
|
@ -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<N extends DynamicNetwork<?, N>> extends Pa
|
|||
@Override
|
||||
public void refreshTransmitterNetwork()
|
||||
{
|
||||
getTransmitterNetwork().refresh(this);
|
||||
getTransmitterNetwork().refresh((IGridTransmitter<N>)tile());
|
||||
getTransmitterNetwork().refresh();
|
||||
}
|
||||
|
||||
|
@ -246,6 +244,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
|
|||
{
|
||||
super.onModeChange(side);
|
||||
|
||||
getTransmitterNetwork().refresh((IGridTransmitter<N>)tile());
|
||||
|
||||
if(!world().isRemote)
|
||||
{
|
||||
Mekanism.packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.UPDATE, Coord4D.get(tile())), world().provider.dimensionId);
|
||||
|
|
|
@ -89,6 +89,11 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
{
|
||||
if(structure != null)
|
||||
{
|
||||
if(structure.fluidStored != null && structure.fluidStored.amount <= 0)
|
||||
{
|
||||
structure.fluidStored = null;
|
||||
}
|
||||
|
||||
manageInventory();
|
||||
}
|
||||
}
|
||||
|
@ -281,9 +286,8 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
{
|
||||
data.add(structure.volume*TankUpdateProtocol.FLUID_PER_TANK);
|
||||
data.add(structure.editMode.ordinal());
|
||||
}
|
||||
|
||||
if(structure != null && structure.fluidStored != null)
|
||||
if(structure.fluidStored != null)
|
||||
{
|
||||
data.add(1);
|
||||
data.add(structure.fluidStored.fluidID);
|
||||
|
@ -293,18 +297,18 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
data.add(0);
|
||||
}
|
||||
|
||||
if(structure != null && isRendering)
|
||||
if(isRendering)
|
||||
{
|
||||
data.add(structure.valves.size());
|
||||
|
||||
for(ValveData valveData : structure.valves)
|
||||
{
|
||||
valveData.location.write(data);
|
||||
|
||||
data.add(valveData.side.ordinal());
|
||||
data.add(valveData.serverFluid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -318,7 +322,6 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
{
|
||||
clientCapacity = dataStream.readInt();
|
||||
structure.editMode = ContainerEditMode.values()[dataStream.readInt()];
|
||||
}
|
||||
|
||||
if(dataStream.readInt() == 1)
|
||||
{
|
||||
|
@ -328,7 +331,7 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
structure.fluidStored = null;
|
||||
}
|
||||
|
||||
if(clientHasStructure && isRendering)
|
||||
if(isRendering)
|
||||
{
|
||||
int size = dataStream.readInt();
|
||||
|
||||
|
@ -363,6 +366,7 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getScaledFluidLevel(int i)
|
||||
{
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue