From a4c468b9cff6b41a74fe017ccf29bccf1075071a Mon Sep 17 00:00:00 2001 From: yueh Date: Sat, 22 Jul 2017 13:29:14 +0200 Subject: [PATCH] Updated caps to be manually disabled via config Moved the cap injection to a method, allows them to be configurable. This is not possible for Forge Energy as it is injected before even the configuration are lodaed, thus violating their own capability contract to use the method injection to explicitly make it configurable. Updated the ratio key for forge energy to "ForgeEnergy" without a space --- .../appeng/capabilities/Capabilities.java | 38 +++++++++++++++++-- src/main/java/appeng/core/AEConfig.java | 2 +- .../registries/P2PTunnelRegistry.java | 3 +- .../appeng/integration/IntegrationType.java | 4 +- .../powersink/PoweredItemCapabilities.java | 4 +- .../java/appeng/parts/p2p/PartP2PFEPower.java | 9 +++-- .../tile/powersink/AERootPoweredTile.java | 4 +- 7 files changed, 50 insertions(+), 14 deletions(-) diff --git a/src/main/java/appeng/capabilities/Capabilities.java b/src/main/java/appeng/capabilities/Capabilities.java index 095795572..6097658ee 100644 --- a/src/main/java/appeng/capabilities/Capabilities.java +++ b/src/main/java/appeng/capabilities/Capabilities.java @@ -26,8 +26,11 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.energy.IEnergyStorage; import appeng.api.storage.IStorageMonitorableAccessor; +import appeng.integration.IntegrationRegistry; +import appeng.integration.IntegrationType; /** @@ -40,15 +43,14 @@ public final class Capabilities { } - @CapabilityInject( IStorageMonitorableAccessor.class ) public static Capability STORAGE_MONITORABLE_ACCESSOR; - @CapabilityInject( ITeslaConsumer.class ) public static Capability TESLA_CONSUMER; - @CapabilityInject( ITeslaHolder.class ) public static Capability TESLA_HOLDER; + public static Capability FORGE_ENERGY; + /** * Register AE2 provided capabilities. */ @@ -57,6 +59,36 @@ public final class Capabilities CapabilityManager.INSTANCE.register( IStorageMonitorableAccessor.class, createNullStorage(), NullMENetworkAccessor::new ); } + @CapabilityInject( IStorageMonitorableAccessor.class ) + private static void capIStorageMonitorableAccessorRegistered( Capability cap ) + { + STORAGE_MONITORABLE_ACCESSOR = cap; + } + + @CapabilityInject( ITeslaConsumer.class ) + private static void capITeslaConsumerRegistered( Capability cap ) + { + if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.TESLA ) ) + { + TESLA_CONSUMER = cap; + } + } + + @CapabilityInject( ITeslaHolder.class ) + private static void capITeslaHolderRegistered( Capability cap ) + { + if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.TESLA ) ) + { + TESLA_HOLDER = cap; + } + } + + @CapabilityInject( IEnergyStorage.class ) + private static void capIEnergyStorageRegistered( Capability cap ) + { + FORGE_ENERGY = cap; + } + // Create a storage implementation that does not do anything private static Capability.IStorage createNullStorage() { diff --git a/src/main/java/appeng/core/AEConfig.java b/src/main/java/appeng/core/AEConfig.java index c720adb4c..9f94d9d95 100644 --- a/src/main/java/appeng/core/AEConfig.java +++ b/src/main/java/appeng/core/AEConfig.java @@ -146,7 +146,7 @@ public final class AEConfig extends Configuration implements IConfigurableObject MinecraftForge.EVENT_BUS.register( this ); PowerUnits.EU.conversionRatio = this.get( "PowerRatios", "IC2", DEFAULT_IC2_EXCHANGE ).getDouble( DEFAULT_IC2_EXCHANGE ); - PowerUnits.RF.conversionRatio = this.get( "PowerRatios", "Forge Energy", DEFAULT_RF_EXCHANGE ).getDouble( DEFAULT_RF_EXCHANGE ); + PowerUnits.RF.conversionRatio = this.get( "PowerRatios", "ForgeEnergy", DEFAULT_RF_EXCHANGE ).getDouble( DEFAULT_RF_EXCHANGE ); final double usageEffective = this.get( "PowerRatios", "UsageMultiplier", 1.0 ).getDouble( 1.0 ); PowerMultiplier.CONFIG.multiplier = Math.max( 0.01, usageEffective ); diff --git a/src/main/java/appeng/core/features/registries/P2PTunnelRegistry.java b/src/main/java/appeng/core/features/registries/P2PTunnelRegistry.java index 5abada2be..ee2f47eb4 100644 --- a/src/main/java/appeng/core/features/registries/P2PTunnelRegistry.java +++ b/src/main/java/appeng/core/features/registries/P2PTunnelRegistry.java @@ -41,6 +41,7 @@ import appeng.api.definitions.IItemDefinition; import appeng.api.definitions.IParts; import appeng.api.features.IP2PTunnelRegistry; import appeng.api.util.AEColor; +import appeng.capabilities.Capabilities; import appeng.util.Platform; @@ -244,7 +245,7 @@ public final class P2PTunnelRegistry implements IP2PTunnelRegistry // Next, check if the Item you're holding supports Forge Energy for( EnumFacing face : EnumFacing.VALUES ) { - if( trigger.hasCapability( CapabilityEnergy.ENERGY, face ) ) + if( trigger.hasCapability( Capabilities.FORGE_ENERGY, face ) ) { return TunnelType.FE_POWER; } diff --git a/src/main/java/appeng/integration/IntegrationType.java b/src/main/java/appeng/integration/IntegrationType.java index 9ca3bf946..b37478618 100644 --- a/src/main/java/appeng/integration/IntegrationType.java +++ b/src/main/java/appeng/integration/IntegrationType.java @@ -90,7 +90,9 @@ public enum IntegrationType { return new TheOneProbeModule(); } - }; + }, + + TESLA( IntegrationSide.BOTH, "Tesla", "tesla" ); public final IntegrationSide side; public final String dspName; diff --git a/src/main/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java b/src/main/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java index fa0acd31c..61226cc3b 100644 --- a/src/main/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java +++ b/src/main/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java @@ -64,14 +64,14 @@ class PoweredItemCapabilities implements ICapabilityProvider, IEnergyStorage @Override public boolean hasCapability( Capability capability, @Nullable EnumFacing facing ) { - return capability == CapabilityEnergy.ENERGY || capability == Capabilities.TESLA_CONSUMER || capability == Capabilities.TESLA_HOLDER; + return capability == Capabilities.FORGE_ENERGY || capability == Capabilities.TESLA_CONSUMER || capability == Capabilities.TESLA_HOLDER; } @SuppressWarnings( "unchecked" ) @Override public T getCapability( Capability capability, @Nullable EnumFacing facing ) { - if( capability == CapabilityEnergy.ENERGY ) + if( capability == Capabilities.FORGE_ENERGY ) { return (T) this; } diff --git a/src/main/java/appeng/parts/p2p/PartP2PFEPower.java b/src/main/java/appeng/parts/p2p/PartP2PFEPower.java index 488fdc6fa..b7201a310 100644 --- a/src/main/java/appeng/parts/p2p/PartP2PFEPower.java +++ b/src/main/java/appeng/parts/p2p/PartP2PFEPower.java @@ -35,6 +35,7 @@ import net.minecraftforge.energy.IEnergyStorage; import appeng.api.config.PowerUnits; import appeng.api.parts.IPartModel; +import appeng.capabilities.Capabilities; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.util.Platform; @@ -153,8 +154,8 @@ public class PartP2PFEPower extends PartP2PTunnel implements IEn TileEntity self = this.getTile(); TileEntity te = self.getWorld().getTileEntity( new BlockPos( self.getPos().getX() + this.getSide().xOffset, self.getPos() .getY() + this.getSide().yOffset, self.getPos().getZ() + this.getSide().zOffset ) ); - this.outputTarget = te.hasCapability( CapabilityEnergy.ENERGY, this.getSide().getOpposite().getFacing() ) ? te - .getCapability( CapabilityEnergy.ENERGY, this.getSide().getOpposite().getFacing() ) : null; + this.outputTarget = te.hasCapability( Capabilities.FORGE_ENERGY, this.getSide().getOpposite().getFacing() ) ? te + .getCapability( Capabilities.FORGE_ENERGY, this.getSide().getOpposite().getFacing() ) : null; this.cachedTarget = true; } @@ -233,7 +234,7 @@ public class PartP2PFEPower extends PartP2PTunnel implements IEn @Override public boolean hasCapability( @Nonnull Capability capability ) { - if( capability == CapabilityEnergy.ENERGY ) + if( capability == Capabilities.FORGE_ENERGY ) { return true; } @@ -245,7 +246,7 @@ public class PartP2PFEPower extends PartP2PTunnel implements IEn @Override public T getCapability( @Nonnull Capability capability ) { - if( capability == CapabilityEnergy.ENERGY ) + if( capability == Capabilities.FORGE_ENERGY ) { return (T) this; } diff --git a/src/main/java/appeng/tile/powersink/AERootPoweredTile.java b/src/main/java/appeng/tile/powersink/AERootPoweredTile.java index 74526eed2..fee98fac0 100644 --- a/src/main/java/appeng/tile/powersink/AERootPoweredTile.java +++ b/src/main/java/appeng/tile/powersink/AERootPoweredTile.java @@ -284,7 +284,7 @@ public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowe @Override public boolean hasCapability( Capability capability, EnumFacing facing ) { - if( capability == CapabilityEnergy.ENERGY ) + if( capability == Capabilities.FORGE_ENERGY ) { if( this.getPowerSides().contains( facing ) ) { @@ -306,7 +306,7 @@ public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowe @Override public T getCapability( Capability capability, @Nullable EnumFacing facing ) { - if( capability == CapabilityEnergy.ENERGY ) + if( capability == Capabilities.FORGE_ENERGY ) { if( this.getPowerSides().contains( facing ) ) {