From c107c5ba446844402652bb50518a62d22f451f6c Mon Sep 17 00:00:00 2001 From: Shiewk Date: Wed, 1 Apr 2026 12:17:13 +0200 Subject: [PATCH] Support Minecraft 26.1 --- build.gradle | 23 +- gradle.properties | 14 +- .../java/de/shiewk/widgets/ModWidget.java | 15 +- .../de/shiewk/widgets/WidgetSettings.java | 3 +- .../shiewk/widgets/client/WidgetManager.java | 6 +- .../shiewk/widgets/client/WidgetRenderer.java | 47 +-- .../widgets/client/WidgetsModClient.java | 70 ++-- .../widgets/client/screen/AnimatedScreen.java | 25 +- .../client/screen/ContextMenuScreen.java | 47 +-- .../screen/EditWidgetPositionsScreen.java | 113 +++--- .../client/screen/WidgetConfigScreen.java | 74 ++-- .../client/screen/WidgetSettingsScreen.java | 36 +- .../screen/components/ScaledTextWidget.java | 33 +- .../components/WidgetDisplayWidget.java | 25 +- .../screen/components/WidgetListWidget.java | 84 ++--- .../components/WidgetSettingsEditWidget.java | 72 ++-- .../screen/components/WidgetWidget.java | 71 ++-- .../GradientEditorColorSection.java | 83 +++-- .../gradienteditor/GradientEditorScreen.java | 53 +-- .../GradientEditorSettingsSection.java | 242 ++++++------ .../de/shiewk/widgets/color/GradientMode.java | 10 +- .../shiewk/widgets/color/GradientOptions.java | 36 +- .../shiewk/widgets/color/GradientPreset.java | 6 +- .../mixin/MixinClientPlayNetworkHandler.java | 36 +- .../de/shiewk/widgets/mixin/MixinMouse.java | 19 +- .../HorizontalGradientGuiRenderState.java | 53 +-- .../de/shiewk/widgets/utils/WidgetUtils.java | 31 +- .../widgets/widgets/ArmorHudWidget.java | 61 +-- .../widgets/widgets/BandwidthWidget.java | 35 +- .../widgets/widgets/BasicTextWidget.java | 37 +- .../shiewk/widgets/widgets/BiomeWidget.java | 35 +- .../de/shiewk/widgets/widgets/CPSWidget.java | 16 +- .../shiewk/widgets/widgets/ClockWidget.java | 33 +- .../shiewk/widgets/widgets/ComboWidget.java | 26 +- .../widgets/widgets/CoordinatesWidget.java | 33 +- .../widgets/widgets/DirectionWidget.java | 35 +- .../de/shiewk/widgets/widgets/FPSWidget.java | 21 +- .../widgets/widgets/InventoryWidget.java | 59 +-- .../widgets/widgets/KeyStrokesWidget.java | 64 ++-- .../widgets/widgets/MemoryUsageWidget.java | 17 +- .../de/shiewk/widgets/widgets/PingWidget.java | 35 +- .../widgets/widgets/PlainTextWidget.java | 15 +- .../widgets/widgets/PlayTimeWidget.java | 13 +- .../widgets/widgets/PlayerCountWidget.java | 21 +- .../widgets/widgets/ResizableWidget.java | 18 +- .../widgets/widgets/ServerIPWidget.java | 21 +- .../shiewk/widgets/widgets/SpeedWidget.java | 49 ++- .../de/shiewk/widgets/widgets/TPSWidget.java | 35 +- .../widgets/widgets/WorldTimeWidget.java | 22 +- .../widgets/settings/EnumWidgetSetting.java | 37 +- .../settings/GradientWidgetSetting.java | 51 +-- .../settings/IntSliderWidgetSetting.java | 44 +-- .../settings/RGBAColorWidgetSetting.java | 349 ------------------ .../TextFieldWidgetSettingOption.java | 51 +-- .../widgets/settings/ToggleWidgetSetting.java | 28 +- .../widgets/settings/WidgetSettingOption.java | 36 +- src/main/resources/fabric.mod.json | 4 +- src/main/resources/widgets.accesswidener | 4 - src/main/resources/widgets.classtweaker | 4 + 59 files changed, 1130 insertions(+), 1506 deletions(-) delete mode 100644 src/main/java/de/shiewk/widgets/widgets/settings/RGBAColorWidgetSetting.java delete mode 100644 src/main/resources/widgets.accesswidener create mode 100644 src/main/resources/widgets.classtweaker diff --git a/build.gradle b/build.gradle index 5550c2e..f08481e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,5 @@ plugins { - id 'fabric-loom' version '1.14-SNAPSHOT' - id 'maven-publish' + id 'net.fabricmc.fabric-loom' version "${loom_version}" } version = "${project.mod_version}-${project.minecraft_version}" @@ -11,7 +10,7 @@ base { } loom { - accessWidenerPath = file("src/main/resources/widgets.accesswidener") + accessWidenerPath = file("src/main/resources/widgets.classtweaker") } repositories { @@ -34,21 +33,17 @@ repositories { } dependencies { - // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation "maven.modrinth:modmenu:${project.modmenu_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + implementation "maven.modrinth:modmenu:${project.modmenu_version}" } processResources { inputs.property "version", project.version inputs.property "minecraft_version", project.minecraft_version inputs.property "loader_version", project.loader_version - filteringCharset "UTF-8" + filteringCharset = "UTF-8" filesMatching("fabric.mod.json") { expand "version": project.version, @@ -57,7 +52,7 @@ processResources { } } -def targetJavaVersion = 21 +def targetJavaVersion = 25 tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly @@ -74,10 +69,6 @@ java { if (JavaVersion.current() < javaVersion) { toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) } - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() } jar { diff --git a/gradle.properties b/gradle.properties index 98f3024..e12397e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,15 @@ # Done to increase the memory available to Gradle. org.gradle.jvmargs=-Xmx1G # Fabric Properties -# check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.11 -yarn_mappings=1.21.11+build.4 -loader_version=0.17.3 +# check these on https://fabricmc.net/develop/ +minecraft_version=26.1 +loader_version=0.18.4 +loom_version=1.15-SNAPSHOT # Mod Properties mod_version=2.4.0 maven_group=de.shiewk archives_base_name=Widgets # Dependencies -# check this on https://modmuss50.me/fabric.html -fabric_version=0.139.4+1.21.11 -modmenu_version=17.0.0-beta.1 +# check this on https://fabricmc.net/develop/ +fabric_version=0.144.0+26.1 +modmenu_version=18.0.0-alpha.8 diff --git a/src/main/java/de/shiewk/widgets/ModWidget.java b/src/main/java/de/shiewk/widgets/ModWidget.java index 006a46b..3342215 100644 --- a/src/main/java/de/shiewk/widgets/ModWidget.java +++ b/src/main/java/de/shiewk/widgets/ModWidget.java @@ -1,13 +1,12 @@ package de.shiewk.widgets; import de.shiewk.widgets.widgets.settings.WidgetSettingOption; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - import java.util.List; import java.util.Objects; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; public abstract class ModWidget { @@ -31,10 +30,10 @@ public abstract class ModWidget { public final WidgetSettings getSettings() { return settings; } - public abstract void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY); + public abstract void render(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY); public abstract void tick(); - public abstract Text getName(); - public abstract Text getDescription(); + public abstract Component getName(); + public abstract Component getDescription(); public abstract void onSettingsChanged(WidgetSettings settings); public void onSettingsChanged() { diff --git a/src/main/java/de/shiewk/widgets/WidgetSettings.java b/src/main/java/de/shiewk/widgets/WidgetSettings.java index 7b99986..7aa730e 100644 --- a/src/main/java/de/shiewk/widgets/WidgetSettings.java +++ b/src/main/java/de/shiewk/widgets/WidgetSettings.java @@ -6,10 +6,9 @@ import com.google.gson.JsonSyntaxException; import de.shiewk.widgets.client.WidgetManager; import de.shiewk.widgets.widgets.settings.WidgetSettingOption; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.util.Identifier; - import java.util.List; import java.util.Objects; +import net.minecraft.resources.Identifier; import static de.shiewk.widgets.WidgetsMod.LOGGER; import static de.shiewk.widgets.client.WidgetManager.gson; diff --git a/src/main/java/de/shiewk/widgets/client/WidgetManager.java b/src/main/java/de/shiewk/widgets/client/WidgetManager.java index 55e6d06..9e148da 100644 --- a/src/main/java/de/shiewk/widgets/client/WidgetManager.java +++ b/src/main/java/de/shiewk/widgets/client/WidgetManager.java @@ -7,8 +7,6 @@ import com.google.gson.stream.JsonWriter; import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.WidgetsMod; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.client.MinecraftClient; -import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; import java.io.File; @@ -17,6 +15,8 @@ import java.io.FileWriter; import java.io.IOException; import java.util.List; import java.util.function.Function; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.Identifier; public class WidgetManager { @@ -46,7 +46,7 @@ public class WidgetManager { enabled.remove(widget); } - static Function saveFileFactory = id -> new File(MinecraftClient.getInstance().runDirectory.getPath() + "/config/widgets/" + id.getNamespace() + "/" + id.getPath() + ".json"); + static Function saveFileFactory = id -> new File(Minecraft.getInstance().gameDirectory.getPath() + "/config/widgets/" + id.getNamespace() + "/" + id.getPath() + ".json"); public static final Gson gson = new Gson(); public static void saveWidgets(List widgets) { diff --git a/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java b/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java index 16754a7..bf4942e 100644 --- a/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java +++ b/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java @@ -8,19 +8,20 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderTickCounter; -import net.minecraft.util.Identifier; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.resources.Identifier; import net.minecraft.util.Util; -import net.minecraft.util.profiler.Profiler; -import net.minecraft.util.profiler.Profilers; +import net.minecraft.util.profiling.Profiler; +import net.minecraft.util.profiling.ProfilerFiller; +import org.jspecify.annotations.NonNull; public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecycleEvents.ClientStarted { - public static final Identifier LAYER_ID = Identifier.of(WidgetsMod.MOD_ID, "widgets-hud-layer"); - private static MinecraftClient client; + public static final Identifier LAYER_ID = Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "widgets-hud-layer"); + private static Minecraft client; public static int guiScale = 1; public WidgetRenderer(){ @@ -30,15 +31,15 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc ); } - public void renderWidgets(DrawContext drawContext, RenderTickCounter tickCounter) { - if (client.options.hudHidden) return; - if (client.currentScreen instanceof WidgetVisibilityToggle vt && !vt.shouldRenderWidgets()) return; - final Profiler profiler = Profilers.get(); + public void renderWidgets(GuiGraphicsExtractor drawContext, DeltaTracker tickCounter) { + if (client.options.hideGui) return; + if (client.screen instanceof WidgetVisibilityToggle vt && !vt.shouldRenderWidgets()) return; + final ProfilerFiller profiler = Profiler.get(); profiler.push("widgets"); - final TextRenderer textRenderer = client.textRenderer; - final long timeNano = Util.getMeasuringTimeNano(); - final int windowWidth = drawContext.getScaledWindowWidth(); - final int windowHeight = drawContext.getScaledWindowHeight(); + final Font textRenderer = client.font; + final long timeNano = Util.getNanos(); + final int windowWidth = drawContext.guiWidth(); + final int windowHeight = drawContext.guiHeight(); final ObjectArrayList enabled = WidgetManager.enabled; for (int i = 0, enabledSize = enabled.size(); i < enabledSize; i++) { @@ -57,11 +58,11 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc } @Override - public void onStartTick(MinecraftClient client) { + public void onStartTick(Minecraft client) { WidgetRenderer.client = client; - final Profiler profiler = Profilers.get(); + final ProfilerFiller profiler = Profiler.get(); profiler.push("widgets"); - guiScale = client.getWindow().getScaleFactor(); + guiScale = client.getWindow().getGuiScale(); final ObjectArrayList enabled = WidgetManager.enabled; for (int i = 0, enabledSize = enabled.size(); i < enabledSize; i++) { @@ -73,13 +74,13 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc profiler.pop(); - if (WidgetsModClient.configKeyBinding.wasPressed()){ - client.setScreen(new WidgetConfigScreen(client.currentScreen)); + if (WidgetsModClient.configKeyBinding.consumeClick()){ + client.setScreen(new WidgetConfigScreen(client.screen)); } } @Override - public void onClientStarted(MinecraftClient client) { + public void onClientStarted(@NonNull Minecraft client) { for (ModWidget widget : WidgetManager.getAllWidgets()) { widget.onSettingsChanged(); } diff --git a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java index 6d981a4..5a8a1cf 100644 --- a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java +++ b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java @@ -1,25 +1,25 @@ package de.shiewk.widgets.client; +import com.mojang.blaze3d.platform.InputConstants; import de.shiewk.widgets.WidgetsMod; import de.shiewk.widgets.client.screen.WidgetConfigScreen; import de.shiewk.widgets.widgets.*; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommands; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; -import net.minecraft.util.Identifier; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.Identifier; import org.lwjgl.glfw.GLFW; public class WidgetsModClient implements ClientModInitializer { - static KeyBinding configKeyBinding; + static KeyMapping configKeyBinding; @Override public void onInitializeClient() { @@ -28,52 +28,52 @@ public class WidgetsModClient implements ClientModInitializer { ClientLifecycleEvents.CLIENT_STARTED.register(widgetRenderer); // manage widgets keybind - configKeyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding( + configKeyBinding = KeyMappingHelper.registerKeyMapping(new KeyMapping( "widgets.key.config", - InputUtil.Type.KEYSYM, + InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, - KeyBinding.Category.create(Identifier.of(WidgetsMod.MOD_ID, "main")) + KeyMapping.Category.register(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "main")) )); // in-game /widgetsmod command - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> - dispatcher.register(ClientCommandManager.literal("widgetsmod").executes(ctx -> { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, _) -> + dispatcher.register(ClientCommands.literal("widgetsmod").executes(ctx -> { WidgetsMod.LOGGER.info("Ran in-game command"); - final MinecraftClient client = ctx.getSource().getClient(); - client.send(() -> client.setScreen(new WidgetConfigScreen(client.currentScreen))); + final Minecraft client = ctx.getSource().getClient(); + client.schedule(() -> client.setScreen(new WidgetConfigScreen(client.screen))); return 0; }) ) ); - ClientEntityEvents.ENTITY_LOAD.register((entity, clientWorld) -> { - if (entity == MinecraftClient.getInstance().player){ + ClientEntityEvents.ENTITY_LOAD.register((entity, _) -> { + if (entity == Minecraft.getInstance().player){ // player switched world TPSWidget.worldChanged(); } }); - WidgetManager.register(new FPSWidget(Identifier.of(WidgetsMod.MOD_ID, "fps"))); - WidgetManager.register(new ClockWidget(Identifier.of(WidgetsMod.MOD_ID, "clock"))); - WidgetManager.register(new CoordinatesWidget(Identifier.of(WidgetsMod.MOD_ID, "coordinates"))); - WidgetManager.register(new BandwidthWidget(Identifier.of(WidgetsMod.MOD_ID, "bandwidth"))); - WidgetManager.register(new PingWidget(Identifier.of(WidgetsMod.MOD_ID, "ping"))); - WidgetManager.register(new ServerIPWidget(Identifier.of(WidgetsMod.MOD_ID, "server_ip"))); - WidgetManager.register(new PlayerCountWidget(Identifier.of(WidgetsMod.MOD_ID, "player_count"))); - WidgetManager.register(new CPSWidget(Identifier.of(WidgetsMod.MOD_ID, "cps"))); - WidgetManager.register(new PlayTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "playtime"))); - WidgetManager.register(new MemoryUsageWidget(Identifier.of(WidgetsMod.MOD_ID, "memory"))); - WidgetManager.register(new KeyStrokesWidget(Identifier.of(WidgetsMod.MOD_ID, "keystrokes"))); - WidgetManager.register(new PlainTextWidget(Identifier.of(WidgetsMod.MOD_ID, "plaintext"))); - WidgetManager.register(new BiomeWidget(Identifier.of(WidgetsMod.MOD_ID, "biome"))); - WidgetManager.register(new SpeedWidget(Identifier.of(WidgetsMod.MOD_ID, "speed"))); - WidgetManager.register(new ArmorHudWidget(Identifier.of(WidgetsMod.MOD_ID, "armor"))); - WidgetManager.register(new InventoryWidget(Identifier.of(WidgetsMod.MOD_ID, "inventory"))); - WidgetManager.register(new WorldTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "worldtime"))); - WidgetManager.register(new DirectionWidget(Identifier.of(WidgetsMod.MOD_ID, "direction"))); + WidgetManager.register(new FPSWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "fps"))); + WidgetManager.register(new ClockWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "clock"))); + WidgetManager.register(new CoordinatesWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "coordinates"))); + WidgetManager.register(new BandwidthWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "bandwidth"))); + WidgetManager.register(new PingWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "ping"))); + WidgetManager.register(new ServerIPWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "server_ip"))); + WidgetManager.register(new PlayerCountWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "player_count"))); + WidgetManager.register(new CPSWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "cps"))); + WidgetManager.register(new PlayTimeWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "playtime"))); + WidgetManager.register(new MemoryUsageWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "memory"))); + WidgetManager.register(new KeyStrokesWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "keystrokes"))); + WidgetManager.register(new PlainTextWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "plaintext"))); + WidgetManager.register(new BiomeWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "biome"))); + WidgetManager.register(new SpeedWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "speed"))); + WidgetManager.register(new ArmorHudWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "armor"))); + WidgetManager.register(new InventoryWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "inventory"))); + WidgetManager.register(new WorldTimeWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "worldtime"))); + WidgetManager.register(new DirectionWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "direction"))); WidgetManager.register(TPSWidget.INSTANCE); - ComboWidget comboWidget = new ComboWidget(Identifier.of(WidgetsMod.MOD_ID, "combo")); + ComboWidget comboWidget = new ComboWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "combo")); WidgetManager.register(comboWidget); AttackEntityCallback.EVENT.register(comboWidget); } diff --git a/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java b/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java index 80c6955..9a62506 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java @@ -1,41 +1,42 @@ package de.shiewk.widgets.client.screen; import de.shiewk.widgets.utils.WidgetUtils; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; import net.minecraft.util.Util; import org.joml.Matrix3x2fStack; +import org.jspecify.annotations.NonNull; public abstract class AnimatedScreen extends Screen { protected final Screen parent; private final int animationDurationMs; - private final long creationTime = Util.getMeasuringTimeNano(); - protected AnimatedScreen(Text title, Screen parent, int animationDurationMs) { + private final long creationTime = Util.getNanos(); + protected AnimatedScreen(Component title, Screen parent, int animationDurationMs) { super(title); this.parent = parent; this.animationDurationMs = animationDurationMs; } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - double timeMs = (Util.getMeasuringTimeNano() - creationTime) / 1000000d; + public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { + double timeMs = (Util.getNanos() - creationTime) / 1000000d; final boolean shouldAnimate = timeMs < animationDurationMs; if (shouldAnimate){ double translation = WidgetUtils.computeEasing(timeMs / animationDurationMs) * this.width; - Matrix3x2fStack stack = context.getMatrices().pushMatrix(); + Matrix3x2fStack stack = context.pose().pushMatrix(); stack.translate((float) -translation, 0, stack); - parent.render(context, -67, -67, delta); + parent.extractRenderState(context, -67, -67, delta); stack.translate(this.width, 0, stack); mouseX -= (int) translation; } - super.render(context, mouseX, mouseY, delta); + super.extractRenderState(context, mouseX, mouseY, delta); this.renderScreenContents(context, mouseX, mouseY, delta); if (shouldAnimate){ - context.getMatrices().popMatrix(); + context.pose().popMatrix(); } } - public abstract void renderScreenContents(DrawContext context, int mouseX, int mouseY, float delta); + public abstract void renderScreenContents(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta); } diff --git a/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java b/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java index 8d7c3f9..c30c314 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java @@ -1,20 +1,21 @@ package de.shiewk.widgets.client.screen; +import com.mojang.blaze3d.platform.cursor.CursorTypes; import de.shiewk.widgets.utils.WidgetUtils; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.cursor.StandardCursors; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvents; +import org.jspecify.annotations.NonNull; import java.util.List; public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle { - public record Option(Text title, boolean highlighted, Runnable action){ + public record Option(Component title, boolean highlighted, Runnable action){ - public Option(Text title, Runnable action){ + public Option(Component title, Runnable action){ this(title, false, action); } @@ -28,7 +29,7 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle private int menuWidth; private int menuHeight; - public ContextMenuScreen(Text title, Screen parent, int menuX, int menuY, List