fix #2246, try to fix #2244

This commit is contained in:
asiekierka 2014-11-28 21:36:33 +01:00
parent b76846e971
commit 9f0403a41c
3 changed files with 26 additions and 22 deletions

View file

@ -19,6 +19,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyHandler;
import cofh.api.energy.IEnergyReceiver; import cofh.api.energy.IEnergyReceiver;
import buildcraft.BuildCraftCore; import buildcraft.BuildCraftCore;
import buildcraft.api.core.ISerializable; import buildcraft.api.core.ISerializable;
@ -27,7 +28,8 @@ import buildcraft.core.network.ISynchronizedTile;
import buildcraft.core.network.PacketTileUpdate; import buildcraft.core.network.PacketTileUpdate;
import buildcraft.core.utils.Utils; import buildcraft.core.utils.Utils;
public abstract class TileBuildCraft extends TileEntity implements IEnergyReceiver, ISynchronizedTile, ISerializable { // TODO: Move back to IEnergyReceiver when EIO updates
public abstract class TileBuildCraft extends TileEntity implements IEnergyHandler, ISynchronizedTile, ISerializable {
protected TileBuffer[] cache; protected TileBuffer[] cache;
protected HashSet<EntityPlayer> guiWatchers = new HashSet<EntityPlayer>(); protected HashSet<EntityPlayer> guiWatchers = new HashSet<EntityPlayer>();

View file

@ -21,8 +21,11 @@ import cofh.api.energy.IEnergyReceiver;
import buildcraft.BuildCraftCore; import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.core.SafeTimeTracker; import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.power.IEngine;
import buildcraft.api.transport.IPipeTile.PipeType; import buildcraft.api.transport.IPipeTile.PipeType;
import buildcraft.core.DefaultProps; import buildcraft.core.DefaultProps;
import buildcraft.core.TileBuildCraft;
import buildcraft.energy.TileEngine;
import buildcraft.transport.network.PacketPowerUpdate; import buildcraft.transport.network.PacketPowerUpdate;
import buildcraft.transport.pipes.PipePowerCobblestone; import buildcraft.transport.pipes.PipePowerCobblestone;
import buildcraft.transport.pipes.PipePowerDiamond; import buildcraft.transport.pipes.PipePowerDiamond;
@ -92,14 +95,12 @@ public class PipeTransportPower extends PipeTransport {
} }
if (container.pipe instanceof PipePowerWood) { if (container.pipe instanceof PipePowerWood) {
if (tile instanceof IEnergyConnection && ((IEnergyConnection) tile).canConnectEnergy(side.getOpposite())) { return isPowerSource(tile, side);
// Disregard tiles which are consumers but NOT providers } else {
return !(tile instanceof IEnergyReceiver && !(tile instanceof IEnergyProvider)); if (tile instanceof IEngine) {
} else { // Disregard engines for this.
// Disregard tiles which can't connect either, I guess.
return false; return false;
} }
} else {
if (tile instanceof IEnergyReceiver) { if (tile instanceof IEnergyReceiver) {
IEnergyReceiver handler = (IEnergyReceiver) tile; IEnergyReceiver handler = (IEnergyReceiver) tile;
if (handler != null && handler.canConnectEnergy(side.getOpposite())) { if (handler != null && handler.canConnectEnergy(side.getOpposite())) {
@ -111,6 +112,21 @@ public class PipeTransportPower extends PipeTransport {
return false; return false;
} }
public boolean isPowerSource(TileEntity tile, ForgeDirection side) {
if (tile instanceof IEnergyConnection && ((IEnergyConnection) tile).canConnectEnergy(side.getOpposite())) {
// TODO: Remove this hack! It's only done until Ender IO/MFR move to the new RF API
if (tile instanceof TileBuildCraft && !(tile instanceof IEngine)) {
// Disregard non-engine BC tiles
return false;
}
// Disregard tiles which are consumers but NOT providers
return (tile instanceof IEngine) || !(tile instanceof IEnergyReceiver && !(tile instanceof IEnergyProvider));
} else {
// Disregard tiles which can't connect either, I guess.
return false;
}
}
@Override @Override
public void onNeighborBlockChange(int blockId) { public void onNeighborBlockChange(int blockId) {
super.onNeighborBlockChange(blockId); super.onNeighborBlockChange(blockId);

View file

@ -74,7 +74,7 @@ public class PipePowerWood extends Pipe<PipeTransportPower> implements IPipeTran
} else { } else {
TileEntity tile = container.getTile(o); TileEntity tile = container.getTile(o);
if (powerSources[o.ordinal()] = isPowerSource(tile, o)) { if (powerSources[o.ordinal()] = transport.isPowerSource(tile, o)) {
sources++; sources++;
} }
} }
@ -184,20 +184,6 @@ public class PipePowerWood extends Pipe<PipeTransportPower> implements IPipeTran
} }
} }
public boolean isPowerSource(TileEntity tile, ForgeDirection from) {
if (!transport.inputOpen(from)) {
return false;
} else {
if (tile instanceof IEnergyConnection && ((IEnergyConnection) tile).canConnectEnergy(from.getOpposite())) {
// Disregard tiles which are consumers but NOT providers
return !(tile instanceof IEnergyReceiver && !(tile instanceof IEnergyProvider));
} else {
// Disregard tiles which can't connect either, I guess.
return false;
}
}
}
@Override @Override
public boolean canConnectEnergy(ForgeDirection from) { public boolean canConnectEnergy(ForgeDirection from) {
return true; return true;