aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
blob: 996c48b6651032dd3c17681efeeb824387a88f98 (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
110
111
112
113
114
115
package me.xmrvizzy.skyblocker.skyblock;

import com.mojang.blaze3d.systems.RenderSystem;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FancyStatusBars extends DrawableHelper {
    private static final MinecraftClient client = MinecraftClient.getInstance();
    private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE,"textures/gui/bars.png");
    private static final Pattern ACTION_BAR_STATUS = Pattern.compile("^§[6c]([0-9]+)/([0-9])+❤ +§(?:a([0-9]+)§a❈ Defense|b-[0-9]+ Mana \\(§6[a-zA-Z ]+§b\\)) +§(?:b([0-9]+)/([0-9]+)✎ Mana|[0-9,]+/[0-9,]+k? Drill Fuel)$");
    private final Resource health;
    private final Resource mana;
    private int defense;

    public FancyStatusBars() {
        health = new Resource(100, 100);
        mana = new Resource(100, 100);
        defense = 0;
    }

    public boolean update(String actionBar) {
        if(!SkyblockerConfig.get().general.bars.enableBars)
            return false;
        Matcher matcher = ACTION_BAR_STATUS.matcher(actionBar);
        if(!matcher.matches()) {
            return false;
        }
        health.set(matcher.group(1), matcher.group(2));
        if(matcher.group(3) != null)
            defense = Integer.parseInt(matcher.group(3));
        if(matcher.group(4) != null)
            mana.set(matcher.group(4), matcher.group(5));
        return true;
    }

    public boolean render(MatrixStack matrices, int scaledWidth, int scaledHeight) {
        if(!SkyblockerConfig.get().general.bars.enableBars)
            return false;
        int left = scaledWidth / 2 - 91;
        int top = scaledHeight - 35;

        int hpFillWidth = (int) (health.getFillLevel() * 33.0F);
        if (hpFillWidth > 33) hpFillWidth = 33;
        int manaFillWidth = (int) (mana.getFillLevel() * 33.0F);
        if (manaFillWidth > 33) manaFillWidth = 33;
        int xp = (int) (client.player.experienceProgress * 33.0F);

        // Icons
//        this.client.getTextureManager().bindTexture(BARS);
        RenderSystem.setShaderTexture(0, BARS);
        this.drawTexture(matrices, left, top, 0, 0, 9, 9);
        this.drawTexture(matrices, left + 47, top, 9, 0, 7, 9);
        this.drawTexture(matrices, left + 92, top, 16, 0, 9, 9);
        this.drawTexture(matrices, left + 139, top, 25, 0, 9, 9);

        // Empty Bars
        this.drawTexture(matrices, left + 10, top + 1, 0, 9, 33, 7);
        this.drawTexture(matrices, left + 55, top + 1, 0, 9, 33, 7);
        this.drawTexture(matrices, left + 102, top + 1, 0, 9, 33, 7);
        this.drawTexture(matrices, left + 149, top + 1, 0, 9, 33, 7);

        // Progress Bars
        this.drawTexture(matrices, left + 10, top + 1, 0, 16, hpFillWidth, 7);
        this.drawTexture(matrices, left + 55, top + 1, 0, 23, manaFillWidth, 7);
        this.drawTexture(matrices, left + 102, top + 1, 0, 30, 33, 7);
        this.drawTexture(matrices, left + 149, top + 1, 0, 37, xp, 7);

        // Progress Texts
        renderText(matrices, health.getValue(), left + 11, top, 16733525);
        renderText(matrices, mana.getValue(), left + 56, top, 5636095);
        renderText(matrices, defense, left + 103, top, 12106180);
        renderText(matrices, client.player.experienceLevel, left + 150, top, 8453920);
        return true;
    }

    private void renderText(MatrixStack matrices, int value, int left, int top, int color) {
        TextRenderer textRenderer = client.textRenderer;
        String text = Integer.toString(value);
        int x = left + (33 - textRenderer.getWidth(text)) / 2;
        int y = top - 3;

        textRenderer.draw(matrices, text, (float) (x + 1), (float) y, 0);
        textRenderer.draw(matrices, text, (float) (x - 1), (float) y, 0);
        textRenderer.draw(matrices, text, (float) x, (float) (y + 1), 0);
        textRenderer.draw(matrices, text, (float) x, (float) (y - 1), 0);
        textRenderer.draw(matrices, text, (float) x, (float) y, color);
    }

    private static class Resource {
        private int value;
        private int max;
        public Resource(int value, int max) {
            this.value = value;
            this.max = max;
        }
        public void set(String value, String max) {
            this.value = Integer.parseInt(value);
            this.max = Integer.parseInt(max);
        }
        public int getValue() {
            return value;
        }
        public double getFillLevel() {
            return ((double)value)/((double)max);
        }
    }
}