From df28a5520fbbe4b995b690feb5e5b784a15bb19f Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Thu, 20 Jan 2022 20:02:26 -0300 Subject: [PATCH] fix mod name implement GTCEU Energy adapter --- build.gradle | 2 +- .../appeng/capabilities/Capabilities.java | 17 ++++- .../tile/networking/TileEnergyAcceptor.java | 8 ++- .../tile/powersink/AEBasePoweredTile.java | 23 ++++++- .../tile/powersink/GTCEEnergyAdapter.java | 67 +++++++++++++++++++ 5 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 src/main/java/appeng/tile/powersink/GTCEEnergyAdapter.java diff --git a/build.gradle b/build.gradle index 6de32ec24..170f51e73 100644 --- a/build.gradle +++ b/build.gradle @@ -57,7 +57,7 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } -version = extended + "-" + aeversion + "-" + aechannel + "-" + aebuild + "-" + extendedversion +version = aeversion + "-" + aechannel + "-" + aebuild + "-" + extended + "-" + extendedversion group = aegroup archivesBaseName = aebasename diff --git a/src/main/java/appeng/capabilities/Capabilities.java b/src/main/java/appeng/capabilities/Capabilities.java index c4889e36a..5994504aa 100644 --- a/src/main/java/appeng/capabilities/Capabilities.java +++ b/src/main/java/appeng/capabilities/Capabilities.java @@ -20,6 +20,7 @@ package appeng.capabilities; import com.jaquadro.minecraft.storagedrawers.api.capabilities.IItemRepository; +import gregtech.api.capability.IEnergyContainer; import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaHolder; import net.minecraft.nbt.NBTBase; @@ -57,6 +58,8 @@ public final class Capabilities public static Capability ITEM_REPOSITORY_CAPABILITY; + public static Capability GTCE_ENERGY; + /** * Register AE2 provided capabilities. */ @@ -103,7 +106,19 @@ public final class Capabilities } @CapabilityInject( IItemRepository.class ) - private static void capIItemRepositoryRegistered( Capability cap ) { ITEM_REPOSITORY_CAPABILITY = cap; } + private static void capIItemRepositoryRegistered( Capability cap ) + { + ITEM_REPOSITORY_CAPABILITY = cap; + } + + @CapabilityInject( IEnergyContainer.class ) + private static void capIEnergyContainerRegistered( Capability cap ) + { + if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.GTCE ) ) + { + GTCE_ENERGY = cap; + } + } // Create a storage implementation that does not do anything private static Capability.IStorage createNullStorage() diff --git a/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java b/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java index 092444f95..1efc00e2c 100644 --- a/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java +++ b/src/main/java/appeng/tile/networking/TileEnergyAcceptor.java @@ -57,10 +57,16 @@ public class TileEnergyAcceptor extends AENetworkPowerTile } catch( final GridAccessException e ) { - return this.getInternalMaxPower(); + return 0; } } + @Override + public double getInternalMaxPower() + { + return getFunnelPowerDemand( Long.MAX_VALUE ); + } + @Override protected double funnelPowerIntoStorage( final double power, final Actionable mode ) { diff --git a/src/main/java/appeng/tile/powersink/AEBasePoweredTile.java b/src/main/java/appeng/tile/powersink/AEBasePoweredTile.java index 719d522eb..d5d4403dc 100644 --- a/src/main/java/appeng/tile/powersink/AEBasePoweredTile.java +++ b/src/main/java/appeng/tile/powersink/AEBasePoweredTile.java @@ -53,7 +53,7 @@ public abstract class AEBasePoweredTile extends AEBaseInvTile implements IAEPowe private EnumSet internalPowerSides = EnumSet.allOf( EnumFacing.class ); private final IEnergyStorage forgeEnergyAdapter; private Object teslaEnergyAdapter; - + private GTCEEnergyAdapter gtceEnergyAdapter = null; private IC2PowerSink ic2Sink; public AEBasePoweredTile() @@ -63,6 +63,11 @@ public abstract class AEBasePoweredTile extends AEBaseInvTile implements IAEPowe { this.teslaEnergyAdapter = new TeslaEnergyAdapter( this ); } + if( Capabilities.GTCE_ENERGY != null ) + { + this.gtceEnergyAdapter = new GTCEEnergyAdapter( this ); + } + this.ic2Sink = Integrations.ic2().createPowerSink( this, this ); this.ic2Sink.setValidFaces( this.internalPowerSides ); } @@ -284,6 +289,13 @@ public abstract class AEBasePoweredTile extends AEBaseInvTile implements IAEPowe return true; } } + else if( capability == Capabilities.GTCE_ENERGY ) + { + if( this.getPowerSides().contains( facing ) ) + { + return true; + } + } return super.hasCapability( capability, facing ); } @@ -306,7 +318,14 @@ public abstract class AEBasePoweredTile extends AEBaseInvTile implements IAEPowe return (T) this.teslaEnergyAdapter; } } - + else if( capability == Capabilities.GTCE_ENERGY ) + { + if( this.getPowerSides().contains( facing ) ) + { + return (T) this.gtceEnergyAdapter; + } + } + return super.getCapability( capability, facing ); } diff --git a/src/main/java/appeng/tile/powersink/GTCEEnergyAdapter.java b/src/main/java/appeng/tile/powersink/GTCEEnergyAdapter.java new file mode 100644 index 000000000..48c3c0000 --- /dev/null +++ b/src/main/java/appeng/tile/powersink/GTCEEnergyAdapter.java @@ -0,0 +1,67 @@ +package appeng.tile.powersink; + +import appeng.api.config.Actionable; +import appeng.api.config.PowerUnits; +import gregtech.api.capability.IEnergyContainer; +import net.minecraft.util.EnumFacing; + + +public class GTCEEnergyAdapter implements IEnergyContainer +{ + private final IExternalPowerSink sink; + + GTCEEnergyAdapter( IExternalPowerSink sink ) + { + this.sink = sink; + } + + @Override + public long acceptEnergyFromNetwork( EnumFacing enumFacing, long voltage, long amperage ) + { + final double overflow = this.sink.injectExternalPower( PowerUnits.GTCEU, (double) voltage, Actionable.MODULATE ); + + return (long) ( voltage - overflow ); + } + + @Override + public boolean inputsEnergy( EnumFacing enumFacing ) + { + return true; + } + + @Override + public long changeEnergy( long l ) + { + return 0; + } + + @Override + public long getEnergyStored() + { + return (long) Math.floor( PowerUnits.AE.convertTo( PowerUnits.GTCEU, this.sink.getAECurrentPower() ) ); + } + + @Override + public long getEnergyCapacity() + { + return (long) Math.floor( PowerUnits.AE.convertTo( PowerUnits.GTCEU, this.sink.getAEMaxPower() ) ); + } + + @Override + public long getInputAmperage() + { + return 0; + } + + @Override + public long getInputVoltage() + { + return 0; + } + + @Override + public long getEnergyCanBeInserted() + { + return this.getEnergyCapacity() - this.getEnergyStored(); + } +}