Skip to content

Commit 6a8d63a

Browse files
committed
Merge 1.18 into 1.19.2
2 parents d4f09f6 + 6b01f04 commit 6a8d63a

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

Comments
 (0)