diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java index 663d349e..1ad3f0a1 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java @@ -65,7 +65,7 @@ public class UnicopiaClient implements ClientModInitializer { private ZapAppleStageStore.Stage zapAppleStage = ZapAppleStageStore.Stage.HIBERNATING; public static Optional getCamera() { - return Optional.of(getNullableCamera()); + return Optional.ofNullable(getNullableCamera()); } @Nullable diff --git a/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenApi.java b/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenApi.java new file mode 100644 index 00000000..abc635e2 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenApi.java @@ -0,0 +1,12 @@ +package com.minelittlepony.unicopia.compat.ad_astra; + +import java.util.concurrent.atomic.AtomicReference; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface OxygenApi { + AtomicReference API = new AtomicReference<>((world, pos) -> false); + + boolean hasOxygen(World world, BlockPos pos); +} diff --git a/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenUtils.java b/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenUtils.java deleted file mode 100644 index d1497215..00000000 --- a/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenUtils.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.minelittlepony.unicopia.compat.ad_astra; - -import net.minecraft.entity.Entity; - -public final class OxygenUtils { - public static OxygenApi API = entity -> false; - - public interface OxygenApi { - boolean hasOxygen(Entity entity); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index de13f11d..699a2e95 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -12,7 +12,7 @@ import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.client.minelittlepony.MineLPDelegate; import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation; -import com.minelittlepony.unicopia.compat.ad_astra.OxygenUtils; +import com.minelittlepony.unicopia.compat.ad_astra.OxygenApi; import com.minelittlepony.unicopia.entity.*; import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.duck.LivingEntityDuck; @@ -200,7 +200,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab if ((RegistryUtils.isIn(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE, UTags.DimensionTypes.HAS_NO_ATMOSPHERE) || Unicopia.getConfig().dimensionsWithoutAtmosphere.get().contains(RegistryUtils.getId(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE).toString())) - && !OxygenUtils.API.hasOxygen(entity)) { + && !OxygenApi.API.get().hasOxygen(entity.getWorld(), entity.getBlockPos())) { return FlightType.NONE; } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/ad_astra/MixinOxygenUtils.java b/src/main/java/com/minelittlepony/unicopia/mixin/ad_astra/MixinOxygenUtils.java index c71bf32c..f195f81a 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/ad_astra/MixinOxygenUtils.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/ad_astra/MixinOxygenUtils.java @@ -1,30 +1,31 @@ package com.minelittlepony.unicopia.mixin.ad_astra; -import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Coerce; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.minelittlepony.unicopia.compat.ad_astra.OxygenUtils; +import com.minelittlepony.unicopia.compat.ad_astra.OxygenApi; @Pseudo @Mixin( targets = { "earth.terrarium.adastra.api.systems.OxygenApi" }, remap = false ) -public interface MixinOxygenUtils extends OxygenUtils.OxygenApi { - @Accessor("API") - @Coerce - static Object getAPI() { - throw new AbstractMethodError("stub"); - } - - @Dynamic("Compiler-generated class-init() method") - @Inject(method = "()V", at = @At("RETURN"), remap = false) - private static void classInit() { - OxygenUtils.API = (OxygenUtils.OxygenApi)getAPI(); - } +interface MixinOxygenApi extends OxygenApi { } + +@Pseudo +@Mixin( + targets = { "earth.terrarium.adastra.api.ApiHelper" }, + remap = false +) +abstract class MixinApiHelper { + @Inject(method = "load", at = @At("RETURN"), require = 0) + private static void onLoad(Class clazz, CallbackInfoReturnable info) { + if (info.getReturnValue() instanceof OxygenApi api) { + OxygenApi.API.set(api); + } + } +} \ No newline at end of file diff --git a/src/main/resources/unicopia.mixin.json b/src/main/resources/unicopia.mixin.json index 46be0255..ba92c81c 100644 --- a/src/main/resources/unicopia.mixin.json +++ b/src/main/resources/unicopia.mixin.json @@ -71,7 +71,8 @@ "trinkets.MixinTrinketInventory", "trinkets.MixinScreenHandler", "seasons.MixinFertilizableUtil", - "ad_astra.MixinOxygenUtils", + "ad_astra.MixinApiHelper", + "ad_astra.MixinOxygenApi", "forgified.MixinIForgeBoat" ], "client": [