1
mirror of https://github.com/Shiewk/BedrockDeathScreen.git synced 2026-04-27 22:44:17 +02:00

1.21.9 support

This commit is contained in:
Shy
2025-11-15 13:22:38 +01:00
parent 5a35e1e8f5
commit f1b9fc5f77
6 changed files with 39 additions and 60 deletions
@@ -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();
@@ -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;
}
@@ -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());
}
}