From f92894971ef8de2d6d820dbb7f8671016c341413 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 10 Jan 2025 16:05:08 +1100 Subject: [PATCH] fix java edition style mipmaps --- .../LegacyTweaksMixinPlugin.java | 58 +++++++++++++++++++ .../tweak/texture/MipmapTypeHelper.java | 3 + .../mipmapping/MipmapGeneratorMixin.java | 11 ++-- src/main/resources/legacy_tweaks.mixins.json | 1 + 4 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 src/main/java/xyz/violaflower/legacy_tweaks/LegacyTweaksMixinPlugin.java diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/LegacyTweaksMixinPlugin.java b/src/main/java/xyz/violaflower/legacy_tweaks/LegacyTweaksMixinPlugin.java new file mode 100644 index 00000000..4df05ca7 --- /dev/null +++ b/src/main/java/xyz/violaflower/legacy_tweaks/LegacyTweaksMixinPlugin.java @@ -0,0 +1,58 @@ +package xyz.violaflower.legacy_tweaks; + +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class LegacyTweaksMixinPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + if (mixinClassName.contains("MipmapGeneratorMixin")) { + System.out.println(mixinClassName); + for (MethodNode method : targetClass.methods) { + for (AbstractInsnNode instruction : method.instructions) { + if (instruction.getOpcode() == Opcodes.AASTORE) { + method.instructions.insert(instruction, new MethodInsnNode(Opcodes.INVOKESTATIC, "xyz/violaflower/legacy_tweaks/helper/tweak/texture/MipmapTypeHelper", "aastoreMarker", "()V")); + } + } + } + } + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/helper/tweak/texture/MipmapTypeHelper.java b/src/main/java/xyz/violaflower/legacy_tweaks/helper/tweak/texture/MipmapTypeHelper.java index c62cea71..67ef2d10 100644 --- a/src/main/java/xyz/violaflower/legacy_tweaks/helper/tweak/texture/MipmapTypeHelper.java +++ b/src/main/java/xyz/violaflower/legacy_tweaks/helper/tweak/texture/MipmapTypeHelper.java @@ -72,6 +72,9 @@ private static void exportGeneratedMipmaps(NativeImage[] images, ResourceLocatio } } + // Dynamically added to MipmapGenerator via a mixin plugin + public static void aastoreMarker() {} + /// Adds manual mipmaps in `textures/ltmipmaps` public static void addManualMipmaps(int mipmapLevels, NativeImage[] mipmaps, ResourceLocation currentResourceLocation) { if (!Tweaks.MIPMAPPING.manualMipmapping.isEnabled()) return; diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/mipmapping/MipmapGeneratorMixin.java b/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/mipmapping/MipmapGeneratorMixin.java index 812bf04a..f0cd219e 100644 --- a/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/mipmapping/MipmapGeneratorMixin.java +++ b/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/mipmapping/MipmapGeneratorMixin.java @@ -1,8 +1,10 @@ package xyz.violaflower.legacy_tweaks.mixin.client.tweak.mipmapping; +import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.platform.NativeImage; import net.minecraft.client.renderer.texture.MipmapGenerator; import net.minecraft.resources.ResourceLocation; +import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -27,10 +29,9 @@ private static void changeMipmapType(NativeImage[] nativeImages, int i, Callback MipmapTypeHelper.setMipmapType(nativeImages, i, currentResourceLocation, cir); } - @Inject(method = "generateMipLevels", at = @At("RETURN")) - private static void changeJavaMipmaps(NativeImage[] images, int mipmapLevels, CallbackInfoReturnable cir) { - ResourceLocation currentResourceLocation = MipmapTypeHelper.currentResourceLocation; - if (currentResourceLocation == null) return; // if it's already been canceled, don't do it again. - MipmapTypeHelper.addManualMipmaps(mipmapLevels, cir.getReturnValue(), currentResourceLocation); + @Dynamic // this is some cursed stuff + @Inject(method = "generateMipLevels", at = @At(value = "INVOKE", target = "Lxyz/violaflower/legacy_tweaks/helper/tweak/texture/MipmapTypeHelper;aastoreMarker()V", ordinal = 2)) + private static void changeJavaMipmaps(NativeImage[] images, int mipmapLevels, CallbackInfoReturnable cir, @Local(ordinal = 1) int level, @Local(ordinal = 1) NativeImage[] nativeImages) { + MipmapTypeHelper.maybeGetMipmapForLevel(level, g -> nativeImages[level] = g, MipmapTypeHelper.currentResourceLocation); } } diff --git a/src/main/resources/legacy_tweaks.mixins.json b/src/main/resources/legacy_tweaks.mixins.json index 51ff3245..bc2cfb6b 100644 --- a/src/main/resources/legacy_tweaks.mixins.json +++ b/src/main/resources/legacy_tweaks.mixins.json @@ -1,6 +1,7 @@ { "required": true, "package": "xyz.violaflower.legacy_tweaks.mixin", + "plugin": "xyz.violaflower.legacy_tweaks.LegacyTweaksMixinPlugin", "compatibilityLevel": "JAVA_21", "minVersion": "0.8", "client": [