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);
}
}
|