diff --git a/build.gradle.kts b/build.gradle.kts index 17b15494..37773c84 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("net.neoforged.moddev") version("2.0.134") + id("net.neoforged.moddev") version("2.0.140") id("org.ajoberstar.grgit") version("5.2.0") id("com.palantir.git-version") version("1.0.0") id("me.modmuss50.mod-publish-plugin") version("1.1.0") @@ -124,6 +124,14 @@ repositories { includeGroup("curse.maven") } } + maven { + name = "Maven for PR #2993" // https://github.com/neoforged/NeoForge/pull/2993 + url = uri("https://prmaven.neoforged.net/NeoForge/pr2993") + content { + includeModule("net.neoforged", "neoforge") + includeModule("net.neoforged", "testframework") + } + } } val embed by configurations.creating { diff --git a/gradle.properties b/gradle.properties index a1311c7f..94ee4533 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ mixinextras_version=0.4.1 mod_id=modernfix minecraft_version=26.1 enabled_platforms=neoforge -forge_version=26.1.0.0-alpha.7+snapshot-3 +forge_version=26.1.0.0-alpha.0+pre-1.20260310.230015 parchment_version=2025.12.20 parchment_mc_version=1.21.11 refined_storage_version=4392788 diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/AvatarRendererMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/AvatarRendererMixin.java index a47aa8d8..f1dd2955 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/AvatarRendererMixin.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/AvatarRendererMixin.java @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(AvatarRenderer.class) @ClientOnlyMixin public class AvatarRendererMixin { - @Redirect(method = "submit(Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/neoforged/bus/api/IEventBus;post(Lnet/neoforged/bus/api/Event;)Lnet/neoforged/bus/api/Event;", ordinal = 0)) + @Redirect(method = "submit(Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/neoforged/bus/api/IEventBus;post(Lnet/neoforged/bus/api/Event;)Lnet/neoforged/bus/api/Event;", ordinal = 0)) private Event fireCheckingPoseStack(IEventBus instance, Event event) { PoseStack stack = ((RenderPlayerEvent)event).getPoseStack(); int size = ((PoseStackAccessor)stack).mfix$getLastIndex(); diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/LivingEntityRendererMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/LivingEntityRendererMixin.java index f9c19e9b..d4610171 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/LivingEntityRendererMixin.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/entity_pose_stack/LivingEntityRendererMixin.java @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(LivingEntityRenderer.class) @ClientOnlyMixin public class LivingEntityRendererMixin { - @Redirect(method = "submit(Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/neoforged/bus/api/IEventBus;post(Lnet/neoforged/bus/api/Event;)Lnet/neoforged/bus/api/Event;", ordinal = 0)) + @Redirect(method = "submit(Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/neoforged/bus/api/IEventBus;post(Lnet/neoforged/bus/api/Event;)Lnet/neoforged/bus/api/Event;", ordinal = 0)) private Event fireCheckingPoseStack(IEventBus instance, Event event) { PoseStack stack = ((RenderLivingEvent)event).getPoseStack(); int size = ((PoseStackAccessor)stack).mfix$getLastIndex(); diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java index 4f6bbc71..8fcc0d5d 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java @@ -2,8 +2,8 @@ package org.embeddedt.modernfix.common.mixin.bugfix.extra_experimental_screen; import com.mojang.serialization.Lifecycle; import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; +import net.minecraft.world.level.storage.LevelDataAndDimensions; import net.minecraft.world.level.storage.PrimaryLevelData; -import net.minecraft.world.level.storage.WorldData; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -16,11 +16,11 @@ public class CreateWorldScreenMixin { * Fix experimental world dialog still being shown the first time you reopen a world that was created * as experimental. */ - @ModifyArg(method = "createNewWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldOpenFlows;createLevelFromExistingSettings(Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/ReloadableServerResources;Lnet/minecraft/core/LayeredRegistryAccess;Lnet/minecraft/world/level/storage/WorldData;)V"), index = 3) - private WorldData setExperimentalFlag(WorldData data) { - if(data instanceof PrimaryLevelData pld && data.worldGenSettingsLifecycle() != Lifecycle.stable()) { + @ModifyArg(method = "createNewWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldOpenFlows;createLevelFromExistingSettings(Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/ReloadableServerResources;Lnet/minecraft/core/LayeredRegistryAccess;Lnet/minecraft/world/level/storage/LevelDataAndDimensions$WorldDataAndGenSettings;Ljava/util/Optional;)V"), index = 3) + private LevelDataAndDimensions.WorldDataAndGenSettings setExperimentalFlag(LevelDataAndDimensions.WorldDataAndGenSettings settings) { + if(settings.data() instanceof PrimaryLevelData pld && settings.data().worldGenSettingsLifecycle() != Lifecycle.stable()) { pld.withConfirmedWarning(true); } - return data; + return settings; } } diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java index 1262f4ee..f35f44ba 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.common.mixin.perf.dynamic_dfu; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.mojang.datafixers.DataFixerBuilder; import net.minecraft.util.datafix.DataFixers; import org.embeddedt.modernfix.dfu.DFUBlaster; @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(DataFixers.class) public class DataFixersMixin { - @ModifyReturnValue(method = "createFixerUpper", at = @At("RETURN")) + @ModifyExpressionValue(method = "", at = @At(value = "INVOKE", target = "Lcom/mojang/datafixers/DataFixerBuilder;build()Lcom/mojang/datafixers/DataFixerBuilder$Result;")) private static DataFixerBuilder.Result setupMapBlasting(DataFixerBuilder.Result original) { DFUBlaster.blastMaps(); return original; diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinBlockState.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinBlockState.java index 2032a072..09bd3f23 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinBlockState.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinBlockState.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; -import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; import net.minecraft.world.level.block.state.BlockBehaviour; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.IModelHoldingBlockState; diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java index 4822334f..c8da77ca 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java @@ -1,9 +1,8 @@ package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; -import com.google.common.collect.Maps; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.client.color.block.BlockColors; -import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; import net.minecraft.client.resources.model.BlockStateModelLoader; import net.minecraft.client.resources.model.ClientItemInfoLoader; import net.minecraft.client.resources.model.ModelManager; diff --git a/src/main/java/org/embeddedt/modernfix/duck/IModelHoldingBlockState.java b/src/main/java/org/embeddedt/modernfix/duck/IModelHoldingBlockState.java index 6ec9cd49..a95216c2 100644 --- a/src/main/java/org/embeddedt/modernfix/duck/IModelHoldingBlockState.java +++ b/src/main/java/org/embeddedt/modernfix/duck/IModelHoldingBlockState.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.duck; -import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; public interface IModelHoldingBlockState { BlockStateModel mfix$getModel(); diff --git a/src/main/java/org/embeddedt/modernfix/dynresources/BlockStateModelMap.java b/src/main/java/org/embeddedt/modernfix/dynresources/BlockStateModelMap.java index fedf3c9a..35398a0d 100644 --- a/src/main/java/org/embeddedt/modernfix/dynresources/BlockStateModelMap.java +++ b/src/main/java/org/embeddedt/modernfix/dynresources/BlockStateModelMap.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.dynresources; -import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.embeddedt.modernfix.duck.IModelHoldingBlockState; diff --git a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java index d661a4d3..1a84fe2a 100644 --- a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java +++ b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java @@ -12,15 +12,14 @@ import it.unimi.dsi.fastutil.objects.ObjectSet; import it.unimi.dsi.fastutil.objects.ObjectSets; import it.unimi.dsi.fastutil.objects.ReferenceSets; import net.minecraft.client.color.block.BlockColors; -import net.minecraft.client.renderer.block.model.BlockStateModel; -import net.minecraft.client.renderer.block.model.ItemModelGenerator; import net.minecraft.client.resources.model.BlockStateModelLoader; import net.minecraft.client.resources.model.ClientItemInfoLoader; -import net.minecraft.client.resources.model.MissingBlockModel; import net.minecraft.client.resources.model.ModelDiscovery; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.resources.model.ResolvedModel; import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.client.resources.model.cuboid.ItemModelGenerator; +import net.minecraft.client.resources.model.cuboid.MissingCuboidModel; import net.minecraft.resources.FileToIdConverter; import net.minecraft.resources.Identifier; import net.minecraft.server.packs.resources.Resource; @@ -111,7 +110,7 @@ public class DynamicModelSystem { StandaloneModelLoader.LoadedModels standaloneModels) { private ResolvedModel resolveModel(Identifier id) { - var discovery = new ModelDiscovery(inputModels, MissingBlockModel.missingModel()); + var discovery = new ModelDiscovery(inputModels, MissingCuboidModel.missingModel()); discovery.addSpecialModel(ItemModelGenerator.GENERATED_ITEM_MODEL_ID, new ItemModelGenerator()); if (!id.equals(ItemModelGenerator.GENERATED_ITEM_MODEL_ID)) { UnbakedModel unbaked = inputModels.get(id); @@ -127,7 +126,7 @@ public class DynamicModelSystem { } public ModelManager.ResolvedModels resolvedModels() { - var resolvedMissingModel = new ModelDiscovery(inputModels, MissingBlockModel.missingModel()).missingModel(); + var resolvedMissingModel = new ModelDiscovery(inputModels, MissingCuboidModel.missingModel()).missingModel(); LoadingCache resolvedModelCache = CacheBuilder.newBuilder().softValues().maximumSize(1000).build(new CacheLoader<>() { @Override public ResolvedModel load(Identifier key) { diff --git a/src/main/java/org/embeddedt/modernfix/screen/ModernFixConfigScreen.java b/src/main/java/org/embeddedt/modernfix/screen/ModernFixConfigScreen.java index 7db99524..44902e68 100644 --- a/src/main/java/org/embeddedt/modernfix/screen/ModernFixConfigScreen.java +++ b/src/main/java/org/embeddedt/modernfix/screen/ModernFixConfigScreen.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.screen; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; @@ -41,10 +41,10 @@ public class ModernFixConfigScreen extends Screen { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - super.render(guiGraphics, mouseX, mouseY, partialTicks); - this.optionList.render(guiGraphics, mouseX, mouseY, partialTicks); - guiGraphics.drawCenteredString(this.font, this.title, this.width / 2, 8, 16777215); + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTicks) { + super.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); + this.optionList.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); + guiGraphics.centeredText(this.font, this.title, this.width / 2, 8, 16777215); this.doneButton.setMessage(madeChanges ? Component.translatable("modernfix.config.done_restart") : CommonComponents.GUI_DONE); } diff --git a/src/main/java/org/embeddedt/modernfix/screen/ModernFixOptionInfoScreen.java b/src/main/java/org/embeddedt/modernfix/screen/ModernFixOptionInfoScreen.java index 9250c0b9..a296cbf9 100644 --- a/src/main/java/org/embeddedt/modernfix/screen/ModernFixOptionInfoScreen.java +++ b/src/main/java/org/embeddedt/modernfix/screen/ModernFixOptionInfoScreen.java @@ -1,7 +1,7 @@ package org.embeddedt.modernfix.screen; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; @@ -32,17 +32,17 @@ public class ModernFixOptionInfoScreen extends Screen { this.minecraft.setScreen(lastScreen); } - private void drawMultilineString(GuiGraphics guiGraphics, Font fr, Component str, int x, int y) { + private void drawMultilineString(GuiGraphicsExtractor guiGraphics, Font fr, Component str, int x, int y) { for(FormattedCharSequence s : fr.split(str, this.width - 50)) { - guiGraphics.drawString(fr, s, x, y, 16777215, true); + guiGraphics.text(fr, s, x, y, 16777215, true); y += fr.lineHeight; } } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - super.render(guiGraphics, mouseX, mouseY, partialTicks); - guiGraphics.drawCenteredString(this.font, this.title, this.width / 2, 8, 16777215); + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTicks) { + super.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); + guiGraphics.centeredText(this.font, this.title, this.width / 2, 8, 16777215); this.drawMultilineString(guiGraphics, this.minecraft.font, description, 10, 50); } } diff --git a/src/main/java/org/embeddedt/modernfix/screen/OptionList.java b/src/main/java/org/embeddedt/modernfix/screen/OptionList.java index a40d974d..f19d7248 100644 --- a/src/main/java/org/embeddedt/modernfix/screen/OptionList.java +++ b/src/main/java/org/embeddedt/modernfix/screen/OptionList.java @@ -5,7 +5,7 @@ import com.google.common.collect.Multimap; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ContainerObjectSelectionList; import net.minecraft.client.gui.components.Tooltip; @@ -105,11 +105,11 @@ public class OptionList extends ContainerObjectSelectionList { this.width = OptionList.this.minecraft.font.width(this.name); } - public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean isMouseOver, float partialTicks) { + public void extractContent(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, boolean isMouseOver, float partialTicks) { Font var10000 = OptionList.this.minecraft.font; float x = (float)(OptionList.this.minecraft.screen.width / 2 - this.width / 2); int y = 0 + height - 10; - guiGraphics.drawString(var10000, this.name, (int)x, y, 16777215); + guiGraphics.text(var10000, this.name, (int)x, y, 16777215); /* if(mouseX >= x && mouseY >= y && mouseX <= (x + this.width) && mouseY <= (y + OptionList.this.minecraft.font.lineHeight)) OptionList.this.mainScreen.renderComponentHoverEffect(matrixStack, this.name.getStyle(), mouseX, mouseY); @@ -178,19 +178,19 @@ public class OptionList extends ContainerObjectSelectionList { } @Override - public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean isHovering, float partialTicks) { + public void extractContent(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, boolean isHovering, float partialTicks) { int left = 0, top = 0; MutableComponent nameComponent = getOptionComponent(option); if(this.option.isUserDefined()) nameComponent = nameComponent.withStyle(style -> style.withItalic(true)).append(Component.translatable("modernfix.config.not_default")); float textX = (float)(left + DEPTH_OFFSET * option.getDepth() + 160 - OptionList.this.maxNameWidth); float textY = (float)(top + height / 2 - 4); - guiGraphics.drawString(OptionList.this.minecraft.font, nameComponent, (int)textX, (int)textY, 16777215); + guiGraphics.text(OptionList.this.minecraft.font, nameComponent, (int)textX, (int)textY, 16777215); this.toggleButton.setPosition(left + 175, top); this.toggleButton.setMessage(getOptionMessage(this.option)); - this.toggleButton.render(guiGraphics, mouseX, mouseY, partialTicks); + this.toggleButton.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); this.helpButton.setPosition(left + 175 + 55, top); - this.helpButton.render(guiGraphics, mouseX, mouseY, partialTicks); + this.helpButton.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); /* if(mouseX >= textX && mouseY >= textY && mouseX <= (textX + OptionList.this.maxNameWidth) && mouseY <= (textY + OptionList.this.minecraft.font.lineHeight)) OptionList.this.mainScreen.renderComponentHoverEffect(matrixStack, nameComponent.getStyle(), mouseX, mouseY);