Skip to content

Commit d46d245

Browse files
committed
Update NeoForge, adjust dynamic resources for NF API
1 parent 700ccc2 commit d46d245

File tree

5 files changed

+60
-13
lines changed

5 files changed

+60
-13
lines changed

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

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,34 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery {
7575

7676
private final Map<ModelResourceLocation, BakedModel> mfix$emulatedBakedRegistry = new DynamicOverridableMap<>(this::loadBakedModelDynamic);
7777

78-
@Unique
79-
private UnbakedModel loadUnbakedModelDynamic(ModelResourceLocation location) {
78+
@Override
79+
public UnbakedModel mfix$loadUnbakedModelDynamic(ModelResourceLocation location) {
8080
if(location.equals(MISSING_MODEL_VARIANT)) {
8181
return missingModel;
8282
}
83-
if(DEBUG_MODEL_LOADS) {
84-
ModernFix.LOGGER.info("Loading model {}", location);
85-
}
86-
if(location.variant().equals("inventory")) {
87-
this.loadItemModelAndDependencies(location.id());
88-
} else {
89-
((IBlockStateModelLoader)dynamicLoader).loadSpecificBlock(location);
83+
modelBakeryLock.lock();
84+
try {
85+
UnbakedModel existing = this.topLevelModels.get(location);
86+
if (existing != null) {
87+
return existing;
88+
}
89+
if(DEBUG_MODEL_LOADS) {
90+
ModernFix.LOGGER.info("Loading model {}", location);
91+
}
92+
if(location.variant().equals("inventory")) {
93+
this.loadItemModelAndDependencies(location.id());
94+
} else {
95+
((IBlockStateModelLoader)dynamicLoader).loadSpecificBlock(location);
96+
}
97+
return this.topLevelModels.getOrDefault(location, this.missingModel);
98+
} finally {
99+
modelBakeryLock.unlock();
90100
}
91-
return this.topLevelModels.getOrDefault(location, this.missingModel);
101+
}
102+
103+
@Override
104+
public UnbakedModel mfix$getMissingModel() {
105+
return missingModel;
92106
}
93107

94108
@Unique
@@ -101,7 +115,7 @@ private BakedModel loadBakedModelDynamic(ModelResourceLocation location) {
101115
try {
102116
model = bakedTopLevelModels.get(location);
103117
if(model == null) {
104-
UnbakedModel prototype = loadUnbakedModelDynamic(location);
118+
UnbakedModel prototype = mfix$loadUnbakedModelDynamic(location);
105119
prototype.resolveParents(this::getModel);
106120
if(DEBUG_MODEL_LOADS) {
107121
ModernFix.LOGGER.info("Baking model {}", location);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package org.embeddedt.modernfix.duck;
22

3+
import net.minecraft.client.resources.model.ModelResourceLocation;
4+
import net.minecraft.client.resources.model.UnbakedModel;
5+
36
public interface IExtendedModelBakery {
47
void mfix$tick();
58
void mfix$finishLoading();
9+
UnbakedModel mfix$loadUnbakedModelDynamic(ModelResourceLocation location);
10+
UnbakedModel mfix$getMissingModel();
611
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ mixinextras_version=0.3.2
77
mod_id=modernfix
88
minecraft_version=1.21
99
enabled_platforms=fabric,neoforge
10-
forge_version=21.0.0-beta
10+
forge_version=21.0.18-beta
1111
# parchment_version=2023.07.09
1212
refined_storage_version=4392788
1313
jei_version=16.0.0.28
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources;
2+
3+
import net.minecraft.client.resources.model.ModelBakery;
4+
import net.minecraft.client.resources.model.ModelResourceLocation;
5+
import net.minecraft.client.resources.model.UnbakedModel;
6+
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
7+
import org.embeddedt.modernfix.duck.IExtendedModelBakery;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Overwrite;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
13+
@Mixin(targets = {"net/minecraft/client/resources/model/ModelBakery$ModelBakerImpl"})
14+
@ClientOnlyMixin
15+
public class ModelBakerImplMixin {
16+
@Shadow @Final private ModelBakery field_40571;
17+
18+
/**
19+
* @author embeddedt
20+
* @reason Handle dynamic model loading
21+
*/
22+
@Overwrite(remap = false)
23+
public UnbakedModel getTopLevelModel(ModelResourceLocation location) {
24+
IExtendedModelBakery bakery = (IExtendedModelBakery)this.field_40571;
25+
UnbakedModel model = bakery.mfix$loadUnbakedModelDynamic(location);
26+
return model == bakery.mfix$getMissingModel() ? null : model;
27+
}
28+
}

neoforge/src/main/resources/META-INF/neoforge.mods.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ modId = "neoforge" #mandatory
4747
# Does this dependency have to exist - if not, ordering below must be specified
4848
type = "required" #mandatory
4949
# The version range of the dependency
50-
versionRange = "[21.0.0-alpha,)" #mandatory
50+
versionRange = "[21.0.17-beta,)" #mandatory
5151
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
5252
ordering = "NONE"
5353
# Side this dependency is applied on - BOTH, CLIENT or SERVER

0 commit comments

Comments
 (0)