diff --git a/src/main/java/mekanism/common/integration/energy/IEnergyCompat.java b/src/main/java/mekanism/common/integration/energy/IEnergyCompat.java index 20dcf0047b3..bf41f8f48bf 100644 --- a/src/main/java/mekanism/common/integration/energy/IEnergyCompat.java +++ b/src/main/java/mekanism/common/integration/energy/IEnergyCompat.java @@ -58,6 +58,7 @@ default boolean capabilityExists() { * * @param handler Handler to wrap. Can be assumed to be the same type as this energy compat. */ + @Nullable IStrictEnergyHandler wrapAsStrictEnergyHandler(Object handler); /** diff --git a/src/main/java/mekanism/common/integration/energy/grandpower/GPEnergyCompat.java b/src/main/java/mekanism/common/integration/energy/grandpower/GPEnergyCompat.java index 5e1b734670b..a10b0320ca3 100644 --- a/src/main/java/mekanism/common/integration/energy/grandpower/GPEnergyCompat.java +++ b/src/main/java/mekanism/common/integration/energy/grandpower/GPEnergyCompat.java @@ -1,6 +1,7 @@ package mekanism.common.integration.energy.grandpower; import dev.technici4n.grandpower.api.ILongEnergyStorage; +import dev.technici4n.grandpower.impl.NonLongWrapper; import mekanism.api.annotations.NothingNullByDefault; import mekanism.api.energy.IStrictEnergyHandler; import mekanism.common.Mekanism; @@ -9,10 +10,25 @@ import mekanism.common.integration.energy.IEnergyCompat; import mekanism.common.util.UnitDisplayUtils.EnergyUnit; import net.neoforged.neoforge.capabilities.ICapabilityProvider; +import org.jetbrains.annotations.Nullable; @NothingNullByDefault public class GPEnergyCompat implements IEnergyCompat { + @Nullable + private static final Class NON_LONG_WRAPPER; + + static { + Class tmp; + try { + //noinspection UnstableApiUsage + tmp = NonLongWrapper.class; + } catch (NoClassDefFoundError e) { + tmp = null; + } + NON_LONG_WRAPPER = tmp; + } + @Override public MultiTypeCapability getCapability() { return GPCapability.ENERGY; @@ -46,7 +62,11 @@ public Object wrapStrictEnergyHandler(IStrictEnergyHandler handler) { } @Override + @Nullable public IStrictEnergyHandler wrapAsStrictEnergyHandler(Object handler) { + if (NON_LONG_WRAPPER == null || NON_LONG_WRAPPER.isInstance(handler)) { + return null;//prevent double wrapping of FE by GP + } return new GPStrictEnergyHandler((ILongEnergyStorage) handler); } } \ No newline at end of file