From f7c65883357289c5c49a04352a3de906e68d773f Mon Sep 17 00:00:00 2001 From: RSeifert Date: Sat, 2 Mar 2013 18:22:08 -0500 Subject: [PATCH] Corrected a possible pump connection issue --- .../common/machines/TileEntityPump.java | 418 +++++++++--------- .../machines/pipes/TileEntityNewPipes.java | 11 +- 2 files changed, 224 insertions(+), 205 deletions(-) diff --git a/src/minecraft/fluidmech/common/machines/TileEntityPump.java b/src/minecraft/fluidmech/common/machines/TileEntityPump.java index a25cff2cd..ca13f3493 100644 --- a/src/minecraft/fluidmech/common/machines/TileEntityPump.java +++ b/src/minecraft/fluidmech/common/machines/TileEntityPump.java @@ -32,232 +32,254 @@ import fluidmech.common.FluidMech; public class TileEntityPump extends TileEntityElectricityReceiver implements IPacketReceiver, IReadOut, IPsiCreator { - public final double WATTS_PER_TICK = (400/20); - double percentPumped = 0.0; - double joulesReceived = 0; + public final double WATTS_PER_TICK = (400 / 20); + double percentPumped = 0.0; + double joulesReceived = 0; - int disableTimer = 0; - int count = 0; - public int pos = 0; + int disableTimer = 0; + int count = 0; + public int pos = 0; - private boolean converted = false; - public ColorCode color = ColorCode.BLUE; + private boolean converted = false; + public ColorCode color = ColorCode.BLUE; - ForgeDirection back = ForgeDirection.EAST; - ForgeDirection side = ForgeDirection.EAST; + ForgeDirection back = ForgeDirection.EAST; + ForgeDirection side = ForgeDirection.EAST; - ITankContainer fillTarget = null; + ITankContainer fillTarget = null; - @Override - public void initiate() - { - this.getConnections(); - ElectricityConnections.registerConnector(this, EnumSet.of(back, side)); - this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, FluidMech.blockMachine.blockID); - } + @Override + public void initiate() + { + this.getConnections(); + ElectricityConnections.registerConnector(this, EnumSet.of(back, side)); + this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, FluidMech.blockMachine.blockID); + } - public void getConnections() - { - int notchMeta = MetaGroup.getFacingMeta(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)); - back = ForgeDirection.getOrientation(notchMeta); - side = Vector3.getOrientationFromSide(back, ForgeDirection.WEST); - if (notchMeta == 2 || notchMeta == 3) - { - side = side.getOpposite(); - } - } + public void getConnections() + { + int notchMeta = MetaGroup.getFacingMeta(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)); + back = ForgeDirection.getOrientation(notchMeta); + side = Vector3.getOrientationFromSide(back, ForgeDirection.WEST); + if (notchMeta == 2 || notchMeta == 3) + { + side = side.getOpposite(); + } + } - @Override - public void onDisable(int duration) - { - disableTimer = duration; - } + @Override + public void onDisable(int duration) + { + disableTimer = duration; + } - @Override - public boolean isDisabled() - { - if (disableTimer <= 0) { return false; } - return true; - } + @Override + public boolean isDisabled() + { + if (disableTimer <= 0) + { + return false; + } + return true; + } - @Override - public void updateEntity() - { - super.updateEntity(); + @Override + public void updateEntity() + { + super.updateEntity(); - if (!this.worldObj.isRemote) - { - // consume/give away stored units - this.chargeUp(); - TileEntity ent = worldObj.getBlockTileEntity(xCoord+side.offsetX,yCoord+side.offsetY,zCoord+side.offsetZ); - if(ent instanceof ITankContainer) - { - this.fillTarget = (ITankContainer) ent; - }else - { - ent = null; - } - if (this.canPump(xCoord, yCoord - 1, zCoord) && this.joulesReceived >= this.WATTS_PER_TICK) - { + if (!this.worldObj.isRemote) + { + // consume/give away stored units + this.chargeUp(); - joulesReceived -= this.WATTS_PER_TICK; - this.pos++; - if (pos >= 8) - { - pos = 0; - } - if (percentPumped++ >= 10) - { - percentPumped = 0; - this.drainBlock(new Vector3(xCoord, yCoord - 1, zCoord)); - } - } - } + TileEntity ent = worldObj.getBlockTileEntity(xCoord + side.offsetX, yCoord + side.offsetY, zCoord + side.offsetZ); - if (!this.worldObj.isRemote) - { - if (this.ticks % 10 == 0) - { - //TODO fix this to tell the client its running - Packet packet = PacketManager.getPacket(FluidMech.CHANNEL, this, color.ordinal(),this.joulesReceived); - PacketManager.sendPacketToClients(packet, worldObj, new Vector3(this), 60); - } - } - } + if (ent instanceof ITankContainer) + { + this.fillTarget = (ITankContainer) ent; + } + else + { + ent = 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 0: - case 1: - return 1; - case 2: - return 20; - case 3: - return 50; - } - return 1; - } + if (this.canPump(xCoord, yCoord - 1, zCoord) && this.joulesReceived >= this.WATTS_PER_TICK) + { - /** - * causes this to request/drain energy from connected networks - */ - public void chargeUp() - { - // this.joulesReceived += this.WATTS_PER_TICK; //TODO remove after - // testing - int notchMeta = MetaGroup.getFacingMeta(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)); - ForgeDirection facing = ForgeDirection.getOrientation(notchMeta).getOpposite(); + joulesReceived -= this.WATTS_PER_TICK; + this.pos++; + if (pos >= 8) + { + pos = 0; + } + if (percentPumped++ >= 10) + { + percentPumped = 0; + this.drainBlock(new Vector3(xCoord, yCoord - 1, zCoord)); + } + } + } - for (int i = 2; i < 6; i++) - { - ForgeDirection dir = ForgeDirection.getOrientation(i); - if (dir == this.back || dir == this.side) - { - TileEntity inputTile = Vector3.getTileEntityFromSide(this.worldObj, new Vector3(this), dir); - ElectricityNetwork network = ElectricityNetwork.getNetworkFromTileEntity(inputTile, dir); - if (network != null) - { + if (!this.worldObj.isRemote) + { + if (this.ticks % 10 == 0) + { + // TODO fix this to tell the client its running + Packet packet = PacketManager.getPacket(FluidMech.CHANNEL, this, color.ordinal(), this.joulesReceived); + PacketManager.sendPacketToClients(packet, worldObj, new Vector3(this), 60); + } + } + } - if (this.canPump(xCoord, yCoord - 1, zCoord)) - { - network.startRequesting(this, WATTS_PER_TICK / this.getVoltage(), this.getVoltage()); - this.joulesReceived = Math.max(Math.min(this.joulesReceived + network.consumeElectricity(this).getWatts(), WATTS_PER_TICK), 0); - } - else - { - network.stopRequesting(this); - } - } - } - } - } + /** + * 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 0: + case 1: + return 1; + case 2: + return 20; + case 3: + return 50; + } + return 1; + } - public boolean canPump(int x, int y, int z) - { - int blockID = worldObj.getBlockId(x, y, z); - int meta = worldObj.getBlockMetadata(x, y, z); - LiquidData resource = LiquidHandler.getFromBlockID(blockID); + /** + * causes this to request/drain energy from connected networks + */ + public void chargeUp() + { + // this.joulesReceived += this.WATTS_PER_TICK; //TODO remove after + // testing + int notchMeta = MetaGroup.getFacingMeta(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)); + ForgeDirection facing = ForgeDirection.getOrientation(notchMeta).getOpposite(); - if (this.fillTarget == null || this.fillTarget.fill(side, this.color.getLiquidData().getStack(), false) == 0) { return false; } + for (int i = 2; i < 6; i++) + { + ForgeDirection dir = ForgeDirection.getOrientation(i); + if (dir == this.back || dir == this.side) + { + TileEntity inputTile = Vector3.getTileEntityFromSide(this.worldObj, new Vector3(this), dir); + ElectricityNetwork network = ElectricityNetwork.getNetworkFromTileEntity(inputTile, dir); + if (network != null) + { - if (this.isDisabled()) { return false; } + if (this.canPump(xCoord, yCoord - 1, zCoord)) + { + network.startRequesting(this, WATTS_PER_TICK / this.getVoltage(), this.getVoltage()); + this.joulesReceived = Math.max(Math.min(this.joulesReceived + network.consumeElectricity(this).getWatts(), WATTS_PER_TICK), 0); + } + else + { + network.stopRequesting(this); + } + } + } + } + } - if ((LiquidHandler.getFromBlockID(worldObj.getBlockId(x, y, z)) == null || LiquidHandler.getFromBlockID(worldObj.getBlockId(x, y, z)) == LiquidHandler.unkown)) { return false; } + public boolean canPump(int x, int y, int z) + { + int blockID = worldObj.getBlockId(x, y, z); + int meta = worldObj.getBlockMetadata(x, y, z); + LiquidData resource = LiquidHandler.getFromBlockID(blockID); - if (blockID == Block.waterMoving.blockID || blockID == Block.lavaStill.blockID) { return false; } - if (blockID == Block.waterStill.blockID || blockID == Block.waterStill.blockID) - { + if (this.fillTarget == null || this.fillTarget.fill(side, this.color.getLiquidData().getStack(), false) == 0) + { + return false; + } - } - return true; - } + if (this.isDisabled()) + { + return false; + } - /** - * drains the block or in other words removes it - * - * @param loc - * @return true if the block was drained - */ - public boolean drainBlock(Vector3 loc) - { - int blockID = worldObj.getBlockId(loc.intX(), loc.intY(), loc.intZ()); - int meta = worldObj.getBlockMetadata(loc.intX(), loc.intY(), loc.intZ()); - LiquidData resource = LiquidHandler.getFromBlockID(blockID); - if (resource == color.getLiquidData() && meta == 0 && this.fillTarget.fill(back, resource.getStack(), false) != 0) - { + if ((LiquidHandler.getFromBlockID(worldObj.getBlockId(x, y, z)) == null || LiquidHandler.getFromBlockID(worldObj.getBlockId(x, y, z)) == LiquidHandler.unkown)) + { + return false; + } - LiquidStack stack = resource.getStack(); - stack.amount = LiquidContainerRegistry.BUCKET_VOLUME; - int f = this.fillTarget.fill(back, this.color.getLiquidData().getStack(), true); - if (f > 0) - { - worldObj.setBlockWithNotify(xCoord, yCoord - 1, zCoord, 0); - return true; - } - } + if (blockID == Block.waterMoving.blockID || blockID == Block.lavaStill.blockID) + { + return false; + } + if (blockID == Block.waterStill.blockID || blockID == Block.waterStill.blockID) + { - return false; - } + } + return true; + } - @Override - public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) - { - try - { - this.color = ColorCode.get(data.readInt()); - this.joulesReceived = data.readDouble(); - } - catch (Exception e) - { - e.printStackTrace(); - } + /** + * drains the block or in other words removes it + * + * @param loc + * @return true if the block was drained + */ + public boolean drainBlock(Vector3 loc) + { + int blockID = worldObj.getBlockId(loc.intX(), loc.intY(), loc.intZ()); + int meta = worldObj.getBlockMetadata(loc.intX(), loc.intY(), loc.intZ()); + LiquidData resource = LiquidHandler.getFromBlockID(blockID); + + if (resource == color.getLiquidData() && meta == 0 && this.fillTarget.fill(back, resource.getStack(), false) != 0) + { - } - @Override - public String getMeterReading(EntityPlayer user, ForgeDirection side) - { - return this.joulesReceived + "/" + this.WATTS_PER_TICK + " " + this.percentPumped; - } + LiquidStack stack = resource.getStack(); + stack.amount = LiquidContainerRegistry.BUCKET_VOLUME; + int f = this.fillTarget.fill(back, this.color.getLiquidData().getStack(), true); + if (f > 0) + { + worldObj.setBlockWithNotify(xCoord, yCoord - 1, zCoord, 0); + return true; + } + } - @Override - public int getPressureOut(LiquidData type, ForgeDirection dir) - { - if (type == this.color.getLiquidData() || type == LiquidHandler.unkown) - return this.color.getLiquidData().getPressure(); - return 0; - } + return false; + } - @Override - public boolean getCanPressureTo(LiquidData type, ForgeDirection dir) - { - if (dir == this.side.getOpposite() && (type == this.color.getLiquidData() || type == LiquidHandler.unkown)) { return true; } - return false; - } + @Override + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) + { + try + { + this.color = ColorCode.get(data.readInt()); + this.joulesReceived = data.readDouble(); + } + catch (Exception e) + { + e.printStackTrace(); + } + + } + + @Override + public String getMeterReading(EntityPlayer user, ForgeDirection side) + { + return this.joulesReceived + "/" + this.WATTS_PER_TICK + " " + this.percentPumped; + } + + @Override + public int getPressureOut(LiquidData type, ForgeDirection dir) + { + if (type != null && this.color.isValidLiquid(type.getStack())) + { + return type.getPressure(); + } + return 0; + } + + @Override + public boolean getCanPressureTo(LiquidData type, ForgeDirection dir) + { + return dir == this.side.getOpposite() && this.color.isValidLiquid(type.getStack()); + } } diff --git a/src/minecraft/fluidmech/common/machines/pipes/TileEntityNewPipes.java b/src/minecraft/fluidmech/common/machines/pipes/TileEntityNewPipes.java index a21686ffe..a71aedfbb 100644 --- a/src/minecraft/fluidmech/common/machines/pipes/TileEntityNewPipes.java +++ b/src/minecraft/fluidmech/common/machines/pipes/TileEntityNewPipes.java @@ -1,20 +1,17 @@ package fluidmech.common.machines.pipes; -import com.google.common.io.ByteArrayDataInput; - -import hydraulic.core.implement.ColorCode; -import hydraulic.core.prefab.TileEntityFluidConveyor; import fluidmech.common.FluidMech; +import hydraulic.core.implement.ColorCode; +import hydraulic.prefab.TileEntityFluidConveyor; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.liquids.LiquidContainerData; import net.minecraftforge.liquids.LiquidContainerRegistry; import net.minecraftforge.liquids.LiquidStack; -import universalelectricity.prefab.tile.TileEntityConductor; -import basiccomponents.common.BCLoader; + +import com.google.common.io.ByteArrayDataInput; public class TileEntityNewPipes extends TileEntityFluidConveyor {