diff options
author | BlueWeabo <ilia.iliev2005@gmail.com> | 2023-04-01 17:06:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-01 16:06:06 +0200 |
commit | 655cc902d3df19a1ac2bfaa38cc928ed629d0171 (patch) | |
tree | 25e34b45705b8473e20af3f9b92af25cc87a1e0d /src/main/java/gregtech/api/interfaces | |
parent | a01d019ed97101936210f16c7a362d852f081f09 (diff) | |
download | GT5-Unofficial-655cc902d3df19a1ac2bfaa38cc928ed629d0171.tar.gz GT5-Unofficial-655cc902d3df19a1ac2bfaa38cc928ed629d0171.tar.bz2 GT5-Unofficial-655cc902d3df19a1ac2bfaa38cc928ed629d0171.zip |
Implement Power Logic, Pollution Logic and Processing Logic for MuTEs and many other things (#1823)
* update bs 2
* fuel consumption and energy implementation. clean up
* don't register XD
* some clean up
* coke oven work
* semi-working coke oven
somehow i broke the activating of the multiblock
* power logic
* PowerLogic
* clean up, saving loading nbt
* small cleanup and pollution
* pollution working :P
* Energy mostly working, wallsharing
* processing logic
* fix npe and deregister
* review requests
* missed one
* remove extra 0
Diffstat (limited to 'src/main/java/gregtech/api/interfaces')
-rw-r--r-- | src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java | 74 |
1 files changed, 44 insertions, 30 deletions
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 4fcfc861bb..92d2482014 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -5,6 +5,8 @@ import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyReceiver; import gregtech.api.GregTech_API; +import gregtech.api.logic.PowerLogic; +import gregtech.api.logic.interfaces.PowerLogicHost; import gregtech.api.util.GT_Utility; import ic2.api.energy.tile.IEnergySink; @@ -58,37 +60,49 @@ public interface IEnergyConnected extends IColoredTileEntity { */ public static long emitEnergyToNetwork(long aVoltage, long aAmperage, IEnergyConnected aEmitter) { long rUsedAmperes = 0; - if (aEmitter instanceof IHasWorldObjectAndCoords) { - IHasWorldObjectAndCoords emitterTile = (IHasWorldObjectAndCoords) aEmitter; - for (byte i = 0, j = 0; i < 6 && aAmperage > rUsedAmperes; i++) { - if (aEmitter.outputsEnergyTo(i)) { - j = GT_Utility.getOppositeSide(i); - final TileEntity tTileEntity = emitterTile.getTileEntityAtSide(i); - if (tTileEntity instanceof IEnergyConnected) { - if (aEmitter.getColorization() >= 0) { - final byte tColor = ((IEnergyConnected) tTileEntity).getColorization(); - if (tColor >= 0 && tColor != aEmitter.getColorization()) continue; - } - rUsedAmperes += ((IEnergyConnected) tTileEntity) - .injectEnergyUnits(j, aVoltage, aAmperage - rUsedAmperes); + if (!(aEmitter instanceof IHasWorldObjectAndCoords)) { + return 0; + } + + IHasWorldObjectAndCoords emitterTile = (IHasWorldObjectAndCoords) aEmitter; + for (byte i = 0, j = 0; i < 6 && aAmperage > rUsedAmperes; i++) { + if (!aEmitter.outputsEnergyTo(i)) { + continue; + } - } else if (tTileEntity instanceof IEnergySink) { - if (((IEnergySink) tTileEntity) - .acceptsEnergyFrom((TileEntity) aEmitter, ForgeDirection.getOrientation(j))) { - while (aAmperage > rUsedAmperes && ((IEnergySink) tTileEntity).getDemandedEnergy() > 0 - && ((IEnergySink) tTileEntity) - .injectEnergy(ForgeDirection.getOrientation(j), aVoltage, aVoltage) - < aVoltage) - rUsedAmperes++; - } - } else if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver) { - final ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite(); - final int rfOut = GT_Utility.safeInt(aVoltage * GregTech_API.mEUtoRF / 100); - if (((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, true) == rfOut) { - ((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, false); - rUsedAmperes++; - } - } + j = GT_Utility.getOppositeSide(i); + final TileEntity tTileEntity = emitterTile.getTileEntityAtSide(i); + if (tTileEntity instanceof PowerLogicHost) { + PowerLogicHost host = (PowerLogicHost) tTileEntity; + + PowerLogic logic = host.getPowerLogic(j); + if (logic == null || logic.isEnergyReceiver()) { + continue; + } + + rUsedAmperes += logic.injectEnergy(aVoltage, aAmperage - rUsedAmperes); + } else if (tTileEntity instanceof IEnergyConnected) { + if (aEmitter.getColorization() >= 0) { + final byte tColor = ((IEnergyConnected) tTileEntity).getColorization(); + if (tColor >= 0 && tColor != aEmitter.getColorization()) continue; + } + rUsedAmperes += ((IEnergyConnected) tTileEntity) + .injectEnergyUnits(j, aVoltage, aAmperage - rUsedAmperes); + + } else if (tTileEntity instanceof IEnergySink) { + if (((IEnergySink) tTileEntity) + .acceptsEnergyFrom((TileEntity) aEmitter, ForgeDirection.getOrientation(j))) { + while (aAmperage > rUsedAmperes && ((IEnergySink) tTileEntity).getDemandedEnergy() > 0 + && ((IEnergySink) tTileEntity) + .injectEnergy(ForgeDirection.getOrientation(j), aVoltage, aVoltage) < aVoltage) + rUsedAmperes++; + } + } else if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver) { + final ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite(); + final int rfOut = GT_Utility.safeInt(aVoltage * GregTech_API.mEUtoRF / 100); + if (((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, true) == rfOut) { + ((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, false); + rUsedAmperes++; } } } |