Skip to content

Commit 6b01f04

Browse files
committed
Merge 1.16 into 1.18
2 parents fccbae3 + ced7f86 commit 6b01f04

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;
@@ -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

Comments
 (0)