aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java
blob: fbf6a5d8f9fea0e4d0380b0f5d5b5972ae9ff69a (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
package de.hysky.skyblocker.skyblock.quicknav;

import com.mojang.brigadier.exceptions.CommandSyntaxException;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.QuickNavigationConfig;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.datafixer.ItemStackComponentizationFixer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.PatternSyntaxException;

public class QuickNav {
    private static final Logger LOGGER = LoggerFactory.getLogger(QuickNav.class);

    public static List<QuickNavButton> init(String screenTitle) {
        List<QuickNavButton> buttons = new ArrayList<>();
        QuickNavigationConfig data = SkyblockerConfigManager.get().quickNav;
        try {
            if (data.button1.render) buttons.add(parseButton(data.button1, screenTitle, 0));
            if (data.button2.render) buttons.add(parseButton(data.button2, screenTitle, 1));
            if (data.button3.render) buttons.add(parseButton(data.button3, screenTitle, 2));
            if (data.button4.render) buttons.add(parseButton(data.button4, screenTitle, 3));
            if (data.button5.render) buttons.add(parseButton(data.button5, screenTitle, 4));
            if (data.button6.render) buttons.add(parseButton(data.button6, screenTitle, 5));
            if (data.button7.render) buttons.add(parseButton(data.button7, screenTitle, 6));
            if (data.button8.render) buttons.add(parseButton(data.button8, screenTitle, 7));
            if (data.button9.render) buttons.add(parseButton(data.button9, screenTitle, 8));
            if (data.button10.render) buttons.add(parseButton(data.button10, screenTitle, 9));
            if (data.button11.render) buttons.add(parseButton(data.button11, screenTitle, 10));
            if (data.button12.render) buttons.add(parseButton(data.button12, screenTitle, 11));
            if (data.button13.render) buttons.add(parseButton(data.button13, screenTitle, 12));
            if (data.button14.render) buttons.add(parseButton(data.button14, screenTitle, 13));
        } catch (CommandSyntaxException e) {
            LOGGER.error("[Skyblocker] Failed to initialize Quick Nav Button", e);
        }
        return buttons;
    }

    private static QuickNavButton parseButton(QuickNavigationConfig.QuickNavItem buttonInfo, String screenTitle, int id) throws CommandSyntaxException {
        QuickNavigationConfig.ItemData itemData = buttonInfo.itemData;
        ItemStack stack = ItemStackComponentizationFixer.fromComponentsString(itemData.item.toString(), Math.clamp(itemData.count, 1, 99), itemData.components);
        boolean uiTitleMatches = false;

        try {
            uiTitleMatches = screenTitle.matches(buttonInfo.uiTitle);
        } catch (PatternSyntaxException e) {
            LOGGER.error("[Skyblocker] Failed to parse Quick Nav Button with regex: {}", buttonInfo.uiTitle, e);
            ClientPlayerEntity player = MinecraftClient.getInstance().player;
            if (player != null) {
                player.sendMessage(Constants.PREFIX.get().append(Text.literal("Invalid regex in Quick Nav Button " + (id + 1) + "!").formatted(Formatting.RED)), false);
            }
        }
        return new QuickNavButton(id, uiTitleMatches, buttonInfo.clickEvent, stack);
    }
}