Skip to content

Commit 996d00b

Browse files
committed
Use sided map for registry tracker
Fixes #236
1 parent 015a611 commit 996d00b

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed

fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@
2323
import java.util.Optional;
2424
import java.util.Set;
2525
import java.util.TreeSet;
26+
import java.util.concurrent.ConcurrentHashMap;
2627

2728
import com.google.common.base.Preconditions;
2829
import com.google.gson.JsonArray;
2930
import com.google.gson.JsonElement;
3031
import com.google.gson.JsonObject;
3132
import com.google.gson.JsonParseException;
33+
import net.minecraftforge.fml.LogicalSide;
3234
import net.minecraftforge.fml.ModList;
35+
import net.minecraftforge.fml.util.thread.EffectiveSide;
3336
import org.jetbrains.annotations.Nullable;
3437
import org.slf4j.Logger;
3538
import org.slf4j.LoggerFactory;
@@ -266,7 +269,7 @@ public static boolean featuresEnabledMatch(JsonObject object) {
266269
return set.isSubsetOf(CURRENT_FEATURES.get());
267270
}
268271

269-
public static final ThreadLocal<DynamicRegistryManager.Immutable> CURRENT_REGISTRIES = new ThreadLocal<>();
272+
public static final Map<LogicalSide, DynamicRegistryManager.Immutable> CURRENT_REGISTRIES = new ConcurrentHashMap<>();
270273

271274
public static boolean registryContainsMatch(JsonObject object) {
272275
String key = JsonHelper.getString(object, "registry", "minecraft:item");
@@ -276,7 +279,7 @@ public static boolean registryContainsMatch(JsonObject object) {
276279

277280
private static <E> boolean registryContainsMatch(JsonObject object, RegistryKey<? extends Registry<? extends E>> registryRef) {
278281
JsonArray array = JsonHelper.getArray(object, "values");
279-
DynamicRegistryManager.Immutable registries = CURRENT_REGISTRIES.get();
282+
DynamicRegistryManager.Immutable registries = CURRENT_REGISTRIES.get(EffectiveSide.get());
280283

281284
if (registries == null) {
282285
LOGGER.warn("Can't retrieve current registries. Failing registry_contains resource condition check.");

fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/DataPackContentsMixin.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.concurrent.CompletableFuture;
2020
import java.util.concurrent.Executor;
2121

22+
import net.minecraftforge.fml.util.thread.EffectiveSide;
2223
import org.spongepowered.asm.mixin.Mixin;
2324
import org.spongepowered.asm.mixin.injection.At;
2425
import org.spongepowered.asm.mixin.injection.Inject;
@@ -45,7 +46,7 @@ public class DataPackContentsMixin {
4546
)
4647
public void hookRefresh(DynamicRegistryManager dynamicRegistryManager, CallbackInfo ci) {
4748
ResourceConditionsImpl.LOADED_TAGS.remove();
48-
ResourceConditionsImpl.CURRENT_REGISTRIES.remove();
49+
ResourceConditionsImpl.CURRENT_REGISTRIES.remove(EffectiveSide.get());
4950
}
5051

5152
@Inject(
@@ -54,6 +55,6 @@ public void hookRefresh(DynamicRegistryManager dynamicRegistryManager, CallbackI
5455
)
5556
private static void hookReload(ResourceManager manager, DynamicRegistryManager.Immutable dynamicRegistryManager, FeatureSet enabledFeatures, CommandManager.RegistrationEnvironment environment, int functionPermissionLevel, Executor prepareExecutor, Executor applyExecutor, CallbackInfoReturnable<CompletableFuture<DataPackContents>> cir) {
5657
ResourceConditionsImpl.CURRENT_FEATURES.set(enabledFeatures);
57-
ResourceConditionsImpl.CURRENT_REGISTRIES.set(dynamicRegistryManager);
58+
ResourceConditionsImpl.CURRENT_REGISTRIES.put(EffectiveSide.get(), dynamicRegistryManager);
5859
}
5960
}

fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/LootManagerMixin.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import net.minecraft.resource.ResourceManager;
3030

31+
import net.minecraftforge.fml.util.thread.EffectiveSide;
3132
import org.spongepowered.asm.mixin.Mixin;
3233
import org.spongepowered.asm.mixin.Unique;
3334
import org.spongepowered.asm.mixin.injection.At;
@@ -56,14 +57,14 @@ public class LootManagerMixin {
5657

5758
@Inject(method = "load", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;runAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"), locals = LocalCapture.CAPTURE_FAILHARD)
5859
private static void load(LootDataType type, ResourceManager resourceManager, Executor executor, Map<LootDataType<?>, Map<Identifier, ?>> results, CallbackInfoReturnable<CompletableFuture<?>> cir, Map map) {
59-
dynamicRegistryManagerMap.put(map, ResourceConditionsImpl.CURRENT_REGISTRIES.get());
60+
dynamicRegistryManagerMap.put(map, ResourceConditionsImpl.CURRENT_REGISTRIES.get(EffectiveSide.get()));
6061
}
6162

6263
// runAsync Runnable in load method
6364
@Inject(method = {"method_51189", "m_278660_"}, at = @At("HEAD"), require = 1)
6465
private static void runAsync(ResourceManager resourceManager, LootDataType lootDataType, Map map, CallbackInfo ci) {
65-
assert ResourceConditionsImpl.CURRENT_REGISTRIES.get() == null;
66-
ResourceConditionsImpl.CURRENT_REGISTRIES.set(Objects.requireNonNull(dynamicRegistryManagerMap.remove(map)));
66+
assert ResourceConditionsImpl.CURRENT_REGISTRIES.get(EffectiveSide.get()) == null;
67+
ResourceConditionsImpl.CURRENT_REGISTRIES.put(EffectiveSide.get(), Objects.requireNonNull(dynamicRegistryManagerMap.remove(map)));
6768
}
6869

6970
// forEach in load method
@@ -90,6 +91,6 @@ private static void applyResourceConditions(LootDataType lootDataType, ResourceM
9091
// runAsync Runnable in load method
9192
@Inject(method = {"method_51189", "m_278660_"}, at = @At("RETURN"), require = 1)
9293
private static void runAsyncEnd(ResourceManager resourceManager, LootDataType lootDataType, Map map, CallbackInfo ci) {
93-
ResourceConditionsImpl.CURRENT_REGISTRIES.remove();
94+
ResourceConditionsImpl.CURRENT_REGISTRIES.remove(EffectiveSide.get());
9495
}
9596
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,5 @@ fabric-client-tags-api-v1-version=1.1.2
6969
loom.platform=forge
7070
forge_version=1.20.1-47.3.27
7171
pack_format=15
72-
forgified_version=1.11.12
72+
forgified_version=1.11.13
7373
forge_fabric_loader_version=2.6.0+0.15.0+1.20.1

0 commit comments

Comments
 (0)