diff --git a/api/cofh/api/CoFHAPIProps.java b/api/cofh/api/CoFHAPIProps.java
index be48ec3d..22096377 100644
--- a/api/cofh/api/CoFHAPIProps.java
+++ b/api/cofh/api/CoFHAPIProps.java
@@ -6,6 +6,6 @@ public class CoFHAPIProps {
}
- public static final String VERSION = "1.7.10R1.0.0";
+ public static final String VERSION = "1.7.10R1.0.1";
}
diff --git a/api/cofh/api/energy/EnergyStorage.java b/api/cofh/api/energy/EnergyStorage.java
index b3383aeb..1674c189 100644
--- a/api/cofh/api/energy/EnergyStorage.java
+++ b/api/cofh/api/energy/EnergyStorage.java
@@ -87,8 +87,8 @@ public class EnergyStorage implements IEnergyStorage {
}
/**
- * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers are
- * guaranteed to have it.
+ * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers
+ * are guaranteed to have it.
*
* @param energy
*/
diff --git a/api/cofh/api/energy/IEnergyConnection.java b/api/cofh/api/energy/IEnergyConnection.java
index 63faffb9..79bdf77a 100644
--- a/api/cofh/api/energy/IEnergyConnection.java
+++ b/api/cofh/api/energy/IEnergyConnection.java
@@ -5,7 +5,7 @@ import net.minecraftforge.common.util.ForgeDirection;
/**
* Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not
* accept it; otherwise just use IEnergyHandler.
- *
+ *
* Note that {@link IEnergyHandler} is an extension of this.
*
* @author King Lemming
diff --git a/api/cofh/api/energy/IEnergyContainerItem.java b/api/cofh/api/energy/IEnergyContainerItem.java
index 0bcfda60..c28455b1 100644
--- a/api/cofh/api/energy/IEnergyContainerItem.java
+++ b/api/cofh/api/energy/IEnergyContainerItem.java
@@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack;
/**
* Implement this interface on Item classes that support external manipulation of their internal energy storages.
- *
+ *
* A reference implementation is provided {@link ItemEnergyContainer}.
*
* @author King Lemming
diff --git a/api/cofh/api/energy/IEnergyHandler.java b/api/cofh/api/energy/IEnergyHandler.java
index 3df31234..22f2dbc6 100644
--- a/api/cofh/api/energy/IEnergyHandler.java
+++ b/api/cofh/api/energy/IEnergyHandler.java
@@ -4,17 +4,19 @@ import net.minecraftforge.common.util.ForgeDirection;
/**
* Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
- *
+ *
* A reference implementation is provided {@link TileEnergyHandler}.
- *
+ *
* @author King Lemming
- *
+ *
*/
-public interface IEnergyHandler extends IEnergyConnection {
+public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver {
+
+ // merely a convenience interface (remove these methods in 1.8; provided here for back-compat via compiler doing things)
/**
- * Add energy to an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler.
- *
+ * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver.
+ *
* @param from
* Orientation the energy is received from.
* @param maxReceive
@@ -23,11 +25,12 @@ public interface IEnergyHandler extends IEnergyConnection {
* If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received.
*/
+ @Override
int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate);
/**
- * Remove energy from an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler.
- *
+ * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider.
+ *
* @param from
* Orientation the energy is extracted from.
* @param maxExtract
@@ -36,16 +39,20 @@ public interface IEnergyHandler extends IEnergyConnection {
* If TRUE, the extraction will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted.
*/
+ @Override
int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate);
+
/**
* Returns the amount of energy currently stored.
*/
+ @Override
int getEnergyStored(ForgeDirection from);
/**
* Returns the maximum amount of energy that can be stored.
*/
+ @Override
int getMaxEnergyStored(ForgeDirection from);
}
diff --git a/api/cofh/api/energy/IEnergyProvider.java b/api/cofh/api/energy/IEnergyProvider.java
new file mode 100644
index 00000000..05287b35
--- /dev/null
+++ b/api/cofh/api/energy/IEnergyProvider.java
@@ -0,0 +1,38 @@
+package cofh.api.energy;
+
+import net.minecraftforge.common.util.ForgeDirection;
+
+/**
+ * Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
+ *
+ * A reference implementation is provided {@link TileEnergyHandler}.
+ *
+ * @author King Lemming
+ *
+ */
+public interface IEnergyProvider extends IEnergyConnection {
+
+ /**
+ * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider.
+ *
+ * @param from
+ * Orientation the energy is extracted from.
+ * @param maxExtract
+ * Maximum amount of energy to extract.
+ * @param simulate
+ * If TRUE, the extraction will only be simulated.
+ * @return Amount of energy that was (or would have been, if simulated) extracted.
+ */
+ int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate);
+
+ /**
+ * Returns the amount of energy currently stored.
+ */
+ int getEnergyStored(ForgeDirection from);
+
+ /**
+ * Returns the maximum amount of energy that can be stored.
+ */
+ int getMaxEnergyStored(ForgeDirection from);
+
+}
diff --git a/api/cofh/api/energy/IEnergyReceiver.java b/api/cofh/api/energy/IEnergyReceiver.java
new file mode 100644
index 00000000..c726e09e
--- /dev/null
+++ b/api/cofh/api/energy/IEnergyReceiver.java
@@ -0,0 +1,38 @@
+package cofh.api.energy;
+
+import net.minecraftforge.common.util.ForgeDirection;
+
+/**
+ * Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
+ *
+ * A reference implementation is provided {@link TileEnergyHandler}.
+ *
+ * @author King Lemming
+ *
+ */
+public interface IEnergyReceiver extends IEnergyConnection {
+
+ /**
+ * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver.
+ *
+ * @param from
+ * Orientation the energy is received from.
+ * @param maxReceive
+ * Maximum amount of energy to receive.
+ * @param simulate
+ * If TRUE, the charge will only be simulated.
+ * @return Amount of energy that was (or would have been, if simulated) received.
+ */
+ int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate);
+
+ /**
+ * Returns the amount of energy currently stored.
+ */
+ int getEnergyStored(ForgeDirection from);
+
+ /**
+ * Returns the maximum amount of energy that can be stored.
+ */
+ int getMaxEnergyStored(ForgeDirection from);
+
+}
diff --git a/api/cofh/api/energy/IEnergyStorage.java b/api/cofh/api/energy/IEnergyStorage.java
index 1e84bc22..bc206560 100644
--- a/api/cofh/api/energy/IEnergyStorage.java
+++ b/api/cofh/api/energy/IEnergyStorage.java
@@ -1,8 +1,9 @@
package cofh.api.energy;
/**
- * An energy storage is the unit of interaction with Energy inventories.
- *
+ * An energy storage is the unit of interaction with Energy inventories.
+ * This is not to be implemented on TileEntities. This is for internal use only.
+ *
* A reference implementation can be found at {@link EnergyStorage}.
*
* @author King Lemming
diff --git a/api/cofh/api/energy/TileEnergyHandler.java b/api/cofh/api/energy/TileEnergyHandler.java
index a7fabeb7..7cc655e9 100644
--- a/api/cofh/api/energy/TileEnergyHandler.java
+++ b/api/cofh/api/energy/TileEnergyHandler.java
@@ -6,9 +6,9 @@ import net.minecraftforge.common.util.ForgeDirection;
/**
* Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own.
- *
+ *
* @author King Lemming
- *
+ *
*/
public class TileEnergyHandler extends TileEntity implements IEnergyHandler {
@@ -28,25 +28,28 @@ public class TileEnergyHandler extends TileEntity implements IEnergyHandler {
storage.writeToNBT(nbt);
}
- /* IEnergyHandler */
+ /* IEnergyConnection */
@Override
public boolean canConnectEnergy(ForgeDirection from) {
return true;
}
+ /* IEnergyReceiver */
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
return storage.receiveEnergy(maxReceive, simulate);
}
+ /* IEnergyProvider */
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
return storage.extractEnergy(maxExtract, simulate);
}
+ /* IEnergyReceiver and IEnergyProvider */
@Override
public int getEnergyStored(ForgeDirection from) {
diff --git a/api/cofh/api/package-info.java b/api/cofh/api/package-info.java
deleted file mode 100644
index 08ff5fcb..00000000
--- a/api/cofh/api/package-info.java
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
- * http://www.teamcofh.com
- */
-@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHLib", provides = "CoFHAPI")
-package cofh.api;
-
-import cpw.mods.fml.common.API;
-
diff --git a/common/buildcraft/core/TileBuildCraft.java b/common/buildcraft/core/TileBuildCraft.java
index 4109a68f..3ff4d1c8 100644
--- a/common/buildcraft/core/TileBuildCraft.java
+++ b/common/buildcraft/core/TileBuildCraft.java
@@ -20,6 +20,7 @@ import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyHandler;
+import cofh.api.energy.IEnergyReceiver;
import buildcraft.BuildCraftCore;
import buildcraft.api.core.ISerializable;
import buildcraft.core.network.BuildCraftPacket;
@@ -27,7 +28,7 @@ import buildcraft.core.network.ISynchronizedTile;
import buildcraft.core.network.PacketTileUpdate;
import buildcraft.core.utils.Utils;
-public abstract class TileBuildCraft extends TileEntity implements IEnergyHandler, ISynchronizedTile, ISerializable {
+public abstract class TileBuildCraft extends TileEntity implements IEnergyReceiver, ISynchronizedTile, ISerializable {
protected TileBuffer[] cache;
protected HashSet guiWatchers = new HashSet();
@@ -162,7 +163,9 @@ public abstract class TileBuildCraft extends TileEntity implements IEnergyHandle
}
}
- @Override
+ /**
+ * If you want to use this, implement IEnergyProvider.
+ */
public int extractEnergy(ForgeDirection from, int maxExtract,
boolean simulate) {
if (battery != null && this.canConnectEnergy(from)) {
diff --git a/common/buildcraft/energy/TileEngine.java b/common/buildcraft/energy/TileEngine.java
index 3b334257..5d30749c 100644
--- a/common/buildcraft/energy/TileEngine.java
+++ b/common/buildcraft/energy/TileEngine.java
@@ -11,12 +11,12 @@ package buildcraft.energy;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ICrafting;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.ForgeDirection;
-import cofh.api.energy.IEnergyHandler;
+import cofh.api.energy.IEnergyProvider;
+import cofh.api.energy.IEnergyReceiver;
import buildcraft.BuildCraftEnergy;
import buildcraft.api.power.IEngine;
import buildcraft.api.tiles.IHeatable;
@@ -29,7 +29,7 @@ import buildcraft.core.TileBuildCraft;
import buildcraft.core.utils.MathUtils;
import buildcraft.energy.gui.ContainerEngine;
-public abstract class TileEngine extends TileBuildCraft implements IPipeConnection, IEnergyHandler, IEngine, IHeatable {
+public abstract class TileEngine extends TileBuildCraft implements IPipeConnection, IEnergyProvider, IEngine, IHeatable {
// Index corresponds to metadata
public static final ResourceLocation[] BASE_TEXTURES = new ResourceLocation[]{
new ResourceLocation(DefaultProps.TEXTURE_PATH_BLOCKS + "/base_wood.png"),
@@ -292,8 +292,8 @@ public abstract class TileEngine extends TileBuildCraft implements IPipeConnecti
orientation.getOpposite(),
this.energy, true);
return extractEnergy(maxEnergy, false);
- } else if (tile instanceof IEnergyHandler) {
- IEnergyHandler handler = (IEnergyHandler) tile;
+ } else if (tile instanceof IEnergyReceiver) {
+ IEnergyReceiver handler = (IEnergyReceiver) tile;
int maxEnergy = handler.receiveEnergy(
orientation.getOpposite(),
@@ -322,8 +322,8 @@ public abstract class TileEngine extends TileBuildCraft implements IPipeConnecti
extracted, false);
extractEnergy(neededRF, true);
- } else if (tile instanceof IEnergyHandler) {
- IEnergyHandler handler = (IEnergyHandler) tile;
+ } else if (tile instanceof IEnergyReceiver) {
+ IEnergyReceiver handler = (IEnergyReceiver) tile;
int neededRF = handler.receiveEnergy(
orientation.getOpposite(),
extracted, false);
@@ -512,8 +512,8 @@ public abstract class TileEngine extends TileBuildCraft implements IPipeConnecti
return false;
} else if (tile instanceof IEngine) {
return ((IEngine) tile).canReceiveFromEngine(side.getOpposite());
- } else if (tile instanceof IEnergyHandler) {
- return ((IEnergyHandler) tile).canConnectEnergy(side.getOpposite());
+ } else if (tile instanceof IEnergyReceiver) {
+ return ((IEnergyReceiver) tile).canConnectEnergy(side.getOpposite());
} else {
return false;
}
@@ -556,12 +556,6 @@ public abstract class TileEngine extends TileBuildCraft implements IPipeConnecti
}
// RF support
- @Override
- public int receiveEnergy(ForgeDirection from, int maxReceive,
- boolean simulate) {
- return 0;
- }
-
@Override
public int extractEnergy(ForgeDirection from, int maxExtract,
boolean simulate) {
diff --git a/common/buildcraft/factory/BlockTank.java b/common/buildcraft/factory/BlockTank.java
index ac9c5d3b..f841d720 100644
--- a/common/buildcraft/factory/BlockTank.java
+++ b/common/buildcraft/factory/BlockTank.java
@@ -24,6 +24,7 @@ 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.IFluidContainerItem;
import buildcraft.BuildCraftCore;
import buildcraft.api.events.BlockInteractionEvent;
@@ -98,50 +99,64 @@ public class BlockTank extends BlockBuildCraft {
}
if (current != null) {
- FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem(current);
-
TileEntity tile = world.getTileEntity(i, j, k);
if (tile instanceof TileTank) {
TileTank tank = (TileTank) tile;
- // Handle filled containers
- if (liquid != null) {
- int qty = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
+ // Handle FluidContainerRegistry
+ if (FluidContainerRegistry.isContainer(current)) {
+ FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem(current);
+ // Handle filled containers
+ if (liquid != null) {
+ int qty = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
- if (qty != 0 && !BuildCraftCore.debugWorldgen && !entityplayer.capabilities.isCreativeMode) {
- entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
- }
+ if (qty != 0 && !BuildCraftCore.debugWorldgen && !entityplayer.capabilities.isCreativeMode) {
+ entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
+ entityplayer.inventory.addItemStackToInventory(FluidContainerRegistry.drainFluidContainer(current));
+ }
- return true;
+ return true;
- // Handle empty containers
- } else {
- FluidStack available = tank.getTankInfo(ForgeDirection.UNKNOWN)[0].fluid;
+ // Handle empty containers
+ } else {
+ FluidStack available = tank.getTankInfo(ForgeDirection.UNKNOWN)[0].fluid;
- if (available != null) {
- ItemStack filled = FluidContainerRegistry.fillFluidContainer(available, current);
+ if (available != null) {
+ ItemStack filled = FluidContainerRegistry.fillFluidContainer(available, current);
- liquid = FluidContainerRegistry.getFluidForFilledItem(filled);
+ liquid = FluidContainerRegistry.getFluidForFilledItem(filled);
- if (liquid != null) {
- if (!BuildCraftCore.debugWorldgen && !entityplayer.capabilities.isCreativeMode) {
- if (current.stackSize > 1) {
- if (!entityplayer.inventory.addItemStackToInventory(filled)) {
- return false;
+ if (liquid != null) {
+ if (!BuildCraftCore.debugWorldgen && !entityplayer.capabilities.isCreativeMode) {
+ if (current.stackSize > 1) {
+ if (!entityplayer.inventory.addItemStackToInventory(filled)) {
+ return false;
+ } else {
+ entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
+ }
} else {
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
+ entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, filled);
}
- } else {
- entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
- entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, filled);
}
+
+ tank.drain(ForgeDirection.UNKNOWN, liquid.amount, true);
+
+ return true;
}
-
- tank.drain(ForgeDirection.UNKNOWN, liquid.amount, true);
-
- return true;
}
}
+ } else if (current.getItem() instanceof IFluidContainerItem) {
+ IFluidContainerItem container = (IFluidContainerItem) current.getItem();
+ FluidStack liquid = container.getFluid(current);
+ if (liquid != null && liquid.amount > 0) {
+ int qty = tank.fill(ForgeDirection.UNKNOWN, liquid, false);
+ tank.fill(ForgeDirection.UNKNOWN, container.drain(current, qty, true), true);
+ } else {
+ liquid = tank.drain(ForgeDirection.UNKNOWN, 1000, false);
+ int qtyToFill = container.fill(current, liquid, true);
+ tank.drain(ForgeDirection.UNKNOWN, qtyToFill, true);
+ }
}
}
}
diff --git a/common/buildcraft/transport/PipeTransportPower.java b/common/buildcraft/transport/PipeTransportPower.java
index 02c79e99..ebc4b332 100644
--- a/common/buildcraft/transport/PipeTransportPower.java
+++ b/common/buildcraft/transport/PipeTransportPower.java
@@ -17,6 +17,8 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyHandler;
+import cofh.api.energy.IEnergyProvider;
+import cofh.api.energy.IEnergyReceiver;
import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.SafeTimeTracker;
@@ -90,10 +92,20 @@ public class PipeTransportPower extends PipeTransport {
return true;
}
- if (tile instanceof IEnergyConnection) {
- IEnergyConnection handler = (IEnergyConnection) tile;
- if (handler != null && handler.canConnectEnergy(side.getOpposite())) {
- return true;
+ if (container.pipe instanceof PipePowerWood) {
+ if (tile instanceof IEnergyConnection && ((IEnergyConnection) tile).canConnectEnergy(side.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;
+ }
+ } else {
+ if (tile instanceof IEnergyReceiver) {
+ IEnergyReceiver handler = (IEnergyReceiver) tile;
+ if (handler != null && handler.canConnectEnergy(side.getOpposite())) {
+ return true;
+ }
}
}
@@ -192,8 +204,8 @@ public class PipeTransportPower extends PipeTransport {
ForgeDirection.VALID_DIRECTIONS[out].getOpposite(),
powerConsumed);
tilePowered = true;
- } else if (tiles[out] instanceof IEnergyHandler) {
- IEnergyHandler handler = (IEnergyHandler) tiles[out];
+ } else if (tiles[out] instanceof IEnergyReceiver) {
+ IEnergyReceiver handler = (IEnergyReceiver) tiles[out];
if (handler.canConnectEnergy(ForgeDirection.VALID_DIRECTIONS[out].getOpposite())) {
// Transmit power to an RF energy handler
@@ -260,8 +272,8 @@ public class PipeTransportPower extends PipeTransport {
continue;
}
- if (tile instanceof IEnergyHandler) {
- IEnergyHandler handler = (IEnergyHandler) tile;
+ if (tile instanceof IEnergyReceiver) {
+ IEnergyReceiver handler = (IEnergyReceiver) tile;
if (handler.canConnectEnergy(dir.getOpposite())) {
int request = handler.receiveEnergy(dir.getOpposite(), this.maxPower, true);
diff --git a/common/buildcraft/transport/pipes/PipeLogicIron.java b/common/buildcraft/transport/pipes/PipeLogicIron.java
index b30a6f44..6d817983 100644
--- a/common/buildcraft/transport/pipes/PipeLogicIron.java
+++ b/common/buildcraft/transport/pipes/PipeLogicIron.java
@@ -103,6 +103,10 @@ public abstract class PipeLogicIron {
return false;
}
+ public ForgeDirection getOutputDirection() {
+ return ForgeDirection.getOrientation(pipe.container.getBlockMetadata());
+ }
+
public boolean outputOpen(ForgeDirection to) {
return to.ordinal() == pipe.container.getBlockMetadata();
}
diff --git a/common/buildcraft/transport/pipes/PipePowerWood.java b/common/buildcraft/transport/pipes/PipePowerWood.java
index 4c26d854..5bde29dd 100644
--- a/common/buildcraft/transport/pipes/PipePowerWood.java
+++ b/common/buildcraft/transport/pipes/PipePowerWood.java
@@ -16,6 +16,8 @@ import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyHandler;
+import cofh.api.energy.IEnergyProvider;
+import cofh.api.energy.IEnergyReceiver;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.transport.IPipeTile;
@@ -186,7 +188,13 @@ public class PipePowerWood extends Pipe implements IPipeTran
if (!transport.inputOpen(from)) {
return false;
} else {
- return tile instanceof IEnergyConnection && ((IEnergyConnection) tile).canConnectEnergy(from.getOpposite());
+ 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;
+ }
}
}