Skip to content

Commit c118675

Browse files
committed
Fix concurrency issues in vanilla RegistryOps.memoizeLookup
1 parent 8b0622f commit c118675

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.embeddedt.modernfix.common.mixin.bugfix.registry_ops_cme;
2+
3+
import net.minecraft.core.Registry;
4+
import net.minecraft.resources.RegistryOps;
5+
import net.minecraft.resources.ResourceKey;
6+
import org.spongepowered.asm.mixin.Final;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Mutable;
9+
import org.spongepowered.asm.mixin.Shadow;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
14+
import java.util.Map;
15+
import java.util.Optional;
16+
import java.util.concurrent.ConcurrentHashMap;
17+
18+
@Mixin(targets = {"net/minecraft/resources/RegistryOps$1"})
19+
public class RegistryOpsMemoizedMixin {
20+
@Shadow @Final @Mutable
21+
private Map<ResourceKey<? extends Registry<?>>, Optional<? extends RegistryOps.RegistryInfo<?>>> lookups;
22+
23+
@Inject(method = "<init>", at = @At("RETURN"))
24+
private void useConcurrentMap(RegistryOps.RegistryInfoLookup registryInfoLookup, CallbackInfo ci) {
25+
this.lookups = new ConcurrentHashMap<>(this.lookups);
26+
}
27+
}

0 commit comments

Comments
 (0)