From d217f2421582d7465621d43cd0262eb1effc5036 Mon Sep 17 00:00:00 2001 From: Sam Kirby <23245543+sam-kirby@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:00:22 +0100 Subject: [PATCH] Prevent JMapStages hiding minimap if already hidden Telling JourneyMap to hide the minimap causes JourneyMap to write its settings out to disk even if they haven't changed; this happens on the render thread and so can cause significant hangs opening the file, serializing and writing. This patch adds a check to see if the minimap is already hidden; if it is then we return early without rewriting the settings --- gradle.properties | 2 +- .../core/SevPatchesTransformer.java | 2 ++ .../core/patches/PatchJMapStagesStutter.java | 35 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/main/java/tv/darkosto/sevpatches/core/patches/PatchJMapStagesStutter.java diff --git a/gradle.properties b/gradle.properties index 71d03f3..7aac339 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version_base = 1.14.1 +version_base = 1.15.0 # Sets default memory used for gradle commands. Can be overridden by user or command line properties. # This is required to provide enough memory for the Minecraft decompilation process. diff --git a/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java b/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java index b45c5f2..e41e981 100644 --- a/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java +++ b/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java @@ -47,6 +47,8 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) return new PatchGalacticraftSlimeling(basicClass).apply(); case "net.darkhax.infoaccessories.info.InfoType": return new PatchInfoAccCompass(basicClass).apply(); + case "net.darkhax.jmapstages.JMapPermissionHandler": + return new PatchJMapStagesStutter(basicClass).apply(); default: return basicClass; } diff --git a/src/main/java/tv/darkosto/sevpatches/core/patches/PatchJMapStagesStutter.java b/src/main/java/tv/darkosto/sevpatches/core/patches/PatchJMapStagesStutter.java new file mode 100644 index 0000000..f48a076 --- /dev/null +++ b/src/main/java/tv/darkosto/sevpatches/core/patches/PatchJMapStagesStutter.java @@ -0,0 +1,35 @@ +package tv.darkosto.sevpatches.core.patches; + +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.*; +import tv.darkosto.sevpatches.core.utils.AsmUtils; + +public class PatchJMapStagesStutter extends Patch { + public PatchJMapStagesStutter(byte[] inputClass) { + super(inputClass); + } + + @Override + protected boolean patch() { + MethodNode toggleMinimap = AsmUtils.findMethod(this.classNode, "toggleMinimap"); + if (toggleMinimap == null) return false; + + InsnList insns = new InsnList(); + LabelNode ln = new LabelNode(); + + /* + if (enable == this.uiManager.isMiniMapEnabled()) return; + */ + insns.add(new VarInsnNode(Opcodes.ALOAD, 0)); + insns.add(new FieldInsnNode(Opcodes.GETFIELD, "net/darkhax/jmapstages/JMapPermissionHandler", "uiManager", "Ljourneymap/client/ui/UIManager;")); + insns.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "journeymap/client/ui/UIManager", "isMiniMapEnabled", "()Z", false)); + insns.add(new VarInsnNode(Opcodes.ILOAD, 1)); + insns.add(new JumpInsnNode(Opcodes.IF_ICMPNE, ln)); + insns.add(new InsnNode(Opcodes.RETURN)); + insns.add(ln); + + toggleMinimap.instructions.insert(insns); + + return true; + } +}