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 ;
@@ -39,8 +38,7 @@ public class DynamicBakedModelProvider implements Map<ResourceLocation, BakedMod
3938 public static DynamicBakedModelProvider currentInstance = null ;
4039 private final ModelBakery bakery ;
4140 private final Map <Triple <ResourceLocation , Transformation , Boolean >, BakedModel > bakedCache ;
42- private volatile Map <ResourceLocation , BakedModel > permanentOverridesView = null ;
43- private final Map <ResourceLocation , BakedModel > permanentOverridesMutable ;
41+ private final Map <ResourceLocation , BakedModel > permanentOverrides ;
4442 private BakedModel missingModel ;
4543 private static final BakedModel SENTINEL = new BakedModel () {
4644 @ Override
@@ -87,7 +85,7 @@ public ItemOverrides getOverrides() {
8785 public DynamicBakedModelProvider (ModelBakery bakery , Map <Triple <ResourceLocation , Transformation , Boolean >, BakedModel > cache ) {
8886 this .bakery = bakery ;
8987 this .bakedCache = cache ;
90- this .permanentOverridesMutable = new Object2ObjectOpenHashMap <>();
88+ this .permanentOverrides = Collections . synchronizedMap ( new Object2ObjectOpenHashMap <>() );
9189 if (currentInstance == null )
9290 currentInstance = this ;
9391 }
@@ -109,27 +107,14 @@ public boolean isEmpty() {
109107 return bakedCache .isEmpty ();
110108 }
111109
112- private Map <ResourceLocation , BakedModel > getPermanentOverrides () {
113- Map <ResourceLocation , BakedModel > map = permanentOverridesView ;
114- if (map == null ) {
115- synchronized (this ) {
116- map = permanentOverridesView ;
117- if (map == null ) {
118- permanentOverridesView = map = Object2ObjectMaps .unmodifiable (new Object2ObjectOpenHashMap <>(permanentOverridesMutable ));
119- }
120- }
121- }
122- return map ;
123- }
124-
125110 @ Override
126111 public boolean containsKey (Object o ) {
127- return getPermanentOverrides () .getOrDefault (o , SENTINEL ) != null ;
112+ return permanentOverrides .getOrDefault (o , SENTINEL ) != null ;
128113 }
129114
130115 @ Override
131116 public boolean containsValue (Object o ) {
132- return getPermanentOverrides () .containsValue (o ) || bakedCache .containsValue (o );
117+ return permanentOverrides .containsValue (o ) || bakedCache .containsValue (o );
133118 }
134119
135120 private static boolean isVanillaTopLevelModel (ResourceLocation location ) {
@@ -155,7 +140,7 @@ private static boolean isVanillaTopLevelModel(ResourceLocation location) {
155140
156141 @ Override
157142 public BakedModel get (Object o ) {
158- BakedModel model = getPermanentOverrides () .getOrDefault (o , SENTINEL );
143+ BakedModel model = permanentOverrides .getOrDefault (o , SENTINEL );
159144 if (model != SENTINEL )
160145 return model ;
161146 else {
@@ -171,19 +156,15 @@ public BakedModel get(Object o) {
171156 if (model == missingModel ) {
172157 // to correctly emulate the original map, we return null for missing models, unless they are top-level
173158 model = isVanillaTopLevelModel ((ResourceLocation )o ) ? model : null ;
174- this .put ((ResourceLocation ) o , model );
159+ permanentOverrides .put ((ResourceLocation ) o , model );
175160 }
176161 return model ;
177162 }
178163 }
179164
180165 @ Override
181166 public BakedModel put (ResourceLocation resourceLocation , BakedModel bakedModel ) {
182- BakedModel m ;
183- synchronized (this ) {
184- m = permanentOverridesMutable .put (resourceLocation , bakedModel );
185- permanentOverridesView = null ;
186- }
167+ BakedModel m = permanentOverrides .put (resourceLocation , bakedModel );
187168 if (m != null )
188169 return m ;
189170 else
@@ -192,22 +173,15 @@ public BakedModel put(ResourceLocation resourceLocation, BakedModel bakedModel)
192173
193174 @ Override
194175 public BakedModel remove (Object o ) {
195- BakedModel m ;
196- synchronized (this ) {
197- m = permanentOverridesMutable .remove (o );
198- permanentOverridesView = null ;
199- }
176+ BakedModel m = permanentOverrides .remove (o );
200177 if (m != null )
201178 return m ;
202179 return bakedCache .remove (vanillaKey (o ));
203180 }
204181
205182 @ Override
206183 public void putAll (@ NotNull Map <? extends ResourceLocation , ? extends BakedModel > map ) {
207- synchronized (this ) {
208- permanentOverridesMutable .putAll (map );
209- permanentOverridesView = null ;
210- }
184+ permanentOverrides .putAll (map );
211185 }
212186
213187 @ Override
@@ -236,27 +210,23 @@ public Set<Entry<ResourceLocation, BakedModel>> entrySet() {
236210 @ Nullable
237211 @ Override
238212 public BakedModel replace (ResourceLocation key , BakedModel value ) {
239- synchronized (this ) {
240- BakedModel existingOverride = permanentOverridesMutable .get (key );
241- // as long as no valid override was put in (null can mean unable to load model, so we treat as invalid), replace
242- // the model
243- if (existingOverride == null )
244- return this .put (key , value );
245- else
246- return existingOverride ;
247- }
213+ BakedModel existingOverride = permanentOverrides .get (key );
214+ // as long as no valid override was put in (null can mean unable to load model, so we treat as invalid), replace
215+ // the model
216+ if (existingOverride == null )
217+ return this .put (key , value );
218+ else
219+ return existingOverride ;
248220 }
249221
250222 @ Override
251223 public void replaceAll (BiFunction <? super ResourceLocation , ? super BakedModel , ? extends BakedModel > function ) {
252- synchronized (this ) {
253- permanentOverridesMutable .replaceAll (function );
254- permanentOverridesView = null ;
255- }
224+ Set <ResourceLocation > overridenLocations = permanentOverrides .keySet ();
225+ permanentOverrides .replaceAll (function );
256226 boolean uvLock = BlockModelRotation .X0_Y0 .isUvLocked ();
257227 Transformation rotation = BlockModelRotation .X0_Y0 .getRotation ();
258228 bakedCache .replaceAll ((loc , oldModel ) -> {
259- if (loc .getMiddle () != rotation || loc .getRight () != uvLock || getPermanentOverrides (). containsKey (loc .getLeft ()))
229+ if (loc .getMiddle () != rotation || loc .getRight () != uvLock || overridenLocations . contains (loc .getLeft ()))
260230 return oldModel ;
261231 else
262232 return function .apply (loc .getLeft (), oldModel );
0 commit comments