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:
Aidan C. Brady 2015-03-04 20:01:46 -05:00
parent 09f1a04764
commit 6f0cf3a166
9 changed files with 118 additions and 108 deletions

View file

@ -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());

View file

@ -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();
}

View file

@ -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());

View file

@ -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));

View file

@ -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()

View file

@ -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)
{

View file

@ -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;
}
}
}
}

View file

@ -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");
}
}

View file

@ -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