From c11867536927ab0bbbd76dcd4b5bdae69a9cc57d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 15 May 2025 18:53:47 -0400 Subject: [PATCH] Fix concurrency issues in vanilla RegistryOps.memoizeLookup --- .../RegistryOpsMemoizedMixin.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/registry_ops_cme/RegistryOpsMemoizedMixin.java diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/registry_ops_cme/RegistryOpsMemoizedMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/registry_ops_cme/RegistryOpsMemoizedMixin.java new file mode 100644 index 00000000..f4ac000b --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/registry_ops_cme/RegistryOpsMemoizedMixin.java @@ -0,0 +1,27 @@ +package org.embeddedt.modernfix.common.mixin.bugfix.registry_ops_cme; + +import net.minecraft.core.Registry; +import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceKey; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +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; + +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +@Mixin(targets = {"net/minecraft/resources/RegistryOps$1"}) +public class RegistryOpsMemoizedMixin { + @Shadow @Final @Mutable + private Map>, Optional>> lookups; + + @Inject(method = "", at = @At("RETURN")) + private void useConcurrentMap(RegistryOps.RegistryInfoLookup registryInfoLookup, CallbackInfo ci) { + this.lookups = new ConcurrentHashMap<>(this.lookups); + } +}