From 274c41d6376af0ea978db5c16e8f1abe95bd8730 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 16 Apr 2023 20:54:41 -0400 Subject: [PATCH] Allow unloading unused structures --- .../modernfix/core/config/ModernFixEarlyConfig.java | 2 +- .../StructureManagerMixin.java | 11 ++++++++--- src/main/resources/modernfix.mixins.json | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) rename src/main/java/org/embeddedt/modernfix/mixin/{bugfix/structure_manager_crash => perf/dynamic_structure_manager}/StructureManagerMixin.java (70%) diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 5af30d73..7037ea3b 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -47,7 +47,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("bugfix.concurrency", true); this.addMixinRule("bugfix.edge_chunk_not_saved", true); this.addMixinRule("bugfix.packet_leak", false); - this.addMixinRule("bugfix.structure_manager_crash", true); + this.addMixinRule("perf.dynamic_structure_manager", true); this.addMixinRule("bugfix.mc218112", true); this.addMixinRule("bugfix.chunk_deadlock", true); this.addMixinRule("bugfix.chunk_deadlock.valhesia", modPresent("valhelsia_structures")); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/structure_manager_crash/StructureManagerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_structure_manager/StructureManagerMixin.java similarity index 70% rename from src/main/java/org/embeddedt/modernfix/mixin/bugfix/structure_manager_crash/StructureManagerMixin.java rename to src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_structure_manager/StructureManagerMixin.java index 8ee6dd8d..4384dbcf 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/structure_manager_crash/StructureManagerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_structure_manager/StructureManagerMixin.java @@ -1,5 +1,7 @@ -package org.embeddedt.modernfix.mixin.bugfix.structure_manager_crash; +package org.embeddedt.modernfix.mixin.perf.dynamic_structure_manager; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.mojang.datafixers.DataFixer; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; @@ -14,7 +16,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.Collections; import java.util.Map; @Mixin(StructureManager.class) @@ -24,6 +25,10 @@ public class StructureManagerMixin { @Inject(method = "", at = @At("RETURN")) private void makeStructuresSafe(ResourceManager arg, LevelStorageSource.LevelStorageAccess arg2, DataFixer dataFixer, CallbackInfo ci) { - this.structureRepository = Collections.synchronizedMap(this.structureRepository); + /* Structures needing to be reloaded is not a huge issue since we optimize loading them already */ + Cache structureCache = CacheBuilder.newBuilder() + .softValues() + .build(); + this.structureRepository = structureCache.asMap(); } } diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 6464cc72..5d575391 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -7,7 +7,7 @@ "refmap": "modernfix.refmap.json", "mixins": [ "bugfix.edge_chunk_not_saved.ChunkManagerMixin", - "bugfix.structure_manager_crash.StructureManagerMixin", + "perf.dynamic_structure_manager.StructureManagerMixin", "bugfix.tf_cme_on_load.TwilightForestModMixin", "bugfix.refinedstorage.te_bug.ItemExternalStorageProviderMixin", "bugfix.refinedstorage.te_bug.FluidExternalStorageProviderMixin",