Skip to content

Commit

Permalink
Fixed Solar Evaporation Plant memory leaks
Browse files Browse the repository at this point in the history
  • Loading branch information
aidancbrady committed Jan 13, 2016
1 parent a8efb3b commit e950c64
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 20 deletions.
Expand Up @@ -4,14 +4,14 @@
import java.util.Set;

import mekanism.api.Coord4D;

import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntitySolarEvaporationBlock extends TileEntityContainerBlock
{
public TileEntitySolarEvaporationController master;
public Coord4D master;

public boolean attempted;

Expand Down Expand Up @@ -40,7 +40,7 @@ public void onUpdate()
attempted = false;
}

public void addToStructure(TileEntitySolarEvaporationController controller)
public void addToStructure(Coord4D controller)
{
master = controller;
}
Expand All @@ -57,7 +57,12 @@ public void onChunkUnload()

if(master != null)
{
master.refresh();
TileEntitySolarEvaporationController tile = getController();

if(tile != null)
{
((TileEntitySolarEvaporationController)tile).refresh();
}
}
}

Expand All @@ -68,9 +73,11 @@ public void onNeighborChange(Block block)

if(!worldObj.isRemote)
{
if(master != null)
TileEntitySolarEvaporationController tile = getController();

if(tile != null)
{
master.refresh();
((TileEntitySolarEvaporationController)tile).refresh();
}
else {
updateController();
Expand All @@ -91,6 +98,21 @@ public void updateController()
}
}

public TileEntitySolarEvaporationController getController()
{
if(master != null)
{
TileEntity tile = master.getTileEntity(worldObj);

if(tile instanceof TileEntitySolarEvaporationController)
{
return (TileEntitySolarEvaporationController)tile;
}
}

return null;
}

public class ControllerFinder
{
public TileEntitySolarEvaporationController found;
Expand Down
Expand Up @@ -43,7 +43,7 @@ public class TileEntitySolarEvaporationController extends TileEntitySolarEvapora
public FluidTank inputTank = new FluidTank(0);
public FluidTank outputTank = new FluidTank(MAX_OUTPUT);

public Set<TileEntitySolarEvaporationBlock> tankParts = new HashSet<TileEntitySolarEvaporationBlock>();
public Set<Coord4D> tankParts = new HashSet<Coord4D>();
public ISalinationSolar[] solars = new ISalinationSolar[4];

public boolean temperatureSet = false;
Expand Down Expand Up @@ -547,8 +547,8 @@ public boolean addTankPart(TileEntity tile)
{
if(tile != this)
{
((TileEntitySolarEvaporationBlock)tile).addToStructure(this);
tankParts.add((TileEntitySolarEvaporationBlock)tile);
((TileEntitySolarEvaporationBlock)tile).addToStructure(Coord4D.get(this));
tankParts.add(Coord4D.get(tile));
}

return true;
Expand Down Expand Up @@ -730,9 +730,14 @@ public boolean canSetFacing(int side)

public void clearStructure()
{
for(TileEntitySolarEvaporationBlock tankPart : tankParts)
for(Coord4D tankPart : tankParts)
{
tankPart.controllerGone();
TileEntity tile = tankPart.getTileEntity(worldObj);

if(tile instanceof TileEntitySolarEvaporationBlock)
{
((TileEntitySolarEvaporationBlock)tile).controllerGone();
}
}

tankParts.clear();
Expand Down
Expand Up @@ -39,15 +39,18 @@ public void onUpdate()
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
return master == null ? 0 : master.inputTank.fill(resource, doFill);
TileEntitySolarEvaporationController controller = getController();
return controller == null ? 0 : controller.inputTank.fill(resource, doFill);
}

@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{
if(master != null && (resource == null || resource.isFluidEqual(master.outputTank.getFluid())))
TileEntitySolarEvaporationController controller = getController();

if(controller != null && (resource == null || resource.isFluidEqual(controller.outputTank.getFluid())))
{
return master.outputTank.drain(resource.amount, doDrain);
return controller.outputTank.drain(resource.amount, doDrain);
}

return null;
Expand All @@ -56,9 +59,11 @@ public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrai
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{
if(master != null)
TileEntitySolarEvaporationController controller = getController();

if(controller != null)
{
return master.outputTank.drain(maxDrain, doDrain);
return controller.outputTank.drain(maxDrain, doDrain);
}

return null;
Expand All @@ -67,23 +72,27 @@ public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
return master != null && master.hasRecipe(fluid);
TileEntitySolarEvaporationController controller = getController();
return controller != null && controller.hasRecipe(fluid);
}

@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return master != null && master.outputTank.getFluidAmount() > 0;
TileEntitySolarEvaporationController controller = getController();
return controller != null && controller.outputTank.getFluidAmount() > 0;
}

@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{
if(master == null)
TileEntitySolarEvaporationController controller = getController();

if(controller == null)
{
return PipeUtils.EMPTY;
}

return new FluidTankInfo[] {new FluidTankInfo(master.inputTank), new FluidTankInfo(master.outputTank)};
return new FluidTankInfo[] {new FluidTankInfo(controller.inputTank), new FluidTankInfo(controller.outputTank)};
}
}

0 comments on commit e950c64

Please sign in to comment.