From 9c3ef46665cad5c1669dc1ad606ac7549e2b4766 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sat, 13 May 2023 23:13:37 +0100 Subject: [PATCH] Fix iron furnace xp button tooltip --- .../techreborn/client/gui/GuiIronFurnace.java | 90 +++++++++++-------- 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/src/client/java/techreborn/client/gui/GuiIronFurnace.java b/src/client/java/techreborn/client/gui/GuiIronFurnace.java index 7a5855500..a59b9c55e 100644 --- a/src/client/java/techreborn/client/gui/GuiIronFurnace.java +++ b/src/client/java/techreborn/client/gui/GuiIronFurnace.java @@ -24,8 +24,10 @@ package techreborn.client.gui; -import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -35,57 +37,32 @@ import reborncore.client.gui.guibuilder.GuiBuilder; import reborncore.common.screen.BuiltScreenHandler; import techreborn.blockentity.machine.iron.IronFurnaceBlockEntity; import techreborn.packets.ServerboundPackets; +import techreborn.utils.PlayerUtils; + +import java.util.Objects; public class GuiIronFurnace extends GuiBase { - IronFurnaceBlockEntity blockEntity; private static final Identifier EXP_BUTTON_TEXTURE = new Identifier("minecraft", "textures/item/experience_bottle.png"); - public GuiIronFurnace(int syncID, PlayerEntity player, IronFurnaceBlockEntity furnace) { super(player, furnace, furnace.createScreenHandler(syncID, player)); this.blockEntity = furnace; } - public void onClick() { + public void onClick(ButtonWidget buttonWidget) { ClientNetworkManager.sendToServer(ServerboundPackets.createPacketExperience(blockEntity)); } @Override public void init() { super.init(); - // TODO 1.19.3 -// ButtonWidget.TooltipSupplier tooltipSupplier = (button, matrices, mouseX, mouseY) -> { -// PlayerEntity player = MinecraftClient.getInstance().player; -// if (player == null) { return; } -// String message = "Experience: "; -// -// float furnaceExp = blockEntity.experience; -// if (furnaceExp <= 0) { -// message = message + "0"; -// } else { -// float expTillLevel = (1.0F - player.experienceProgress) * player.getNextLevelExperience(); -// if (furnaceExp <= expTillLevel) { -// int percentage = (int) (blockEntity.experience * 100 / player.getNextLevelExperience()); -// message = message + "+" -// + (percentage > 0 ? String.valueOf(percentage) : "<1") -// + "%"; -// } else { -// int levels = 0; -// furnaceExp -= expTillLevel; -// while (furnaceExp > 0) { -// furnaceExp -= PlayerUtils.getLevelExperience(player.experienceLevel); -// ++levels; -// } -// message = message + "+" + levels + "L"; -// } -// } -// -// renderTooltip(matrices, Text.literal(message), mouseX, mouseY); -// }; + addDrawableChild(new XpButtonWidget(this::onClick)); + } - addDrawableChild(new TexturedButtonWidget( - getGuiLeft() + 116, + private class XpButtonWidget extends TexturedButtonWidget { + public XpButtonWidget(PressAction pressAction) { + super(getGuiLeft() + 116, getGuiTop() + 58, 16, 16, @@ -95,8 +72,47 @@ public class GuiIronFurnace extends GuiBase { EXP_BUTTON_TEXTURE, 16, 16, - b -> onClick(), - Text.empty())); + pressAction, + Text.empty()); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + + if (hovered) { + context.drawTooltip(getTextRenderer(), getTooltipText(), mouseX, mouseY); + } + } + + private Text getTooltipText() { + PlayerEntity player = MinecraftClient.getInstance().player; + Objects.requireNonNull(player); + String message = "Experience: "; + + float furnaceExp = blockEntity.experience; + if (furnaceExp <= 0) { + message = message + "0"; + } else { + float expTillLevel = (1.0F - player.experienceProgress) * player.getNextLevelExperience(); + if (furnaceExp <= expTillLevel) { + int percentage = (int) (blockEntity.experience * 100 / player.getNextLevelExperience()); + message = message + "+" + + (percentage > 0 ? String.valueOf(percentage) : "<1") + + "%"; + } else { + int levels = 0; + furnaceExp -= expTillLevel; + while (furnaceExp > 0) { + furnaceExp -= PlayerUtils.getLevelExperience(player.experienceLevel); + ++levels; + } + message = message + "+" + levels + "L"; + } + } + + return Text.literal(message); + } } @Override