From 36d6720e6e24a4a904d0cf25995d3baa8e6280b2 Mon Sep 17 00:00:00 2001 From: Minecraftschurli Date: Sat, 3 Aug 2024 15:40:20 +0200 Subject: [PATCH] Start 1.21 update --- .github/workflows/build.yml | 1 + .github/workflows/pr.yml | 2 + build.gradle.kts | 10 ++- gradle.properties | 10 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 5 +- .../betterhudlib/HUDElement.java | 17 +++--- .../betterhudlib/HUDManagerScreen.java | 61 ++++++++++++------- .../betterhudlib/mixin/GuiAccessor.java | 12 ++++ .../mixin/GuiLayerManagerAccessor.java | 13 ++++ src/main/resources/META-INF/MANIFEST.MF | 1 + src/main/resources/betterhudlib.mixins.json | 13 ++++ .../betterhudlib/test/ClientInit.java | 14 ++--- .../{mods.toml => neoforge.mods.toml} | 2 +- 14 files changed, 117 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiAccessor.java create mode 100644 src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiLayerManagerAccessor.java create mode 100644 src/main/resources/META-INF/MANIFEST.MF create mode 100644 src/main/resources/betterhudlib.mixins.json rename src/test/resources/META-INF/{mods.toml => neoforge.mods.toml} (75%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7d8a599..893523f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,6 +18,7 @@ jobs: build: uses: MinecraftschurliMods/.github/.github/workflows/build-library.yml@main with: + java-version: 21 maven-url: ${{ vars.MAVEN_URL }} maven-user: ${{ vars.MAVEN_USER }} publish-to-maven: true diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e2f1aa3..c29231b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -11,3 +11,5 @@ on: jobs: build: uses: MinecraftschurliMods/.github/.github/workflows/build-library.yml@main + with: + java-version: 21 diff --git a/build.gradle.kts b/build.gradle.kts index f1a2723..f18051a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,20 @@ plugins { - id ("com.github.minecraftschurlimods.helperplugin") + id("net.neoforged.gradle.userdev") + id("com.github.minecraftschurlimods.helperplugin") } +helper.withTestSourceSet() + dependencies { implementation(helper.neoforge()) compileOnly("org.jetbrains:annotations:23.0.0") } +helper.withCommonRuns() +runs.configureEach { + programArguments("--fml.mixin", "betterhudlib.mixins.json") +} + helper.publication.pom { organization { name = "Minecraftschurli Mods" diff --git a/gradle.properties b/gradle.properties index dfc943f..0e3c88d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ lib.name=betterhudlib lib.version=1.0 lib.vendor=Minecraftschurli -java_version=17 +java_version=21 github.owner=MinecraftschurliMods github.repo=BetterHUDLib @@ -18,8 +18,8 @@ license.name=MIT license.url=https://opensource.org/licenses/MIT license.file=LICENSE -neogradle.subsystems.parchment.minecraftVersion=1.20.3 -neogradle.subsystems.parchment.mappingsVersion=2023.12.31 +neogradle.subsystems.parchment.minecraftVersion=1.21 +neogradle.subsystems.parchment.mappingsVersion=2024.07.28 -mc_version=1.20.4 -neo_version=20.4.80-beta +mc_version=1.21 +neo_version=21.0.148 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a80b22c..b82aa23 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index feb7881..9d1e71c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,8 +1,7 @@ pluginManagement { plugins { - id("org.ec4j.editorconfig") version "0.0.3" - id("net.neoforged.gradle.userdev") version "7.0.80" - id("com.github.minecraftschurlimods.helperplugin") version "1.6" + id("net.neoforged.gradle.userdev") version "7.0.153" + id("com.github.minecraftschurlimods.helperplugin") version "1.14" } repositories { mavenLocal() diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java index b850e0e..4820ba2 100644 --- a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDElement.java @@ -1,13 +1,14 @@ package com.github.minecraftschurlimods.betterhudlib; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.neoforged.neoforge.client.gui.overlay.ExtendedGui; -import net.neoforged.neoforge.client.gui.overlay.IGuiOverlay; +import net.minecraft.client.gui.LayeredDraw; import java.util.function.IntSupplier; import java.util.function.Supplier; -public abstract class HUDElement implements IGuiOverlay { +public abstract class HUDElement implements LayeredDraw.Layer { private final Supplier defaultAnchorX; private final Supplier defaultAnchorY; private final IntSupplier defaultX; @@ -36,11 +37,13 @@ protected HUDElement(Supplier anchorX, Supplier anchorY, IntSu } @Override - public void render(ExtendedGui gui, GuiGraphics graphics, float partialTick, int screenWidth, int screenHeight) { - applyDefaults(); + public void render(GuiGraphics graphics, DeltaTracker deltaTracker) { + int screenWidth = Minecraft.getInstance().getWindow().getGuiScaledWidth(); + int screenHeight = Minecraft.getInstance().getWindow().getGuiScaledHeight(); graphics.pose().pushPose(); graphics.pose().translate(getNormalizedX(screenWidth), getNormalizedY(screenHeight), 0); - draw(gui, graphics, partialTick); + applyDefaults(); + draw(graphics, deltaTracker); graphics.pose().popPose(); } @@ -79,7 +82,7 @@ private int getNormalizedY(int screenHeight) { return y; } - public abstract void draw(ExtendedGui gui, GuiGraphics graphics, float partialTick); + public abstract void draw(GuiGraphics graphics, DeltaTracker deltaTracker); protected final int getX(int screenWidth) { return switch (anchorX) { diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java index b70bb10..0d2ca2d 100644 --- a/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/HUDManagerScreen.java @@ -1,8 +1,13 @@ package com.github.minecraftschurlimods.betterhudlib; +import com.github.minecraftschurlimods.betterhudlib.mixin.GuiAccessor; +import com.github.minecraftschurlimods.betterhudlib.mixin.GuiLayerManagerAccessor; import net.minecraft.Util; +import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.LayeredDraw; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; @@ -11,13 +16,13 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.sounds.SoundManager; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.overlay.ExtendedGui; -import net.neoforged.neoforge.client.gui.overlay.GuiOverlayManager; -import net.neoforged.neoforge.client.gui.overlay.IGuiOverlay; -import net.neoforged.neoforge.client.gui.overlay.NamedGuiOverlay; +import net.neoforged.neoforge.client.gui.GuiLayerManager; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; +import java.util.List; + +@SuppressWarnings("UnstableApiUsage") public final class HUDManagerScreen extends Screen { HUDManagerScreen() { @@ -27,15 +32,20 @@ public final class HUDManagerScreen extends Screen { @Override protected void init() { super.init(); - for (NamedGuiOverlay entry : GuiOverlayManager.getOverlays()) { - if (entry.overlay() instanceof HUDElement element) { - addRenderableWidget(new HUDElementWrapper(Component.translatable(Util.makeDescriptionId("hud_element", entry.id())), element)); + if (minecraft == null) return; + for (GuiLayerManager.NamedLayer entry : getGuiLayers(minecraft.gui)) { + if (entry.layer() instanceof HUDElement element) { + addRenderableWidget(new HUDElementWrapper(Component.translatable(Util.makeDescriptionId("hud_element", entry.name())), element)); } else { addRenderableOnly(new StandardHUDElement(entry)); } } } + private List getGuiLayers(Gui gui) { + return ((GuiLayerManagerAccessor) ((GuiAccessor) gui).getLayerManager()).getLayers(); + } + @Override public void onClose() { for (GuiEventListener child : children()) { @@ -50,23 +60,31 @@ private interface HUDWidget extends Renderable { @Override default void render(GuiGraphics graphics, int pMouseX, int pMouseY, float pPartialTick) { - Minecraft minecraft = Minecraft.getInstance(); - getHUDElement().render( - ((ExtendedGui) minecraft.gui), - graphics, - pPartialTick, - minecraft.getWindow().getGuiScaledWidth(), - minecraft.getWindow().getGuiScaledHeight() - ); + getHUDElement().render(graphics, new DeltaTracker() { + @Override + public float getGameTimeDeltaTicks() { + return pPartialTick; + } + + @Override + public float getGameTimeDeltaPartialTick(boolean b) { + return pPartialTick; + } + + @Override + public float getRealtimeDeltaTicks() { + return pPartialTick; + } + }); } - IGuiOverlay getHUDElement(); + LayeredDraw.Layer getHUDElement(); } - private record StandardHUDElement(NamedGuiOverlay entry) implements HUDWidget { + private record StandardHUDElement(GuiLayerManager.NamedLayer entry) implements HUDWidget { @Override - public IGuiOverlay getHUDElement() { - return entry.overlay(); + public LayeredDraw.Layer getHUDElement() { + return entry.layer(); } } @@ -92,7 +110,8 @@ protected void updateWidgetNarration(NarrationElementOutput pNarrationElementOut } @Override - public void onClick(double pMouseX, double pMouseY) { + public void onClick(double pMouseX, double pMouseY, int pButton) { + if (pButton != GLFW.GLFW_MOUSE_BUTTON_LEFT) return; this.holdX = pMouseX - this.getX(); this.holdY = pMouseY - this.getY(); } @@ -150,7 +169,7 @@ private void setElementPosition(int newX, int newY) { public void playDownSound(SoundManager pHandler) {} @Override - public IGuiOverlay getHUDElement() { + public LayeredDraw.Layer getHUDElement() { return element; } } diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiAccessor.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiAccessor.java new file mode 100644 index 0000000..346541c --- /dev/null +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiAccessor.java @@ -0,0 +1,12 @@ +package com.github.minecraftschurlimods.betterhudlib.mixin; + +import net.minecraft.client.gui.Gui; +import net.neoforged.neoforge.client.gui.GuiLayerManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Gui.class) +public interface GuiAccessor { + @Accessor + GuiLayerManager getLayerManager(); +} diff --git a/src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiLayerManagerAccessor.java b/src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiLayerManagerAccessor.java new file mode 100644 index 0000000..8e4005e --- /dev/null +++ b/src/main/java/com/github/minecraftschurlimods/betterhudlib/mixin/GuiLayerManagerAccessor.java @@ -0,0 +1,13 @@ +package com.github.minecraftschurlimods.betterhudlib.mixin; + +import net.neoforged.neoforge.client.gui.GuiLayerManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(GuiLayerManager.class) +public interface GuiLayerManagerAccessor { + @Accessor + List getLayers(); +} diff --git a/src/main/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..dc526a9 --- /dev/null +++ b/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1 @@ +MixinConfigs: betterhudlib.mixins.json diff --git a/src/main/resources/betterhudlib.mixins.json b/src/main/resources/betterhudlib.mixins.json new file mode 100644 index 0000000..fb27e3d --- /dev/null +++ b/src/main/resources/betterhudlib.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8.5", + "package": "com.github.minecraftschurlimods.betterhudlib.mixin", + "compatibilityLevel": "JAVA_21", + "client": [ + "GuiAccessor", + "GuiLayerManagerAccessor" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java index c67b22a..2d8eea1 100644 --- a/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java +++ b/src/test/java/com/github/minecraftschurlimods/betterhudlib/test/ClientInit.java @@ -2,26 +2,26 @@ import com.github.minecraftschurlimods.betterhudlib.HUDElement; import com.github.minecraftschurlimods.betterhudlib.HUDManager; +import net.minecraft.client.DeltaTracker; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.client.event.RegisterGuiOverlaysEvent; -import net.neoforged.neoforge.client.gui.overlay.ExtendedGui; +import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; public class ClientInit { public static void init(IEventBus modBus) { HUDManager.initialize(); HUDManager.enableKeybind(modBus); - modBus.addListener((RegisterGuiOverlaysEvent evt) -> { - evt.registerAboveAll(new ResourceLocation("betterhudlibtest", "test_hud"), new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.CENTER, 0, 0, 100, 100) { + modBus.addListener((RegisterGuiLayersEvent evt) -> { + evt.registerAboveAll(ResourceLocation.fromNamespaceAndPath("betterhudlibtest", "test_hud"), new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.CENTER, 0, 0, 100, 100) { @Override - public void draw(ExtendedGui gui, GuiGraphics graphics, float partialTick) { + public void draw(GuiGraphics graphics, DeltaTracker deltaTracker) { graphics.fill(0, 0, getHeight(), getWidth(), 0xFF00FF00); } }); - evt.registerAboveAll(new ResourceLocation("betterhudlibtest", "test_hud2"), new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.BOTTOM, 100, 0, 100, 100) { + evt.registerAboveAll(ResourceLocation.fromNamespaceAndPath("betterhudlibtest", "test_hud2"), new HUDElement(HUDElement.AnchorX.CENTER, HUDElement.AnchorY.BOTTOM, 100, 0, 100, 100) { @Override - public void draw(ExtendedGui gui, GuiGraphics graphics, float partialTick) { + public void draw(GuiGraphics graphics, DeltaTracker deltaTracker) { graphics.fill(0, 0, getHeight(), getWidth(), 0xFFFF0000); } }); diff --git a/src/test/resources/META-INF/mods.toml b/src/test/resources/META-INF/neoforge.mods.toml similarity index 75% rename from src/test/resources/META-INF/mods.toml rename to src/test/resources/META-INF/neoforge.mods.toml index 57b1a51..a6a3502 100644 --- a/src/test/resources/META-INF/mods.toml +++ b/src/test/resources/META-INF/neoforge.mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" -loaderVersion="[28,)" +loaderVersion="[2,)" license="MIT" [[mods]]