Skip to content

Commit 30f4832

Browse files
committed
Merge 1.19.4 into 1.20
2 parents 5b716dc + 8527594 commit 30f4832

File tree

7 files changed

+169
-1
lines changed

7 files changed

+169
-1
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources;
2+
3+
import net.minecraft.client.renderer.block.model.ItemOverrides;
4+
import net.minecraft.client.resources.model.BakedModel;
5+
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
10+
11+
@Mixin(ItemOverrides.class)
12+
public class ItemOverridesMixin {
13+
@Inject(method = "resolve", at = @At("RETURN"), cancellable = true)
14+
private void getRealModel(CallbackInfoReturnable<BakedModel> cir) {
15+
BakedModel original = cir.getReturnValue();
16+
if(original instanceof ItemOverrideBakedModel) {
17+
ItemOverrideBakedModel override = (ItemOverrideBakedModel)original;
18+
cir.setReturnValue(override.getRealModel());
19+
}
20+
}
21+
}

common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class ModernFixEarlyConfig {
3131
private final Map<String, Option> options = new HashMap<>();
3232
private final Multimap<String, Option> optionsByCategory = HashMultimap.create();
3333

34+
private static final boolean ALLOW_OVERRIDE_OVERRIDES = Boolean.getBoolean("modernfix.unsupported.allowOverriding");
35+
3436
public static final boolean OPTIFINE_PRESENT;
3537

3638
private File configFile;
@@ -264,6 +266,9 @@ private void addMixinRule(String mixin, boolean enabled) {
264266
}
265267

266268
private void readProperties(Properties props) {
269+
if(ALLOW_OVERRIDE_OVERRIDES)
270+
LOGGER.fatal("JVM argument given to override mod overrides. Issues opened with this option present will be ignored unless they can be reproduced without.");
271+
267272
for (Map.Entry<Object, Object> entry : props.entrySet()) {
268273
String key = (String) entry.getKey();
269274
String value = (String) entry.getValue();
@@ -286,7 +291,7 @@ private void readProperties(Properties props) {
286291
continue;
287292
}
288293

289-
if(!option.isModDefined())
294+
if(ALLOW_OVERRIDE_OVERRIDES || !option.isModDefined())
290295
option.setEnabled(enabled, true);
291296
else
292297
LOGGER.warn("Option '{}' already disabled by a mod. Ignoring user configuration", key);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.stream.Collectors;
2525

2626
public class DynamicBakedModelProvider implements Map<ResourceLocation, BakedModel> {
27+
public static DynamicBakedModelProvider currentInstance = null;
2728
private final ModelBakery bakery;
2829
private final Map<ModelBakery.BakedCacheKey, BakedModel> bakedCache;
2930
private final Map<ResourceLocation, BakedModel> permanentOverrides;
@@ -74,6 +75,7 @@ public DynamicBakedModelProvider(ModelBakery bakery, Map<ModelBakery.BakedCacheK
7475
this.bakery = bakery;
7576
this.bakedCache = cache;
7677
this.permanentOverrides = Collections.synchronizedMap(new Object2ObjectOpenHashMap<>());
78+
currentInstance = this;
7779
}
7880

7981
public void setMissingModel(BakedModel model) {
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.embeddedt.modernfix.dynamicresources;
2+
3+
import com.google.common.collect.ImmutableList;
4+
import net.minecraft.client.renderer.block.model.BakedQuad;
5+
import net.minecraft.client.renderer.block.model.ItemOverrides;
6+
import net.minecraft.client.renderer.block.model.ItemTransforms;
7+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
8+
import net.minecraft.client.resources.model.BakedModel;
9+
import net.minecraft.core.Direction;
10+
import net.minecraft.resources.ResourceLocation;
11+
import net.minecraft.util.RandomSource;
12+
import net.minecraft.world.level.block.state.BlockState;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.concurrent.ConcurrentHashMap;
18+
19+
/**
20+
* Delegate model that stores the location of an actual baked model, for use in ItemOverrides.
21+
*/
22+
public class ItemOverrideBakedModel implements BakedModel {
23+
private static final Map<ResourceLocation, ItemOverrideBakedModel> OVERRIDE_MODELS = new ConcurrentHashMap<>();
24+
public final ResourceLocation realLocation;
25+
26+
private ItemOverrideBakedModel(ResourceLocation realLocation) {
27+
this.realLocation = realLocation;
28+
}
29+
30+
public static ItemOverrideBakedModel of(ResourceLocation realLocation) {
31+
return OVERRIDE_MODELS.computeIfAbsent(realLocation, ItemOverrideBakedModel::new);
32+
}
33+
34+
public BakedModel getRealModel() {
35+
return DynamicBakedModelProvider.currentInstance.get(realLocation);
36+
}
37+
38+
@Override
39+
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction direction, RandomSource random) {
40+
return ImmutableList.of();
41+
}
42+
43+
@Override
44+
public boolean useAmbientOcclusion() {
45+
return false;
46+
}
47+
48+
@Override
49+
public boolean isGui3d() {
50+
return false;
51+
}
52+
53+
@Override
54+
public boolean usesBlockLight() {
55+
return false;
56+
}
57+
58+
@Override
59+
public boolean isCustomRenderer() {
60+
return false;
61+
}
62+
63+
@Override
64+
public TextureAtlasSprite getParticleIcon() {
65+
return null;
66+
}
67+
68+
@Override
69+
public ItemTransforms getTransforms() {
70+
return ItemTransforms.NO_TRANSFORMS;
71+
}
72+
73+
@Override
74+
public ItemOverrides getOverrides() {
75+
return null;
76+
}
77+
}

common/src/main/resources/modernfix.accesswidener

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,5 @@ accessible class net/minecraft/server/MinecraftServer$ReloadableResources
3737
accessible method net/minecraft/client/gui/screens/Screen addRenderableWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;
3838
accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map;
3939
accessible field net/minecraft/client/renderer/block/model/multipart/MultiPart definition Lnet/minecraft/world/level/block/state/StateDefinition;
40+
accessible field net/minecraft/client/renderer/block/model/ItemOverrides$BakedOverride model Lnet/minecraft/client/resources/model/BakedModel;
41+
mutable field net/minecraft/client/renderer/block/model/ItemOverrides$BakedOverride model Lnet/minecraft/client/resources/model/BakedModel;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.embeddedt.modernfix.fabric.mixin.perf.dynamic_resources;
2+
3+
import net.minecraft.client.renderer.block.model.BlockModel;
4+
import net.minecraft.client.renderer.block.model.ItemOverride;
5+
import net.minecraft.client.renderer.block.model.ItemOverrides;
6+
import net.minecraft.client.resources.model.BakedModel;
7+
import net.minecraft.client.resources.model.ModelBaker;
8+
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
13+
14+
@Mixin(ItemOverrides.class)
15+
public class ItemOverridesFabricMixin {
16+
@Inject(method = "bakeModel", at = @At("HEAD"), cancellable = true)
17+
private void useDynamicallyBakedModel(ModelBaker baker, BlockModel model, ItemOverride override, CallbackInfoReturnable<BakedModel> cir) {
18+
cir.setReturnValue(ItemOverrideBakedModel.of(override.getModel()));
19+
}
20+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources;
2+
3+
import net.minecraft.client.renderer.block.model.ItemOverride;
4+
import net.minecraft.client.renderer.block.model.ItemOverrides;
5+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
6+
import net.minecraft.client.resources.model.*;
7+
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Shadow;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
14+
15+
import java.util.function.Function;
16+
17+
@Mixin(ItemOverrides.class)
18+
public class ItemOverridesForgeMixin {
19+
@Shadow @Final private ItemOverrides.BakedOverride[] overrides;
20+
private volatile boolean forceLoadedModels = false;
21+
22+
@Inject(method = "bakeModel", at = @At("HEAD"), cancellable = true, remap = false)
23+
private void useDynamicallyBakedModel(ModelBaker baker, UnbakedModel model, ItemOverride override, Function<Material, TextureAtlasSprite> textureGetter, CallbackInfoReturnable<BakedModel> cir) {
24+
cir.setReturnValue(ItemOverrideBakedModel.of(override.getModel()));
25+
}
26+
27+
@Inject(method = "getOverrides", at = @At("HEAD"), remap = false)
28+
private void doForceloadModels(CallbackInfoReturnable<ItemOverrides.BakedOverride> cir) {
29+
if(!forceLoadedModels) {
30+
synchronized (this) {
31+
if(!forceLoadedModels) {
32+
for(ItemOverrides.BakedOverride override : overrides) {
33+
if(override != null && override.model instanceof ItemOverrideBakedModel)
34+
override.model = ((ItemOverrideBakedModel)override.model).getRealModel();
35+
}
36+
forceLoadedModels = true;
37+
}
38+
}
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)