aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md58
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/me/Danker/TheMod.java3145
-rw-r--r--src/main/java/me/Danker/commands/ArmourCommand.java34
-rw-r--r--src/main/java/me/Danker/commands/BankCommand.java31
-rw-r--r--src/main/java/me/Danker/commands/BlockSlayerCommand.java45
-rw-r--r--src/main/java/me/Danker/commands/ChatMaddoxCommand.java33
-rw-r--r--src/main/java/me/Danker/commands/DHelpCommand.java16
-rw-r--r--src/main/java/me/Danker/commands/DankerGuiCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/DisplayCommand.java203
-rw-r--r--src/main/java/me/Danker/commands/DungeonsCommand.java25
-rw-r--r--src/main/java/me/Danker/commands/GetkeyCommand.java13
-rw-r--r--src/main/java/me/Danker/commands/GuildOfCommand.java29
-rw-r--r--src/main/java/me/Danker/commands/ImportFishingCommand.java264
-rw-r--r--src/main/java/me/Danker/commands/LobbySkillsCommand.java40
-rw-r--r--src/main/java/me/Danker/commands/LootCommand.java1069
-rw-r--r--src/main/java/me/Danker/commands/MoveCommand.java95
-rw-r--r--src/main/java/me/Danker/commands/PetsCommand.java25
-rw-r--r--src/main/java/me/Danker/commands/ReloadConfigCommand.java7
-rw-r--r--src/main/java/me/Danker/commands/ResetLootCommand.java377
-rw-r--r--src/main/java/me/Danker/commands/ScaleCommand.java74
-rw-r--r--src/main/java/me/Danker/commands/SetkeyCommand.java9
-rw-r--r--src/main/java/me/Danker/commands/SkillTrackerCommand.java94
-rw-r--r--src/main/java/me/Danker/commands/SkillsCommand.java77
-rw-r--r--src/main/java/me/Danker/commands/SkyblockPlayersCommand.java47
-rw-r--r--src/main/java/me/Danker/commands/SlayerCommand.java29
-rw-r--r--src/main/java/me/Danker/commands/ToggleCommand.java301
-rw-r--r--src/main/java/me/Danker/gui/DankerGui.java86
-rw-r--r--src/main/java/me/Danker/gui/DisplayGui.java34
-rw-r--r--src/main/java/me/Danker/gui/EditLocationsGui.java53
-rw-r--r--src/main/java/me/Danker/gui/PuzzleSolversGui.java9
-rw-r--r--src/main/java/me/Danker/gui/SkillTrackerGui.java99
-rw-r--r--src/main/java/me/Danker/handlers/APIHandler.java20
-rw-r--r--src/main/java/me/Danker/handlers/ConfigHandler.java432
-rw-r--r--src/main/java/me/Danker/utils/Utils.java26
-rw-r--r--src/main/resources/assets/dsm/icons/cake.pngbin0 -> 15381 bytes
-rw-r--r--src/main/resources/mcmod.info3
37 files changed, 4130 insertions, 2776 deletions
diff --git a/README.md b/README.md
index 61ebfb6..e02bbb8 100644
--- a/README.md
+++ b/README.md
@@ -9,39 +9,45 @@ Discord Server: https://discord.gg/QsEkNQS
- LabyMod + Sidebar Mod Revamp - Displays don't show
## Current features
-- Guild party desktop notifications (toggleable)
-- Coordinate and angle display (toggleable, graphic display) (scalable)
-- Golden T10/T6/T4 enchant display (toggleable)
-- Block AOTD ability (toggleable)
-- Disable Spirit Sceptre messages (toggleable)
-- Disable Midas Staff messages (toggleable)
-- Slayer item tracker (with graphic display) (scalable)
-- RNGesus drop alerts (toggleable)
-- Click in chat to open Maddox (toggleable)
-- Maddox Menu keybind
+- Guild party desktop notifications
+- Coordinate and angle display
+- Golden T10/T6/T4 enchant display
+- Block AOTD ability
+- Block Livid Dagger ability
+- Disable Spirit Sceptre messages
+- Disable Midas Staff messages
+- Disable heal messages
+- Slayer item tracker
+- RNGesus drop alerts
+- Click anywhere on-screen to open Maddox
+- Maddox menu keybind
- Block starting other slayer quests
-- Fishing tracker (with graphic display) (scalable)
+- Fishing, jerry fishing, fishing festival, spooky fishing trackers
- Expertise kills in fishing rod lore
-- Dungeons tracker (with graphic display) (scalable)
-- Dungeons puzzle solver (Riddle, trivia, blaze, creeper) (toggleable)
-- Find correct Livid (with graphic display of HP) (toggleable)
+- Catacombs trackers
+- Dungeons puzzle solver (Riddle, trivia, blaze, creeper, water)
+- Find correct Livid (with graphic display of HP)
- Pet background colors based on level
-- Golem spawning alerts (toggleable)
+- Golem spawning alerts
+- Skill xp/hour tracker
- Show total skill xp instead of progress to next level
+- Show time until century cakes run out
+- Mythological event (Diana) tracker
+- Low health alert in dungeons
- API commands
- Update checker
## Commands
- /dhelp - Returns this message in-game.
- /dsm - Opens the GUI for Danker's Skyblock Mod.
-- /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/sceptremessages/petcolors/dungeontimer/golemalerts/expertiselore/skill50display/outlinetext/lividsolver/oruopuzzle/blazepuzzle/creeperpuzzle/list> - Toggles features. /toggle list returns values of every toggle.
+- /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/sceptremessages/petcolors/dungeontimer/golemalerts/expertiselore/skill50display/outlinetext/midasstaffmessages/healmessages/caketimer/lividsolver/lowhealthnotify/oruopuzzle/blazepuzzle/creeperpuzzle/waterpuzzle/list> - Toggles features. /toggle list returns values of every toggle.
- /setkey <key> - Sets API key.
- /getkey - Returns key set with /setkey and copies it to your clipboard.
-- /loot <zombie/spider/wolf/fishing/catacombs> [winter/f(1-6)/session] - Returns loot received from slayer quests or fishing stats. /loot fishing winter returns winter sea creatures instead.
-- /display <zombie/spider/wolf/fishing/catacombs/auto/off> [winter/f(1-6)/session] - Text display for trackers. /display fishing winter displays winter sea creatures instead. /display auto automatically displays the loot for the slayer quest you have active.
+- /loot <zombie/spider/wolf/fishing/catacombs> [winter/spooky/f(1-7)/session] - Returns loot received from slayer quests or fishing stats. /loot fishing winter returns winter sea creatures instead.
+- /display <zombie/spider/wolf/fishing/catacombs/auto/off> [winter/spooky/f(1-7)/session] - Text display for trackers. /display fishing winter displays winter sea creatures instead. /display auto automatically displays the loot for the slayer quest you have active.
- /resetloot <zombie/spider/wolf/fishing/catacombs/confirm/cancel> - - Resets loot for trackers. /resetloot confirm confirms the reset.
-- /move <coords/display/dungeontimer/skill50/lividhp> <x> <y> - Moves text display to specified X and Y coordinates.
-- /scale <coords/display/dungeontimer/skill50/lividhp> <scale (0.1 - 10)> - Scales text display to a specified multipler between 0.1x and 10x.
+- /move <coords/display/dungeontimer/skill50/lividhp/caketimer/skilltracker> <x> <y> - Moves text display to specified X and Y coordinates.
+- /scale <coords/display/dungeontimer/skill50/lividhp/caketimer/skilltracker> <scale (0.1 - 10)> - Scales text display to a specified multipler between 0.1x and 10x.
- /slayer [player] - Uses API to get slayer xp of a person. If no name is provided, it checks yours.
- /skills [player] - Uses API to get skill levels of a person. If no name is provided, it checks yours.
- /lobbyskills - Uses API to find the average skills of the lobby, as well the three players with the highest skill average.
@@ -53,12 +59,24 @@ Discord Server: https://discord.gg/QsEkNQS
- /importfishing - Imports your fishing stats from your latest profile to your fishing tracker using the API.
- /sbplayers - Uses API to find how many players are on each Skyblock island.
- /onlyslayer <zombie/spider/wolf> <1/2/3/4> - Stops you from starting a slayer quest other than the one specified.
+- /skilltracker <start/stop/reset> - Text display for skill xp/hour.
## Keybinds
- Open Maddox menu - M by default.
+- Start/Stop Skill Tracker - Numpad 5 by default.
### Notes
- Slayer tracker for token drops and 20% chance drops uses a 12x12x12 bounding box centered on the player to detect the drops. If you are out of the range of the item drop, it will not count on the tracker.
- API commands may take a while depending on your internet connection. The API may also go down.
- If you use too many API commands too fast, you can and will get rate-limited.
- Importing fishing uses your sea creature kills, which may not always be exactly correct (e.x. someone else kills your sea creature).
+
+### Credits to Open Source Software
+Credit to all the following open source software used in this mod.
+
+Software | License
+------------ | -------------
+[SkyblockAddons](https://github.com/BiscuitDevelopment/SkyblockAddons/) | [MIT License](https://github.com/BiscuitDevelopment/SkyblockAddons/blob/master/LICENSE)
+[Zealot Counter](https://github.com/symt/zealot-counter/) | No License
+[NotEnoughUpdates](https://github.com/Moulberry/NotEnoughUpdates/) | [Creative Commons Public License](https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE)
+[ForgeHax](https://github.com/fr1kin/ForgeHax) | [MIT License](https://github.com/fr1kin/ForgeHax/blob/1.16/LICENSE) \ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 90e1bc0..0b0e2b1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,7 +20,7 @@ plugins {
id "net.minecraftforge.gradle.forge" version "2.0.2"
}
*/
-version = "1.8.1"
+version = "1.8.2"
group= "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "Danker's Skyblock Mod"
diff --git a/src/main/java/me/Danker/TheMod.java b/src/main/java/me/Danker/TheMod.java
index bada8b8..1cc0939 100644
--- a/src/main/java/me/Danker/TheMod.java
+++ b/src/main/java/me/Danker/TheMod.java
@@ -12,15 +12,16 @@ import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
+import org.apache.commons.lang3.time.StopWatch;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
import com.google.gson.JsonObject;
import me.Danker.commands.ArmourCommand;
import me.Danker.commands.BankCommand;
import me.Danker.commands.BlockSlayerCommand;
-import me.Danker.commands.ChatMaddoxCommand;
import me.Danker.commands.DHelpCommand;
import me.Danker.commands.DankerGuiCommand;
import me.Danker.commands.DisplayCommand;
@@ -36,6 +37,7 @@ import me.Danker.commands.ReloadConfigCommand;
import me.Danker.commands.ResetLootCommand;
import me.Danker.commands.ScaleCommand;
import me.Danker.commands.SetkeyCommand;
+import me.Danker.commands.SkillTrackerCommand;
import me.Danker.commands.SkillsCommand;
import me.Danker.commands.SkyblockPlayersCommand;
import me.Danker.commands.SlayerCommand;
@@ -45,6 +47,7 @@ import me.Danker.gui.DisplayGui;
import me.Danker.gui.EditLocationsGui;
import me.Danker.gui.OnlySlayerGui;
import me.Danker.gui.PuzzleSolversGui;
+import me.Danker.gui.SkillTrackerGui;
import me.Danker.handlers.APIHandler;
import me.Danker.handlers.ConfigHandler;
import me.Danker.handlers.PacketHandler;
@@ -54,6 +57,8 @@ import me.Danker.utils.Utils;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiChat;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.Entity;
@@ -73,8 +78,10 @@ import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
+import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringUtils;
import net.minecraft.util.Vec3;
+import net.minecraft.world.World;
import net.minecraftforge.client.ClientCommandHandler;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.client.event.GuiScreenEvent;
@@ -87,7 +94,6 @@ import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.client.registry.ClientRegistry;
-import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
@@ -97,8 +103,8 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent;
-import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerChangedDimensionEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent;
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
@@ -106,7 +112,7 @@ import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
public class TheMod
{
public static final String MODID = "Danker's Skyblock Mod";
- public static final String VERSION = "1.8.1";
+ public static final String VERSION = "1.8.2";
static double checkItemsNow = 0;
static double itemsChecked = 0;
@@ -121,25 +127,34 @@ public class TheMod
public static boolean showSkill = false;
public static String skillText = "";
static int tickAmount = 1;
- public static String lastMaddoxCommand = "/cb placeholdervalue";
- static KeyBinding[] keyBindings = new KeyBinding[1];
+ static String lastMaddoxCommand = "/cb placeholder";
+ static double lastMaddoxTime = 0;
+ static KeyBinding[] keyBindings = new KeyBinding[2];
static int lastMouse = -1;
static boolean usingLabymod = false;
public static String guiToOpen = null;
+ static boolean foundLivid = false;
+ static Entity livid = null;
+ public static double cakeTime;
+
+ public static final ResourceLocation CAKE_ICON = new ResourceLocation("dsm", "icons/cake.png");
+
static String[] riddleSolutions = {"The reward is not in my chest!", "At least one of them is lying, and the reward is not in",
- "My chest doesn't have the reward. We are all telling the truth", "My chest has the reward and I'm telling the truth",
- "The reward isn't in any of our chests", "Both of them are telling the truth."};
- static Map<String, String> triviaSolutions = new HashMap<String, String>();
+ "My chest doesn't have the reward. We are all telling the truth", "My chest has the reward and I'm telling the truth",
+ "The reward isn't in any of our chests", "Both of them are telling the truth."};
+ static Map<String, String[]> triviaSolutions = new HashMap<String, String[]>();
+ static String[] triviaAnswers = null;
static Entity highestBlaze = null;
static Entity lowestBlaze = null;
+ static boolean lowToHigh = false;
// Among Us colours
- static int[] creeperLineColours = {0x50EF39, 0xC51111, 0x132ED1, 0x117F2D, 0xED54BA, 0xEF7D0D, 0xF5F557, 0xD6E0F0, 0x6B2FBB, 0x39FEDC};
+ static final int[] CREEPER_COLOURS = {0x50EF39, 0xC51111, 0x132ED1, 0x117F2D, 0xED54BA, 0xEF7D0D, 0xF5F557, 0xD6E0F0, 0x6B2FBB, 0x39FEDC};
static boolean drawCreeperLines = false;
static Vec3 creeperLocation = new Vec3(0, 0, 0);
static List<Vec3[]> creeperLines = new ArrayList<Vec3[]>();
- static boolean foundLivid = false;
- static Entity livid = null;
-
+ static boolean prevInWaterRoom = false;
+ static boolean inWaterRoom = false;
+
static double dungeonStartTime = 0;
static double bloodOpenTime = 0;
static double watcherClearTime = 0;
@@ -148,14 +163,46 @@ public class TheMod
static int dungeonDeaths = 0;
static int puzzleFails = 0;
+ static String lastSkill = "Farming";
+ public static boolean showSkillTracker;
+ public static StopWatch skillStopwatch = new StopWatch();
+ static double farmingXP = 0;
+ public static double farmingXPGained = 0;
+ static double miningXP = 0;
+ public static double miningXPGained = 0;
+ static double combatXP = 0;
+ public static double combatXPGained = 0;
+ static double foragingXP = 0;
+ public static double foragingXPGained = 0;
+ static double fishingXP = 0;
+ public static double fishingXPGained = 0;
+ static double enchantingXP = 0;
+ public static double enchantingXPGained = 0;
+ static double alchemyXP = 0;
+ public static double alchemyXPGained = 0;
+
+ public static String MAIN_COLOUR;
+ public static String SECONDARY_COLOUR;
+ public static String ERROR_COLOUR;
+ public static String DELIMITER_COLOUR;
+ public static String TYPE_COLOUR;
+ public static String VALUE_COLOUR;
+ public static String SKILL_AVERAGE_COLOUR;
+ public static String ANSWER_COLOUR;
+ public static String SKILL_50_COLOUR;
+ public static String COORDS_COLOUR;
+ public static String CAKE_COLOUR;
+ public static String SKILL_TRACKER_COLOUR;
+ public static String TRIVIA_WRONG_ANSWER_COLOUR;
+ public static int LOWEST_BLAZE_COLOUR;
+ public static int HIGHEST_BLAZE_COLOUR;
+
@EventHandler
public void init(FMLInitializationEvent event) {
- FMLCommonHandler.instance().bus().register(this);
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(new PacketHandler());
- final ConfigHandler cf = new ConfigHandler();
- cf.reloadConfig();
+ ConfigHandler.reloadConfig();
// For golden enchants
t6Enchants.put("9Angler VI", "6Angler VI");
@@ -191,45 +238,48 @@ public class TheMod
t6Enchants.put("9Thunderlord VI", "6Thunderlord VI");
t6Enchants.put("9Vampirism VI", "6Vampirism VI");
- triviaSolutions.put("What is the status of The Watcher?", "Stalker");
- triviaSolutions.put("What is the status of Bonzo?", "New Necromancer");
- triviaSolutions.put("What is the status of Scarf?", "Apprentice Necromancer");
- triviaSolutions.put("What is the status of The Professor?", "Professor");
- triviaSolutions.put("What is the status of Thorn?", "Shaman Necromancer");
- triviaSolutions.put("What is the status of Livid?", "Master Necromancer");
- triviaSolutions.put("What is the status of Sadan?", "Necromancer Lord");
- triviaSolutions.put("What is the status of Maxor?", "Young Wither");
- triviaSolutions.put("What is the status of Goldor?", "Wither Soldier");
- triviaSolutions.put("What is the status of Storm?", "Elementalist");
- triviaSolutions.put("What is the status of Necron?", "Wither Lord");
- triviaSolutions.put("How many total Fairy Souls are there?", "209 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Spider's Den?", "17 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in The End?", "12 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in The Barn?", "7 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Mushroom Desert?", "8 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Blazing Fortress?", "19 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in The Park?", "11 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Jerry's Workshop?", "5 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Hub?", "79 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in The Hub?", "79 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Deep Caverns?", "21 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Gold Mine?", "12 Fairy Souls");
- triviaSolutions.put("How many Fairy Souls are there in Dungeon Hub?", "7 Fairy Souls");
- triviaSolutions.put("Which brother is on the Spider's Den?", "Rick");
- triviaSolutions.put("What is the name of Rick's brother?", "Pat");
- triviaSolutions.put("What is the name of the Painter in the Hub?", "Marco");
- triviaSolutions.put("What is the name of the person that upgrades pets?", "Kat");
- triviaSolutions.put("What is the name of the lady of the Nether?", "Elle");
- triviaSolutions.put("Which villager in the Village gives you a Rogue Sword?", "Jamie");
- triviaSolutions.put("How many unique minions are there?", "52 Minions");
- triviaSolutions.put("Which of these enemies does not spawn in the Spider's Den?", "Zombie Spider OR Cave Spider OR Broodfather OR Wither Skeleton");
- triviaSolutions.put("Which of these monsters only spawns at night?", "Zombie Villager OR Ghast");
- triviaSolutions.put("Which of these is not a dragon in The End?", "Zoomer Dragon OR Weak Dragon OR Stonk Dragon OR Holy Dragon OR Boomer Dragon");
+ triviaSolutions.put("What is the status of The Watcher?", new String[]{"Stalker"});
+ triviaSolutions.put("What is the status of Bonzo?", new String[]{"New Necromancer"});
+ triviaSolutions.put("What is the status of Scarf?", new String[]{"Apprentice Necromancer"});
+ triviaSolutions.put("What is the status of The Professor?", new String[]{"Professor"});
+ triviaSolutions.put("What is the status of Thorn?", new String[]{"Shaman Necromancer"});
+ triviaSolutions.put("What is the status of Livid?", new String[]{"Master Necromancer"});
+ triviaSolutions.put("What is the status of Sadan?", new String[]{"Necromancer Lord"});
+ triviaSolutions.put("What is the status of Maxor?", new String[]{"Young Wither"});
+ 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[]{"209 Fairy Souls"});
+ triviaSolutions.put("How many Fairy Souls are there in Spider's Den?", new String[]{"17 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 Barn?", new String[]{"7 Fairy Souls"});
+ triviaSolutions.put("How many Fairy Souls are there in Mushroom Desert?", new String[]{"8 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 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"});
+ triviaSolutions.put("How many Fairy Souls are there in The Hub?", new String[]{"79 Fairy Souls"});
+ triviaSolutions.put("How many Fairy Souls are there in Deep Caverns?", new String[]{"21 Fairy Souls"});
+ triviaSolutions.put("How many Fairy Souls are there in Gold Mine?", new String[]{"12 Fairy Souls"});
+ triviaSolutions.put("How many Fairy Souls are there in Dungeon Hub?", new String[]{"7 Fairy Souls"});
+ triviaSolutions.put("Which brother is on the Spider's Den?", new String[]{"Rick"});
+ triviaSolutions.put("What is the name of Rick's brother?", new String[]{"Pat"});
+ triviaSolutions.put("What is the name of the Painter in the Hub?", new String[]{"Marco"});
+ 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[]{"52 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"});
+ triviaSolutions.put("Which of these is not a dragon in The End?", new String[]{"Zoomer Dragon", "Weak Dragon", "Stonk Dragon", "Holy Dragon", "Boomer Dragon",
+ "Booger Dragon", "Older Dragon", "Elder Dragon", "Stable Dragon", "Professor Dragon"});
String patternString = "(" + String.join("|", t6Enchants.keySet()) + ")";
pattern = Pattern.compile(patternString);
keyBindings[0] = new KeyBinding("Open Maddox Menu", Keyboard.KEY_M, "Danker's Skyblock Mod");
+ keyBindings[1] = new KeyBinding("Start/Stop Skill Tracker", Keyboard.KEY_NUMPAD5, "Danker's Skyblock Mod");
for (int i = 0; i < keyBindings.length; i++) {
ClientRegistry.registerKeyBinding(keyBindings[i]);
@@ -255,12 +305,12 @@ public class TheMod
ClientCommandHandler.instance.registerCommand(new ImportFishingCommand());
ClientCommandHandler.instance.registerCommand(new ResetLootCommand());
ClientCommandHandler.instance.registerCommand(new ScaleCommand());
- ClientCommandHandler.instance.registerCommand(new ChatMaddoxCommand());
ClientCommandHandler.instance.registerCommand(new SkyblockPlayersCommand());
ClientCommandHandler.instance.registerCommand(new BlockSlayerCommand());
ClientCommandHandler.instance.registerCommand(new DungeonsCommand());
ClientCommandHandler.instance.registerCommand(new LobbySkillsCommand());
- ClientCommandHandler.instance.registerCommand(new DankerGuiCommand());
+ ClientCommandHandler.instance.registerCommand(new DankerGuiCommand());
+ ClientCommandHandler.instance.registerCommand(new SkillTrackerCommand());
}
@EventHandler
@@ -277,11 +327,10 @@ public class TheMod
// MULTI THREAD DRIFTING
new Thread(() -> {
- APIHandler ah = new APIHandler();
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
System.err.println("Checking for updates...");
- JsonObject latestRelease = ah.getResponse("https://api.github.com/repos/bowser0000/SkyblockMod/releases/latest");
+ JsonObject latestRelease = APIHandler.getResponse("https://api.github.com/repos/bowser0000/SkyblockMod/releases/latest");
String latestTag = latestRelease.get("tag_name").getAsString();
DefaultArtifactVersion currentVersion = new DefaultArtifactVersion(VERSION);
@@ -298,7 +347,7 @@ public class TheMod
} catch (InterruptedException ex) {
System.err.println(ex);
}
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + MODID + " is outdated. Please update to " + latestTag + ".\n").appendSibling(update));
+ player.addChatMessage(new ChatComponentText(ERROR_COLOUR + MODID + " is outdated. Please update to " + latestTag + ".\n").appendSibling(update));
}
}).start();
}
@@ -313,8 +362,7 @@ public class TheMod
// It randomly broke, so I had to make it the highest priority
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onChat(ClientChatReceivedEvent event) {
- final ToggleCommand tc = new ToggleCommand();
- String message = event.message.getUnformattedText();
+ String message = StringUtils.stripControlCodes(event.message.getUnformattedText());
if (!Utils.inSkyblock) return;
@@ -322,38 +370,114 @@ public class TheMod
if (event.type == 2) {
String[] actionBarSections = event.message.getUnformattedText().split(" {3,}");
for (String section : actionBarSections) {
- if (tc.skill50DisplayToggled) {
- if (section.contains("+") && section.contains("/") && section.contains("(")) {
- if (section.contains("Runecrafting")) return;
-
+ if (section.contains("+") && section.contains("/") && section.contains("(")) {
+ if (!section.contains("Runecrafting") && !section.contains("Carpentry")) {
+ int limit = section.contains("Farming") ? 60 : 50;
+ double currentXP = Double.parseDouble(section.substring(section.indexOf("(") + 1, section.indexOf("/")).replace(",", ""));
+ int previousXP = Utils.getPastXpEarned(Integer.parseInt(section.substring(section.indexOf("/") + 1, section.indexOf(")")).replaceAll(",", "")), limit);
+ double totalXP = currentXP + previousXP;
+ double xpGained = Double.parseDouble(section.substring(section.indexOf("+") + 1, section.indexOf(" ")).replace(",", ""));
+ String skill = section.substring(section.indexOf(" ") + 1, section.lastIndexOf(" "));
+ switch (skill) {
+ case "Farming":
+ lastSkill = "Farming";
+ if (farmingXP == 0) {
+ farmingXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) farmingXPGained += totalXP - farmingXP;
+ farmingXP = totalXP;
+ }
+ break;
+ case "Mining":
+ lastSkill = "Mining";
+ if (miningXP == 0) {
+ miningXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) miningXPGained += totalXP - miningXP;
+ miningXP = totalXP;
+ }
+ break;
+ case "Combat":
+ lastSkill = "Combat";
+ if (combatXP == 0) {
+ combatXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) combatXPGained += totalXP - combatXP;
+ combatXP = totalXP;
+ }
+ break;
+ case "Foraging":
+ lastSkill = "Foraging";
+ if (foragingXP == 0) {
+ foragingXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) foragingXPGained += totalXP - foragingXP;
+ foragingXP = totalXP;
+ }
+ break;
+ case "Fishing":
+ lastSkill = "Fishing";
+ if (fishingXP == 0) {
+ fishingXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) fishingXPGained += totalXP - fishingXP;
+ fishingXP = totalXP;
+ }
+ break;
+ case "Enchanting":
+ lastSkill = "Enchanting";
+ if (enchantingXP == 0) {
+ enchantingXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) enchantingXPGained += totalXP - enchantingXP;
+ enchantingXP = totalXP;
+ }
+ break;
+ case "Alchemy":
+ lastSkill = "Alchemy";
+ if (alchemyXP == 0) {
+ alchemyXP = totalXP;
+ } else {
+ if (skillStopwatch.isStarted() && !skillStopwatch.isSuspended()) alchemyXPGained += totalXP - alchemyXP;
+ alchemyXP = totalXP;
+ }
+ break;
+ default:
+ System.err.println("Unknown skill.");
+ }
+ }
+
+ if (ToggleCommand.skill50DisplayToggled && !section.contains("Runecrafting")) {
String xpGained = section.substring(section.indexOf("+"), section.indexOf("(") - 1);
- double currentXp = Double.parseDouble(section.substring(section.indexOf("(") + 1, section.indexOf("/")).replaceAll(",", ""));
- int previousXp = Utils.getPastXpEarned(Integer.parseInt(section.substring(section.indexOf("/") + 1, section.indexOf(")")).replaceAll(",", "")));
- double percentage = (double) Math.floor(((currentXp + previousXp) / 55172425) * 10000D) / 100D;
+ double currentXp = Double.parseDouble(section.substring(section.indexOf("(") + 1, section.indexOf("/")).replace(",", ""));
+ int limit;
+ int totalXp;
+ if (section.contains("Farming")) {
+ limit = 60;
+ totalXp = 111672425;
+ } else {
+ limit = 50;
+ totalXp = 55172425;
+ }
+ int previousXp = Utils.getPastXpEarned(Integer.parseInt(section.substring(section.indexOf("/") + 1, section.indexOf(")")).replaceAll(",", "")), limit);
+ double percentage = (double) Math.floor(((currentXp + previousXp) / totalXp) * 10000D) / 100D;
+ NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
skillTimer = SKILL_TIME;
showSkill = true;
- skillText = EnumChatFormatting.AQUA + xpGained + " (" + NumberFormat.getNumberInstance(Locale.US).format(currentXp + previousXp) + "/55,172,425) " + percentage + "%";
+ skillText = SKILL_50_COLOUR + xpGained + " (" + nf.format(currentXp + previousXp) + "/" + nf.format(totalXp) + ") " + percentage + "%";
}
}
}
return;
}
- // Replace chat messages with Maddox command
- List<IChatComponent> chatSiblings = event.message.getSiblings();
- for (IChatComponent sibling : chatSiblings) {
- if (sibling.getChatStyle().getChatClickEvent() == null) {
- sibling.setChatStyle(sibling.getChatStyle().setChatClickEvent(new ClickEvent(Action.RUN_COMMAND, "/dmodopenmaddoxmenu")));
- }
- }
-
// Dungeon chat spoken by an NPC, containing