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 <Triple <ResourceLocation , Transformation , Boolean >, 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 <Triple <ResourceLocation , Transformation , Boolean >, 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 }
@@ -110,27 +108,14 @@ public boolean isEmpty() {
110108 return bakedCache .isEmpty ();
111109 }
112110
113- private Map <ResourceLocation , BakedModel > getPermanentOverrides () {
114- Map <ResourceLocation , BakedModel > map = permanentOverridesView ;
115- if (map == null ) {
116- synchronized (this ) {
117- map = permanentOverridesView ;
118- if (map == null ) {
119- permanentOverridesView = map = Object2ObjectMaps .unmodifiable (new Object2ObjectOpenHashMap <>(permanentOverridesMutable ));
120- }
121- }
122- }
123- return map ;
124- }
125-
126111 @ Override
127112 public boolean containsKey (Object o ) {
128- return getPermanentOverrides () .getOrDefault (o , SENTINEL ) != null ;
113+ return permanentOverrides .getOrDefault (o , SENTINEL ) != null ;
129114 }
130115
131116 @ Override
132117 public boolean containsValue (Object o ) {
133- return getPermanentOverrides () .containsValue (o ) || bakedCache .containsValue (o );
118+ return permanentOverrides .containsValue (o ) || bakedCache .containsValue (o );
134119 }
135120
136121 private static boolean isVanillaTopLevelModel (ResourceLocation location ) {
@@ -156,7 +141,7 @@ private static boolean isVanillaTopLevelModel(ResourceLocation location) {
156141
157142 @ Override
158143 public BakedModel get (Object o ) {
159- BakedModel model = getPermanentOverrides () .getOrDefault (o , SENTINEL );
144+ BakedModel model = permanentOverrides .getOrDefault (o , SENTINEL );
160145 if (model != SENTINEL )
161146 return model ;
162147 else {
@@ -172,19 +157,15 @@ public BakedModel get(Object o) {
172157 if (model == missingModel ) {
173158 // to correctly emulate the original map, we return null for missing models, unless they are top-level
174159 model = isVanillaTopLevelModel ((ResourceLocation )o ) ? model : null ;
175- this .put ((ResourceLocation ) o , model );
160+ permanentOverrides .put ((ResourceLocation ) o , model );
176161 }
177162 return model ;
178163 }
179164 }
180165
181166 @ Override
182167 public BakedModel put (ResourceLocation resourceLocation , BakedModel bakedModel ) {
183- BakedModel m ;
184- synchronized (this ) {
185- m = permanentOverridesMutable .put (resourceLocation , bakedModel );
186- permanentOverridesView = null ;
187- }
168+ BakedModel m = permanentOverrides .put (resourceLocation , bakedModel );
188169 if (m != null )
189170 return m ;
190171 else
@@ -193,22 +174,15 @@ public BakedModel put(ResourceLocation resourceLocation, BakedModel bakedModel)
193174
194175 @ Override
195176 public BakedModel remove (Object o ) {
196- BakedModel m ;
197- synchronized (this ) {
198- m = permanentOverridesMutable .remove (o );
199- permanentOverridesView = null ;
200- }
177+ BakedModel m = permanentOverrides .remove (o );
201178 if (m != null )
202179 return m ;
203180 return bakedCache .remove (vanillaKey (o ));
204181 }
205182
206183 @ Override
207184 public void putAll (@ NotNull Map <? extends ResourceLocation , ? extends BakedModel > map ) {
208- synchronized (this ) {
209- permanentOverridesMutable .putAll (map );
210- permanentOverridesView = null ;
211- }
185+ permanentOverrides .putAll (map );
212186 }
213187
214188 @ Override
@@ -237,27 +211,23 @@ public Set<Entry<ResourceLocation, BakedModel>> entrySet() {
237211 @ Nullable
238212 @ Override
239213 public BakedModel replace (ResourceLocation key , BakedModel value ) {
240- synchronized (this ) {
241- BakedModel existingOverride = permanentOverridesMutable .get (key );
242- // as long as no valid override was put in (null can mean unable to load model, so we treat as invalid), replace
243- // the model
244- if (existingOverride == null )
245- return this .put (key , value );
246- else
247- return existingOverride ;
248- }
214+ BakedModel existingOverride = permanentOverrides .get (key );
215+ // as long as no valid override was put in (null can mean unable to load model, so we treat as invalid), replace
216+ // the model
217+ if (existingOverride == null )
218+ return this .put (key , value );
219+ else
220+ return existingOverride ;
249221 }
250222
251223 @ Override
252224 public void replaceAll (BiFunction <? super ResourceLocation , ? super BakedModel , ? extends BakedModel > function ) {
253- synchronized (this ) {
254- permanentOverridesMutable .replaceAll (function );
255- permanentOverridesView = null ;
256- }
225+ Set <ResourceLocation > overridenLocations = permanentOverrides .keySet ();
226+ permanentOverrides .replaceAll (function );
257227 boolean uvLock = BlockModelRotation .X0_Y0 .isUvLocked ();
258228 Transformation rotation = BlockModelRotation .X0_Y0 .getRotation ();
259229 bakedCache .replaceAll ((loc , oldModel ) -> {
260- if (loc .getMiddle () != rotation || loc .getRight () != uvLock || getPermanentOverrides (). containsKey (loc .getLeft ()))
230+ if (loc .getMiddle () != rotation || loc .getRight () != uvLock || overridenLocations . contains (loc .getLeft ()))
261231 return oldModel ;
262232 else
263233 return function .apply (loc .getLeft (), oldModel );
0 commit comments