From 3193f786cde4b5b49932d6c6a61295558f248587 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Fri, 15 Nov 2013 12:06:03 -0500 Subject: [PATCH] Official Redstone Flux support complete! (As far as I know at least) --- common/mekanism/common/EnergyNetwork.java | 59 ++++++++++++----- .../tileentity/TileEntityElectricBlock.java | 57 ++++++++++++++++- .../tileentity/TileEntityUniversalCable.java | 64 +++++++++++++++---- common/mekanism/common/util/CableUtils.java | 30 ++++++++- 4 files changed, 179 insertions(+), 31 deletions(-) diff --git a/common/mekanism/common/EnergyNetwork.java b/common/mekanism/common/EnergyNetwork.java index 8713b7a19..ce5a00f08 100644 --- a/common/mekanism/common/EnergyNetwork.java +++ b/common/mekanism/common/EnergyNetwork.java @@ -30,6 +30,7 @@ import universalelectricity.core.electricity.ElectricityPack; import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.Type; +import cofh.api.energy.IEnergyHandler; import cpw.mods.fml.common.FMLCommonHandler; public class EnergyNetwork extends DynamicNetwork @@ -128,6 +129,12 @@ public class EnergyNetwork extends DynamicNetwork { energyToSend -= (currentSending - ((IStrictEnergyAcceptor)acceptor).transferEnergyToAcceptor(currentSending)); } + else if(acceptor instanceof IEnergyHandler) + { + IEnergyHandler handler = (IEnergyHandler)acceptor; + int used = handler.receiveEnergy(side.getOpposite(), (int)(currentSending*Mekanism.TO_TE), false); + energyToSend -= used*Mekanism.FROM_TE; + } else if(acceptor instanceof IEnergySink) { double toSend = Math.min(currentSending, (((IEnergySink)acceptor).getMaxSafeInput()*Mekanism.FROM_IC2)); @@ -170,9 +177,23 @@ public class EnergyNetwork extends DynamicNetwork { if(acceptor instanceof IStrictEnergyAcceptor) { - if(((IStrictEnergyAcceptor)acceptor).canReceiveEnergy(acceptorDirections.get(acceptor).getOpposite())) + IStrictEnergyAcceptor handler = (IStrictEnergyAcceptor)acceptor; + + if(handler.canReceiveEnergy(acceptorDirections.get(acceptor).getOpposite())) { - if((((IStrictEnergyAcceptor)acceptor).getMaxEnergy() - ((IStrictEnergyAcceptor)acceptor).getEnergy()) > 0) + if(handler.getMaxEnergy() - handler.getEnergy() > 0) + { + toReturn.add(acceptor); + } + } + } + else if(acceptor instanceof IEnergyHandler) + { + IEnergyHandler handler = (IEnergyHandler)acceptor; + + if(handler.canInterface(acceptorDirections.get(acceptor).getOpposite())) + { + if(handler.getMaxEnergyStored(acceptorDirections.get(acceptor).getOpposite()) - handler.getEnergyStored(acceptorDirections.get(acceptor).getOpposite()) > 0) { toReturn.add(acceptor); } @@ -180,9 +201,23 @@ public class EnergyNetwork extends DynamicNetwork } else if(acceptor instanceof IEnergySink) { - if(((IEnergySink)acceptor).acceptsEnergyFrom(null, acceptorDirections.get(acceptor).getOpposite())) + IEnergySink handler = (IEnergySink)acceptor; + + if(handler.acceptsEnergyFrom(null, acceptorDirections.get(acceptor).getOpposite())) { - if(Math.min((((IEnergySink)acceptor).demandedEnergyUnits()*Mekanism.FROM_IC2), (((IEnergySink)acceptor).getMaxSafeInput()*Mekanism.FROM_IC2)) > 0) + if(Math.min((handler.demandedEnergyUnits()*Mekanism.FROM_IC2), (handler.getMaxSafeInput()*Mekanism.FROM_IC2)) > 0) + { + toReturn.add(acceptor); + } + } + } + else if(acceptor instanceof IElectrical) + { + IElectrical handler = (IElectrical)acceptor; + + if(handler.canConnect(acceptorDirections.get(acceptor).getOpposite())) + { + if(handler.getRequest(acceptorDirections.get(acceptor).getOpposite()) > 0) { toReturn.add(acceptor); } @@ -190,9 +225,11 @@ public class EnergyNetwork extends DynamicNetwork } else if(acceptor instanceof IPowerReceptor && MekanismUtils.useBuildcraft()) { - if(((IPowerReceptor)acceptor).getPowerReceiver(acceptorDirections.get(acceptor).getOpposite()) != null) + IPowerReceptor handler = (IPowerReceptor)acceptor; + + if(handler.getPowerReceiver(acceptorDirections.get(acceptor).getOpposite()) != null) { - if((((IPowerReceptor)acceptor).getPowerReceiver(acceptorDirections.get(acceptor).getOpposite()).powerRequest()*Mekanism.FROM_BC) > 0) + if((handler.getPowerReceiver(acceptorDirections.get(acceptor).getOpposite()).powerRequest()*Mekanism.FROM_BC) > 0) { TileEntityUniversalCable cable = (TileEntityUniversalCable)Object3D.get(acceptor).getFromSide(acceptorDirections.get(acceptor).getOpposite()).getTileEntity(acceptor.worldObj); @@ -203,16 +240,6 @@ public class EnergyNetwork extends DynamicNetwork } } } - else if(acceptor instanceof IElectrical) - { - if(((IElectrical)acceptor).canConnect(acceptorDirections.get(acceptor).getOpposite())) - { - if(((IElectrical)acceptor).getRequest(acceptorDirections.get(acceptor).getOpposite()) > 0) - { - toReturn.add(acceptor); - } - } - } } return toReturn; diff --git a/common/mekanism/common/tileentity/TileEntityElectricBlock.java b/common/mekanism/common/tileentity/TileEntityElectricBlock.java index 659aa9839..36c4106b8 100644 --- a/common/mekanism/common/tileentity/TileEntityElectricBlock.java +++ b/common/mekanism/common/tileentity/TileEntityElectricBlock.java @@ -24,10 +24,11 @@ import universalelectricity.core.electricity.ElectricityPack; import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.PowerHandler; import buildcraft.api.power.PowerHandler.PowerReceiver; +import cofh.api.energy.IEnergyHandler; import com.google.common.io.ByteArrayDataInput; -public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IWrenchable, ITileNetwork, IPowerReceptor, IEnergyTile, IElectrical, IElectricalStorage, IConnector, IStrictEnergyStorage +public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IWrenchable, ITileNetwork, IPowerReceptor, IEnergyTile, IElectrical, IElectricalStorage, IConnector, IStrictEnergyStorage, IEnergyHandler { /** How much energy is stored in this block. */ public double electricityStored; @@ -278,4 +279,58 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i { return (int)(getEnergy()*i / getMaxEnergy()); } + + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) + { + if(getConsumingSides().contains(from)) + { + double toAdd = (int)Math.min(getMaxEnergy()-getEnergy(), maxReceive*Mekanism.FROM_TE); + + if(!simulate) + { + setEnergy(getEnergy() + toAdd); + } + + return (int)(toAdd*Mekanism.TO_TE); + } + + return 0; + } + + @Override + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) + { + if(getOutputtingSide() == from) + { + double toSend = Math.min(getEnergy(), Math.min(getMaxOutput(), maxExtract*Mekanism.FROM_TE)); + + if(!simulate) + { + setEnergy(getEnergy() - toSend); + } + + return (int)(toSend*Mekanism.TO_TE); + } + + return 0; + } + + @Override + public boolean canInterface(ForgeDirection from) + { + return canConnect(from); + } + + @Override + public int getEnergyStored(ForgeDirection from) + { + return (int)(getEnergy()*Mekanism.TO_TE); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from) + { + return (int)(getMaxEnergy()*Mekanism.TO_TE); + } } diff --git a/common/mekanism/common/tileentity/TileEntityUniversalCable.java b/common/mekanism/common/tileentity/TileEntityUniversalCable.java index 4d6514d2b..c96e5f504 100644 --- a/common/mekanism/common/tileentity/TileEntityUniversalCable.java +++ b/common/mekanism/common/tileentity/TileEntityUniversalCable.java @@ -9,8 +9,6 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Set; -import com.google.common.io.ByteArrayDataInput; - import mekanism.api.Object3D; import mekanism.api.transmitters.ITransmitter; import mekanism.api.transmitters.TransmissionType; @@ -33,8 +31,11 @@ import buildcraft.api.power.IPowerEmitter; import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.PowerHandler; import buildcraft.api.power.PowerHandler.PowerReceiver; +import cofh.api.energy.IEnergyHandler; -public class TileEntityUniversalCable extends TileEntityTransmitter implements IPowerReceptor, IEnergySink, IConductor, ITileNetwork +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityUniversalCable extends TileEntityTransmitter implements IPowerReceptor, IEnergySink, IConductor, ITileNetwork, IEnergyHandler { /** A fake power handler used to initiate energy transfer calculations. */ public PowerHandler powerHandler; @@ -340,6 +341,54 @@ public class TileEntityUniversalCable extends TileEntityTransmitter