aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/Danker/features
diff options
context:
space:
mode:
authorbowser0000 <bowser0000@gmail.com>2022-08-09 20:32:25 -0400
committerGitHub <noreply@github.com>2022-08-09 20:32:25 -0400
commit4d2a84d9fd2f522b2ade9954f8d40f6d80e2b12b (patch)
tree7f762c94a742a07e5c3939e70d35cf7128071b32 /src/main/java/me/Danker/features
parent48253eddf00cf5d94ecc2eb6b63e7c490b3145be (diff)
parentf56302bee3939677fc3fd015a97b12b5100c45b1 (diff)
downloadSkyblockMod-4d2a84d9fd2f522b2ade9954f8d40f6d80e2b12b.tar.gz
SkyblockMod-4d2a84d9fd2f522b2ade9954f8d40f6d80e2b12b.tar.bz2
SkyblockMod-4d2a84d9fd2f522b2ade9954f8d40f6d80e2b12b.zip
Merge branch 'development' into development
Diffstat (limited to 'src/main/java/me/Danker/features')
-rw-r--r--src/main/java/me/Danker/features/Alerts.java7
-rw-r--r--src/main/java/me/Danker/features/AutoDisplay.java2
-rw-r--r--src/main/java/me/Danker/features/ChatAliases.java6
-rw-r--r--src/main/java/me/Danker/features/ColouredNames.java2
-rw-r--r--src/main/java/me/Danker/features/CrystalHollowWaypoints.java3
-rw-r--r--src/main/java/me/Danker/features/CustomMusic.java69
-rw-r--r--src/main/java/me/Danker/features/FishingSpawnAlerts.java60
-rw-r--r--src/main/java/me/Danker/features/GemstonesLore.java5
-rw-r--r--src/main/java/me/Danker/features/GoldenEnchants.java4
-rw-r--r--src/main/java/me/Danker/features/MinionLastCollected.java142
-rw-r--r--src/main/java/me/Danker/features/loot/FishingTracker.java6
-rw-r--r--src/main/java/me/Danker/features/loot/LootDisplay.java118
-rw-r--r--src/main/java/me/Danker/features/loot/LootTracker.java25
-rw-r--r--src/main/java/me/Danker/features/loot/TrophyFishTracker.java143
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/TriviaSolver.java11
15 files changed, 561 insertions, 42 deletions
diff --git a/src/main/java/me/Danker/features/Alerts.java b/src/main/java/me/Danker/features/Alerts.java
index 8f45423..aa6197f 100644
--- a/src/main/java/me/Danker/features/Alerts.java
+++ b/src/main/java/me/Danker/features/Alerts.java
@@ -1,8 +1,8 @@
package me.Danker.features;
import com.google.gson.GsonBuilder;
-import javafx.scene.control.Alert;
import me.Danker.commands.ToggleCommand;
+import me.Danker.events.ModInitEvent;
import me.Danker.utils.Utils;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StringUtils;
@@ -25,6 +25,11 @@ public class Alerts {
public static String configFile;
@SubscribeEvent
+ public void init(ModInitEvent event) {
+ configFile = event.configDirectory + "/dsmalerts.json";
+ }
+
+ @SubscribeEvent
public void onChat(ClientChatReceivedEvent event) {
if (!ToggleCommand.alerts || event.type == 2) return;
diff --git a/src/main/java/me/Danker/features/AutoDisplay.java b/src/main/java/me/Danker/features/AutoDisplay.java
index 7f86035..9ef3b4d 100644
--- a/src/main/java/me/Danker/features/AutoDisplay.java
+++ b/src/main/java/me/Danker/features/AutoDisplay.java
@@ -97,6 +97,8 @@ public class AutoDisplay {
if (lore.get(j).contains("FISHING ROD")) {
if (Utils.tabLocation.equals("Crimson Isle")) {
LootDisplay.display = "fishing_lava";
+ } else if (Utils.tabLocation.equals("Jerry's Workshop")) {
+ LootDisplay.display = "fishing_winter";
} else {
LootDisplay.display = "fishing";
}
diff --git a/src/main/java/me/Danker/features/ChatAliases.java b/src/main/java/me/Danker/features/ChatAliases.java
index ae9e0f7..76ab5f6 100644
--- a/src/main/java/me/Danker/features/ChatAliases.java
+++ b/src/main/java/me/Danker/features/ChatAliases.java
@@ -1,6 +1,7 @@
package me.Danker.features;
import com.google.gson.GsonBuilder;
+import me.Danker.events.ModInitEvent;
import me.Danker.events.PacketWriteEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.network.play.client.C01PacketChatMessage;
@@ -17,6 +18,11 @@ public class ChatAliases {
public static String configFile;
@SubscribeEvent
+ public void init(ModInitEvent event) {
+ configFile = event.configDirectory + "/dsmaliases.json";
+ }
+
+ @SubscribeEvent
public void onPacketWrite(PacketWriteEvent event) {
if (event.packet instanceof C01PacketChatMessage) {
C01PacketChatMessage packet = (C01PacketChatMessage) event.packet;
diff --git a/src/main/java/me/Danker/features/ColouredNames.java b/src/main/java/me/Danker/features/ColouredNames.java
index 90d722e..9f7890c 100644
--- a/src/main/java/me/Danker/features/ColouredNames.java
+++ b/src/main/java/me/Danker/features/ColouredNames.java
@@ -72,7 +72,7 @@ public class ColouredNames {
@SubscribeEvent(priority = EventPriority.LOW)
public void onRenderLiving(RenderLivingEvent.Specials.Pre<EntityLivingBase> event) {
- if (!ToggleCommand.customColouredNames || !Utils.inSkyblock) return;
+ if (!ToggleCommand.customColouredNames || !ToggleCommand.customNametags || !Utils.inSkyblock) return;
Entity entity = event.entity;
if (entity instanceof EntityArmorStand && !entity.isDead && entity.hasCustomName()) {
diff --git a/src/main/java/me/Danker/features/CrystalHollowWaypoints.java b/src/main/java/me/Danker/features/CrystalHollowWaypoints.java
index a8ee0f9..12aa94e 100644
--- a/src/main/java/me/Danker/features/CrystalHollowWaypoints.java
+++ b/src/main/java/me/Danker/features/CrystalHollowWaypoints.java
@@ -7,7 +7,6 @@ import me.Danker.handlers.ScoreboardHandler;
import me.Danker.utils.RenderUtils;
import me.Danker.utils.Utils;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.item.EntityArmorStand;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.event.ClickEvent;
@@ -148,7 +147,7 @@ public class CrystalHollowWaypoints {
}
player.addChatMessage(new ChatComponentText("\n" + DankersSkyblockMod.MAIN_COLOUR + "DSM/SBE Crystal Hollows waypoints found. Click to add.\n").appendSibling(add));
}).start();
- } else {
+ } else if (message.indexOf(":") != message.lastIndexOf(":")) {
String text = message.substring(message.indexOf(":") + 2);
Matcher matcher = skytilsPattern.matcher(text);
diff --git a/src/main/java/me/Danker/features/CustomMusic.java b/src/main/java/me/Danker/features/CustomMusic.java
index 3ea8d1f..38e4ba0 100644
--- a/src/main/java/me/Danker/features/CustomMusic.java
+++ b/src/main/java/me/Danker/features/CustomMusic.java
@@ -2,6 +2,8 @@ package me.Danker.features;
import me.Danker.DankersSkyblockMod;
import me.Danker.commands.ToggleCommand;
+import me.Danker.events.ModInitEvent;
+import me.Danker.events.PostConfigInitEvent;
import me.Danker.handlers.ScoreboardHandler;
import me.Danker.utils.Utils;
import net.minecraft.client.Minecraft;
@@ -67,6 +69,7 @@ public class CustomMusic {
public static Song park;
public static int parkVolume;
+ static int curPhase = 0;
@SubscribeEvent
public void onWorldChange(WorldEvent.Load event) {
@@ -94,9 +97,29 @@ public class CustomMusic {
firstLine.contains("30,344") || // F4
firstLine.contains("livid") || // F5
firstLine.contains("sadan") || // F6
- firstLine.contains("maxor")) { // F7
-
- if (ToggleCommand.dungeonBossMusic) dungeonboss.start();
+ firstLine.contains("maxor") || // F7
+ firstLine.contains("f7")) {
+
+ if (ToggleCommand.dungeonBossMusic) {
+ switch (curPhase) {
+ case -1:
+ break;
+ case 2:
+ phase2.start();
+ break;
+ case 3:
+ phase3.start();
+ break;
+ case 4:
+ phase4.start();
+ break;
+ case 5:
+ phase5.start();
+ break;
+ default:
+ dungeonboss.start();
+ }
+ }
}
}
} else {
@@ -153,22 +176,27 @@ public class CustomMusic {
}
}
- if (message.contains(":")) return;
-
if (Utils.inDungeons) {
if (ToggleCommand.dungeonBossMusic) {
- if (message.startsWith("[BOSS] Storm: Pathetic Maxor")) {
+ if (phase2.hasSongs() && message.startsWith("[BOSS] Storm: Pathetic Maxor")) {
phase2.start();
- } else if (message.startsWith("[BOSS] Goldor: Who dares trespass into my domain?")) {
+ curPhase = 2;
+ } else if (phase3.hasSongs() && message.startsWith("[BOSS] Goldor: Who dares trespass into my domain?")) {
phase3.start();
- } else if (message.startsWith("[BOSS] Necron: You went further than any human before")) {
+ curPhase = 3;
+ } else if (phase4.hasSongs() && message.startsWith("[BOSS] Necron: You went further than any human before")) {
phase4.start();
- } else if (message.startsWith("[BOSS] ") && message.endsWith("You.. again?")) {
+ curPhase = 4;
+ } else if (phase5.hasSongs() && message.startsWith("[BOSS] ") && message.endsWith("You.. again?")) {
phase5.start();
+ curPhase = 5;
}
}
+ if (message.contains(":")) return;
+
if (message.contains("EXTRA STATS ")) {
+ curPhase = -1; // force no play
dungeonboss.stop();
bloodroom.stop();
dungeon.stop();
@@ -190,6 +218,11 @@ public class CustomMusic {
}
}
+ @SubscribeEvent
+ public void postConfigInit(PostConfigInitEvent event) {
+ init(event.configDirectory);
+ }
+
public static void init(String configDirectory) {
if (configDirectory == null) return;
File directory = new File(configDirectory + "/dsmmusic");
@@ -205,7 +238,7 @@ public class CustomMusic {
phase4 = new Song(directory, "phasefour", phase4Volume);
phase5 = new Song(directory, "phasefive", phase5Volume);
hub = new Song(directory, "hub", hubVolume);
- island = new Song(directory, "island", hubVolume);
+ island = new Song(directory, "island", islandVolume);
dungeonHub = new Song(directory, "dungeonhub", dungeonHubVolume);
farmingIslands = new Song(directory, "farmingislands", farmingIslandsVolume);
goldMine = new Song(directory, "goldmine", goldMineVolume);
@@ -238,6 +271,7 @@ public class CustomMusic {
if (crimsonIsle != null) crimsonIsle.stop();
if (end != null) end.stop();
if (park != null) park.stop();
+ curPhase = 0;
}
public static class Song {
@@ -263,6 +297,7 @@ public class CustomMusic {
public void start() throws UnsupportedAudioFileException, LineUnavailableException, IOException {
try {
+ if (music == null) music = AudioSystem.getClip();
if (!music.isRunning()) {
reset();
shuffle();
@@ -307,14 +342,20 @@ public class CustomMusic {
return false;
}
- float decibels = (float) (20 * Math.log(volume / 100.0));
- FloatControl control = (FloatControl) music.getControl(FloatControl.Type.MASTER_GAIN);
- if (decibels <= control.getMinimum() || decibels >= control.getMaximum()) return false;
- control.setValue(decibels);
+ if (music != null) {
+ float decibels = (float) (20 * Math.log(volume / 100.0));
+ FloatControl control = (FloatControl) music.getControl(FloatControl.Type.MASTER_GAIN);
+ if (decibels <= control.getMinimum() || decibels >= control.getMaximum()) return false;
+ control.setValue(decibels);
+ }
return true;
}
+ public boolean hasSongs() {
+ return playlist.size() > 0;
+ }
+
}
}
diff --git a/src/main/java/me/Danker/features/FishingSpawnAlerts.java b/src/main/java/me/Danker/features/FishingSpawnAlerts.java
new file mode 100644
index 0000000..3f11dfc
--- /dev/null
+++ b/src/main/java/me/Danker/features/FishingSpawnAlerts.java
@@ -0,0 +1,60 @@
+package me.Danker.features;
+
+import me.Danker.DankersSkyblockMod;
+import me.Danker.commands.ToggleCommand;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityArmorStand;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StringUtils;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.WorldEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+
+import java.util.List;
+
+public class FishingSpawnAlerts {
+
+ static boolean lastThunder = false;
+ static boolean lastJawbus = false;
+
+ @SubscribeEvent
+ public void onTick(TickEvent.ClientTickEvent event) {
+ if (event.phase != TickEvent.Phase.START) return;
+
+ World world = Minecraft.getMinecraft().theWorld;
+ if (DankersSkyblockMod.tickAmount % 10 == 0) {
+ if (ToggleCommand.fishingAlert && Utils.tabLocation.equals("Crimson Isle") && world != null) {
+ boolean thunder = false;
+ boolean jawbus = false;
+ List<Entity> entities = world.getLoadedEntityList();
+
+ for (Entity entity : entities) {
+ if (entity instanceof EntityArmorStand) {
+ String name = StringUtils.stripControlCodes(entity.getName());
+ if (name.contains("Thunder")) {
+ thunder = true;
+ } else if (name.contains("Lord Jawbus")) {
+ jawbus = true;
+ }
+ }
+ }
+
+ if (thunder && !lastThunder) Utils.createTitle(EnumChatFormatting.AQUA + "THUNDER", 2);
+ if (jawbus && !lastJawbus) Utils.createTitle(EnumChatFormatting.AQUA + "JAWBUS", 2);
+
+ lastThunder = thunder;
+ lastJawbus = jawbus;
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onWorldChange(WorldEvent.Load event) {
+ lastThunder = false;
+ lastJawbus = false;
+ }
+
+}
diff --git a/src/main/java/me/Danker/features/GemstonesLore.java b/src/main/java/me/Danker/features/GemstonesLore.java
index c633c58..b16edaf 100644
--- a/src/main/java/me/Danker/features/GemstonesLore.java
+++ b/src/main/java/me/Danker/features/GemstonesLore.java
@@ -1,6 +1,7 @@
package me.Danker.features;
import me.Danker.commands.ToggleCommand;
+import me.Danker.events.ModInitEvent;
import me.Danker.utils.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
@@ -18,7 +19,8 @@ public class GemstonesLore {
static Map<String, EnumChatFormatting> gemstoneColours = new HashMap<>();
- public static void init() {
+ @SubscribeEvent
+ public void init(ModInitEvent event) {
gemstoneColours.put("Amber", EnumChatFormatting.GOLD);
gemstoneColours.put("Sapphire", EnumChatFormatting.AQUA);
gemstoneColours.put("Jasper", EnumChatFormatting.LIGHT_PURPLE);
@@ -26,6 +28,7 @@ public class GemstonesLore {
gemstoneColours.put("Topaz", EnumChatFormatting.YELLOW);
gemstoneColours.put("Jade", EnumChatFormatting.GREEN);
gemstoneColours.put("Ruby", EnumChatFormatting.RED);
+ gemstoneColours.put("Opal", EnumChatFormatting.WHITE);
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
diff --git a/src/main/java/me/Danker/features/GoldenEnchants.java b/src/main/java/me/Danker/features/GoldenEnchants.java
index d633ec5..228d43e 100644
--- a/src/main/java/me/Danker/features/GoldenEnchants.java
+++ b/src/main/java/me/Danker/features/GoldenEnchants.java
@@ -1,6 +1,7 @@
package me.Danker.features;
import me.Danker.commands.ToggleCommand;
+import me.Danker.events.ModInitEvent;
import me.Danker.utils.Utils;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
@@ -15,7 +16,8 @@ public class GoldenEnchants {
public static Map<String, String> t6Enchants = new HashMap<>();
public static Pattern t6EnchantPattern = Pattern.compile("");
- public static void init() {
+ @SubscribeEvent
+ public void init(ModInitEvent event) {
t6Enchants.put("9Angler VI", "6Angler VI");
t6Enchants.put("9Bane of Arthropods VI", "6Bane of Arthropods VI");
t6Enchants.put("9Caster VI", "6Caster VI");
diff --git a/src/main/java/me/Danker/features/MinionLastCollected.java b/src/main/java/me/Danker/features/MinionLastCollected.java
new file mode 100644
index 0000000..d793970
--- /dev/null
+++ b/src/main/java/me/Danker/features/MinionLastCollected.java
@@ -0,0 +1,142 @@
+package me.Danker.features;
+
+import com.google.gson.GsonBuilder;
+import me.Danker.commands.ToggleCommand;
+import me.Danker.events.ChestSlotClickedEvent;
+import me.Danker.events.ModInitEvent;
+import me.Danker.events.PacketWriteEvent;
+import me.Danker.utils.RenderUtils;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityArmorStand;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.network.play.client.C02PacketUseEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.BlockPos;
+import net.minecraftforge.client.event.RenderWorldLastEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MinionLastCollected {
+
+ public static List<Minion> minions = new ArrayList<>();
+ public static String configFile;
+ static BlockPos lastMinion = null;
+ public static int LAST_COLLECTED_COLOUR;
+
+ @SubscribeEvent
+ public void init(ModInitEvent event) {
+ configFile = event.configDirectory + "/dsmminions.json";
+ }
+
+ @SubscribeEvent
+ public void onPacketWrite(PacketWriteEvent event) {
+ if (ToggleCommand.minionLastCollected && Utils.inSkyblock && Utils.isInScoreboard("Your Island")) {
+ if (event.packet instanceof C02PacketUseEntity) {
+ C02PacketUseEntity packet = (C02PacketUseEntity) event.packet;
+ Entity entity = packet.getEntityFromWorld(Minecraft.getMinecraft().theWorld);
+ if (isAMinion(entity)) {
+ lastMinion = entity.getPosition();
+ if (getMinionFromPos(lastMinion) == null) {
+ minions.add(new Minion(lastMinion));
+ save();
+ }
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onSlotClick(ChestSlotClickedEvent event) {
+ if (ToggleCommand.minionLastCollected && Utils.tabLocation.equals("Private Island")) {
+ String inventoryName = event.inventoryName;
+ ItemStack item = event.item;
+ if (inventoryName.contains(" Minion ") && item != null && lastMinion != null) {
+ if (item.getDisplayName().contains("Collect All")) {
+ getMinionFromPos(lastMinion).collectNow();
+ save();
+ } else if (item.getDisplayName().contains("Pickup Minion")) {
+ minions.remove(getMinionFromPos(lastMinion));
+ save();
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onWorldRender(RenderWorldLastEvent event) {
+ if (ToggleCommand.minionLastCollected && Utils.inSkyblock && Utils.tabLocation.equals("Private Island")) {
+ for (Minion minion : minions) {
+ if (!minionExistsAtPos(minion.pos)) continue;
+ RenderUtils.draw3DString(minion.pos.getX() + 0.5, minion.pos.getY() + 2.2, minion.pos.getZ() + 0.5, minion.getTimeCollected(), LAST_COLLECTED_COLOUR, event.partialTicks);
+ }
+ }
+ }
+
+ public boolean isAMinion(Entity entity) {
+ if (!(entity instanceof EntityArmorStand)) return false;
+ EntityArmorStand armourStand = (EntityArmorStand) entity;
+
+ for (int i = 0; i <= 3; i++) {
+ if (armourStand.getCurrentArmor(i) == null) return false;
+ }
+
+ return (Item.getIdFromItem(armourStand.getCurrentArmor(0).getItem()) == 301 &&
+ Item.getIdFromItem(armourStand.getCurrentArmor(1).getItem()) == 300 &&
+ Item.getIdFromItem(armourStand.getCurrentArmor(2).getItem()) == 299 &&
+ Item.getIdFromItem(armourStand.getCurrentArmor(3).getItem()) == 397);
+ }
+
+ public Minion getMinionFromPos(BlockPos pos) {
+ for (Minion minion : minions) {
+ if (minion.pos.equals(pos)) return minion;
+ }
+ return null;
+ }
+
+ public boolean minionExistsAtPos(BlockPos pos) {
+ AxisAlignedBB aabb = new AxisAlignedBB(pos, pos.add(1, 1, 1));
+ List<EntityArmorStand> entities = Minecraft.getMinecraft().theWorld.getEntitiesWithinAABB(EntityArmorStand.class, aabb);
+ return entities.size() > 0; // just assume theres a minion there
+ }
+
+ public static void save() {
+ try (FileWriter writer = new FileWriter(configFile)) {
+ new GsonBuilder().create().toJson(minions, writer);
+ writer.flush();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ public static class Minion {
+
+ public BlockPos pos;
+ public double lastCollect;
+
+ public Minion(BlockPos pos) {
+ this.pos = pos;
+ this.lastCollect = -1;
+ }
+
+ public String getTimeCollected() {
+ String lastCollected = "Last Collected: ";
+ if (lastCollect == -1) {
+ return lastCollected + "Never";
+ }
+ return lastCollected + Utils.getTimeBetween(lastCollect, System.currentTimeMillis() / 1000) + " ago";
+ }
+
+ public void collectNow() {
+ lastCollect = System.currentTimeMillis() / 1000;
+ }
+
+ }
+
+}
diff --git a/src/main/java/me/Danker/features/loot/FishingTracker.java b/src/main/java/me/Danker/features/loot/FishingTracker.java
index f8adfa2..1690793 100644
--- a/src/main/java/me/Danker/features/loot/FishingTracker.java
+++ b/src/main/java/me/Danker/features/loot/FishingTracker.java
@@ -125,8 +125,8 @@ public class FishingTracker {
public static int taurusesSession = 0;
public static int thundersSession = 0;
public static int lordJawbusesSession = 0;
- public static double jawbusTimeSession = 0;
- public static int jawbusSCsSession = 0;
+ public static double jawbusTimeSession = -1;
+ public static int jawbusSCsSession = -1;
@SubscribeEvent
public void onChat(ClientChatReceivedEvent event) {
@@ -174,7 +174,7 @@ public class FishingTracker {
seaArchersSession++;
ConfigHandler.writeIntConfig("fishing", "seaArcher", seaArchers);
increaseSeaCreatures();
- } else if (message.contains("The Monster of the Deep has emerged")) {
+ } else if (message.contains("The Rider of the Deep has emerged")) {
monsterOfTheDeeps++;
monsterOfTheDeepsSession++;
ConfigHandler.writeIntConfig("fishing", "monsterOfDeep", monsterOfTheDeeps);
diff --git a/src/main/java/me/Danker/features/loot/LootDisplay.java b/src/main/java/me/Danker/features/loot/LootDisplay.java
index 7832362..fe68c3e 100644
--- a/src/main/java/me/Danker/features/loot/LootDisplay.java
+++ b/src/main/java/me/Danker/features/loot/LootDisplay.java
@@ -946,6 +946,124 @@ public class LootDisplay {
EnumChatFormatting.AQUA + timeBetween + "\n" +
EnumChatFormatting.AQUA + bossesBetween;
break;
+ case "fishing_trophy":
+ dropsText = EnumChatFormatting.WHITE + "Sulpher Skitter:\n" +
+ EnumChatFormatting.WHITE + "Obfuscated 1:\n" +
+ EnumChatFormatting.WHITE + "Steaminghot Flounder:\n" +
+ EnumChatFormatting.WHITE + "Gusher:\n" +
+ EnumChatFormatting.WHITE + "Blobfish:\n" +
+ EnumChatFormatting.GREEN + "Obfuscated 2:\n" +
+ EnumChatFormatting.GREEN + "Slugfish:\n" +
+ EnumChatFormatting.GREEN + "Flyfish:\n" +
+ EnumChatFormatting.BLUE + "Obfuscated 3:\n" +
+ EnumChatFormatting.BLUE + "Lavahorse:\n" +
+ EnumChatFormatting.BLUE + "Mana Ray:\n" +
+ EnumChatFormatting.BLUE + "Volcanic Stonefish:\n" +
+ EnumChatFormatting.BLUE + "Vanille:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Skeleton Fish:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Moldfin:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Soul Fish:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Karate Fish:\n" +
+ EnumChatFormatting.GOLD + "Golden Fish:";
+ if (!ToggleCommand.showTrophyCompletion) countText = EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Sulpher Skitter") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Obfuscated 1") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Steaming-Hot Flounder") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Gusher") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Blobfish") + "\n" +
+ EnumChatFormatting.GREEN + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Obfuscated 2") + "\n" +
+ EnumChatFormatting.GREEN + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Slugfish") + "\n" +
+ EnumChatFormatting.GREEN + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Flyfish") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Obfuscated 3") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Lavahorse") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Mana Ray") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Volcanic Stonefish") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Vanille") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Skeleton Fish") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Moldfin") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Soul Fish") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Karate Fish") + "\n" +
+ EnumChatFormatting.GOLD + TrophyFishTracker.getTierCount(TrophyFishTracker.fish, "Golden Fish");
+
+ if (ToggleCommand.showTrophyCompletion) {
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Sulpher Skitter", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), MoveCommand.displayXY[1], ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Obfuscated 1", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Steaming-Hot Flounder", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (2 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Gusher", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (3 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Blobfish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (4 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Obfuscated 2", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (5 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Slugfish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (6 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Flyfish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (7 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Obfuscated 3", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (8 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Lavahorse", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (9 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Mana Ray", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (10 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Volcanic Stonefish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (11 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Vanille", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (12 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Skeleton Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (13 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Moldfin", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (14 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Soul Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (15 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Karate Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (16 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fish, "Golden Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (17 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ }
+ break;
+ case "fishing_trophy_session":
+ dropsText = EnumChatFormatting.WHITE + "Sulpher Skitter:\n" +
+ EnumChatFormatting.WHITE + "Obfuscated 1:\n" +
+ EnumChatFormatting.WHITE + "Steaminghot Flounder:\n" +
+ EnumChatFormatting.WHITE + "Gusher:\n" +
+ EnumChatFormatting.WHITE + "Blobfish:\n" +
+ EnumChatFormatting.GREEN + "Obfuscated 2:\n" +
+ EnumChatFormatting.GREEN + "Slugfish:\n" +
+ EnumChatFormatting.GREEN + "Flyfish:\n" +
+ EnumChatFormatting.BLUE + "Obfuscated 3:\n" +
+ EnumChatFormatting.BLUE + "Lavahorse:\n" +
+ EnumChatFormatting.BLUE + "Mana Ray:\n" +
+ EnumChatFormatting.BLUE + "Volcanic Stonefish:\n" +
+ EnumChatFormatting.BLUE + "Vanille:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Skeleton Fish:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Moldfin:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Soul Fish:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Karate Fish:\n" +
+ EnumChatFormatting.GOLD + "Golden Fish:";
+ if (!ToggleCommand.showTrophyCompletion) countText = EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Sulpher Skitter") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Obfuscated 1") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Steaming-Hot Flounder") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Gusher") + "\n" +
+ EnumChatFormatting.WHITE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Blobfish") + "\n" +
+ EnumChatFormatting.GREEN + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Obfuscated 2") + "\n" +
+ EnumChatFormatting.GREEN + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Slugfish") + "\n" +
+ EnumChatFormatting.GREEN + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Flyfish") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Obfuscated 3") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Lavahorse") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Mana Ray") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Volcanic Stonefish") + "\n" +
+ EnumChatFormatting.BLUE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Vanille") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Skeleton Fish") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Moldfin") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Soul Fish") + "\n" +
+ EnumChatFormatting.DARK_PURPLE + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Karate Fish") + "\n" +
+ EnumChatFormatting.GOLD + TrophyFishTracker.getTierCount(TrophyFishTracker.fishSession, "Golden Fish");
+
+ if (ToggleCommand.showTrophyCompletion) {
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Sulpher Skitter", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), MoveCommand.displayXY[1], ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Obfuscated 1", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Steaming-Hot Flounder", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (2 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Gusher", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (3 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Blobfish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (4 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Obfuscated 2", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (5 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Slugfish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (6 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Flyfish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (7 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Obfuscated 3", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (8 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Lavahorse", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (9 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Mana Ray", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (10 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Volcanic Stonefish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (11 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Vanille", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (12 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Skeleton Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (13 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Moldfin", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (14 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Soul Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (15 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Karate Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (16 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ TrophyFishTracker.drawCompletion(TrophyFishTracker.fishSession, "Golden Fish", (int) (MoveCommand.displayXY[0] + (110 * ScaleCommand.displayScale)), (int) (MoveCommand.displayXY[1] + (17 * mc.fontRendererObj.FONT_HEIGHT * ScaleCommand.displayScale)), ScaleCommand.displayScale);
+ }
+ break;
case "mythological":
dropsText = EnumChatFormatting.GOLD + "Coins:\n" +
EnumChatFormatting.WHITE + "Griffin Feathers:\n" +
diff --git a/src/main/java/me/Danker/features/loot/LootTracker.java b/src/main/java/me/Danker/features/loot/LootTracker.java
index 7fa223d..13599a0 100644
--- a/src/main/java/me/Danker/features/loot/LootTracker.java
+++ b/src/main/java/me/Danker/features/loot/LootTracker.java
@@ -1,13 +1,11 @@
package me.Danker.features.loot;
+import me.Danker.events.PacketReadEvent;
import me.Danker.handlers.ConfigHandler;
-import me.Danker.handlers.ScoreboardHandler;
import me.Danker.utils.Utils;
-import net.minecraftforge.client.event.sound.PlaySoundEvent;
-import net.minecraftforge.fml.common.eventhandler.EventPriority;
+import net.minecraft.network.play.server.S29PacketSoundEffect;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -16,20 +14,17 @@ public class LootTracker {
public static long itemsChecked = 0;
static Pattern dropPattern = Pattern.compile(".*? \\((?<amount>\\d+)x .*\\).*");
- @SubscribeEvent(priority = EventPriority.HIGHEST)
- public void onSound(PlaySoundEvent event) {
+ @SubscribeEvent
+ public void onPacketRead(PacketReadEvent event) {
if (!Utils.inSkyblock) return;
- if (event.name.equals("note.pling")) {
- // Don't check twice within 3 seconds
- long checkItemsNow = System.currentTimeMillis() / 1000;
- if (checkItemsNow - itemsChecked < 3) return;
- List<String> scoreboard = ScoreboardHandler.getSidebarLines();
+ if (event.packet instanceof S29PacketSoundEffect) {
+ S29PacketSoundEffect packet = (S29PacketSoundEffect) event.packet;
- for (String line : scoreboard) {
- String cleanedLine = ScoreboardHandler.cleanSB(line);
- // If Hypixel lags and scoreboard doesn't update
- if (cleanedLine.contains("Boss slain!") || cleanedLine.contains("Slay the boss!")) {
+ if (packet.getSoundName().equals("note.pling")) {
+ if (System.currentTimeMillis() / 1000 - itemsChecked < 3) return;
+
+ if (Utils.isInScoreboard("Boss slain!") || Utils.isInScoreboard("Slay the boss!")) {
int itemTeeth = Utils.getItems("Wolf Tooth");
int itemWebs = Utils.getItems("Tarantula Web");
int itemRev = Utils.getItems("Revenant Flesh");
diff --git a/src/main/java/me/Danker/features/loot/TrophyFishTracker.java b/src/main/java/me/Danker/features/loot/TrophyFishTracker.java
new file mode 100644
index 0000000..6202871
--- /dev/null
+++ b/src/main/java/me/Danker/features/loot/TrophyFishTracker.java
@@ -0,0 +1,143 @@
+package me.Danker.features.loot;
+
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+import me.Danker.events.ModInitEvent;
+import me.Danker.utils.RenderUtils;
+import me.Danker.utils.Utils;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StringUtils;
+import net.minecraftforge.client.event.ClientChatReceivedEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class TrophyFishTracker {
+
+ public static JsonObject fish = new JsonObject();
+ public static JsonObject fishSession = new JsonObject();
+ public static Pattern fishPattern = Pattern.compile("TROPHY FISH! You caught a (?<fish>.*) (?<tier>.*).");
+ public static String configFile;
+
+ public static JsonObject createEmpty() {
+ JsonObject fish = new JsonObject();
+
+ JsonObject tiers = new JsonObject();
+ tiers.addProperty("BRONZE", 0);
+ tiers.addProperty("SILVER", 0);
+ tiers.addProperty("GOLD", 0);
+ tiers.addProperty("DIAMOND", 0);
+
+ fish.add("Sulpher Skitter", Utils.deepCopy(tiers));
+ fish.add("Obfuscated 1", Utils.deepCopy(tiers));
+ fish.add("Steaming-Hot Flounder", Utils.deepCopy(tiers));
+ fish.add("Obfuscated 2", Utils.deepCopy(tiers));
+ fish.add("Gusher", Utils.deepCopy(tiers));
+ fish.add("Blobfish", Utils.deepCopy(tiers));
+ fish.add("Slugfish", Utils.deepCopy(tiers));
+ fish.add("Obfuscated 3", Utils.deepCopy(tiers));
+ fish.add("Flyfish", Utils.deepCopy(tiers));
+ fish.add("Lavahorse", Utils.deepCopy(tiers));
+ fish.add("Mana Ray", Utils.deepCopy(tiers));
+ fish.add("Volcanic Stonefish", Utils.deepCopy(tiers));
+ fish.add("Vanille", Utils.deepCopy(tiers));
+ fish.add("Skeleton Fish", Utils.deepCopy(tiers));
+ fish.add("Moldfin", Utils.deepCopy(tiers));
+ fish.add("Soul Fish", Utils.deepCopy(tiers));
+ fish.add("Karate Fish", Utils.deepCopy(tiers));
+ fish.add("Golden Fish", Utils.deepCopy(tiers));
+
+ return fish;
+ }
+
+ @SubscribeEvent
+ public void init(ModInitEvent event) {
+ configFile = event.configDirectory + "/dsmtrophyfish.json";
+ if (fish.entrySet().isEmpty()) fish = createEmpty();
+ fishSession = createEmpty();
+ }
+
+ @SubscribeEvent(receiveCanceled = true)
+ public void onChat(ClientChatReceivedEvent event) {
+ String message = StringUtils.stripControlCodes(event.message.getUnformattedText());
+
+ if (!Utils.inSkyblock) return;
+ if (!Utils.tabLocation.equals("Crimson Isle")) return;
+ if (event.type == 2) return;
+ if (message.contains(":")) return;
+
+ Matcher matcher = fishPattern.matcher(message);
+
+ if (matcher.matches()) {
+ String fishName = matcher.group("fish");
+ String tier = matcher.group("tier");
+
+ JsonObject fishObj = fish.get(fishName).getAsJsonObject();
+ int amount = fishObj.get(tier).getAsInt();
+ fishObj.addProperty(tier, amount + 1);
+
+ JsonObject fishSessionObj = fishSession.get(fishName).getAsJsonObject();
+ int amountSession = fishSessionObj.get(tier).getAsInt();
+ fishSessionObj.addProperty(tier, amountSession + 1);
+
+ save();
+ }
+ }
+
+ public static void save() {
+ try (FileWriter writer = new FileWriter(configFile)) {
+ new GsonBuilder().create().toJson(fish, writer);
+ writer.flush();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ public static String getTierCount(JsonObject obj, String name) {
+ JsonObject type = obj.get(name).getAsJsonObject();
+
+ int bronze = type.get("BRONZE").getAsInt();
+ int silver = type.get("SILVER").getAsInt();
+ int gold = type.get("GOLD").getAsInt();
+ int diamond = type.get("DIAMOND").getAsInt();
+
+ return EnumChatFormatting.DARK_GRAY + "" + bronze + EnumChatFormatting.WHITE + "-" +
+ EnumChatFormatting.GRAY + silver + EnumChatFormatting.WHITE + "-" +
+ EnumChatFormatting.GOLD + gold + EnumChatFormatting.WHITE + "-" +
+ EnumChatFormatting.AQUA + diamond;
+ }
+
+ public static int getSum(JsonObject obj, String name) {
+ JsonObject type = obj.get(name).getAsJsonObject();
+ return type.get("BRONZE").getAsInt() +
+ type.get("SILVER").getAsInt() +
+ type.get("GOLD").getAsInt() +
+ type.get("DIAMOND").getAsInt();
+ }
+
+ public static void drawCompletion(JsonObject obj, String name, int x, int y, double scale) {
+ JsonObject type = obj.get(name).getAsJsonObject();
+
+ boolean bronze = type.get("BRONZE").getAsInt() > 0;
+ boolean silver = type.get("SILVER").getAsInt() > 0;
+ boolean gold = type.get("GOLD").getAsInt() > 0;
+ boolean diamond = type.get("DIAMOND").getAsInt() > 0;
+
+ ItemStack incomplete = new ItemStack(Items.dye, 1, 8);
+ ItemStack bronzeComplete = new ItemStack(Items.brick);
+ ItemStack silverComplete = new ItemStack(Items.iron_ingot);
+ ItemStack goldComplete = new ItemStack(Items.gold_ingot);
+ ItemStack diamondComplete = new ItemStack(Items.diamond);
+
+ RenderUtils.renderItem(bronze ? bronzeComplete : incomplete, x, y - 2, scale / 1.3D);
+ RenderUtils.renderItem(silver ? silverComplete : incomplete, x + 15, y - 2, scale / 1.3D);
+ RenderUtils.renderItem(gold ? goldComplete : incomplete, x + 30, y - 2, scale / 1.3D);
+ RenderUtils.renderItem(diamond ? diamondComplete : incomplete, x + 45, y - 2, scale / 1.3D);
+ }
+
+}
diff --git a/src/main/java/me/Danker/features/puzzlesolvers/TriviaSolver.java b/src/main/java/me/Danker/features/puzzlesolvers/TriviaSolver.java
index dd2c23e..23d0228 100644
--- a/src/main/java/me/Danker/features/puzzlesolvers/TriviaSolver.java
+++ b/src/main/java/me/Danker/features/puzzlesolvers/TriviaSolver.java
@@ -5,6 +5,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import me.Danker.DankersSkyblockMod;
import me.Danker.commands.ToggleCommand;
+import me.Danker.events.ModInitEvent;
import me.Danker.utils.Utils;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
@@ -26,7 +27,8 @@ public class TriviaSolver {
static JsonArray triviaAnswersJson = null;
public static String TRIVIA_WRONG_ANSWER_COLOUR;
- public static void init() {
+ @SubscribeEvent
+ public void init(ModInitEvent event) {
// Hard coded solutions if api call fails
triviaSolutions.put("What is the status of The Watcher?", new String[]{"Stalker"});
triviaSolutions.put("What is the status of Bonzo?", new String[]{"New Necromancer"});
@@ -39,11 +41,12 @@ public class TriviaSolver {
triviaSolutions.put("What is the status of Goldor?", new String[]{"Wither Soldier"});
triviaSolutions.put("What is the status of Storm?", new String[]{"Elementalist"});
triviaSolutions.put("What is the status of Necron?", new String[]{"Wither Lord"});
- triviaSolutions.put("How many total Fairy Souls are there?", new String[]{"227 Fairy Souls"});
+ triviaSolutions.put("What is the status of Maxor, Storm, Goldor and Necron?", new String[]{"Wither Lord"});
+ triviaSolutions.put("How many total Fairy Souls are there?", new String[]{"238 Fairy Souls"});
triviaSolutions.put("How many Fairy Souls are there in Spider's Den?", new String[]{"19 Fairy Souls"});
triviaSolutions.put("How many Fairy Souls are there in The End?", new String[]{"12 Fairy Souls"});
triviaSolutions.put("How many Fairy Souls are there in The Farming Islands?", new String[]{"20 Fairy Souls"});
- triviaSolutions.put("How many Fairy Souls are there in Blazing Fortress?", new String[]{"19 Fairy Souls"});
+ triviaSolutions.put("How many Fairy Souls are there in Crimson Isle?", new String[]{"29 Fairy Souls"});
triviaSolutions.put("How many Fairy Souls are there in The Park?", new String[]{"11 Fairy Souls"});
triviaSolutions.put("How many Fairy Souls are there in Jerry's Workshop?", new String[]{"5 Fairy Souls"});
triviaSolutions.put("How many Fairy Souls are there in Hub?", new String[]{"79 Fairy Souls"});
@@ -57,7 +60,7 @@ public class TriviaSolver {
triviaSolutions.put("What is the name of the person that upgrades pets?", new String[]{"Kat"});
triviaSolutions.put("What is the name of the lady of the Nether?", new String[]{"Elle"});
triviaSolutions.put("Which villager in the Village gives you a Rogue Sword?", new String[]{"Jamie"});
- triviaSolutions.put("How many unique minions are there?", new String[]{"53 Minions"});
+ triviaSolutions.put("How many unique minions are there?", new String[]{"55 Minions"});
triviaSolutions.put("Which of these enemies does not spawn in the Spider's Den?", new String[]{"Zombie Spider", "Cave Spider", "Wither Skeleton",
"Dashing Spooder", "Broodfather", "Night Spider"});
triviaSolutions.put("Which of these monsters only spawns at night?", new String[]{"Zombie Villager", "Ghast"});