Skip to content

Commit 1339fc7

Browse files
committed
Merge 1.20 into 1.20.2
2 parents 3b7d2f1 + d557725 commit 1339fc7

File tree

1 file changed

+19
-49
lines changed

1 file changed

+19
-49
lines changed

common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java

Lines changed: 19 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.google.common.collect.ImmutableSet;
44
import com.mojang.math.Transformation;
5-
import it.unimi.dsi.fastutil.objects.Object2ObjectMaps;
65
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
76
import net.minecraft.client.renderer.block.model.BakedQuad;
87
import 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

Comments
 (0)