aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java
blob: 49b29280479ba57e5e7609dfe74d91acc1b9b323 (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 com.thatgravyboat.skyblockhud.handlers;

import com.thatgravyboat.skyblockhud.Utils;
import com.thatgravyboat.skyblockhud.api.events.SidebarLineUpdateEvent;
import com.thatgravyboat.skyblockhud.api.events.SidebarPostEvent;
import java.util.Arrays;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class SlayerHandler {

    private static final Pattern KILLS_REGEX = Pattern.compile("(\\d+)/(\\d+) kills?");

    public enum slayerTypes {
        ZOMBIE(34, "Revenant Horror"),
        WOLF(42, "Sven Packmaster"),
        SPIDER(50, "Tarantula Broodfather"),
        VOIDGLOOMSERAPH(58, "Voidgloom Seraph"),
        NONE(0, "");

        private final String displayName;
        private final int x;

        slayerTypes(int x, String displayName) {
            this.displayName = displayName;
            this.x = x;
        }

        public String getDisplayName() {
            return displayName;
        }

        public int getX() {
            return x;
        }
    }

    public static slayerTypes currentSlayer = slayerTypes.NONE;
    public static int slayerTier = 0;
    public static boolean isDoingSlayer = false;
    public static int progress = 0;
    public static int maxKills = 0;
    public static boolean bossSlain = false;
    public static boolean isKillingBoss = false;

    public static void clearSlayer() {
        currentSlayer = slayerTypes.NONE;
        isDoingSlayer = false;
        progress = 0;
        maxKills = 0;
        bossSlain = false;
        isKillingBoss = false;
    }

    @SubscribeEvent
    public void onSidebarPost(SidebarPostEvent event) {
        String arrayString = Arrays.toString(event.arrayScores);
        isDoingSlayer = Arrays.toString(event.arrayScores).contains("Slayer Quest");
        if (isDoingSlayer && (currentSlayer.equals(slayerTypes.NONE) || !arrayString.replace(" ", "").contains(currentSlayer.getDisplayName().replace(" ", "") + Utils.intToRomanNumeral(slayerTier)))) {
            for (int i = 0; i < event.scores.size(); i++) {
                String line = event.scores.get(i);
                if (line.contains("Slayer Quest") && event.scores.size() > 3) {
                    String slayer = event.scores.get(i - 1).toLowerCase();
                    SlayerHandler.slayerTypes selectedSlayer = SlayerHandler.slayerTypes.NONE;
                    for (slayerTypes types : slayerTypes.values()) {
                        if (slayer.contains(types.displayName.toLowerCase(Locale.ENGLISH))) {
                            selectedSlayer = types;
                            break;
                        }
                    }
                    SlayerHandler.currentSlayer = selectedSlayer;
                    SlayerHandler.slayerTier = Utils.whatRomanNumeral(slayer.replace(selectedSlayer.getDisplayName().toLowerCase(), "").replace(" ", ""));
                    break;
                }
            }
        }

        if (!isDoingSlayer) {
            clearSlayer();
        }
    }

    @SubscribeEvent
    public void onSidebarLineUpdate(SidebarLineUpdateEvent event) {
        if (!isDoingSlayer && event.formattedLine.equals("Slayer Quest")) isDoingSlayer = true;

        if (isDoingSlayer) {
            String line = event.formattedLine.toLowerCase();
            Matcher killMatcher = KILLS_REGEX.matcher(line);

            if (killMatcher.find()) {
                SlayerHandler.bossSlain = false;
                SlayerHandler.isKillingBoss = false;
                try {
                    progress = Integer.parseInt(killMatcher.group(1));
                } catch (Exception ignored) {}
                try {
                    maxKills = Integer.parseInt(killMatcher.group(2));
                } catch (Exception ignored) {}
            } else if (line.contains("slay the boss")) {
                SlayerHandler.bossSlain = false;
                SlayerHandler.isKillingBoss = true;
                SlayerHandler.maxKills = 0;
                SlayerHandler.progress = 0;
            } else if (line.contains("boss slain")) {
                SlayerHandler.isKillingBoss = false;
                SlayerHandler.maxKills = 0;
                SlayerHandler.progress = 0;
                SlayerHandler.bossSlain = true;
            }
        }
    }
}