diff options
author | repo-alt <wvk17@yandex.ru> | 2023-03-14 22:17:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-14 20:17:26 +0100 |
commit | 1bfd3b2d668bae5253edd292e7a37ba47bb3f877 (patch) | |
tree | d158538288f9df68ae85718033305e157d936371 /src/main/java/gregtech/api/interfaces | |
parent | f77689cb0ce4a8cecbd5958a5c51b7901525c5bf (diff) | |
download | GT5-Unofficial-1bfd3b2d668bae5253edd292e7a37ba47bb3f877.tar.gz GT5-Unofficial-1bfd3b2d668bae5253edd292e7a37ba47bb3f877.tar.bz2 GT5-Unofficial-1bfd3b2d668bae5253edd292e7a37ba47bb3f877.zip |
Untangle IEnergyConnected and IHasWorldObjectAndCoords to allow FMP tiles to support IEnergyConnected (#1794)
Diffstat (limited to 'src/main/java/gregtech/api/interfaces')
3 files changed, 31 insertions, 28 deletions
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java b/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java index 44b59ffce1..4e64742db0 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java @@ -3,7 +3,7 @@ package gregtech.api.interfaces.tileentity; /** * Interface for internal Code, which is mainly used for independent Energy conversion. */ -public interface IBasicEnergyContainer extends IEnergyConnected { +public interface IBasicEnergyContainer extends IEnergyConnected, IHasWorldObjectAndCoords { /** * Gets if that Amount of Energy is stored inside the Machine. It is used for checking the contained Energy before diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java index f136434c54..e285c6f0e3 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConductor.java @@ -7,7 +7,7 @@ import gregtech.api.enums.Materials; * <p/> * Not all Data might be reliable. This is just for Information sake. */ -public interface IEnergyConductor extends IEnergyConnected { +public interface IEnergyConductor extends IEnergyConnected, IHasWorldObjectAndCoords { /** * @return if this is actually a Cable. (you must check this) diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index d046418ea6..4fcfc861bb 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -15,7 +15,7 @@ import ic2.api.energy.tile.IEnergySink; * coloured Blocks to each other. IHasWorldObjectAndCoords is needed for the InWorld related Stuff. @BaseTileEntity does * implement most of that Interface. */ -public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAndCoords { +public interface IEnergyConnected extends IColoredTileEntity { /** * Inject Energy Call for Electricity. Gets called by EnergyEmitters to inject Energy into your Block @@ -58,33 +58,36 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd */ public static long emitEnergyToNetwork(long aVoltage, long aAmperage, IEnergyConnected aEmitter) { long rUsedAmperes = 0; - for (byte i = 0, j = 0; i < 6 && aAmperage > rUsedAmperes; i++) { - if (aEmitter.outputsEnergyTo(i)) { - j = GT_Utility.getOppositeSide(i); - final TileEntity tTileEntity = aEmitter.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) { + 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); - } 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) + } 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++; - } - } 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++; + } } } } |