diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java index 77dd70d4..40338995 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java @@ -2,7 +2,6 @@ package org.embeddedt.modernfix.dynamicresources; import com.google.common.collect.ImmutableSet; import com.mojang.math.Transformation; -import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.ItemOverrides; @@ -40,8 +39,7 @@ public class DynamicBakedModelProvider implements Map, BakedModel> bakedCache; - private volatile Map permanentOverridesView = null; - private final Map permanentOverridesMutable; + private final Map permanentOverrides; private BakedModel missingModel; private static final BakedModel SENTINEL = new BakedModel() { @Override @@ -88,7 +86,7 @@ public class DynamicBakedModelProvider implements Map, BakedModel> cache) { this.bakery = bakery; this.bakedCache = cache; - this.permanentOverridesMutable = new Object2ObjectOpenHashMap<>(); + this.permanentOverrides = Collections.synchronizedMap(new Object2ObjectOpenHashMap<>()); if(currentInstance == null) currentInstance = this; } @@ -110,27 +108,14 @@ public class DynamicBakedModelProvider implements Map getPermanentOverrides() { - Map map = permanentOverridesView; - if(map == null) { - synchronized (this) { - map = permanentOverridesView; - if(map == null) { - permanentOverridesView = map = Object2ObjectMaps.unmodifiable(new Object2ObjectOpenHashMap<>(permanentOverridesMutable)); - } - } - } - return map; - } - @Override public boolean containsKey(Object o) { - return getPermanentOverrides().getOrDefault(o, SENTINEL) != null; + return permanentOverrides.getOrDefault(o, SENTINEL) != null; } @Override public boolean containsValue(Object o) { - return getPermanentOverrides().containsValue(o) || bakedCache.containsValue(o); + return permanentOverrides.containsValue(o) || bakedCache.containsValue(o); } private static boolean isVanillaTopLevelModel(ResourceLocation location) { @@ -156,7 +141,7 @@ public class DynamicBakedModelProvider implements Map map) { - synchronized (this) { - permanentOverridesMutable.putAll(map); - permanentOverridesView = null; - } + permanentOverrides.putAll(map); } @Override @@ -237,27 +211,23 @@ public class DynamicBakedModelProvider implements Map function) { - synchronized (this) { - permanentOverridesMutable.replaceAll(function); - permanentOverridesView = null; - } + Set overridenLocations = permanentOverrides.keySet(); + permanentOverrides.replaceAll(function); boolean uvLock = BlockModelRotation.X0_Y0.isUvLocked(); Transformation rotation = BlockModelRotation.X0_Y0.getRotation(); bakedCache.replaceAll((loc, oldModel) -> { - if(loc.getMiddle() != rotation || loc.getRight() != uvLock || getPermanentOverrides().containsKey(loc.getLeft())) + if(loc.getMiddle() != rotation || loc.getRight() != uvLock || overridenLocations.contains(loc.getLeft())) return oldModel; else return function.apply(loc.getLeft(), oldModel);