UI change

This commit is contained in:
2025-11-12 12:02:26 +01:00
parent f72c2a54fe
commit 34394aabc6
3 changed files with 89 additions and 20 deletions
@@ -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;
}
}
}
@@ -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);
}
}
}
@@ -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"
}