diff options
Diffstat (limited to 'src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java')
-rw-r--r-- | src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java new file mode 100644 index 0000000..36833cc --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java @@ -0,0 +1,121 @@ +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 net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.Arrays; +import java.util.Locale; + +public class SlayerHandler { + + public enum slayerTypes { + + ZOMBIE(34, "Revenant Horror"), + WOLF(42, "Sven Packmaster"), + SPIDER(50, "Tarantula Broodfather"), + VOIDGLOOMSERAPH(50, "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){ + String line = event.formattedLine.toLowerCase(); + if (line.contains("/") && (line.contains("kills") || (line.contains("xp")))){ + SlayerHandler.bossSlain = false; + SlayerHandler.isKillingBoss = false; + String[] killsText = line.replace(" ", "").replace("kills", "").split("/"); + if (line.contains("xp")) + killsText = line.replace(" ", "") + .replace("(", "") + .replace(")", "") + .replace("combatxp", "") + .split("/"); + try { + progress = Integer.parseInt(killsText[0]); + } catch (Exception ignored){} + try { + maxKills = Integer.parseInt(killsText[1]); + } 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; + } + if (maxKills == 0 && progress == 0){ + SlayerHandler.maxKills = 0; + SlayerHandler.progress = 0; + } + } + } + + + + + + +} |