Port to release 1.21.5

This commit is contained in:
DerCommander323 2025-06-25 18:31:23 +02:00
parent e6c966cb89
commit 26769c3869
10 changed files with 77 additions and 37 deletions

View File

@ -1,6 +1,6 @@
plugins { plugins {
id "architectury-plugin" version "3.4-SNAPSHOT" id "architectury-plugin" version "3.4-SNAPSHOT"
id "dev.architectury.loom" version "1.9-SNAPSHOT" apply false id "dev.architectury.loom" version "1.10-SNAPSHOT" apply false
id "maven-publish" id "maven-publish"
id 'com.matthewprenger.cursegradle' version '1.4.0' apply false id 'com.matthewprenger.cursegradle' version '1.4.0' apply false
id 'com.palantir.git-version' version '1.0.0' id 'com.palantir.git-version' version '1.0.0'

View File

@ -84,7 +84,7 @@ repositories {
exclusiveContent { exclusiveContent {
forRepository { forRepository {
maven { maven {
url = 'https://maven.saps.dev/minecraft' url = 'https://maven.latvian.dev/releases'
} }
} }
filter { filter {

View File

@ -9,11 +9,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import com.mojang.serialization.JsonOps; import com.mojang.serialization.JsonOps;
import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.block.model.BlockModelDefinition;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.client.renderer.block.model.ItemModelGenerator;
import net.minecraft.client.renderer.block.model.SimpleModelWrapper;
import net.minecraft.client.renderer.item.ClientItem; import net.minecraft.client.renderer.item.ClientItem;
import net.minecraft.client.renderer.item.ItemModel; import net.minecraft.client.renderer.item.ItemModel;
import net.minecraft.client.renderer.item.MissingItemModel; import net.minecraft.client.renderer.item.MissingItemModel;
@ -33,16 +29,19 @@ import net.minecraft.client.resources.model.ModelState;
import net.minecraft.client.resources.model.ResolvedModel; import net.minecraft.client.resources.model.ResolvedModel;
import net.minecraft.client.resources.model.SpriteGetter; import net.minecraft.client.resources.model.SpriteGetter;
import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.GsonHelper; import net.minecraft.util.GsonHelper;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFix;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.Reader; import java.io.Reader;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
@ -146,16 +145,46 @@ public class DynamicModelProvider {
public SpriteGetter sprites() { public SpriteGetter sprites() {
return DynamicModelProvider.this.textureGetter; return DynamicModelProvider.this.textureGetter;
} }
@Override
public <T> T compute(SharedOperationKey<T> key) {
return key.compute(this);
}
}; };
var textureSlots = this.resolvedMissingModel.getTopTextureSlots(); var textureSlots = this.resolvedMissingModel.getTopTextureSlots();
var quadCollection = this.resolvedMissingModel.bakeTopGeometry(textureSlots, missingModelBaker, BlockModelRotation.X0_Y0); var quadCollection = this.resolvedMissingModel.bakeTopGeometry(textureSlots, missingModelBaker, BlockModelRotation.X0_Y0);
var particleSprite = this.resolvedMissingModel.resolveParticleSprite(textureSlots, missingModelBaker); var particleSprite = this.resolvedMissingModel.resolveParticleSprite(textureSlots, missingModelBaker);
this.missingModel = new SimpleModelWrapper(quadCollection, resolvedMissingModel.getTopAmbientOcclusion(), particleSprite); this.missingModel = new BlockStateModel() {
@Override
public void collectParts(RandomSource random, List<BlockModelPart> output) {
output.add(new BlockModelPart() {
@Override
public List<BakedQuad> getQuads(@Nullable Direction direction) {
return quadCollection.getQuads(direction);
}
@Override
public boolean useAmbientOcclusion() {
return resolvedMissingModel.getTopAmbientOcclusion();
}
@Override
public TextureAtlasSprite particleIcon() {
return particleSprite;
}
});
}
@Override
public TextureAtlasSprite particleIcon() {
return particleSprite;
}
}; //SimpleModelWrapper(quadCollection, resolvedMissingModel.getTopAmbientOcclusion(), particleSprite);
this.missingItemModel = new MissingItemModel(quadCollection.getAll(), new ModelRenderProperties(resolvedMissingModel.getTopGuiLight().lightLikeBlock(), particleSprite, resolvedMissingModel.getTopTransforms())); this.missingItemModel = new MissingItemModel(quadCollection.getAll(), new ModelRenderProperties(resolvedMissingModel.getTopGuiLight().lightLikeBlock(), particleSprite, resolvedMissingModel.getTopTransforms()));
try { try {
Class.forName("net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin"); Class.forName("net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin");
// TODO // TODO
//pluginList.add(new FabricDynamicModelHandler(this, this.resourceManager)); // pluginList.add(new FabricDynamicModelHandler(this, this.resourceManager));
} catch(Exception ignored) { } catch(Exception ignored) {
// Fabric API likely not present // Fabric API likely not present
} }
@ -365,7 +394,7 @@ public class DynamicModelProvider {
var loadedModels = new HashMap<>(BlockStateModelLoader.loadBlockStateDefinitionStack(location, stateDefinition, loadedDefinitions).models()); var loadedModels = new HashMap<>(BlockStateModelLoader.loadBlockStateDefinitionStack(location, stateDefinition, loadedDefinitions).models());
if (!pluginList.isEmpty()) { if (!pluginList.isEmpty()) {
loadedModels.replaceAll((mrl, oldModel) -> { loadedModels.replaceAll((mrl, oldModel) -> {
BlockStateModel.Unbaked ubm = oldModel; BlockStateModel.UnbakedRoot ubm = oldModel;
for (var plugin : pluginList) { for (var plugin : pluginList) {
ubm = plugin.modifyBlockModelOnLoad(oldModel, mrl); ubm = plugin.modifyBlockModelOnLoad(oldModel, mrl);
} }
@ -375,7 +404,7 @@ public class DynamicModelProvider {
return Optional.of(new BlockStateModelLoader.LoadedModels(loadedModels)); return Optional.of(new BlockStateModelLoader.LoadedModels(loadedModels));
} }
private BlockStateModel bakeModel(BlockStateModel.Unbaked model, BlockState mrl) { private BlockStateModel bakeModel(BlockStateModel.UnbakedRoot model, BlockState mrl) {
if (DEBUG_DYNAMIC_MODEL_LOADING) { if (DEBUG_DYNAMIC_MODEL_LOADING) {
ModernFix.LOGGER.info("Baking model '{}'", mrl); ModernFix.LOGGER.info("Baking model '{}'", mrl);
} }
@ -385,7 +414,7 @@ public class DynamicModelProvider {
for (var plugin : pluginList) { for (var plugin : pluginList) {
model = plugin.modifyBlockModelBeforeBake(model, mrl, modelBaker); model = plugin.modifyBlockModelBeforeBake(model, mrl, modelBaker);
} }
var bakedModel = model.bake(modelBaker); var bakedModel = model.bake(mrl, modelBaker);
for (var plugin : pluginList) { for (var plugin : pluginList) {
bakedModel = plugin.modifyBlockModelAfterBake(bakedModel, model, mrl, modelBaker); bakedModel = plugin.modifyBlockModelAfterBake(bakedModel, model, mrl, modelBaker);
} }
@ -401,7 +430,8 @@ public class DynamicModelProvider {
if (false) { //location.variant().equals("standalone") || location.variant().equals("fabric_resource")) { if (false) { //location.variant().equals("standalone") || location.variant().equals("fabric_resource")) {
throw new UnsupportedOperationException(); //return this.loadStandaloneModel(location.id()); throw new UnsupportedOperationException(); //return this.loadStandaloneModel(location.id());
} else { } else {
Optional<BlockStateModel.Unbaked> unbakedModelOpt = Optional.ofNullable(this.unbakedBlockStateModelOverrides.get(state)); Optional<BlockStateModel.UnbakedRoot> unbakedModelOpt = Optional.ofNullable(this.unbakedBlockStateModelOverrides.get(state))
.map(BlockStateModel.Unbaked::asRoot);
if (unbakedModelOpt.isEmpty()) { if (unbakedModelOpt.isEmpty()) {
var optLoadedModels = this.loadedStateDefinitions.getUnchecked(state.getBlock().builtInRegistryHolder().key().location()); var optLoadedModels = this.loadedStateDefinitions.getUnchecked(state.getBlock().builtInRegistryHolder().key().location());
unbakedModelOpt = optLoadedModels.map(loadedModels -> loadedModels.models().get(state)); unbakedModelOpt = optLoadedModels.map(loadedModels -> loadedModels.models().get(state));
@ -552,6 +582,11 @@ public class DynamicModelProvider {
public SpriteGetter sprites() { public SpriteGetter sprites() {
return DynamicModelProvider.this.textureGetter; return DynamicModelProvider.this.textureGetter;
} }
@Override
public <T> T compute(SharedOperationKey<T> key) {
return key.compute(this);
}
} }
public static WeakReference<DynamicModelProvider> currentReloadingModelProvider = new WeakReference<>(null); public static WeakReference<DynamicModelProvider> currentReloadingModelProvider = new WeakReference<>(null);
@ -562,12 +597,12 @@ public class DynamicModelProvider {
public interface DynamicModelPlugin { public interface DynamicModelPlugin {
Optional<UnbakedModel> modifyModelOnLoad(Optional<UnbakedModel> model, ResourceLocation id); Optional<UnbakedModel> modifyModelOnLoad(Optional<UnbakedModel> model, ResourceLocation id);
BlockStateModel.Unbaked modifyBlockModelOnLoad(BlockStateModel.Unbaked model, BlockState state); BlockStateModel.UnbakedRoot modifyBlockModelOnLoad(BlockStateModel.UnbakedRoot model, BlockState state);
UnbakedModel modifyModelBeforeBake(UnbakedModel model, ResourceLocation id, ModelState state, ModelBaker baker); UnbakedModel modifyModelBeforeBake(UnbakedModel model, ResourceLocation id, ModelState state, ModelBaker baker);
//BakedModel modifyModelAfterBake(BakedModel bakedModel, UnbakedModel model, ResourceLocation id, ModelState state, ModelBaker baker); //BakedModel modifyModelAfterBake(BakedModel bakedModel, UnbakedModel model, ResourceLocation id, ModelState state, ModelBaker baker);
BlockStateModel.Unbaked modifyBlockModelBeforeBake(BlockStateModel.Unbaked model, BlockState state, ModelBaker baker); BlockStateModel.UnbakedRoot modifyBlockModelBeforeBake(BlockStateModel.UnbakedRoot model, BlockState state, ModelBaker baker);
BlockStateModel modifyBlockModelAfterBake(BlockStateModel bakedModel, BlockStateModel.Unbaked unbaked, BlockState state, ModelBaker baker); BlockStateModel modifyBlockModelAfterBake(BlockStateModel bakedModel, BlockStateModel.UnbakedRoot unbaked, BlockState state, ModelBaker baker);
} }
} }

View File

@ -5,22 +5,23 @@ junit_version=5.10.0-M1
mixinextras_version=0.4.1 mixinextras_version=0.4.1
mod_id=modernfix mod_id=modernfix
minecraft_version=25w07a minecraft_version=1.21.5
enabled_platforms=fabric enabled_platforms=neoforge,fabric
forge_version=21.4.47-beta forge_version=21.5.81
parchment_version=2024.12.22 parchment_version=2025.06.15
parchment_mc_version=1.21.4 parchment_mc_version=1.21.5
refined_storage_version=4392788 refined_storage_version=4392788
jei_version=19.0.0.9 jei_version=19.0.0.9
rei_version=13.0.678 rei_version=13.0.678
ctm_version=1.21-1.2.0+2 ctm_version=5541286
# ctm_version=1.21-1.2.0+2
ldlib_version=5782845 ldlib_version=5782845
kubejs_version=1902.6.0-build.142 kubejs_version=2001.6.5-build.16
rhino_version=1902.2.2-build.268 rhino_version=2001.2.3-build.10
supported_minecraft_versions=25w07a supported_minecraft_versions=1.21.5
fabric_loader_version=0.16.10 fabric_loader_version=0.16.10
fabric_api_version=0.116.1+1.21.5 fabric_api_version=0.119.5+1.21.5
continuity_version=3.0.0-beta.4+1.20.2 continuity_version=3.0.0-beta.4+1.20.2

View File

@ -54,7 +54,7 @@ dependencies {
modCompileOnly("me.shedaniel:RoughlyEnoughItems-forge:${rei_version}") { transitive false } modCompileOnly("me.shedaniel:RoughlyEnoughItems-forge:${rei_version}") { transitive false }
modCompileOnly("dev.latvian.mods:kubejs-forge:${kubejs_version}") modCompileOnly("dev.latvian.mods:kubejs-forge:${kubejs_version}")
//modRuntimeOnly("curse.maven:ferritecore-429235:4441949") //modRuntimeOnly("curse.maven:ferritecore-429235:4441949")
modCompileOnly("team.chisel.ctm:CTM:${ctm_version}") modCompileOnly("curse.maven:CTM-267602:${ctm_version}")
modCompileOnly("curse.maven:ldlib-626676:${ldlib_version}") modCompileOnly("curse.maven:ldlib-626676:${ldlib_version}")
modCompileOnly("curse.maven:supermartijncore-454372:4455391") modCompileOnly("curse.maven:supermartijncore-454372:4455391")

View File

@ -40,12 +40,14 @@ public class ModelBakeEventHelper {
public ModelBakery.BakingResult createDynamicResult() { public ModelBakery.BakingResult createDynamicResult() {
return new ModelBakery.BakingResult( return new ModelBakery.BakingResult(
this.modelRegistry.getMissingBakedModel(), new ModelBakery.MissingModels(
this.modelRegistry.getMissingBakedModel(),
this.modelRegistry.getMissingItemModel()
),
this.modelRegistry.getTopLevelEmulatedRegistry(), this.modelRegistry.getTopLevelEmulatedRegistry(),
this.modelRegistry.getMissingItemModel(),
this.modelRegistry.getItemModelEmulatedRegistry(), this.modelRegistry.getItemModelEmulatedRegistry(),
this.modelRegistry.getItemPropertiesEmulatedRegistry(), this.modelRegistry.getItemPropertiesEmulatedRegistry()
this.modelRegistry.getStandaloneEmulatedRegistry() // TODO: Supply the StandaloneModelLoader.BakedModels?
); );
} }
} }

View File

@ -5,11 +5,11 @@ import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Deque; import java.util.List;
@Mixin(PoseStack.class) @Mixin(PoseStack.class)
@ClientOnlyMixin @ClientOnlyMixin
public interface PoseStackAccessor { public interface PoseStackAccessor {
@Accessor @Accessor("poses")
Deque<PoseStack.Pose> getPoseStack(); List<PoseStack.Pose> getPoseStack();
} }

View File

@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(ModelManager.class) @Mixin(ModelManager.class)
@ClientOnlyMixin @ClientOnlyMixin
public class ModelManagerMixinNeo { public class ModelManagerMixinNeo {
@ModifyArg(method = "loadModels", at = @At(value = "INVOKE", target = "Lnet/neoforged/neoforge/client/ClientHooks;onModifyBakingResult(Lnet/minecraft/client/resources/model/ModelBakery$BakingResult;Ljava/util/Map;Lnet/minecraft/client/resources/model/ModelBakery;)V"), remap = false, index = 0) @ModifyArg(method = "lambda$loadModels$18", at = @At(value = "INVOKE", target = "Lnet/neoforged/neoforge/client/ClientHooks;onModifyBakingResult(Lnet/minecraft/client/resources/model/ModelBakery$BakingResult;Ljava/util/Map;Lnet/minecraft/client/resources/model/ModelBakery;)V"), remap = false, index = 0)
private static ModelBakery.BakingResult useDynamicBakingResult(ModelBakery.BakingResult bakingResult) { private static ModelBakery.BakingResult useDynamicBakingResult(ModelBakery.BakingResult bakingResult) {
var currentReloadingProvider = DynamicModelProvider.currentReloadingModelProvider.get(); var currentReloadingProvider = DynamicModelProvider.currentReloadingModelProvider.get();
if(ModLoader.hasErrors() || currentReloadingProvider == null) { if(ModLoader.hasErrors() || currentReloadingProvider == null) {

View File

@ -19,6 +19,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Mixin(ObjLoader.class) @Mixin(ObjLoader.class)
@ClientOnlyMixin @ClientOnlyMixin
public class OBJLoaderMixin { public class OBJLoaderMixin {
/* TODO: Remove if unnecessary
@Final @Final
@Mutable @Mutable
@Shadow(remap = false) private Map<ResourceLocation, ObjMaterialLibrary> materialCache; @Shadow(remap = false) private Map<ResourceLocation, ObjMaterialLibrary> materialCache;
@ -36,4 +37,5 @@ public class OBJLoaderMixin {
private void useConcMap2(ObjLoader instance, Map<ResourceLocation, ObjMaterialLibrary> value) { private void useConcMap2(ObjLoader instance, Map<ResourceLocation, ObjMaterialLibrary> value) {
this.modelCache = new ConcurrentHashMap<>(); this.modelCache = new ConcurrentHashMap<>();
} }
*/
} }

View File

@ -1,6 +1,6 @@
package org.embeddedt.modernfix.neoforge.util; package org.embeddedt.modernfix.neoforge.util;
import net.neoforged.fml.loading.ImmediateWindowHandler; import net.neoforged.fml.loading.FMLLoader;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GLCapabilities; import org.lwjgl.opengl.GLCapabilities;
@ -40,7 +40,7 @@ public class AsyncLoadingScreen extends Thread implements AutoCloseable {
GL.setCapabilities(caps); GL.setCapabilities(caps);
while(keepRunning.get()) { while(keepRunning.get()) {
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(50)); LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(50));
ImmediateWindowHandler.renderTick(); FMLLoader.progressWindowTick.run();
} }
GLFW.glfwMakeContextCurrent(0); GLFW.glfwMakeContextCurrent(0);
} }