diff --git a/common/build.gradle b/common/build.gradle index 39472623e..fbfeb62d7 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -25,6 +25,10 @@ dependencies { modCompileOnly("curse.maven:ftb-teams-404468:4229138") modCompileOnly("curse.maven:ftb-chunks-314906:4229120") + // EMF compat + modCompileOnly("curse.maven:entity-model-features-844662:5696901") + modCompileOnly("curse.maven:entity-texture-features-fabric-568563:5697084") + //Common create compat, //We just use a version from a platform and hope the classes exist on both versions and mixins apply correctly modCompileOnly("com.simibubi.create:create-fabric-${minecraft_version}:${create_fabric_version}") diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/emf/MixinEMFAnimationEntityContext.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/emf/MixinEMFAnimationEntityContext.java new file mode 100644 index 000000000..e80c5579a --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/emf/MixinEMFAnimationEntityContext.java @@ -0,0 +1,34 @@ +package org.valkyrienskies.mod.mixin.mod_compat.emf; + +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import traben.entity_model_features.models.animation.EMFAnimationEntityContext; +import traben.entity_model_features.utils.EMFEntity; + +@Mixin(EMFAnimationEntityContext.class) +public class MixinEMFAnimationEntityContext { + @Shadow + private static EMFEntity IEMFEntity; + + @Inject( + at = @At("HEAD"), + method = "distanceOfEntityFrom", + cancellable = true + ) + private static void distanceOfEntityFrom(final BlockPos pos, final CallbackInfoReturnable cir) { + if (IEMFEntity != null) { + final var level = Minecraft.getInstance().level; + final var posW = VSGameUtilsKt.toWorldCoordinates(level, Vec3.atCenterOf(pos)); + final var entityW = VSGameUtilsKt.toWorldCoordinates(level, Vec3.atCenterOf(IEMFEntity.etf$getBlockPos())); + final var dist = posW.distanceTo(entityW); + cir.setReturnValue((int) dist); + } + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/etf/MixinBlockEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/etf/MixinBlockEntity.java new file mode 100644 index 000000000..c7e64422e --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/etf/MixinBlockEntity.java @@ -0,0 +1,21 @@ +package org.valkyrienskies.mod.mixin.mod_compat.etf; + +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import traben.entity_texture_features.utils.ETFEntity; + +@Mixin(value = BlockEntity.class, priority = 1200) +public abstract class MixinBlockEntity implements ETFEntity { + @Override + public float etf$distanceTo(final Entity entity) { + final var level = Minecraft.getInstance().level; + final var aW = VSGameUtilsKt.toWorldCoordinates(level, Vec3.atCenterOf(etf$getBlockPos())); + final var bW = VSGameUtilsKt.toWorldCoordinates(level, entity.position()); + final var dist = aW.distanceTo(bW); + return (float) dist; + } +} diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index c7549fabc..489e19601 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -177,6 +177,8 @@ "mod_compat.vanilla_renderer.MixinLevelRendererVanilla", "mod_compat.vanilla_renderer.MixinViewAreaVanilla", "mod_compat.vanilla_renderer.RenderChunkInfoAccessor", + "mod_compat.emf.MixinEMFAnimationEntityContext", + "mod_compat.etf.MixinBlockEntity", "realms.MixinRealmsConnect" ], "injectors": {