aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/events/EventToast.java
blob: 48ea05c4a7a0e16ba022a66dcd4084825809d808 (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
package de.hysky.skyblocker.skyblock.events;

import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager;
import net.minecraft.item.ItemStack;
import net.minecraft.text.MutableText;
import net.minecraft.text.OrderedText;
import net.minecraft.text.Text;
import net.minecraft.util.Colors;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;

import java.util.List;

public class EventToast implements Toast {
    protected static final Identifier TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "notification");

    private final long eventStartTime;

    protected final List<OrderedText> message;
    protected final List<OrderedText> messageNow;
    protected final int messageWidth;
    protected final int messageNowWidth;
    protected final ItemStack icon;

    protected boolean started;

    public EventToast(long eventStartTime, String name, ItemStack icon) {
        this.eventStartTime = eventStartTime;
        MutableText formatted = Text.translatable("skyblocker.events.startsSoon", Text.literal(name).formatted(Formatting.YELLOW)).formatted(Formatting.WHITE);
        TextRenderer renderer = MinecraftClient.getInstance().textRenderer;
        message = renderer.wrapLines(formatted, 150);
        messageWidth = message.stream().mapToInt(renderer::getWidth).max().orElse(150);

        MutableText formattedNow = Text.translatable("skyblocker.events.startsNow", Text.literal(name).formatted(Formatting.YELLOW)).formatted(Formatting.WHITE);
        messageNow = renderer.wrapLines(formattedNow, 150);
        messageNowWidth = messageNow.stream().mapToInt(renderer::getWidth).max().orElse(150);
        this.icon = icon;
        this.started = eventStartTime - System.currentTimeMillis() / 1000 < 0;

    }
    @Override
    public Visibility draw(DrawContext context, ToastManager manager, long startTime) {
        context.drawGuiTexture(TEXTURE, 0, 0, getWidth(), getHeight());

        int y = (getHeight() - getInnerContentsHeight())/2;
        y = 2 + drawMessage(context, 30, y, Colors.WHITE);
        drawTimer(context, 30, y);

        context.drawItemWithoutEntity(icon, 8, getHeight()/2 - 8);
        return startTime > 5_000 ? Visibility.HIDE: Visibility.SHOW;
    }

    protected int drawMessage(DrawContext context, int x, int y, int color) {
        TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
        for (OrderedText orderedText : started ? messageNow: message) {
            context.drawText(textRenderer, orderedText, x, y, color, false);
            y += textRenderer.fontHeight;
        }
        return y;
    }

    protected void drawTimer(DrawContext context, int x, int y) {
        long currentTime = System.currentTimeMillis() / 1000;
        int timeTillEvent = (int) (eventStartTime - currentTime);
        started = timeTillEvent < 0;
        if (started) return;

        Text time = Utils.getDurationText(timeTillEvent);

        TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
        context.drawText(textRenderer, time, x, y, Colors.LIGHT_YELLOW, false);
    }

    @Override
    public int getWidth() {
        return (started ? messageNowWidth: messageWidth) + 30 + 6;
    }

    protected int getInnerContentsHeight() {
        return message.size() * 9 + (started ? 0 : 9);
    }

    @Override
    public int getHeight() {
        return Math.max(getInnerContentsHeight() + 12 + 2, 32);
    }
}