From 9e733da049e270549690bab64b4dde78bd844db6 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 25 Jan 2021 18:09:56 +0100 Subject: [PATCH] Attempted fix for #25 (#28) * Experiment with low priority and require=0 to try to fix #25 * Revert require = 0 because it didn't work * (Hopefully) solve things with a mixin plugin Might be overkill, but we could need it again in the future... * Replace Platform call with FabricLoader --- .../fabric/client/MixinEffectInstance.java | 6 +-- .../fabric/ArchitecturyMixinPlugin.java | 52 +++++++++++++++++++ .../main/resources/architectury.mixins.json | 5 +- 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 fabric/src/main/java/me/shedaniel/architectury/plugin/fabric/ArchitecturyMixinPlugin.java diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java index bee02c1e..1294d5bb 100644 --- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java +++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java @@ -29,7 +29,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Unique -@Mixin(value = EffectInstance.class, priority = 1050) +@Mixin(value = EffectInstance.class, priority = 950) public class MixinEffectInstance { @Redirect( method = "", @@ -40,7 +40,7 @@ public class MixinEffectInstance { private ResourceLocation mojangPls(String _0, ResourceManager rm, String str) { return mojangPls(new ResourceLocation(str), ".json"); } - + @Redirect( method = "getOrCreate", at = @At(value = "NEW", @@ -50,7 +50,7 @@ public class MixinEffectInstance { private static ResourceLocation mojangPls(String _0, ResourceManager rm, Program.Type type, String str) { return mojangPls(new ResourceLocation(str), type.getExtension()); } - + private static ResourceLocation mojangPls(ResourceLocation rl, String ext) { return new ResourceLocation(rl.getNamespace(), "shaders/program/" + rl.getPath() + ext); } diff --git a/fabric/src/main/java/me/shedaniel/architectury/plugin/fabric/ArchitecturyMixinPlugin.java b/fabric/src/main/java/me/shedaniel/architectury/plugin/fabric/ArchitecturyMixinPlugin.java new file mode 100644 index 00000000..a97f2c28 --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/architectury/plugin/fabric/ArchitecturyMixinPlugin.java @@ -0,0 +1,52 @@ +package me.shedaniel.architectury.plugin.fabric; + +import net.fabricmc.loader.api.FabricLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class ArchitecturyMixinPlugin implements IMixinConfigPlugin { + + @Override + public void onLoad(String mixinPackage) { + // noop + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + switch (mixinClassName) { + case "me.shedaniel.architectury.mixin.fabric.client.MixinEffectInstance": + return !FabricLoader.getInstance().isModLoaded("satin"); + default: + return true; + } + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + // noop + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + // noop + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + // noop + } +} diff --git a/fabric/src/main/resources/architectury.mixins.json b/fabric/src/main/resources/architectury.mixins.json index 9d2fa087..bd47a887 100644 --- a/fabric/src/main/resources/architectury.mixins.json +++ b/fabric/src/main/resources/architectury.mixins.json @@ -1,12 +1,14 @@ { "required": true, "package": "me.shedaniel.architectury.mixin.fabric", + "plugin": "me.shedaniel.architectury.plugin.fabric.ArchitecturyMixinPlugin", "compatibilityLevel": "JAVA_8", "minVersion": "0.7.11", "client": [ "client.MixinClientLevel", "client.MixinClientPacketListener", "client.MixinDebugScreenOverlay", + "client.MixinEffectInstance", "client.MixinGameRenderer", "client.MixinIntegratedServer", "client.MixinKeyboardHandler", @@ -14,8 +16,7 @@ "client.MixinMouseHandler", "client.MixinMultiPlayerGameMode", "client.MixinScreen", - "client.MixinTextureAtlas", - "client.MixinEffectInstance" + "client.MixinTextureAtlas" ], "mixins": [ "ExplosionPreInvoker",