Skip to content

Commit

Permalink
feat: improve legacy controller energy logic
Browse files Browse the repository at this point in the history
  • Loading branch information
leytilera committed Jan 11, 2023
1 parent 44655d2 commit f03609f
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
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;
Expand Down Expand Up @@ -92,7 +93,11 @@ public void detectAndSendChanges() {
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()));
}

Expand Down
35 changes: 21 additions & 14 deletions src/main/java/appeng/tile/legacy/TileLegacyController.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -65,27 +67,32 @@ public int[] getAccessibleSlotsBySide(ForgeDirection whichSide) {
}

@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() {
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/appeng/tile/networking/TileEnergyAcceptor.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -73,7 +76,15 @@ protected double getFunnelPowerDemand(final double maxRequired) {
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;
}
Expand Down

0 comments on commit f03609f

Please sign in to comment.