aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/interfaces
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2023-04-01 17:06:06 +0300
committerGitHub <noreply@github.com>2023-04-01 16:06:06 +0200
commit655cc902d3df19a1ac2bfaa38cc928ed629d0171 (patch)
tree25e34b45705b8473e20af3f9b92af25cc87a1e0d /src/main/java/gregtech/api/interfaces
parenta01d019ed97101936210f16c7a362d852f081f09 (diff)
downloadGT5-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.java74
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++;
}
}
}