Cleaned up errors in pumps

Need to check these later too see if they actually function at all
This commit is contained in:
DarkGuardsman 2013-07-09 22:17:51 -04:00
parent e096748451
commit 6f0411f1fe
3 changed files with 90 additions and 128 deletions

View file

@ -74,7 +74,7 @@ public class LiquidPathFinder
int id = node.getBlockID(world); int id = node.getBlockID(world);
int meta = node.getBlockID(world); int meta = node.getBlockID(world);
if (this.fill && (id == 0 || (FluidHelper.getLiquidFromBlockId(id) != null && meta != 0))) if (this.fill && (id == 0 || (FluidHelper.getBlockFluidStack(id) != null && meta != 0)))
{ {
this.results.add(node); this.results.add(node);
} }
@ -136,11 +136,11 @@ public class LiquidPathFinder
int blockID = pos.getBlockID(world); int blockID = pos.getBlockID(world);
if (!this.fill) if (!this.fill)
{ {
return FluidHelper.getLiquidFromBlockId(pos.getBlockID(world)) != null; return FluidHelper.getBlockFluidStack(pos.getBlockID(world)) != null;
} }
else else
{ {
return FluidHelper.getLiquidFromBlockId(pos.getBlockID(world)) != null || (blockID == 0 && FluidHelper.getConnectedSources(world, pos) > 0); return FluidHelper.getBlockFluidStack(pos.getBlockID(world)) != null || (blockID == 0 && FluidHelper.getConnectedSources(world, pos) > 0);
} }
} }

View file

@ -12,7 +12,10 @@ import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import universalelectricity.core.vector.Vector2; import universalelectricity.core.vector.Vector2;
import universalelectricity.core.vector.Vector3; import universalelectricity.core.vector.Vector3;
@ -97,16 +100,16 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
{ {
this.getNextFluidBlock(); this.getNextFluidBlock();
} }
for (Entry<TileEntity, LiquidStack> request : requestMap.entrySet()) for (Entry<TileEntity, FluidStack> request : requestMap.entrySet())
{ {
if (this.currentWorldEdits >= MAX_WORLD_EDITS_PER_PROCESS) if (this.currentWorldEdits >= MAX_WORLD_EDITS_PER_PROCESS)
{ {
break; break;
} }
if (request.getKey() instanceof ITankContainer) if (request.getKey() instanceof IFluidHandler)
{ {
ITankContainer tank = (ITankContainer) request.getKey(); IFluidHandler tank = (IFluidHandler) request.getKey();
Vector3[] sortedList = this.sortedDrainList(); Vector3[] sortedList = this.sortedDrainList();
@ -118,20 +121,20 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
{ {
break; break;
} }
FluidStack stack = FluidHelper.drainBlock(this.worldObj, loc, false);
if (FluidHelper.isSourceBlock(this.worldObj, loc)) if (stack != null)
{ {
/* GET STACKS */ /* GET STACKS */
LiquidStack stack = FluidHelper.getLiquidFromBlockId(loc.getBlockID(this.worldObj));
LiquidStack requestStack = request.getValue();
if (stack != null && requestStack != null && (requestStack.isLiquidEqual(stack) || requestStack.itemID == -1)) FluidStack requestStack = request.getValue();
if (stack != null && requestStack != null && (requestStack.isFluidEqual(stack) || requestStack.getFluid().getBlockID() == -111))
{ {
if (tank.fill(0, stack, false) > 0) if (tank.fill(ForgeDirection.UNKNOWN, stack, false) > FluidContainerRegistry.BUCKET_VOLUME)
{ {
/* EDIT REQUEST IN MAP */ /* EDIT REQUEST IN MAP */
int requestAmmount = requestStack.amount - tank.fill(0, stack, true); int requestAmmount = requestStack.amount - tank.fill(ForgeDirection.UNKNOWN, stack, true);
if (requestAmmount <= 0) if (requestAmmount <= 0)
{ {
this.requestMap.remove(request); this.requestMap.remove(request);
@ -148,7 +151,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
} }
/* REMOVE BLOCK */ /* REMOVE BLOCK */
loc.setBlock(this.worldObj, 0, 0, 2); FluidHelper.drainBlock(this.worldObj, loc, true);
this.currentWorldEdits++; this.currentWorldEdits++;
} }
} }
@ -197,7 +200,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
while (requests.hasNext()) while (requests.hasNext())
{ {
Entry<TileEntityConstructionPump, LiquidStack> entry = (Entry<TileEntityConstructionPump, LiquidStack>) requests.next(); Entry<TileEntityConstructionPump, FluidStack> entry = (Entry<TileEntityConstructionPump, FluidStack>) requests.next();
TileEntity entity = entry.getKey(); TileEntity entity = entry.getKey();
if (entity == null) if (entity == null)
{ {
@ -224,7 +227,7 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
while (targetIt.hasNext()) while (targetIt.hasNext())
{ {
Vector3 vec = targetIt.next(); Vector3 vec = targetIt.next();
if (!FluidHelper.isSourceBlock(this.worldObj, vec)) if (FluidHelper.drainBlock(this.worldObj, vec, false) == null)
{ {
targetIt.remove(); targetIt.remove();
} }
@ -304,42 +307,20 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
} }
@Override @Override
public int fillArea(LiquidStack resource, boolean doFill) public int fillArea(FluidStack resource, boolean doFill)
{ {
int drained = 0; int drained = 0;
if (!this.canDrainSources() && this.currentWorldEdits < MAX_WORLD_EDITS_PER_PROCESS) if (!this.canDrainSources() && this.currentWorldEdits < MAX_WORLD_EDITS_PER_PROCESS)
{ {
/* ID LIQUID BLOCK AND SET VARS FOR BLOCK PLACEMENT */ /* ID LIQUID BLOCK AND SET VARS FOR BLOCK PLACEMENT */
if (resource == null || resource.amount < LiquidContainerRegistry.BUCKET_VOLUME) if (resource == null || resource.amount < FluidContainerRegistry.BUCKET_VOLUME)
{ {
return 0; return 0;
} }
int blockID = resource.itemID; int blockID = resource.getFluid().getBlockID();
int meta = resource.itemMeta; int blocks = (resource.amount / FluidContainerRegistry.BUCKET_VOLUME);
if (resource.itemID == Block.waterStill.blockID)
{
blockID = Block.waterStill.blockID;
meta = 0;
}
else if (resource.itemID != Block.lavaStill.blockID)
{
blockID = Block.lavaStill.blockID;
meta = 0;
}
else if (Block.blocksList[resource.itemID] instanceof ILiquid)
{
ILiquid liquidBlock = (ILiquid) Block.blocksList[resource.itemID];
blockID = liquidBlock.stillLiquidId();
meta = liquidBlock.stillLiquidMeta();
}
else
{
return 0;
}
int blocks = (resource.amount / LiquidContainerRegistry.BUCKET_VOLUME);
/* FIND ALL VALID BLOCKS ON LEVEL OR BELLOW */ /* FIND ALL VALID BLOCKS ON LEVEL OR BELLOW */
final Vector3 faceVec = new Vector3(this.xCoord + this.getFacing().offsetX, this.yCoord + this.getFacing().offsetY, this.zCoord + this.getFacing().offsetZ); final Vector3 faceVec = new Vector3(this.xCoord + this.getFacing().offsetX, this.yCoord + this.getFacing().offsetY, this.zCoord + this.getFacing().offsetZ);
@ -389,14 +370,14 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
{ {
break; break;
} }
LiquidStack stack = FluidHelper.getLiquidFromBlockId(loc.getBlockID(worldObj)); Fluid stack = FluidHelper.getFluidFromBlockID(loc.getBlockID(worldObj));
if (stack != null && stack.isLiquidEqual(resource) && loc.getBlockMetadata(worldObj) != 0) if (stack != null && stack.getBlockID() == blockID && loc.getBlockMetadata(worldObj) != 0)
{ {
drained += LiquidContainerRegistry.BUCKET_VOLUME; drained += FluidContainerRegistry.BUCKET_VOLUME;
blocks--; blocks--;
if (doFill) if (doFill)
{ {
loc.setBlock(worldObj, blockID, meta); loc.setBlock(worldObj, blockID, 0);
this.currentWorldEdits++; this.currentWorldEdits++;
if (!this.updateQue.contains(loc)) if (!this.updateQue.contains(loc))
{ {
@ -415,11 +396,11 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
} }
if (loc.getBlockID(worldObj) == 0) if (loc.getBlockID(worldObj) == 0)
{ {
drained += LiquidContainerRegistry.BUCKET_VOLUME; drained += FluidContainerRegistry.BUCKET_VOLUME;
blocks--; blocks--;
if (doFill) if (doFill)
{ {
loc.setBlock(worldObj, blockID, meta); loc.setBlock(worldObj, blockID, 0);
this.currentWorldEdits++; this.currentWorldEdits++;
if (!this.updateQue.contains(loc)) if (!this.updateQue.contains(loc))
{ {
@ -439,9 +420,9 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
} }
@Override @Override
public void requestLiquid(TileEntity pump, LiquidStack stack) public void requestLiquid(TileEntity pump, Fluid fluid, int amount)
{ {
this.requestMap.put(pump, stack); this.requestMap.put(pump, new FluidStack(-111, amount));
} }
@Override @Override
@ -462,19 +443,9 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
} }
@Override @Override
public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{ {
if (this.canDrainSources()) if (this.canDrainSources() || resource == null)
{
return 0;
}
return this.fill(0, resource, doFill);
}
@Override
public int fill(int tankIndex, LiquidStack resource, boolean doFill)
{
if (resource == null || tankIndex != 0)
{ {
return 0; return 0;
} }
@ -482,29 +453,32 @@ public class TileEntityDrain extends TileEntityFluidDevice implements IFluidHand
} }
@Override @Override
public LiquidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{
if (from != this.getFacing().getOpposite())
{ {
// TODO Auto-generated method stub
return null; return null;
} }
return this.drain(0, maxDrain, doDrain);
}
@Override @Override
public LiquidStack drain(int tankIndex, int maxDrain, boolean doDrain) public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{ {
return null; return null;
} }
@Override @Override
public ILiquidTank[] getTanks(ForgeDirection direction) public boolean canFill(ForgeDirection from, Fluid fluid)
{ {
return null; return this.getFacing() == from;
} }
@Override @Override
public ILiquidTank getTank(ForgeDirection direction, LiquidStack type) public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return false;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{ {
return null; return null;
} }

View file

@ -5,10 +5,9 @@ import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.liquids.ITankContainer; import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.liquids.LiquidContainerRegistry; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.liquids.LiquidStack; import net.minecraftforge.fluids.IFluidHandler;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.vector.Vector3; import universalelectricity.core.vector.Vector3;
import universalelectricity.core.vector.VectorHelper; import universalelectricity.core.vector.VectorHelper;
import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.IPacketReceiver;
@ -17,9 +16,8 @@ import com.google.common.io.ByteArrayDataInput;
import dark.core.api.ColorCode; import dark.core.api.ColorCode;
import dark.core.api.IColorCoded; import dark.core.api.IColorCoded;
import dark.core.api.IToolReadOut;
import dark.core.api.ITileConnector; import dark.core.api.ITileConnector;
import dark.core.api.IToolReadOut.EnumTools; import dark.core.api.IToolReadOut;
import dark.core.hydraulic.helpers.FluidHelper; import dark.core.hydraulic.helpers.FluidHelper;
import dark.core.hydraulic.helpers.FluidRestrictionHandler; import dark.core.hydraulic.helpers.FluidRestrictionHandler;
import dark.helpers.MetaGroup; import dark.helpers.MetaGroup;
@ -27,7 +25,7 @@ import dark.library.machine.TileEntityRunnableMachine;
public class TileEntityStarterPump extends TileEntityRunnableMachine implements IPacketReceiver, IToolReadOut, ITileConnector public class TileEntityStarterPump extends TileEntityRunnableMachine implements IPacketReceiver, IToolReadOut, ITileConnector
{ {
public final double WATTS_PER_TICK = (400 / 20); public final static float WATTS_PER_TICK = 20;
private double percentPumped = 0.0; private double percentPumped = 0.0;
public int pos = 0; public int pos = 0;
@ -37,6 +35,12 @@ public class TileEntityStarterPump extends TileEntityRunnableMachine implements
ForgeDirection wireConnection = ForgeDirection.EAST; ForgeDirection wireConnection = ForgeDirection.EAST;
ForgeDirection pipeConnection = ForgeDirection.EAST; ForgeDirection pipeConnection = ForgeDirection.EAST;
public TileEntityStarterPump()
{
super(20);
// TODO Auto-generated constructor stub
}
/** gets the side connection for the wire and pipe */ /** gets the side connection for the wire and pipe */
public void getConnections() public void getConnections()
{ {
@ -66,9 +70,8 @@ public class TileEntityStarterPump extends TileEntityRunnableMachine implements
if (!this.worldObj.isRemote && !this.isDisabled()) if (!this.worldObj.isRemote && !this.isDisabled())
{ {
if (this.canPump(xCoord, yCoord - 1, zCoord) && this.wattsReceived >= this.WATTS_PER_TICK) if (this.canPump(new Vector3(xCoord, yCoord - 1, zCoord)) && this.canRun())
{ {
wattsReceived -= this.WATTS_PER_TICK;
if (percentPumped < 10) if (percentPumped < 10)
{ {
percentPumped++; percentPumped++;
@ -101,7 +104,6 @@ public class TileEntityStarterPump extends TileEntityRunnableMachine implements
try try
{ {
this.color = ColorCode.get(data.readInt()); this.color = ColorCode.get(data.readInt());
this.wattsReceived = data.readDouble();
} }
catch (Exception e) catch (Exception e)
{ {
@ -110,35 +112,8 @@ public class TileEntityStarterPump extends TileEntityRunnableMachine implements
} }
/** gets the fluidConductor or storageTank to ouput its pumped liquids too if there is not one it
* will not function */
public ITankContainer getFillTarget()
{
TileEntity ent = worldObj.getBlockTileEntity(xCoord + pipeConnection.offsetX, yCoord + pipeConnection.offsetY, zCoord + pipeConnection.offsetZ);
if (ent instanceof ITankContainer)
{
return (ITankContainer) ent;
}
return null;
}
/** gets the search range the pump used to find valid block to pump */
public int getPumpRange()
{
int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord);
switch (MetaGroup.getGrouping(meta))
{
case 2:
return 20;
case 3:
return 50;
}
return 1;
}
@Override @Override
public double getRequest(ForgeDirection side) public float getRequest(ForgeDirection side)
{ {
return this.WATTS_PER_TICK; return this.WATTS_PER_TICK;
} }
@ -147,9 +122,10 @@ public class TileEntityStarterPump extends TileEntityRunnableMachine implements
* *
* @param x y z - location of the block, use the tileEntities world * @param x y z - location of the block, use the tileEntities world
* @return true if it can pump */ * @return true if it can pump */
boolean canPump(int x, int y, int z) boolean canPump(Vector3 vec)
{ {
return getFillTarget() != null && FluidHelper.getLiquidId(worldObj.getBlockId(x, y, z)) != -1 && worldObj.getBlockMetadata(x, y, z) == 0; FluidStack stack = FluidHelper.drainBlock(this.worldObj, vec, false);
return stack != null;
} }
/** drains the block(removes) at the location given /** drains the block(removes) at the location given
@ -158,40 +134,52 @@ public class TileEntityStarterPump extends TileEntityRunnableMachine implements
* @return true if the block was drained */ * @return true if the block was drained */
boolean drainBlock(Vector3 loc) boolean drainBlock(Vector3 loc)
{ {
int blockID = worldObj.getBlockId(loc.intX(), loc.intY(), loc.intZ()); FluidStack stack = FluidHelper.drainBlock(this.worldObj, loc, false);
if (FluidRestrictionHandler.isValidLiquid(color, stack.getFluid()) && this.fillAroundTile(stack, false) >= FluidContainerRegistry.BUCKET_VOLUME)
LiquidStack stack = FluidHelper.getLiquidFromBlockId(blockID);
if (FluidRestrictionHandler.isValidLiquid(color, stack) && getFillTarget() != null)
{ {
stack.amount = LiquidContainerRegistry.BUCKET_VOLUME; return this.fillAroundTile(FluidHelper.drainBlock(this.worldObj, loc, true), true) > 0;
int fillAmmount = getFillTarget().fill(pipeConnection.getOpposite(), stack, true);
if (fillAmmount > 0)
{
worldObj.setBlockMetadataWithNotify(xCoord, yCoord - 1, zCoord, 0, 0);
return true;
} }
}
return false; return false;
} }
public int fillAroundTile(FluidStack stack, boolean doFill)
{
if (stack != null && stack.getFluid() != null)
{
int amount = stack.amount;
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
{
TileEntity entity = new Vector3(this).modifyPositionFromSide(direction).getTileEntity(this.worldObj);
if (direction != ForgeDirection.DOWN && entity instanceof IFluidHandler)
{
amount -= ((IFluidHandler) entity).fill(direction.getOpposite(), FluidHelper.getStack(stack, amount), doFill);
}
if (amount <= 0)
{
break;
}
}
return amount;
}
return 0;
}
@Override @Override
public String getMeterReading(EntityPlayer user, ForgeDirection side, EnumTools tool) public String getMeterReading(EntityPlayer user, ForgeDirection side, EnumTools tool)
{ {
return String.format("%.2f/%.2f %f Done", this.wattsReceived, this.WATTS_PER_TICK, this.percentPumped); return String.format("%.2f/%.2f %f Done", this.getEnergyStored(), this.getMaxEnergyStored(), this.percentPumped);
} }
@Override @Override
public boolean canConnect(ForgeDirection direction) public boolean canConnect(ForgeDirection direction)
{ {
return direction == wireConnection; return direction != ForgeDirection.DOWN;
} }
@Override @Override
public boolean canTileConnect(TileEntity entity, ForgeDirection dir) public boolean canTileConnect(TileEntity entity, ForgeDirection dir)
{ {
if (dir == this.pipeConnection.getOpposite() && entity instanceof ITankContainer) if (dir == this.pipeConnection.getOpposite() && entity instanceof IFluidHandler)
{ {
return entity != null && entity instanceof IColorCoded && (((IColorCoded) entity).getColor() == ColorCode.NONE || ((IColorCoded) entity).getColor() == this.color); return entity != null && entity instanceof IColorCoded && (((IColorCoded) entity).getColor() == ColorCode.NONE || ((IColorCoded) entity).getColor() == this.color);
} }