From 34394aabc65975a6584d531d11e6a60353644374 Mon Sep 17 00:00:00 2001 From: fretuks Date: Wed, 12 Nov 2025 12:02:26 +0100 Subject: [PATCH] UI change --- .../ascend/client/screen/ShrineScreen.java | 96 +++++++++++++++---- .../ServerboundShrineChoicePacket.java | 10 +- .../resources/assets/ascend/lang/en_us.json | 3 +- 3 files changed, 89 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/fretux/ascend/client/screen/ShrineScreen.java b/src/main/java/net/fretux/ascend/client/screen/ShrineScreen.java index 457b8fc..fa32d5e 100644 --- a/src/main/java/net/fretux/ascend/client/screen/ShrineScreen.java +++ b/src/main/java/net/fretux/ascend/client/screen/ShrineScreen.java @@ -3,6 +3,7 @@ package net.fretux.ascend.client.screen; import com.mojang.blaze3d.systems.RenderSystem; import net.fretux.ascend.network.PacketHandler; import net.fretux.ascend.network.ServerboundShrineChoicePacket; +import net.fretux.ascend.player.PlayerStatsProvider; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; @@ -11,12 +12,15 @@ import net.minecraft.network.chat.Component; public class ShrineScreen extends Screen { - private static final int WIDTH = 200; - private static final int HEIGHT = 120; + private static final int WIDTH = 260; + private static final int HEIGHT = 160; private int leftPos; private int topPos; + private int dialogueStage = 0; // 0 = intro, 1 = offer, 2 = confirm + private int playerKnowledge = 0; + public ShrineScreen() { super(Component.literal("Shrine of Remembrance")); } @@ -27,33 +31,91 @@ public class ShrineScreen extends Screen { this.leftPos = (this.width - WIDTH) / 2; this.topPos = (this.height - HEIGHT) / 2; + Minecraft mc = Minecraft.getInstance(); + if (mc.player != null) { + mc.player.getCapability(PlayerStatsProvider.PLAYER_STATS).ifPresent(stats -> { + playerKnowledge = stats.getKnowledge(); + }); + } + + updateButtons(); + } + + private void updateButtons() { this.clearWidgets(); + int buttonY = topPos + 85; - // Dialogue text - int buttonY = topPos + 60; + switch (dialogueStage) { + case 0 -> { // Intro + Button engageButton = Button.builder(Component.literal("I WISH TO ENGAGE IN A DEAL."), (btn) -> { + dialogueStage = 1; + updateButtons(); + }).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build(); - Button forgetButton = Button.builder(Component.literal("I WISH TO FORGET"), (btn) -> { - PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("forget")); - Minecraft.getInstance().setScreen(null); - }).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build(); + Button leaveButton = Button.builder(Component.literal("LEAVE."), (btn) -> { + Minecraft.getInstance().setScreen(null); + }).bounds(leftPos + 20, buttonY + 25, WIDTH - 40, 20).build(); - Button cancelButton = Button.builder(Component.literal("LEAVE"), (btn) -> { - Minecraft.getInstance().setScreen(null); - }).bounds(leftPos + 20, buttonY + 25, WIDTH - 40, 20).build(); + addRenderableWidget(engageButton); + addRenderableWidget(leaveButton); + } - addRenderableWidget(forgetButton); - addRenderableWidget(cancelButton); + case 1 -> { // Shrine explains terms + Button agreeButton = Button.builder(Component.literal("I AGREE."), (btn) -> { + dialogueStage = 2; + updateButtons(); + }).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build(); + + Button leaveButton = Button.builder(Component.literal("LEAVE."), (btn) -> { + Minecraft.getInstance().setScreen(null); + }).bounds(leftPos + 20, buttonY + 25, WIDTH - 40, 20).build(); + + addRenderableWidget(agreeButton); + addRenderableWidget(leaveButton); + } + + case 2 -> { // Player picks what to unmake + Button forgetButton = Button.builder(Component.literal("I WISH TO FORGET."), (btn) -> { + PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("forget")); + Minecraft.getInstance().setScreen(null); + }).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build(); + + Button leaveButton = Button.builder(Component.literal("LEAVE."), (btn) -> { + Minecraft.getInstance().setScreen(null); + }).bounds(leftPos + 20, buttonY + 25, WIDTH - 40, 20).build(); + + addRenderableWidget(forgetButton); + addRenderableWidget(leaveButton); + } + } } @Override public void render(GuiGraphics gui, int mouseX, int mouseY, float partialTicks) { this.renderBackground(gui); RenderSystem.enableBlend(); - gui.fill(leftPos - 6, topPos - 6, leftPos + WIDTH + 6, topPos + HEIGHT + 6, 0xAA000000); + gui.fill(leftPos - 6, topPos - 6, leftPos + WIDTH + 6, topPos + HEIGHT + 6, 0xCC000000); RenderSystem.disableBlend(); - gui.drawCenteredString(this.font, "SPEAK, LITTLE ONE.", this.width / 2, topPos + 10, 0xAA55FF); - gui.drawCenteredString(this.font, "WHAT IS IT YOU SEEK TO UNMAKE?", this.width / 2, topPos + 25, 0xAA55FF); + int titleColor = 0xAA55FF; + gui.drawCenteredString(this.font, "Shrine of Remembrance", this.width / 2, topPos, 0xFFFFFF); + + gui.drawCenteredString(this.font, "Knowledge: " + playerKnowledge, this.width / 2, topPos + 20, 0x55FFAA); + + switch (dialogueStage) { + case 0 -> { + gui.drawCenteredString(this.font, "SPEAK, LITTLE ONE.", this.width / 2, topPos + 40, titleColor); + gui.drawCenteredString(this.font, "WHAT IS IT YOU SEEK TO UNMAKE?", this.width / 2, topPos + 55, titleColor); + } + case 1 -> { + gui.drawCenteredString(this.font, "THE TERMS ARE AS FOLLOWS:", this.width / 2, topPos + 40, titleColor); + gui.drawCenteredString(this.font, "I WILL CONSUME YOUR KNOWLEDGE.", this.width / 2, topPos + 55, titleColor); + gui.drawCenteredString(this.font, "YOU WILL REAP A BENEFIT.", this.width / 2, topPos + 70, titleColor); + } + case 2 -> { + gui.drawCenteredString(this.font, "SPEAK YOUR DESIRE, FOOLISH ONE.", this.width / 2, topPos + 40, titleColor); + } + } super.render(gui, mouseX, mouseY, partialTicks); } @@ -62,4 +124,4 @@ public class ShrineScreen extends Screen { public boolean isPauseScreen() { return false; } -} +} \ No newline at end of file diff --git a/src/main/java/net/fretux/ascend/network/ServerboundShrineChoicePacket.java b/src/main/java/net/fretux/ascend/network/ServerboundShrineChoicePacket.java index 439948a..6001508 100644 --- a/src/main/java/net/fretux/ascend/network/ServerboundShrineChoicePacket.java +++ b/src/main/java/net/fretux/ascend/network/ServerboundShrineChoicePacket.java @@ -4,6 +4,9 @@ import net.fretux.ascend.player.PlayerStatsProvider; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.PacketDistributor; @@ -37,7 +40,10 @@ public class ServerboundShrineChoicePacket { player.sendSystemMessage(Component.literal("FOOLISH... YET HONEST.")); } else { player.sendSystemMessage(Component.literal("YOUR MIND IS TOO EMPTY TO BE WORTH MY TOUCH.")); - player.kill(); + player.hurt(player.level().damageSources().magic(), 4.0F); + Vec3 look = player.getLookAngle().normalize().scale(-2.0D); + player.setDeltaMovement(look.x * 5, 0.8, look.z * 5); + player.hurtMarked = true; } PlayerStatsProvider.sync(player); } @@ -45,4 +51,4 @@ public class ServerboundShrineChoicePacket { }); ctx.get().setPacketHandled(true); } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/ascend/lang/en_us.json b/src/main/resources/assets/ascend/lang/en_us.json index c4fa799..2f607c4 100644 --- a/src/main/resources/assets/ascend/lang/en_us.json +++ b/src/main/resources/assets/ascend/lang/en_us.json @@ -31,6 +31,7 @@ "item.ascend.moonseye_tome.desc": "A forbidden scripture that reveals knowledge of the Depths. Grants 100 Knowledge on first use, 50 afterwards.", "item.ascend.moonseye_tome.used": "You gained %s Knowledge from the Moonseye Tome!", "itemGroup.ascend": "Ascend", - "ascend.attribute.display": "%s: %s" + "ascend.attribute.display": "%s: %s", + "ascend.stats.knowledge": "Knowledge: %s" }