UI change
This commit is contained in:
@@ -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"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user