diff --git a/build.gradle b/build.gradle index f8740e3..57222b8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.10.1' + id 'fabric-loom' version "1.11-SNAPSHOT" id 'maven-publish' } @@ -37,7 +37,7 @@ dependencies { // 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:15.0.0-beta.3" + modImplementation "maven.modrinth:modmenu:${project.modmenu_version}" } processResources { diff --git a/gradle.properties b/gradle.properties index a7562e6..a3622dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,9 +3,9 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html - minecraft_version=1.21.6 - yarn_mappings=1.21.6+build.1 - loader_version=0.16.13 + minecraft_version=1.21.9 + yarn_mappings=1.21.9+build.1 + loader_version=0.17.2 # Mod Properties mod_version = 1.3.1 @@ -14,4 +14,5 @@ org.gradle.jvmargs=-Xmx1G # Dependencies # check this on https://modmuss50.me/fabric.html - fabric_version=0.127.0+1.21.6 + fabric_version=0.134.0+1.21.9 + modmenu_version=16.0.0-rc.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a79..ca025c8 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.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/BedrockDeathScreen.java b/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/BedrockDeathScreen.java index 30adfd0..36b8e5f 100644 --- a/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/BedrockDeathScreen.java +++ b/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/BedrockDeathScreen.java @@ -4,6 +4,7 @@ import de.shiewk.bedrockdeathscreen.client.BedrockDeathScreenClient; import de.shiewk.bedrockdeathscreen.client.screen.components.BedrockDeathScreenButton; import de.shiewk.bedrockdeathscreen.config.BedrockDeathScreenConfig; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.DeathScreen; import net.minecraft.client.gui.screen.TitleScreen; @@ -15,13 +16,11 @@ import net.minecraft.util.Identifier; import net.minecraft.util.Util; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2fStack; -import org.lwjgl.glfw.GLFW; import java.awt.*; public class BedrockDeathScreen extends DeathScreen { - public static final long CURSOR_HAND = GLFW.glfwCreateStandardCursor(GLFW.GLFW_POINTING_HAND_CURSOR); public static final Identifier VIGNETTE = Identifier.of("bedrockdeathscreen", "textures/gui/death_vignette.png"); private final BedrockDeathScreenConfig config; @@ -100,13 +99,6 @@ public class BedrockDeathScreen extends DeathScreen { boolean hoveringButton = menuButton.isHovered() || respawnButton.isHovered(); if (hoveringButton != wasHoveringButtons){ wasHoveringButtons = hoveringButton; - assert client != null; - long window = client.getWindow().getHandle(); - if (hoveringButton){ - GLFW.glfwSetCursor(window, CURSOR_HAND); - } else { - GLFW.glfwSetCursor(window, 0); - } } } @@ -162,15 +154,15 @@ public class BedrockDeathScreen extends DeathScreen { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (respawnButton.mouseClicked(mouseX, mouseY, button)) return true; - return menuButton.mouseClicked(mouseX, mouseY, button); + public boolean mouseClicked(Click click, boolean doubled) { + if (respawnButton.mouseClicked(click, doubled)) return true; + return menuButton.mouseClicked(click, doubled); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { - respawnButton.mouseReleased(mouseX, mouseY, button); - menuButton.mouseReleased(mouseX, mouseY, button); + public boolean mouseReleased(Click click) { + respawnButton.mouseReleased(click); + menuButton.mouseReleased(click); return true; } @@ -189,22 +181,6 @@ public class BedrockDeathScreen extends DeathScreen { return (float) (ep / (1d + ep) * 7d + 2d); } - @Override - public void close() { - assert client != null; - long window = client.getWindow().getHandle(); - GLFW.glfwSetCursor(window, 0); - super.close(); - } - - @Override - public void removed() { - assert client != null; - long window = client.getWindow().getHandle(); - GLFW.glfwSetCursor(window, 0); - super.removed(); - } - private void clickQuitButton() { if (confirmingExit) { quitLevel(); diff --git a/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/components/BedrockDeathScreenButton.java b/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/components/BedrockDeathScreenButton.java index 3a16e6d..5c039c1 100644 --- a/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/components/BedrockDeathScreenButton.java +++ b/src/main/java/de/shiewk/bedrockdeathscreen/client/screen/components/BedrockDeathScreenButton.java @@ -1,7 +1,9 @@ package de.shiewk.bedrockdeathscreen.client.screen.components; import net.minecraft.client.font.TextRenderer; +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.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.sound.SoundManager; @@ -57,6 +59,10 @@ public class BedrockDeathScreenButton extends ClickableWidget { protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) { final boolean mouseHover = isHovered(); + if (mouseHover) { + context.setCursor(StandardCursors.POINTING_HAND); + } + final int opacity = getOpacity(); if (opacity < 4) return; final int startX = getX(); @@ -67,13 +73,13 @@ public class BedrockDeathScreenButton extends ClickableWidget { boolean shouldAppearPressed = pressed || clicked; if (shouldAppearPressed){ context.fill(startX+2, startY+4, endX-2, endY+2, changeColorOpacity(colorPrimaryPressed, opacity)); - context.drawBorder(startX+1, startY+3, (endX-1) - (startX+1), (endY+1) - (startY+1), changeColorOpacity(colorBorderPressed, opacity)); - context.drawBorder(startX, startY+2, endX - startX, (endY+2) - startY, changeColorOpacity(colorBlack, opacity)); + context.drawStrokedRectangle(startX+1, startY+3, (endX-1) - (startX+1), (endY+1) - (startY+1), changeColorOpacity(colorBorderPressed, opacity)); + context.drawStrokedRectangle(startX, startY+2, endX - startX, (endY+2) - startY, changeColorOpacity(colorBlack, opacity)); } else { context.fill(startX+2, startY+2, endX-2, endY-1, (mouseHover ? changeColorOpacity(colorHover, opacity) : changeColorOpacity(colorPrimary, opacity))); - context.drawBorder(startX+1, startY+1, (endX-1) - (startX+1), (endY) - (startY+1), changeColorOpacity(colorBorder, opacity)); + context.drawStrokedRectangle(startX+1, startY+1, (endX-1) - (startX+1), (endY) - (startY+1), changeColorOpacity(colorBorder, opacity)); context.fill(startX+1, endY, endX-1, endY+3, changeColorOpacity(colorSecondary, opacity)); - context.drawBorder(startX, startY, endX - startX, (endY+4) - startY, changeColorOpacity(colorBlack, opacity)); + context.drawStrokedRectangle(startX, startY, endX - startX, (endY+4) - startY, changeColorOpacity(colorBlack, opacity)); } if (textShadow){ @@ -97,12 +103,12 @@ public class BedrockDeathScreenButton extends ClickableWidget { } @Override - public void onClick(double mouseX, double mouseY) { + public void onClick(Click click, boolean doubled) { pressed = true; } @Override - public void onRelease(double mouseX, double mouseY) { + public void onRelease(Click click) { if (pressed && hovered) { clicked = true; clickAction.run(); @@ -119,9 +125,9 @@ public class BedrockDeathScreenButton extends ClickableWidget { protected void appendClickableNarrations(NarrationMessageBuilder builder) {} @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click click, boolean doubled) { if (getOpacity() > 0){ - return super.mouseClicked(mouseX, mouseY, button); + return super.mouseClicked(click, doubled); } else { return false; } diff --git a/src/main/java/de/shiewk/bedrockdeathscreen/mixin/MixinMinecraftClient.java b/src/main/java/de/shiewk/bedrockdeathscreen/mixin/MixinMinecraftClient.java index 1f25614..c3761bd 100644 --- a/src/main/java/de/shiewk/bedrockdeathscreen/mixin/MixinMinecraftClient.java +++ b/src/main/java/de/shiewk/bedrockdeathscreen/mixin/MixinMinecraftClient.java @@ -2,32 +2,28 @@ package de.shiewk.bedrockdeathscreen.mixin; import de.shiewk.bedrockdeathscreen.client.screen.BedrockDeathScreen; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.DeathScreen; import net.minecraft.client.world.ClientWorld; +import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(MinecraftClient.class) public class MixinMinecraftClient { - @Shadow @Nullable public ClientWorld world; + @Shadow + @Nullable + public ClientWorld world; - @ModifyVariable( + @Redirect( method = "setScreen", - at = @At("STORE"), - name = "screen", - index = 1, - argsOnly = true + at = @At(value = "NEW", target = "(Lnet/minecraft/text/Text;Z)Lnet/minecraft/client/gui/screen/DeathScreen;") ) - public Screen onCreateDeathScreen(Screen value){ - if (world != null){ - return new BedrockDeathScreen(null, world.getLevelProperties().isHardcore()); - } else { - return value; - } + public DeathScreen bedrockdeathscreen$createModifiedDeathScreen(Text message, boolean isHardcore){ + return new BedrockDeathScreen(null, world != null && world.getLevelProperties().isHardcore()); } }