Skip to content

Commit 93a6563

Browse files
Fix sodium compat
1 parent 6e4074b commit 93a6563

3 files changed

Lines changed: 42 additions & 6 deletions

File tree

src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,23 @@
55
import net.minecraft.client.renderer.block.dispatch.BlockStateModel;
66
import net.minecraft.client.resources.model.BlockStateModelLoader;
77
import net.minecraft.client.resources.model.ClientItemInfoLoader;
8+
import net.minecraft.client.resources.model.ModelDiscovery;
89
import net.minecraft.client.resources.model.ModelManager;
10+
import net.minecraft.client.resources.model.ResolvedModel;
911
import net.minecraft.client.resources.model.UnbakedModel;
12+
import net.minecraft.client.resources.model.cuboid.ItemModelGenerator;
1013
import net.minecraft.resources.Identifier;
1114
import net.minecraft.server.packs.resources.Resource;
1215
import net.minecraft.world.level.block.state.BlockState;
16+
import net.neoforged.neoforge.client.model.standalone.StandaloneModelLoader;
1317
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
1418
import org.embeddedt.modernfix.dynresources.BlockStateModelMap;
1519
import org.embeddedt.modernfix.dynresources.DynamicModelSystem;
1620
import org.spongepowered.asm.mixin.Mixin;
1721
import org.spongepowered.asm.mixin.Overwrite;
1822
import org.spongepowered.asm.mixin.injection.At;
1923
import org.spongepowered.asm.mixin.injection.ModifyArg;
24+
import org.spongepowered.asm.mixin.injection.Redirect;
2025

2126
import java.util.Map;
2227
import java.util.concurrent.CompletableFuture;
@@ -40,11 +45,20 @@ public class MixinModelManager {
4045
* @author embeddedt
4146
* @reason Model resolution is not necessary, because we dynamically find models as they are referenced
4247
*/
43-
@Overwrite
44-
private static ModelManager.ResolvedModels discoverModelDependencies(
45-
Map<Identifier, UnbakedModel> inputModels, BlockStateModelLoader.LoadedModels loadedModels, ClientItemInfoLoader.LoadedClientInfos loadedClientInfos, net.neoforged.neoforge.client.model.standalone.StandaloneModelLoader.LoadedModels standaloneModels
48+
@Redirect(
49+
method = "discoverModelDependencies(Ljava/util/Map;Lnet/minecraft/client/resources/model/BlockStateModelLoader$LoadedModels;Lnet/minecraft/client/resources/model/ClientItemInfoLoader$LoadedClientInfos;Lnet/neoforged/neoforge/client/model/standalone/StandaloneModelLoader$LoadedModels;)Lnet/minecraft/client/resources/model/ModelManager$ResolvedModels;",
50+
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/ModelDiscovery;resolve()Ljava/util/Map;")
51+
)
52+
private static Map<Identifier, ResolvedModel> resolveModelDependenciesDynamically(
53+
ModelDiscovery discovery, Map<Identifier, UnbakedModel> inputModels, BlockStateModelLoader.LoadedModels loadedModels, ClientItemInfoLoader.LoadedClientInfos loadedClientInfos, StandaloneModelLoader.LoadedModels standaloneModels
4654
) {
47-
return new DynamicModelSystem.DynamicResolver(inputModels, loadedModels, loadedClientInfos, standaloneModels).resolvedModels();
55+
UnbakedModel generatedItemModel = new ItemModelGenerator();
56+
var generatedItemWrapper = ((ModelDiscoveryAccessor) discovery).mfix$getModelWrappers().get(ItemModelGenerator.GENERATED_ITEM_MODEL_ID);
57+
if (generatedItemWrapper != null) {
58+
generatedItemModel = ((ModelDiscoveryModelWrapperAccessor) generatedItemWrapper).mfix$getWrapped();
59+
}
60+
61+
return new DynamicModelSystem.DynamicResolver(inputModels, loadedModels, loadedClientInfos, standaloneModels, generatedItemModel).resolvedModels().models();
4862
}
4963

5064
/**
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources;
2+
3+
import net.minecraft.client.resources.model.ModelDiscovery;
4+
import net.minecraft.client.resources.model.UnbakedModel;
5+
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.gen.Accessor;
8+
9+
@Mixin(ModelDiscovery.ModelWrapper.class)
10+
@ClientOnlyMixin
11+
public interface ModelDiscoveryModelWrapperAccessor {
12+
@Accessor("wrapped")
13+
UnbakedModel mfix$getWrapped();
14+
}

src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,19 @@ public static ClientItemInfoLoader.LoadedClientInfos createDynamicClientInfos(Ma
138138
public record DynamicResolver(Map<Identifier, UnbakedModel> inputModels,
139139
BlockStateModelLoader.LoadedModels loadedModels,
140140
ClientItemInfoLoader.LoadedClientInfos loadedClientInfos,
141-
StandaloneModelLoader.LoadedModels standaloneModels) {
141+
StandaloneModelLoader.LoadedModels standaloneModels,
142+
UnbakedModel generatedItemModel) {
143+
144+
public DynamicResolver(Map<Identifier, UnbakedModel> inputModels,
145+
BlockStateModelLoader.LoadedModels loadedModels,
146+
ClientItemInfoLoader.LoadedClientInfos loadedClientInfos,
147+
StandaloneModelLoader.LoadedModels standaloneModels) {
148+
this(inputModels, loadedModels, loadedClientInfos, standaloneModels, new ItemModelGenerator());
149+
}
142150

143151
private ResolvedModel resolveModel(Identifier id) {
144152
var discovery = new ModelDiscovery(inputModels, MissingCuboidModel.missingModel());
145-
discovery.addSpecialModel(ItemModelGenerator.GENERATED_ITEM_MODEL_ID, new ItemModelGenerator());
153+
discovery.addSpecialModel(ItemModelGenerator.GENERATED_ITEM_MODEL_ID, generatedItemModel);
146154
if (!id.equals(ItemModelGenerator.GENERATED_ITEM_MODEL_ID)) {
147155
UnbakedModel unbaked = inputModels.get(id);
148156
if (unbaked != null) {

0 commit comments

Comments
 (0)