aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/auction/EditBidPopup.java
blob: f96e3231a2b5101374f6c7508799f9885fcabf0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package de.hysky.skyblocker.skyblock.auction;

import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.calculators.SignCalculator;
import de.hysky.skyblocker.utils.render.gui.AbstractPopupScreen;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.widget.*;
import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import org.jetbrains.annotations.NotNull;

public class EditBidPopup extends AbstractPopupScreen {
    private DirectionalLayoutWidget layout = DirectionalLayoutWidget.vertical();
    private final String minimumBid;
    private final SignBlockEntity signBlockEntity;

    private final boolean signFront;

    private TextFieldWidget textFieldWidget;

    private boolean packetSent = false;

    public EditBidPopup(AuctionViewScreen auctionViewScreen, @NotNull SignBlockEntity signBlockEntity, boolean signFront, String minimumBid) {
        super(Text.literal("Edit Bid"), auctionViewScreen);
        this.minimumBid = minimumBid;
        this.signBlockEntity = signBlockEntity;
        this.signFront = signFront;
    }

    @Override
    protected void init() {
        super.init();
        layout = DirectionalLayoutWidget.vertical();
        layout.spacing(8).getMainPositioner().alignHorizontalCenter();
        textFieldWidget = new EnterConfirmTextFieldWidget(textRenderer, 120, 15, Text.empty(), () -> done(null));
        textFieldWidget.setTextPredicate(this::isStringGood);
        layout.add(new TextWidget(Text.literal("- Set Bid -").fillStyle(Style.EMPTY.withBold(true)), textRenderer));
        layout.add(textFieldWidget);
        layout.add(new TextWidget(Text.literal("Minimum Bid: " + minimumBid), textRenderer));
        DirectionalLayoutWidget horizontal = DirectionalLayoutWidget.horizontal();
        ButtonWidget buttonWidget = ButtonWidget.builder(Text.literal("Set Minimum Bid"), this::buttonMinimumBid).width(80).build();
        buttonWidget.active = isStringGood(minimumBid);
        horizontal.add(buttonWidget);
        horizontal.add(ButtonWidget.builder(Text.literal("Done"), this::done).width(80).build());
        layout.add(horizontal);
        layout.forEachChild(this::addDrawableChild);
        this.layout.refreshPositions();
        SimplePositioningWidget.setPos(layout, this.getNavigationFocus());
        setInitialFocus(textFieldWidget);
    }

    @Override
    public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) {
        super.renderBackground(context, mouseX, mouseY, delta);
        drawPopupBackground(context, layout.getX(), layout.getY(), layout.getWidth(), layout.getHeight());
        if (SkyblockerConfigManager.get().uiAndVisuals.inputCalculator.enabled) {
            SignCalculator.renderCalculator(context, textFieldWidget.getText(), context.getScaledWindowWidth() / 2, textFieldWidget.getY() - 8);
        }
    }

    private boolean isStringGood(String s) {
        assert this.client != null;
        return this.client.textRenderer.getWidth(minimumBid) <= this.signBlockEntity.getMaxTextWidth();
    }

    private void buttonMinimumBid(ButtonWidget widget) {
        if (!isStringGood(minimumBid)) return;
        sendPacket(minimumBid);
        this.close();
    }

    private void done(ButtonWidget widget) {
        if (SkyblockerConfigManager.get().uiAndVisuals.inputCalculator.enabled) {
            if (!isStringGood(SignCalculator.getNewValue(false))) return;
            sendPacket(SignCalculator.getNewValue(false));
        } else {
            if (!isStringGood(textFieldWidget.getText().trim())) return;
            sendPacket(textFieldWidget.getText().trim());
        }
        this.close();
    }

    private void sendPacket(String string) {
        assert MinecraftClient.getInstance().player != null;
        MinecraftClient.getInstance().player.networkHandler.sendPacket(new UpdateSignC2SPacket(signBlockEntity.getPos(), signFront,
                string.replace("coins", ""),
                "",
                "",
                ""
        ));
        packetSent = true;
    }

    @Override
    public void close() {
        if (!packetSent) sendPacket("");
        assert this.client != null;
        this.client.setScreen(null);
    }

    @Override
    public void removed() {
        if (!packetSent) sendPacket("");
        super.removed();
    }
}