Fixed pump crash and power issues
This commit is contained in:
parent
c9967983e1
commit
2ffcabd410
4 changed files with 78 additions and 60 deletions
|
@ -13,10 +13,10 @@ import net.minecraftforge.liquids.LiquidTank;
|
|||
import universalelectricity.core.electricity.ElectricityPack;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import universalelectricity.core.vector.VectorHelper;
|
||||
import universalelectricity.prefab.tile.TileEntityElectricityRunnable;
|
||||
import dark.library.helpers.MetaGroup;
|
||||
import dark.library.machine.TileEntityRunnableMachine;
|
||||
|
||||
public class TileEntityConstructionPump extends TileEntityElectricityRunnable implements ITankContainer, IPipeConnection
|
||||
public class TileEntityConstructionPump extends TileEntityRunnableMachine implements ITankContainer, IPipeConnection
|
||||
{
|
||||
/* ENERGY PER TICK TO TRY TO PUMP */
|
||||
public static final double WATTS_PER_TICK = 100;
|
||||
|
@ -121,9 +121,9 @@ public class TileEntityConstructionPump extends TileEntityElectricityRunnable im
|
|||
TileEntity entity = VectorHelper.getTileEntityFromSide(this.worldObj, new Vector3(this), getFacing(false));
|
||||
if (entity instanceof ITankContainer)
|
||||
{
|
||||
return ((ITankContainer) entity).fill(getFacing(false).getOpposite(), resource, doFill);
|
||||
//return ((ITankContainer) entity).fill(getFacing(false).getOpposite(), resource, doFill);
|
||||
}
|
||||
return 0;
|
||||
return resource.amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -37,13 +37,21 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
|
||||
private List<Vector3> targetSources = new ArrayList<Vector3>();
|
||||
private List<Vector3> updateQue = new ArrayList<Vector3>();
|
||||
private LiquidPathFinder pathFinder = new LiquidPathFinder(this.worldObj, false, TileEntityDrain.MAX_WORLD_EDITS_PER_PROCESS * 2);
|
||||
private LiquidPathFinder pathFinder;
|
||||
|
||||
@Override
|
||||
public String getMeterReading(EntityPlayer user, ForgeDirection side)
|
||||
{
|
||||
return "Set to " + (canDrainSources() ? "input liquids" : "output liquids");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate()
|
||||
{
|
||||
super.invalidate();
|
||||
pathFinder = new LiquidPathFinder(this.worldObj, false, TileEntityDrain.MAX_WORLD_EDITS_PER_PROCESS * 2);
|
||||
}
|
||||
|
||||
public boolean canDrainSources()
|
||||
{
|
||||
int meta = 0;
|
||||
|
@ -71,6 +79,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
@Override
|
||||
public void updateEntity()
|
||||
{
|
||||
super.updateEntity();
|
||||
/* MAIN LOGIC PATH FOR DRAINING BODIES OF LIQUID */
|
||||
if (!this.worldObj.isRemote && this.ticks % 30 == 0)
|
||||
{
|
||||
|
@ -94,7 +103,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
Iterator<Vector3> it = this.targetSources.iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
Vector3 loc = (Vector3) it.next();
|
||||
Vector3 loc = it.next();
|
||||
if (this.currentWorldEdits >= MAX_WORLD_EDITS_PER_PROCESS)
|
||||
{
|
||||
break;
|
||||
|
@ -147,6 +156,10 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
*/
|
||||
public void getNextFluidBlock()
|
||||
{
|
||||
if (pathFinder == null)
|
||||
{
|
||||
pathFinder = new LiquidPathFinder(this.worldObj, false, TileEntityDrain.MAX_WORLD_EDITS_PER_PROCESS * 2);
|
||||
}
|
||||
pathFinder.reset();
|
||||
pathFinder.init(new Vector3(this.xCoord + this.getFacing().offsetX, this.yCoord + this.getFacing().offsetY, this.zCoord + this.getFacing().offsetZ));
|
||||
// System.out.println("Nodes:" + pathFinder.nodes.size() + "Results:" +
|
||||
|
@ -157,6 +170,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void doCleanup()
|
||||
{
|
||||
/* CALL UPDATE ON EDITED BLOCKS */
|
||||
|
@ -166,7 +180,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
int up = 0;
|
||||
while (pp.hasNext() && up < TileEntityDrain.MAX_WORLD_EDITS_PER_PROCESS)
|
||||
{
|
||||
Vector3 vec = (Vector3) pp.next();
|
||||
Vector3 vec = pp.next();
|
||||
worldObj.notifyBlockChange(vec.intX(), vec.intY(), vec.intZ(), vec.getBlockID(this.worldObj));
|
||||
worldObj.notifyBlockOfNeighborChange(vec.intX(), vec.intY(), vec.intZ(), vec.getBlockID(this.worldObj));
|
||||
pp.remove();
|
||||
|
@ -195,10 +209,10 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
}
|
||||
}
|
||||
/* CLEANUP TARGET LIST AND REMOVE INVALID SOURCES */
|
||||
Iterator mn = this.targetSources.iterator();
|
||||
Iterator<Vector3> mn = this.targetSources.iterator();
|
||||
while (mn.hasNext())
|
||||
{
|
||||
Vector3 vec = (Vector3) mn.next();
|
||||
Vector3 vec = mn.next();
|
||||
if (!FluidHelper.isSourceBlock(this.worldObj, vec))
|
||||
{
|
||||
mn.remove();
|
||||
|
@ -219,20 +233,20 @@ public class TileEntityDrain extends TileEntityFluidDevice implements ITankConta
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
Vector3 a = (Vector3) o1;
|
||||
Vector3 b = (Vector3) o2;
|
||||
double da = Vector3.distance(a, faceVec);
|
||||
double db = Vector3.distance(b, faceVec);
|
||||
;
|
||||
if (a.equals(b))
|
||||
Vector3 first = (Vector3) o1;
|
||||
Vector3 second = (Vector3) o2;
|
||||
double firstDistance = Vector3.distance(first, faceVec);
|
||||
double secondDistance = Vector3.distance(second, faceVec);
|
||||
if (first.equals(second))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (Integer.compare(b.intY(), a.intY()) != 0)
|
||||
int cc = Integer.compare(second.intY(), first.intY());
|
||||
if (cc != 0)
|
||||
{
|
||||
return Integer.compare(b.intY(), a.intY());
|
||||
return cc;
|
||||
}
|
||||
return Double.compare(da, db);
|
||||
return Double.compare(secondDistance,firstDistance);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -17,13 +17,13 @@ import universalelectricity.core.electricity.ElectricityPack;
|
|||
import universalelectricity.core.vector.Vector3;
|
||||
import universalelectricity.core.vector.VectorHelper;
|
||||
import universalelectricity.prefab.network.IPacketReceiver;
|
||||
import universalelectricity.prefab.tile.TileEntityElectricityRunnable;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import dark.library.helpers.MetaGroup;
|
||||
import dark.library.machine.TileEntityRunnableMachine;
|
||||
|
||||
public class TileEntityStarterPump extends TileEntityElectricityRunnable implements IPacketReceiver, IReadOut, IPipeConnection
|
||||
public class TileEntityStarterPump extends TileEntityRunnableMachine implements IPacketReceiver, IReadOut, IPipeConnection
|
||||
{
|
||||
public final double WATTS_PER_TICK = (400 / 20);
|
||||
private double percentPumped = 0.0;
|
||||
|
|
|
@ -44,18 +44,17 @@ public class LiquidPathFinder
|
|||
/**
|
||||
* @return True on success finding, false on failure.
|
||||
*/
|
||||
public boolean findNodes(Vector3 node)
|
||||
public boolean findNodes(final Vector3 node)
|
||||
{
|
||||
try
|
||||
{
|
||||
Vector3 vec = node.clone();
|
||||
|
||||
this.nodes.add(node);
|
||||
Chunk chunk = this.world.getChunkFromBlockCoords(vec.intX(), vec.intZ());
|
||||
|
||||
if (!chunk.isChunkLoaded)
|
||||
if (chunk == null || !chunk.isChunkLoaded)
|
||||
{
|
||||
return true;
|
||||
}else
|
||||
{
|
||||
this.nodes.add(node);
|
||||
}
|
||||
|
||||
int id = node.getBlockID(world);
|
||||
|
@ -97,6 +96,11 @@ public class LiquidPathFinder
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue