From f03609f69d7efd723af4bd00dac826fb7ddbe0dc Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Wed, 11 Jan 2023 19:42:52 +0100 Subject: [PATCH] feat: improve legacy controller energy logic --- .../implementations/ContainerController.java | 7 +++- .../tile/legacy/TileLegacyController.java | 35 +++++++++++-------- .../tile/networking/TileEnergyAcceptor.java | 13 ++++++- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/main/java/appeng/container/implementations/ContainerController.java b/src/main/java/appeng/container/implementations/ContainerController.java index 90cb9025..262bd94f 100644 --- a/src/main/java/appeng/container/implementations/ContainerController.java +++ b/src/main/java/appeng/container/implementations/ContainerController.java @@ -24,6 +24,7 @@ import appeng.core.sync.packets.PacketMEInventoryUpdate; import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.IAEAppEngInventory; import appeng.tile.inventory.InvOperation; +import appeng.tile.legacy.TileLegacyController; import appeng.util.Platform; import appeng.util.item.AEItemStack; import net.minecraft.entity.player.EntityPlayer; @@ -92,7 +93,11 @@ public class ContainerController extends AEBaseContainer implements IAEAppEngInv if (eg != null) { this.setAverageAddition((long) (100.0 * eg.getAvgPowerInjection())); this.setPowerUsage((long) (100.0 * eg.getAvgPowerUsage())); - this.setCurrentPower((long) (100.0 * eg.getStoredPower())); + if (host instanceof TileLegacyController) { + this.setCurrentPower((long)(100.0 * ((TileLegacyController)host).getAECurrentPower())); + } else { + this.setCurrentPower((long) (100.0 * eg.getStoredPower())); + } this.setMaxPower((long) (100.0 * eg.getMaxStoredPower())); } diff --git a/src/main/java/appeng/tile/legacy/TileLegacyController.java b/src/main/java/appeng/tile/legacy/TileLegacyController.java index 7f18c287..5ba1d3b6 100644 --- a/src/main/java/appeng/tile/legacy/TileLegacyController.java +++ b/src/main/java/appeng/tile/legacy/TileLegacyController.java @@ -1,5 +1,6 @@ package appeng.tile.legacy; +import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; import appeng.api.events.LocatableEventAnnounce; import appeng.api.events.LocatableEventAnnounce.LocatableEvent; @@ -27,9 +28,10 @@ public class TileLegacyController extends AENetworkPowerTile implements ILocatab public int powerLevel; public int lastPowerLevel; - public TileLegacyController() { //TODO Fix power storage + public TileLegacyController() { this.setInternalMaxPower(10000); this.setInternalPublicPowerStorage(true); + this.setInternalPowerFlow(AccessRestriction.READ_WRITE); this.getProxy().setIdlePowerUsage(6.0); difference++; this.controllerKey = System.currentTimeMillis() * 10 + difference; @@ -65,27 +67,32 @@ public class TileLegacyController extends AENetworkPowerTile implements ILocatab } @Override - protected double getFunnelPowerDemand(final double maxReceived) { - try { - return this.getProxy().getEnergy().getEnergyDemand(10000); - } catch (final GridAccessException e) { + protected double getFunnelPowerDemand( final double maxReceived ) + { + try + { + return this.getProxy().getEnergy().getEnergyDemand( 10000 ) + super.getFunnelPowerDemand(maxReceived); + } + catch( final GridAccessException e ) + { // no grid? use local... return super.getFunnelPowerDemand(maxReceived); } } @Override - protected double funnelPowerIntoStorage(final double power, final Actionable mode) { - try { - final double ret = this.getProxy().getEnergy().injectPower(power, mode); - if (mode == Actionable.SIMULATE) { - return ret; + protected double funnelPowerIntoStorage( final double power, final Actionable mode ) + { + double ret = this.injectAEPower(power, mode); + if (ret > 0) { + try + { + ret = this.getProxy().getEnergy().injectPower( ret, mode ); + } catch (final GridAccessException e) { + // :P } - return 0; - } catch (final GridAccessException e) { - // no grid? use local... - return super.funnelPowerIntoStorage(power, mode); } + return ret; } public void updatePowerLevel() { diff --git a/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java b/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java index 8254ce43..a672a8ad 100644 --- a/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java +++ b/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java @@ -19,6 +19,9 @@ package appeng.tile.networking; import appeng.api.config.Actionable; +import appeng.api.networking.IControllerCache; +import appeng.api.networking.IGridHost; +import appeng.api.networking.energy.IAEPowerStorage; import appeng.api.networking.energy.IEnergyGrid; import appeng.api.util.AECableType; import appeng.me.GridAccessException; @@ -73,7 +76,15 @@ public class TileEnergyAcceptor extends AENetworkPowerTile { protected double funnelPowerIntoStorage(final double power, final Actionable mode) { try { final IEnergyGrid grid = this.getProxy().getEnergy(); - final double leftOver = grid.injectPower(power, mode); + final IControllerCache cgc = this.getProxy().getGrid().getCache(IControllerCache.class); + double leftOver = power; + if (cgc.hasController()) { + IGridHost controller = cgc.getController(); + if (controller instanceof IAEPowerStorage) { + leftOver = ((IAEPowerStorage)controller).injectAEPower(leftOver, mode); + } + } + leftOver = grid.injectPower(leftOver, mode); if (mode == Actionable.SIMULATE) { return leftOver; }