From 095b10802ff0e24bcf6b0fc0997386e5fda06064 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 19 Mar 2024 22:25:42 +0000 Subject: [PATCH] Update ad-astra integration --- .../unicopia/compat/ad_astra/OxygenUtils.java | 17 ++++-------- .../unicopia/entity/player/PlayerPhysics.java | 2 +- .../mixin/ad_astra/MixinOxygenUtils.java | 26 +++++++++++++------ 3 files changed, 24 insertions(+), 21 deletions(-) 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 index ca4956a4..d1497215 100644 --- a/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenUtils.java +++ b/src/main/java/com/minelittlepony/unicopia/compat/ad_astra/OxygenUtils.java @@ -1,18 +1,11 @@ package com.minelittlepony.unicopia.compat.ad_astra; -import com.minelittlepony.unicopia.mixin.ad_astra.MixinOxygenUtils; +import net.minecraft.entity.Entity; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.entity.LivingEntity; -import net.minecraft.world.World; +public final class OxygenUtils { + public static OxygenApi API = entity -> false; -public interface OxygenUtils { - boolean MOD_LOADED = FabricLoader.getInstance().isModLoaded("ad_astra"); - - static boolean entityHasOxygen(World world, LivingEntity entity) { - if (MOD_LOADED) { - return MixinOxygenUtils.entityHasOxygen(world, entity); - } - return 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 a857cc73..81be2e28 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -196,7 +196,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab if ((RegistryUtils.isIn(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE, UTags.HAS_NO_ATMOSPHERE) || Unicopia.getConfig().dimensionsWithoutAtmosphere.get().contains(RegistryUtils.getId(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE).toString())) - && !OxygenUtils.entityHasOxygen(entity.getWorld(), entity)) { + && !OxygenUtils.API.hasOxygen(entity)) { 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 be39ab53..c71bf32c 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,20 +1,30 @@ 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.Invoker; +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 net.minecraft.entity.LivingEntity; -import net.minecraft.world.World; +import com.minelittlepony.unicopia.compat.ad_astra.OxygenUtils; @Pseudo @Mixin( - targets = { "earth.terrarium.ad_astra.common.util.OxygenUtils" }, + targets = { "earth.terrarium.adastra.api.systems.OxygenApi" }, remap = false ) -public interface MixinOxygenUtils { - @Invoker("entityHasOxygen") - static boolean entityHasOxygen(World world, LivingEntity entity) { - return true; +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(); } }