From aa50c4466e5885b2165046a1631d71bb2bd9f44d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 23 Jul 2023 19:28:16 -0400 Subject: [PATCH] Fix memory leak in Blueprint Implements https://github.com/team-abnormals/blueprint/pull/195, which is still not released on 1.19.2, and may never be released on 1.18.2 --- forge/build.gradle | 2 ++ .../ObjectModificationManagerMixin.java | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java diff --git a/forge/build.gradle b/forge/build.gradle index e58467d6..9f1b9b6f 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -45,6 +45,8 @@ dependencies { modCompileOnly("vazkii.patchouli:Patchouli:1.18.2-71.1") modCompileOnly("curse.maven:twilightforest-227639:4337390") + modCompileOnly("curse.maven:blueprint-382216:3991478") + common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java new file mode 100644 index 00000000..1c5f1961 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java @@ -0,0 +1,27 @@ +package org.embeddedt.modernfix.forge.mixin.bugfix.blueprint_modif_memory_leak; + +import com.google.gson.Gson; +import com.teamabnormals.blueprint.core.util.modification.ObjectModificationManager; +import com.teamabnormals.blueprint.core.util.modification.selection.SelectionSpace; +import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; +import org.embeddedt.modernfix.annotation.RequiresMod; +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.CallbackInfo; + +@Mixin(ObjectModificationManager.class) +@RequiresMod("blueprint") +public abstract class ObjectModificationManagerMixin extends SimpleJsonResourceReloadListener { + @Shadow protected SelectionSpace selectionSpace; + + public ObjectModificationManagerMixin(Gson gson, String string) { + super(gson, string); + } + + @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", at = @At("RETURN"), remap = false) + private void clearSelectionSpace(CallbackInfo ci) { + this.selectionSpace = consumer -> {}; + } +}