rewrite fluid extraction pipe mechanics

This commit is contained in:
asiekierka 2015-04-05 14:44:03 +02:00
parent a6048f22a2
commit 9d93d515f0

View file

@ -18,7 +18,6 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
@ -29,21 +28,18 @@ import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.core.ISerializable;
import buildcraft.api.transport.IPipeTile;
import buildcraft.core.RFBattery;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportFluids;
public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergyHandler, ISerializable {
private static final int ENERGY_MULTIPLIER = 50;
public int liquidToExtract;
protected int standardIconIndex = PipeIconProvider.TYPE.PipeFluidsWood_Standard.ordinal();
protected int solidIconIndex = PipeIconProvider.TYPE.PipeAllWood_Solid.ordinal();
private long lastMining = 0;
private boolean lastPower = false;
private RFBattery battery = new RFBattery(2500, 1000, 0);
private PipeLogicWood logic = new PipeLogicWood(this) {
@Override
protected boolean isValidConnectingTile(TileEntity tile) {
@ -81,42 +77,28 @@ public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergy
super.initialize();
}
private TileEntity getConnectingTile() {
int meta = container.getBlockMetadata();
return meta >= 6 ? null : container.getTile(ForgeDirection.getOrientation(meta));
}
@Override
public void updateEntity() {
super.updateEntity();
int meta = container.getBlockMetadata();
if (meta >= 6) {
battery.setEnergy(0);
liquidToExtract = 0;
if (liquidToExtract == 0) {
return;
}
if (liquidToExtract > 0 && meta < 6) {
ForgeDirection side = ForgeDirection.getOrientation(meta);
TileEntity tile = container.getTile(side);
TileEntity tile = getConnectingTile();
if (tile instanceof IFluidHandler) {
liquidToExtract -= Math.min(10, extractFluid((IFluidHandler) tile, side));
} else {
liquidToExtract -= 10;
}
if (liquidToExtract < 0) {
if (tile == null || !(tile instanceof IFluidHandler)) {
liquidToExtract = 0;
}
}
} else {
extractFluid((IFluidHandler) tile, ForgeDirection.getOrientation(container.getBlockMetadata()));
if (battery.useEnergy(10, 10, false) > 0) {
TileEntity tile = container.getTile(ForgeDirection
.getOrientation(meta));
if (tile instanceof IFluidHandler) {
if (liquidToExtract <= FluidContainerRegistry.BUCKET_VOLUME) {
liquidToExtract += FluidContainerRegistry.BUCKET_VOLUME;
}
}
// We always subtract the flowRate to ensure that the buffer goes down reasonably quickly.
liquidToExtract -= transport.flowRate;
}
}
@ -178,7 +160,17 @@ public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergy
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive,
boolean simulate) {
return battery.receiveEnergy(maxReceive, simulate);
TileEntity tile = getConnectingTile();
if (tile == null || !(tile instanceof IFluidHandler)) {
return 0;
}
int maxToReceive = (1000 - liquidToExtract) / ENERGY_MULTIPLIER;
int received = Math.max(maxReceive, maxToReceive);
if (!simulate) {
liquidToExtract += ENERGY_MULTIPLIER * received;
}
return received;
}
@Override
@ -189,21 +181,21 @@ public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergy
@Override
public int getEnergyStored(ForgeDirection from) {
return battery.getEnergyStored();
return 0;
}
@Override
public int getMaxEnergyStored(ForgeDirection from) {
return battery.getMaxEnergyStored();
return 1000 / ENERGY_MULTIPLIER;
}
@Override
public void writeData(ByteBuf data) {
data.writeInt(liquidToExtract);
data.writeShort(liquidToExtract);
}
@Override
public void readData(ByteBuf data) {
liquidToExtract = data.readInt();
liquidToExtract = data.readShort();
}
}