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;
|
||||
|
@ -374,7 +372,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors(transmitter.getTile());
|
||||
|
||||
clearAround(transmitter);
|
||||
|
||||
|
||||
for(IFluidHandler acceptor : acceptors)
|
||||
{
|
||||
ForgeDirection side = ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor));
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -245,6 +243,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
|
|||
protected void onModeChange(ForgeDirection side)
|
||||
{
|
||||
super.onModeChange(side);
|
||||
|
||||
getTransmitterNetwork().refresh((IGridTransmitter<N>)tile());
|
||||
|
||||
if(!world().isRemote)
|
||||
{
|
||||
|
|
|
@ -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,28 +286,27 @@ 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)
|
||||
{
|
||||
data.add(1);
|
||||
data.add(structure.fluidStored.fluidID);
|
||||
data.add(structure.fluidStored.amount);
|
||||
}
|
||||
else {
|
||||
data.add(0);
|
||||
}
|
||||
|
||||
if(structure != null && isRendering)
|
||||
{
|
||||
data.add(structure.valves.size());
|
||||
|
||||
for(ValveData valveData : structure.valves)
|
||||
|
||||
if(structure.fluidStored != null)
|
||||
{
|
||||
valveData.location.write(data);
|
||||
data.add(1);
|
||||
data.add(structure.fluidStored.fluidID);
|
||||
data.add(structure.fluidStored.amount);
|
||||
}
|
||||
else {
|
||||
data.add(0);
|
||||
}
|
||||
|
||||
if(isRendering)
|
||||
{
|
||||
data.add(structure.valves.size());
|
||||
|
||||
data.add(valveData.side.ordinal());
|
||||
data.add(valveData.serverFluid);
|
||||
for(ValveData valveData : structure.valves)
|
||||
{
|
||||
valveData.location.write(data);
|
||||
data.add(valveData.side.ordinal());
|
||||
data.add(valveData.serverFluid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -318,47 +322,47 @@ public class TileEntityDynamicTank extends TileEntityMultiblock<SynchronizedTank
|
|||
{
|
||||
clientCapacity = dataStream.readInt();
|
||||
structure.editMode = ContainerEditMode.values()[dataStream.readInt()];
|
||||
}
|
||||
|
||||
if(dataStream.readInt() == 1)
|
||||
{
|
||||
structure.fluidStored = new FluidStack(dataStream.readInt(), dataStream.readInt());
|
||||
}
|
||||
else {
|
||||
structure.fluidStored = null;
|
||||
}
|
||||
|
||||
if(clientHasStructure && isRendering)
|
||||
{
|
||||
int size = dataStream.readInt();
|
||||
|
||||
for(int i = 0; i < size; i++)
|
||||
|
||||
if(dataStream.readInt() == 1)
|
||||
{
|
||||
ValveData data = new ValveData();
|
||||
data.location = Coord4D.read(dataStream);
|
||||
data.side = ForgeDirection.getOrientation(dataStream.readInt());
|
||||
int viewingTicks = 0;
|
||||
structure.fluidStored = new FluidStack(dataStream.readInt(), dataStream.readInt());
|
||||
}
|
||||
else {
|
||||
structure.fluidStored = null;
|
||||
}
|
||||
|
||||
if(dataStream.readBoolean())
|
||||
{
|
||||
viewingTicks = 30;
|
||||
}
|
||||
if(isRendering)
|
||||
{
|
||||
int size = dataStream.readInt();
|
||||
|
||||
if(viewingTicks == 0)
|
||||
for(int i = 0; i < size; i++)
|
||||
{
|
||||
if(valveViewing.containsKey(data) && valveViewing.get(data) > 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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