22
33import com .google .common .collect .ImmutableSet ;
44import com .mojang .math .Transformation ;
5- import it .unimi .dsi .fastutil .objects .Object2ObjectMaps ;
65import it .unimi .dsi .fastutil .objects .Object2ObjectOpenHashMap ;
76import net .minecraft .client .renderer .block .model .BakedQuad ;
87import net .minecraft .client .renderer .block .model .ItemOverrides ;
@@ -40,8 +39,7 @@ public class DynamicBakedModelProvider implements Map<ResourceLocation, BakedMod
4039 public static DynamicBakedModelProvider currentInstance = null ;
4140 private final ModelBakery bakery ;
4241 private final Map <ModelBakery .BakedCacheKey , BakedModel > bakedCache ;
43- private volatile Map <ResourceLocation , BakedModel > permanentOverridesView = null ;
44- private final Map <ResourceLocation , BakedModel > permanentOverridesMutable ;
42+ private final Map <ResourceLocation , BakedModel > permanentOverrides ;
4543 private BakedModel missingModel ;
4644 private static final BakedModel SENTINEL = new BakedModel () {
4745 @ Override
@@ -88,7 +86,7 @@ public ItemOverrides getOverrides() {
8886 public DynamicBakedModelProvider (ModelBakery bakery , Map <ModelBakery .BakedCacheKey , BakedModel > cache ) {
8987 this .bakery = bakery ;
9088 this .bakedCache = cache ;
91- this .permanentOverridesMutable = new Object2ObjectOpenHashMap <>();
89+ this .permanentOverrides = Collections . synchronizedMap ( new Object2ObjectOpenHashMap <>() );
9290 if (currentInstance == null )
9391 currentInstance = this ;
9492 }
@@ -111,27 +109,14 @@ public boolean isEmpty() {
111109 return bakedCache .isEmpty ();
112110 }
113111
114- private Map <ResourceLocation , BakedModel > getPermanentOverrides () {
115- Map <ResourceLocation , BakedModel > map = permanentOverridesView ;
116- if (map == null ) {
117- synchronized (this ) {
118- map = permanentOverridesView ;
119- if (map == null ) {
120- permanentOverridesView = map = Object2ObjectMaps .unmodifiable (new Object2ObjectOpenHashMap <>(permanentOverridesMutable ));
121- }
122- }
123- }
124- return map ;
125- }
126-
127112 @ Override
128113 public boolean containsKey (Object o ) {
129- return getPermanentOverrides () .getOrDefault (o , SENTINEL ) != null ;
114+ return permanentOverrides .getOrDefault (o , SENTINEL ) != null ;
130115 }
131116
132117 @ Override
133118 public boolean containsValue (Object o ) {
134- return getPermanentOverrides () .containsValue (o ) || bakedCache .containsValue (o );
119+ return permanentOverrides .containsValue (o ) || bakedCache .containsValue (o );
135120 }
136121
137122 private static boolean isVanillaTopLevelModel (ResourceLocation location ) {
@@ -157,7 +142,7 @@ private static boolean isVanillaTopLevelModel(ResourceLocation location) {
157142
158143 @ Override
159144 public BakedModel get (Object o ) {
160- BakedModel model = getPermanentOverrides () .getOrDefault (o , SENTINEL );
145+ BakedModel model = permanentOverrides .getOrDefault (o , SENTINEL );
161146 if (model != SENTINEL )
162147 return model ;
163148 else {
@@ -173,19 +158,15 @@ public BakedModel get(Object o) {
173158 if (model == missingModel ) {
174159 // to correctly emulate the original map, we return null for missing models, unless they are top-level
175160 model = isVanillaTopLevelModel ((ResourceLocation )o ) ? model : null ;
176- this .put ((ResourceLocation ) o , model );
161+ permanentOverrides .put ((ResourceLocation ) o , model );
177162 }
178163 return model ;
179164 }
180165 }
181166
182167 @ Override
183168 public BakedModel put (ResourceLocation resourceLocation , BakedModel bakedModel ) {
184- BakedModel m ;
185- synchronized (this ) {
186- m = permanentOverridesMutable .put (resourceLocation , bakedModel );
187- permanentOverridesView = null ;
188- }
169+ BakedModel m = permanentOverrides .put (resourceLocation , bakedModel );
189170 if (m != null )
190171 return m ;
191172 else
@@ -194,22 +175,15 @@ public BakedModel put(ResourceLocation resourceLocation, BakedModel bakedModel)
194175
195176 @ Override
196177 public BakedModel remove (Object o ) {
197- BakedModel m ;
198- synchronized (this ) {
199- m = permanentOverridesMutable .remove (o );
200- permanentOverridesView = null ;
201- }
178+ BakedModel m = permanentOverrides .remove (o );
202179 if (m != null )
203180 return m ;
204181 return bakedCache .remove (vanillaKey (o ));
205182 }
206183
207184 @ Override
208185 public void putAll (@ NotNull Map <? extends ResourceLocation , ? extends BakedModel > map ) {
209- synchronized (this ) {
210- permanentOverridesMutable .putAll (map );
211- permanentOverridesView = null ;
212- }
186+ permanentOverrides .putAll (map );
213187 }
214188
215189 @ Override
@@ -238,27 +212,23 @@ public Set<Entry<ResourceLocation, BakedModel>> entrySet() {
238212 @ Nullable
239213 @ Override
240214 public BakedModel replace (ResourceLocation key , BakedModel value ) {
241- synchronized (this ) {
242- BakedModel existingOverride = permanentOverridesMutable .get (key );
243- // as long as no valid override was put in (null can mean unable to load model, so we treat as invalid), replace
244- // the model
245- if (existingOverride == null )
246- return this .put (key , value );
247- else
248- return existingOverride ;
249- }
215+ BakedModel existingOverride = permanentOverrides .get (key );
216+ // as long as no valid override was put in (null can mean unable to load model, so we treat as invalid), replace
217+ // the model
218+ if (existingOverride == null )
219+ return this .put (key , value );
220+ else
221+ return existingOverride ;
250222 }
251223
252224 @ Override
253225 public void replaceAll (BiFunction <? super ResourceLocation , ? super BakedModel , ? extends BakedModel > function ) {
254- synchronized (this ) {
255- permanentOverridesMutable .replaceAll (function );
256- permanentOverridesView = null ;
257- }
226+ Set <ResourceLocation > overridenLocations = permanentOverrides .keySet ();
227+ permanentOverrides .replaceAll (function );
258228 boolean uvLock = BlockModelRotation .X0_Y0 .isUvLocked ();
259229 Transformation rotation = BlockModelRotation .X0_Y0 .getRotation ();
260230 bakedCache .replaceAll ((loc , oldModel ) -> {
261- if (loc .transformation () != rotation || loc .isUvLocked () != uvLock || getPermanentOverrides (). containsKey (loc .id ()))
231+ if (loc .transformation () != rotation || loc .isUvLocked () != uvLock || overridenLocations . contains (loc .id ()))
262232 return oldModel ;
263233 else
264234 return function .apply (loc .id (), oldModel );
0 commit comments