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 {
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 'com.matthewprenger.cursegradle' version '1.4.0' apply false
id 'com.palantir.git-version' version '1.0.0'

View File

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

View File

@ -9,11 +9,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mojang.serialization.JsonOps;
import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.client.renderer.block.model.BlockModel;
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.block.model.*;
import net.minecraft.client.renderer.item.ClientItem;
import net.minecraft.client.renderer.item.ItemModel;
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.SpriteGetter;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.GsonHelper;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import org.embeddedt.modernfix.ModernFix;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.Reader;
import java.lang.ref.WeakReference;
@ -146,16 +145,46 @@ public class DynamicModelProvider {
public SpriteGetter sprites() {
return DynamicModelProvider.this.textureGetter;
}
@Override
public <T> T compute(SharedOperationKey<T> key) {
return key.compute(this);
}
};
var textureSlots = this.resolvedMissingModel.getTopTextureSlots();
var quadCollection = this.resolvedMissingModel.bakeTopGeometry(textureSlots, missingModelBaker, BlockModelRotation.X0_Y0);
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()));
try {
Class.forName("net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin");
// TODO
//pluginList.add(new FabricDynamicModelHandler(this, this.resourceManager));
// pluginList.add(new FabricDynamicModelHandler(this, this.resourceManager));
} catch(Exception ignored) {
// Fabric API likely not present
}
@ -365,7 +394,7 @@ public class DynamicModelProvider {
var loadedModels = new HashMap<>(BlockStateModelLoader.loadBlockStateDefinitionStack(location, stateDefinition, loadedDefinitions).models());
if (!pluginList.isEmpty()) {
loadedModels.replaceAll((mrl, oldModel) -> {
BlockStateModel.Unbaked ubm = oldModel;
BlockStateModel.UnbakedRoot ubm = oldModel;
for (var plugin : pluginList) {
ubm = plugin.modifyBlockModelOnLoad(oldModel, mrl);
}
@ -375,7 +404,7 @@ public class DynamicModelProvider {
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) {
ModernFix.LOGGER.info("Baking model '{}'", mrl);
}
@ -385,7 +414,7 @@ public class DynamicModelProvider {
for (var plugin : pluginList) {
model = plugin.modifyBlockModelBeforeBake(model, mrl, modelBaker);
}
var bakedModel = model.bake(modelBaker);
var bakedModel = model.bake(mrl, modelBaker);
for (var plugin : pluginList) {
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")) {
throw new UnsupportedOperationException(); //return this.loadStandaloneModel(location.id());
} 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()) {
var optLoadedModels = this.loadedStateDefinitions.getUnchecked(state.getBlock().builtInRegistryHolder().key().location());
unbakedModelOpt = optLoadedModels.map(loadedModels -> loadedModels.models().get(state));
@ -552,6 +582,11 @@ public class DynamicModelProvider {
public SpriteGetter sprites() {
return DynamicModelProvider.this.textureGetter;
}
@Override
public <T> T compute(SharedOperationKey<T> key) {
return key.compute(this);
}
}
public static WeakReference<DynamicModelProvider> currentReloadingModelProvider = new WeakReference<>(null);
@ -562,12 +597,12 @@ public class DynamicModelProvider {
public interface DynamicModelPlugin {
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);
//BakedModel modifyModelAfterBake(BakedModel bakedModel, UnbakedModel model, ResourceLocation id, ModelState state, ModelBaker baker);
BlockStateModel.Unbaked modifyBlockModelBeforeBake(BlockStateModel.Unbaked model, BlockState state, ModelBaker baker);
BlockStateModel modifyBlockModelAfterBake(BlockStateModel bakedModel, BlockStateModel.Unbaked unbaked, BlockState state, ModelBaker baker);
BlockStateModel.UnbakedRoot modifyBlockModelBeforeBake(BlockStateModel.UnbakedRoot model, 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
mod_id=modernfix
minecraft_version=25w07a
enabled_platforms=fabric
forge_version=21.4.47-beta
parchment_version=2024.12.22
parchment_mc_version=1.21.4
minecraft_version=1.21.5
enabled_platforms=neoforge,fabric
forge_version=21.5.81
parchment_version=2025.06.15
parchment_mc_version=1.21.5
refined_storage_version=4392788
jei_version=19.0.0.9
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
kubejs_version=1902.6.0-build.142
rhino_version=1902.2.2-build.268
supported_minecraft_versions=25w07a
kubejs_version=2001.6.5-build.16
rhino_version=2001.2.3-build.10
supported_minecraft_versions=1.21.5
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

View File

@ -54,7 +54,7 @@ dependencies {
modCompileOnly("me.shedaniel:RoughlyEnoughItems-forge:${rei_version}") { transitive false }
modCompileOnly("dev.latvian.mods:kubejs-forge:${kubejs_version}")
//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:supermartijncore-454372:4455391")

View File

@ -40,12 +40,14 @@ public class ModelBakeEventHelper {
public ModelBakery.BakingResult createDynamicResult() {
return new ModelBakery.BakingResult(
this.modelRegistry.getMissingBakedModel(),
new ModelBakery.MissingModels(
this.modelRegistry.getMissingBakedModel(),
this.modelRegistry.getMissingItemModel()
),
this.modelRegistry.getTopLevelEmulatedRegistry(),
this.modelRegistry.getMissingItemModel(),
this.modelRegistry.getItemModelEmulatedRegistry(),
this.modelRegistry.getItemPropertiesEmulatedRegistry(),
this.modelRegistry.getStandaloneEmulatedRegistry()
this.modelRegistry.getItemPropertiesEmulatedRegistry()
// 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.gen.Accessor;
import java.util.Deque;
import java.util.List;
@Mixin(PoseStack.class)
@ClientOnlyMixin
public interface PoseStackAccessor {
@Accessor
Deque<PoseStack.Pose> getPoseStack();
@Accessor("poses")
List<PoseStack.Pose> getPoseStack();
}

View File

@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(ModelManager.class)
@ClientOnlyMixin
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) {
var currentReloadingProvider = DynamicModelProvider.currentReloadingModelProvider.get();
if(ModLoader.hasErrors() || currentReloadingProvider == null) {

View File

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

View File

@ -1,6 +1,6 @@
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.opengl.GL;
import org.lwjgl.opengl.GLCapabilities;
@ -40,7 +40,7 @@ public class AsyncLoadingScreen extends Thread implements AutoCloseable {
GL.setCapabilities(caps);
while(keepRunning.get()) {
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(50));
ImmediateWindowHandler.renderTick();
FMLLoader.progressWindowTick.run();
}
GLFW.glfwMakeContextCurrent(0);
}