aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbowser0000 <bowser0000@gmail.com>2020-10-20 11:57:50 -0400
committerGitHub <noreply@github.com>2020-10-20 11:57:50 -0400
commit5c5ffdbd4379d4c5002cd42c297f90e631566006 (patch)
tree1f203e2c7506697efe5efc326d95567bd7e958a0
parent20b405f59dcd92df1b4c3cd5b9ac353652ef4405 (diff)
parent1635fe604e6ca2d32d96409165fcc298f1c5b067 (diff)
downloadSkyblockMod-5c5ffdbd4379d4c5002cd42c297f90e631566006.tar.gz
SkyblockMod-5c5ffdbd4379d4c5002cd42c297f90e631566006.tar.bz2
SkyblockMod-5c5ffdbd4379d4c5002cd42c297f90e631566006.zip
1.8v1.8
Merge pull request #22 from bowser0000/development
-rw-r--r--README.md23
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/me/Danker/TheMod.java944
-rw-r--r--src/main/java/me/Danker/commands/ArmourCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/BankCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/BlockSlayerCommand.java97
-rw-r--r--src/main/java/me/Danker/commands/DHelpCommand.java16
-rw-r--r--src/main/java/me/Danker/commands/DankerGuiCommand.java32
-rw-r--r--src/main/java/me/Danker/commands/DisplayCommand.java40
-rw-r--r--src/main/java/me/Danker/commands/DungeonsCommand.java110
-rw-r--r--src/main/java/me/Danker/commands/GetkeyCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/GuildOfCommand.java5
-rw-r--r--src/main/java/me/Danker/commands/ImportFishingCommand.java30
-rw-r--r--src/main/java/me/Danker/commands/LobbySkillsCommand.java215
-rw-r--r--src/main/java/me/Danker/commands/LootCommand.java153
-rw-r--r--src/main/java/me/Danker/commands/MoveCommand.java15
-rw-r--r--src/main/java/me/Danker/commands/PetsCommand.java5
-rw-r--r--src/main/java/me/Danker/commands/ReloadConfigCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/ResetLootCommand.java14
-rw-r--r--src/main/java/me/Danker/commands/ScaleCommand.java13
-rw-r--r--src/main/java/me/Danker/commands/SetkeyCommand.java4
-rw-r--r--src/main/java/me/Danker/commands/SkillsCommand.java34
-rw-r--r--src/main/java/me/Danker/commands/SkyblockPlayersCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/SlayerCommand.java2
-rw-r--r--src/main/java/me/Danker/commands/ToggleCommand.java40
-rw-r--r--src/main/java/me/Danker/gui/DankerGui.java206
-rw-r--r--src/main/java/me/Danker/gui/DisplayGui.java155
-rw-r--r--src/main/java/me/Danker/gui/EditLocationsGui.java152
-rw-r--r--src/main/java/me/Danker/gui/OnlySlayerGui.java135
-rw-r--r--src/main/java/me/Danker/gui/buttons/LocationButton.java61
-rw-r--r--src/main/java/me/Danker/handlers/APIHandler.java5
-rw-r--r--src/main/java/me/Danker/handlers/ConfigHandler.java79
-rw-r--r--src/main/java/me/Danker/handlers/PacketHandler.java31
-rw-r--r--src/main/java/me/Danker/handlers/ScoreboardHandler.java2
-rw-r--r--src/main/java/me/Danker/handlers/TextRenderer.java13
-rw-r--r--src/main/java/me/Danker/utils/Utils.java55
36 files changed, 2341 insertions, 357 deletions
diff --git a/README.md b/README.md
index b125559..607e4ea 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,10 @@ QOL changes that enhances your Hypixel Skyblock experience. Created to add featu
Discord Server: https://discord.gg/QsEkNQS
+## Incompatibilities
+- Old Animations <2.6.4 - Frequent crashes
+- Old Animations 2.6.4 - Pet colors does not work
+
## Current features
- Guild party desktop notifications (toggleable)
- Coordinate and angle display (toggleable, graphic display) (scalable)
@@ -13,30 +17,38 @@ Discord Server: https://discord.gg/QsEkNQS
- RNGesus drop alerts (toggleable)
- Click in chat to open Maddox (toggleable)
- Maddox Menu keybind
+- Block starting other slayer quests
- Fishing tracker (with graphic display) (scalable)
+- Expertise kills in fishing rod lore
- Dungeons tracker (with graphic display) (scalable)
- Pet background colors based on level
+- Golem spawning alerts (toggleable)
+- Show total skill xp instead of progress to next level
- API commands
- Update checker
## Commands
- /dhelp - Returns this message in-game.
-- /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/sceptremessages/petcolors/dungeontimer/list> - Toggles features. /toggle list returns values of every toggle.
+- /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/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-4)/session] - Returns loot received from slayer quests or fishing stats. /loot fishing winter returns winter sea creatures instead.
-- /display <zombie/spider/wolf/fishing/catacombs> [winter/f(1-4)/session] - Text display for trackers. /display fishing winter displays winter sea creatures instead.
+- /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.
- /resetloot <zombie/spider/wolf/fishing/catacombs/confirm/cancel> - - Resets loot for trackers. /resetloot confirm confirms the reset.
-- /move <coords/display/dungeontimer> <x> <y> - Moves text display to specified X and Y coordinates.
-- /scale <coords/display/dungeontimer> <scale (0.1 - 10)> - Scales text display to a specified multipler between 0.1x and 10x.
+- /move <coords/display/dungeontimer/skill50> <x> <y> - Moves text display to specified X and Y coordinates.
+- /scale <coords/display/dungeontimer/skill50> <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.
- /guildof [player] - Uses API to get guild name and guild master of a person. If no name is provided, it checks yours.
- /petsof [player] - Uses API to get pets of a person. If no name is provided, it checks yours.
- /bank [player] - Uses API to get bank and purse coins of a person. If no name is provided, it checks yours.
- /armor [player] - Uses API to get armour of a person. If no name is provided, it checks yours.
+- /dungeons [player] - Uses API to get dungeon levels of a person. If no name is provided, it checks yours.
- /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.
## Keybinds
- Open Maddox menu - M by default.
@@ -45,5 +57,4 @@ Discord Server: https://discord.gg/QsEkNQS
- 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.
-- An incorrect API key will result in an HTTP error code of 403.
- Importing fishing uses your sea creature kills, which may not always be exactly correct (e.x. someone else kills your sea creature).
diff --git a/build.gradle b/build.gradle
index e335794..cae3082 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,7 +20,7 @@ plugins {
id "net.minecraftforge.gradle.forge" version "2.0.2"
}
*/
-version = "1.7"
+version = "1.8"
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 ec2dedf..4c30ee9 100644
--- a/src/main/java/me/Danker/TheMod.java
+++ b/src/main/java/me/Danker/TheMod.java
@@ -18,12 +18,16 @@ 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;
+import me.Danker.commands.DungeonsCommand;
import me.Danker.commands.GetkeyCommand;
import me.Danker.commands.GuildOfCommand;
import me.Danker.commands.ImportFishingCommand;
+import me.Danker.commands.LobbySkillsCommand;
import me.Danker.commands.LootCommand;
import me.Danker.commands.MoveCommand;
import me.Danker.commands.PetsCommand;
@@ -35,8 +39,13 @@ import me.Danker.commands.SkillsCommand;
import me.Danker.commands.SkyblockPlayersCommand;
import me.Danker.commands.SlayerCommand;
import me.Danker.commands.ToggleCommand;
+import me.Danker.gui.DankerGui;
+import me.Danker.gui.DisplayGui;
+import me.Danker.gui.EditLocationsGui;
+import me.Danker.gui.OnlySlayerGui;
import me.Danker.handlers.APIHandler;
import me.Danker.handlers.ConfigHandler;
+import me.Danker.handlers.PacketHandler;
import me.Danker.handlers.ScoreboardHandler;
import me.Danker.handlers.TextRenderer;
import me.Danker.utils.Utils;
@@ -47,8 +56,12 @@ import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.event.ClickEvent;
import net.minecraft.event.ClickEvent.Action;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.ContainerChest;
+import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
@@ -64,21 +77,24 @@ import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
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;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
+import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
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.TickEvent;
+import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent;
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
@Mod(modid = TheMod.MODID, version = TheMod.VERSION, clientSideOnly = true)
public class TheMod
{
public static final String MODID = "Danker's Skyblock Mod";
- public static final String VERSION = "1.7";
+ public static final String VERSION = "1.8";
static double checkItemsNow = 0;
static double itemsChecked = 0;
@@ -88,10 +104,15 @@ public class TheMod
public static int titleTimer = -1;
public static boolean showTitle = false;
public static String titleText = "";
+ public static int skillTimer = -1;
+ 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 int lastMouse = -1;
+ static boolean usingLabymod = false;
+ public static String guiToOpen = null;
static double dungeonStartTime = 0;
static double bloodOpenTime = 0;
@@ -102,10 +123,10 @@ public class TheMod
static int puzzleFails = 0;
@EventHandler
- public void init(FMLInitializationEvent event)
- {
+ 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();
@@ -171,6 +192,16 @@ public class TheMod
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());
+ }
+
+ @EventHandler
+ public void postInit(final FMLPostInitializationEvent event) {
+ usingLabymod = Loader.isModLoaded("labymod");
+ System.out.println("LabyMod detection: " + usingLabymod);
}
// Update checker
@@ -214,9 +245,30 @@ public class TheMod
final ToggleCommand tc = new ToggleCommand();
String message = event.message.getUnformattedText();
- if (event.type == 2) return;
if (!Utils.inSkyblock) return;
+ // Action Bar
+ 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;
+
+ 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;
+
+ skillTimer = 40;
+ showSkill = true;
+ skillText = EnumChatFormatting.AQUA + xpGained + " (" + NumberFormat.getNumberInstance(Locale.US).format(currentXp + previousXp) + "/55,172,425) " + percentage + "%";
+ }
+ }
+ }
+ return;
+ }
+
// Replace chat messages with Maddox command
List<IChatComponent> chatSiblings = event.message.getSiblings();
for (IChatComponent sibling : chatSiblings) {
@@ -229,8 +281,8 @@ public class TheMod
if (message.contains("[BOSS] The Watcher: You have proven yourself. You may pass.")) {
watcherClearTime = System.currentTimeMillis() / 1000;
}
- if (message.contains(" PUZZLE FAIL! ") || message.contains("chose the wrong answer! I shall never forget this moment")) {
- dungeonDeaths++;
+ if (message.contains("PUZZLE FAIL! ") || message.contains("chose the wrong answer! I shall never forget this moment")) {
+ puzzleFails++;
}
if (message.contains(":")) return;
@@ -252,6 +304,12 @@ public class TheMod
}
}
+ if (tc.golemAlertToggled) {
+ if (message.contains("The ground begins to shake as an Endstone Protector rises from below!")) {
+ Utils.createTitle(EnumChatFormatting.RED + "GOLEM SPAWNING!", 3);
+ }
+ }
+
final LootCommand lc = new LootCommand();
final ConfigHandler cf = new ConfigHandler();
boolean wolfRNG = false;
@@ -288,50 +346,39 @@ public class TheMod
}
cf.writeIntConfig("wolf", "svens", lc.wolfSvens);
cf.writeIntConfig("wolf", "bossRNG", lc.wolfBosses);
- }
- if (message.contains("RARE DROP! (Hamster Wheel)")) {
+ } else if (message.contains("RARE DROP! (Hamster Wheel)")) {
lc.wolfWheelsDrops++;
lc.wolfWheelsDropsSession++;
cf.writeIntConfig("wolf", "wheelDrops", lc.wolfWheelsDrops);
- }
- // Removing the unicode here *should* fix rune drops not counting
- if (message.contains("VERY RARE DROP! (") && message.contains(" Spirit Rune I)")) {
+ } else if (message.contains("VERY RARE DROP! (") && message.contains(" Spirit Rune I)")) { // Removing the unicode here *should* fix rune drops not counting
lc.wolfSpirits++;
lc.wolfSpiritsSession++;
cf.writeIntConfig("wolf", "spirit", lc.wolfSpirits);
- }
- if (message.contains("CRAZY RARE DROP! (Red Claw Egg)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Red Claw Egg)")) {
wolfRNG = true;
lc.wolfEggs++;
lc.wolfEggsSession++;
cf.writeIntConfig("wolf", "egg", lc.wolfEggs);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.DARK_RED + "RED CLAW EGG!", 3);
- }
- if (message.contains("CRAZY RARE DROP! (") && message.contains(" Couture Rune I)")) {
+ } else if (message.contains("CRAZY RARE DROP! (") && message.contains(" Couture Rune I)")) {
wolfRNG = true;
lc.wolfCoutures++;
lc.wolfCouturesSession++;
cf.writeIntConfig("wolf", "couture", lc.wolfCoutures);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.GOLD + "COUTURE RUNE!", 3);
- }
- // How did Skyblock devs even manage to make this item Rename Me
- if (message.contains("CRAZY RARE DROP! (Grizzly Bait)") || message.contains("CRAZY RARE DROP! (Rename Me)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Grizzly Bait)") || message.contains("CRAZY RARE DROP! (Rename Me)")) { // How did Skyblock devs even manage to make this item Rename Me
wolfRNG = true;
lc.wolfBaits++;
lc.wolfBaitsSession++;
cf.writeIntConfig("wolf", "bait", lc.wolfBaits);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.AQUA + "GRIZZLY BAIT!", 3);
- }
- if (message.contains("CRAZY RARE DROP! (Overflux Capacitor)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Overflux Capacitor)")) {
wolfRNG = true;
lc.wolfFluxes++;
lc.wolfFluxesSession++;
cf.writeIntConfig("wolf", "flux", lc.wolfFluxes);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.DARK_PURPLE + "OVERFLUX CAPACITOR!", 5);
- }
-
- // Spider
- if (message.contains("Talk to Maddox to claim your Spider Slayer XP!")) {
+ } else if (message.contains("Talk to Maddox to claim your Spider Slayer XP!")) { // Spider
lc.spiderTarantulas++;
lc.spiderTarantulasSession++;
if (lc.spiderBosses != -1) {
@@ -342,46 +389,37 @@ public class TheMod
}
cf.writeIntConfig("spider", "tarantulas", lc.spiderTarantulas);
cf.writeIntConfig("spider", "bossRNG", lc.spiderBosses);
- }
- if (message.contains("RARE DROP! (Toxic Arrow Poison)")) {
+ } else if (message.contains("RARE DROP! (Toxic Arrow Poison)")) {
lc.spiderTAPDrops++;
lc.spiderTAPDropsSession++;
cf.writeIntConfig("spider", "tapDrops", lc.spiderTAPDrops);
- }
- if (message.contains("VERY RARE DROP! (") && message.contains(" Bite Rune I)")) {
+ } else if (message.contains("VERY RARE DROP! (") && message.contains(" Bite Rune I)")) {
lc.spiderBites++;
lc.spiderBitesSession++;
cf.writeIntConfig("spider", "bite", lc.spiderBites);
- }
- if (message.contains("VERY RARE DROP! (Spider Catalyst)")) {
+ } else if (message.contains("VERY RARE DROP! (Spider Catalyst)")) {
lc.spiderCatalysts++;
lc.spiderCatalystsSession++;
cf.writeIntConfig("spider", "catalyst", lc.spiderCatalysts);
- }
- if (message.contains("CRAZY RARE DROP! (Fly Swatter)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Fly Swatter)")) {
spiderRNG = true;
lc.spiderSwatters++;
lc.spiderSwattersSession++;
cf.writeIntConfig("spider", "swatter", lc.spiderSwatters);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.LIGHT_PURPLE + "FLY SWATTER!", 3);
- }
- if (message.contains("CRAZY RARE DROP! (Tarantula Talisman")) {
+ } else if (message.contains("CRAZY RARE DROP! (Tarantula Talisman")) {
spiderRNG = true;
lc.spiderTalismans++;
lc.spiderTalismansSession++;
cf.writeIntConfig("spider", "talisman", lc.spiderTalismans);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.DARK_PURPLE + "TARANTULA TALISMAN!", 3);
- }
- if (message.contains("CRAZY RARE DROP! (Digested Mosquito)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Digested Mosquito)")) {
spiderRNG = true;
lc.spiderMosquitos++;
lc.spiderMosquitosSession++;
cf.writeIntConfig("spider", "mosquito", lc.spiderMosquitos);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.GOLD + "DIGESTED MOSQUITO!", 5);
- }
-
- // Zombie
- if (message.contains("Talk to Maddox to claim your Zombie Slayer XP!")) {
+ } else if (message.contains("Talk to Maddox to claim your Zombie Slayer XP!")) { // Zombie
lc.zombieRevs++;
lc.zombieRevsSession++;
if (lc.zombieBosses != -1) {
@@ -392,86 +430,49 @@ public class TheMod
}
cf.writeIntConfig("zombie", "revs", lc.zombieRevs);
cf.writeIntConfig("zombie", "bossRNG", lc.zombieBosses);
- }
- if (message.contains("RARE DROP! (Foul Flesh)")) {
+ } else if (message.contains("RARE DROP! (Foul Flesh)")) {
lc.zombieFoulFleshDrops++;
lc.zombieFoulFleshDropsSession++;
cf.writeIntConfig("zombie", "foulFleshDrops", lc.zombieFoulFleshDrops);
- }
- if (message.contains("VERY RARE DROP! (Revenant Catalyst)")) {
+ } else if (message.contains("VERY RARE DROP! (Revenant Catalyst)")) {
lc.zombieRevCatas++;
lc.zombieRevCatasSession++;
cf.writeIntConfig("zombie", "revCatalyst", lc.zombieRevCatas);
- }
- if (message.contains("VERY RARE DROP! (") && message.contains(" Pestilence Rune I)")) {
+ } else if (message.contains("VERY RARE DROP! (") && message.contains(" Pestilence Rune I)")) {
lc.zombiePestilences++;
lc.zombiePestilencesSession++;
cf.writeIntConfig("zombie", "pestilence", lc.zombiePestilences);
- }
- if (message.contains("VERY RARE DROP! (Undead Catalyst)")) {
+ } else if (message.contains("VERY RARE DROP! (Undead Catalyst)")) {
lc.zombieUndeadCatas++;
lc.zombieUndeadCatasSession++;
cf.writeIntConfig("zombie", "undeadCatalyst", lc.zombieUndeadCatas);
- }
- if (message.contains("CRAZY RARE DROP! (Beheaded Horror)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Beheaded Horror)")) {
zombieRNG = true;
lc.zombieBeheadeds++;
lc.zombieBeheadedsSession++;
cf.writeIntConfig("zombie", "beheaded", lc.zombieBeheadeds);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.DARK_PURPLE + "BEHEADED HORROR!", 3);
- }
- if (message.contains("CRAZY RARE DROP! (") && message.contains(" Snake Rune I)")) {
+ } else if (message.contains("CRAZY RARE DROP! (") && message.contains(" Snake Rune I)")) {
zombieRNG = true;
lc.zombieSnakes++;
lc.zombieSnakesSession++;
cf.writeIntConfig("zombie", "snake", lc.zombieSnakes);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.DARK_GREEN + "SNAKE RUNE!", 3);
- }
- if (message.contains("CRAZY RARE DROP! (Scythe Blade)")) {
+ } else if (message.contains("CRAZY RARE DROP! (Scythe Blade)")) {
zombieRNG = true;
lc.zombieScythes++;
lc.zombieScythesSession++;
cf.writeIntConfig("zombie", "scythe", lc.zombieScythes);
if (tc.rngesusAlerts) Utils.createTitle(EnumChatFormatting.GOLD + "SCYTHE BLADE!", 5);
- }
-
- if (wolfRNG) {
- lc.wolfTime = System.currentTimeMillis() / 1000;
- lc.wolfBosses = 0;
- lc.wolfTimeSession = System.currentTimeMillis() / 1000;
- lc.wolfBossesSession = 0;
- cf.writeDoubleConfig("wolf", "timeRNG", lc.wolfTime);
- cf.writeIntConfig("wolf", "bossRNG", 0);
- }
- if (spiderRNG) {
- lc.spiderTime = System.currentTimeMillis() / 1000;
- lc.spiderBosses = 0;
- lc.spiderTimeSession = System.currentTimeMillis() / 1000;
- lc.spiderBossesSession = 0;
- cf.writeDoubleConfig("spider", "timeRNG", lc.spiderTime);
- cf.writeIntConfig("spider", "bossRNG", 0);
- }
- if (zombieRNG) {
- lc.zombieTime = System.currentTimeMillis() / 1000;
- lc.zombieBosses = 0;
- lc.zombieTimeSession = System.currentTimeMillis() / 1000;
- lc.zombieBossesSession = 0;
- cf.writeDoubleConfig("zombie", "timeRNG", lc.zombieTime);
- cf.writeIntConfig("zombie", "bossRNG", 0);
- }
-
- // Fishing
- if (message.contains("GOOD CATCH!")) {
+ } else if (message.contains("GOOD CATCH!")) { // Fishing
lc.goodCatches++;
lc.goodCatchesSession++;
cf.writeIntConfig("fishing", "goodCatch", lc.goodCatches);
- }
- if (message.contains("GREAT CATCH!")) {
+ } else if (message.contains("GREAT CATCH!")) {
lc.greatCatches++;
lc.greatCatchesSession++;
cf.writeIntConfig("fishing", "greatCatch", lc.greatCatches);
- }
- if (message.contains("You caught a lowly Squid")) {
+ } else if (message.contains("You caught a lowly Squid")) {
lc.squids++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -482,8 +483,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("From the depths of the waters, you've reeled in a Sea Walker")) {
+ } else if (message.contains("From the depths of the waters, you've reeled in a Sea Walker")) {
lc.seaWalkers++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -494,8 +494,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("Pitch darkness reveals you've caught a")) {
+ } else if (message.contains("Pitch darkness reveals you've caught a")) {
lc.nightSquids++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -506,8 +505,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("You've stumbled upon a patrolling Sea Guardian")) {
+ } else if (message.contains("You've stumbled upon a patrolling Sea Guardian")) {
lc.seaGuardians++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -518,8 +516,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("It looks like you've disrupted the Sea Witch's brewing session. Watch out, she's furious")) {
+ } else if (message.contains("It looks like you've disrupted the Sea Witch's brewing session. Watch out, she's furious")) {
lc.seaWitches++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -530,8 +527,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("From the depths of the waters, you've reeled in a Sea Archer")) {
+ } else if (message.contains("From the depths of the waters, you've reeled in a Sea Archer")) {
lc.seaArchers++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -542,8 +538,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("The Monster of the Deep emerges from the dark depths")) {
+ } else if (message.contains("The Monster of the Deep emerges from the dark depths")) {
lc.monsterOfTheDeeps++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -554,8 +549,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("You have found a Catfish, don't let it steal your catches")) {
+ } else if (message.contains("You have found a Catfish, don't let it steal your catches")) {
lc.catfishes++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -566,8 +560,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("Is this even a fish? It's the Carrot King")) {
+ } else if (message.contains("Is this even a fish? It's the Carrot King")) {
lc.carrotKings++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -578,8 +571,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("Gross! A Sea Leech")) {
+ } else if (message.contains("Gross! A Sea Leech")) {
lc.seaLeeches++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -590,8 +582,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("You've discovered a Guardian Defender of the sea")) {
+ } else if (message.contains("You've discovered a Guardian Defender of the sea")) {
lc.guardianDefenders++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -602,8 +593,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("You have awoken the Deep Sea Protector, prepare for a battle")) {
+ } else if (message.contains("You have awoken the Deep Sea Protector, prepare for a battle")) {
lc.deepSeaProtectors++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -614,8 +604,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("The Water Hydra has come to test your strength")) {
+ } else if (message.contains("The Water Hydra has come to test your strength")) {
lc.hydras++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -626,8 +615,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("The Sea Emperor arises from the depths")) {
+ } else if (message.contains("The Sea Emperor arises from the depths")) {
lc.seaEmperors++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -643,9 +631,7 @@ public class TheMod
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
cf.writeDoubleConfig("fishing", "empTime", lc.empTime);
cf.writeIntConfig("fishing", "empSC", lc.empSCs);
- }
- // Fishing Winter
- if (message.contains("Frozen Steve fell into the pond long ago")) {
+ } else if (message.contains("Frozen Steve fell into the pond long ago")) { // Fishing Winter
lc.frozenSteves++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -656,8 +642,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("It's a snowman! He looks harmless")) {
+ } else if (message.contains("It's a snowman! He looks harmless")) {
lc.frostyTheSnowmans++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -668,8 +653,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("stole Jerry's Gifts...get them back")) {
+ } else if (message.contains("stole Jerry's Gifts...get them back")) {
lc.grinches++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -680,8 +664,7 @@ public class TheMod
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
increaseSeaCreatures();
- }
- if (message.contains("What is this creature")) {
+ } else if (message.contains("What is this creature")) {
lc.yetis++;
lc.seaCreatures++;
lc.fishingMilestone++;
@@ -697,11 +680,51 @@ public class TheMod
cf.writeIntConfig("fishing", "yetiSC", lc.yetiSCs);
cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
- }
-
- // Catacombs Dungeons
- // Timers
- if (message.contains("Dungeon starts in 1 second.")) {
+ } else if (message.contains("A tiny fin emerges from the water, you've caught a Nurse Shark")) { // Fishing Festival
+ lc.nurseSharks++;
+ lc.seaCreatures++;
+ lc.fishingMilestone++;
+ lc.nurseSharksSession++;
+ lc.seaCreaturesSession++;
+ lc.fishingMilestoneSession++;
+ cf.writeIntConfig("fishing", "nurseShark", lc.nurseSharks);
+ cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
+ cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
+ increaseSeaCreatures();
+ } else if (message.contains("You spot a fin as blue as the water it came from, it's a Blue Shark")) {
+ lc.blueSharks++;
+ lc.seaCreatures++;
+ lc.fishingMilestone++;
+ lc.blueSharksSession++;
+ lc.seaCreaturesSession++;
+ lc.fishingMilestoneSession++;
+ cf.writeIntConfig("fishing", "blueShark", lc.blueSharks);
+ cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
+ cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
+ increaseSeaCreatures();
+ } else if (message.contains("A striped beast bounds from the depths, the wild Tiger Shark")) {
+ lc.tigerSharks++;
+ lc.seaCreatures++;
+ lc.fishingMilestone++;
+ lc.tigerSharksSession++;
+ lc.seaCreaturesSession++;
+ lc.fishingMilestoneSession++;
+ cf.writeIntConfig("fishing", "tigerShark", lc.tigerSharks);
+ cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
+ cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
+ increaseSeaCreatures();
+ } else if (message.contains("Hide no longer, a Great White Shark has tracked your scent and thirsts for your blood")) {
+ lc.greatWhiteSharks++;
+ lc.seaCreatures++;
+ lc.fishingMilestone++;
+ lc.greatWhiteSharksSession++;
+ lc.seaCreaturesSession++;
+ lc.fishingMilestoneSession++;
+ cf.writeIntConfig("fishing", "greatWhiteShark", lc.greatWhiteSharks);
+ cf.writeIntConfig("fishing", "seaCreature", lc.seaCreatures);
+ cf.writeIntConfig("fishing", "milestone", lc.fishingMilestone);
+ increaseSeaCreatures();
+ } else if (message.contains("Dungeon starts in 1 second.")) { // Dungeons Stuff
dungeonStartTime = System.currentTimeMillis() / 1000;
bloodOpenTime = dungeonStartTime;
watcherClearTime = dungeonStartTime;
@@ -709,22 +732,15 @@ public class TheMod
witherDoors = 0;
dungeonDeaths = 0;
puzzleFails = 0;
- }
- if (message.contains("The BLOOD DOOR has been opened!")) {
+ } else if (message.contains("The BLOOD DOOR has been opened!")) {
bloodOpenTime = System.currentTimeMillis() / 1000;
- }
- if (message.contains(" opened a WITHER door!")) {
+ } else if (message.contains(" opened a WITHER door!")) {
witherDoors++;
- }
- if (message.contains(" and became a ghost.")) {
+ } else if (message.contains(" and became a ghost.")) {
dungeonDeaths++;
- }
-
- // Trackers
- if (message.contains(" Defeated ") && message.contains(" in ")) {
+ } else if (message.contains(" Defeated ") && message.contains(" in ")) {
bossClearTime = System.currentTimeMillis() / 1000;
- }
- if (message.contains("EXTRA STATS ")) {
+ } else if (message.contains("EXTRA STATS ")) {
List<String> scoreboard = ScoreboardHandler.getSidebarLines();
int timeToAdd = 0;
for (String s : scoreboard) {
@@ -747,104 +763,182 @@ public class TheMod
lc.f4TimeSpent = Math.floor(lc.f4TimeSpent + timeToAdd);
lc.f4TimeSpentSession = Math.floor(lc.f4TimeSpentSession + timeToAdd);
cf.writeDoubleConfig("catacombs", "floorFourTime", lc.f4TimeSpent);
+ } else if (sCleaned.contains("F5")) {
+ lc.f5TimeSpent = Math.floor(lc.f5TimeSpent + timeToAdd);
+ lc.f5TimeSpentSession = Math.floor(lc.f5TimeSpentSession + timeToAdd);
+ cf.writeDoubleConfig("catacombs", "floorFiveTime", lc.f5TimeSpent);
+ } else if (sCleaned.contains("F6")) {
+ lc.f6TimeSpent = Math.floor(lc.f6TimeSpent + timeToAdd);
+ lc.f6TimeSpentSession = Math.floor(lc.f6TimeSpentSession + timeToAdd);
+ cf.writeDoubleConfig("catacombs", "floorSixTime", lc.f6TimeSpent);
}
} else if (sCleaned.contains("Time Elapsed:")) {
// Get floor time
String time = sCleaned.substring(sCleaned.indexOf(":") + 2);
+ time = time.replaceAll("\\s", "");
int minutes = Integer.parseInt(time.substring(0, time.indexOf("m")));
int seconds = Integer.parseInt(time.substring(time.indexOf("m") + 1, time.indexOf("s")));
timeToAdd = (minutes * 60) + seconds;
}
}
}
- if (message.contains(" RARE REWARD! Recombobulator 3000")) {
- lc.recombobulators++;
- lc.recombobulatorsSession++;
- cf.writeIntConfig("catacombs", "recombobulator", lc.recombobulators);
- }
- if (message.contains(" RARE REWARD! Fuming Potato Book")) {
- lc.fumingPotatoBooks++;
- lc.fumingPotatoBooksSession++;
- cf.writeIntConfig("catacombs", "fumingBooks", lc.fumingPotatoBooks);
- }
- // F1
- if (message.contains(" RARE REWARD! Bonzo's Staff")) {
- lc.bonzoStaffs++;
- lc.bonzoStaffsSession++;
- cf.writeIntConfig("catacombs", "bonzoStaff", lc.bonzoStaffs);
- }
- // F2
- if (message.contains(" RARE REWARD! Scarf's Studies")) {
- lc.scarfStudies++;
- lc.scarfStudiesSession++;
- cf.writeIntConfig("catacombs", "scarfStudies", lc.scarfStudies);
- }
- // F3
- if (message.contains(" RARE REWARD! Adaptive Helmet")) {
- lc.adaptiveHelms++;
- lc.adaptiveHelmsSession++;
- cf.writeIntConfig("catacombs", "adaptiveHelm", lc.adaptiveHelms);
- }
- if (message.contains(" RARE REWARD! Adaptive Chestplate")) {
- lc.adaptiveChests++;
- lc.adaptiveChestsSession++;
- cf.writeIntConfig("catacombs", "adaptiveChest", lc.adaptiveChests);
- }
- if (message.contains(" RARE REWARD! Adaptive Leggings")) {
- lc.adaptiveLegs++;
- lc.adaptiveLegsSession++;
- cf.writeIntConfig("catacombs", "adaptiveLegging", lc.adaptiveLegs);
- }
- if (message.contains(" RARE REWARD! Adaptive Boots")) {
- lc.adaptiveBoots++;
- lc.adaptiveBootsSession++;
- cf.writeIntConfig("catacombs", "adaptiveBoot", lc.adaptiveBoots);
- }
- if (message.contains(" RARE REWARD! Adaptive Blade")) {
- lc.adaptiveSwords++;
- lc.adaptiveSwordsSession++;
- cf.writeIntConfig("catacombs", "adaptiveSword", lc.adaptiveSwords);
- }
- // F4
- if (message.contains(" Spirit Wing")) {
- lc.spiritWings++;
- lc.spiritWingsSession++;
- cf.writeIntConfig("catacombs", "spiritWing", lc.spiritWings);
- }
- // TODO
- // Fix strings for Spirit Bone, Spirit Boots
- if (message.contains(" ") && message.contains("Spirit Bone")) {
- lc.spiritBones++;
- lc.spiritBonesSession++;
- cf.writeIntConfig("catacombs", "spiritBone", lc.spiritBones);
- }
- if (message.contains(" ") && message.contains("Spirit Boots")) {
- lc.spiritBoots++;
- lc.spiritBootsSession++;
- cf.writeIntConfig("catacombs", "spiritBoot", lc.spiritBoots);
+
+ if (wolfRNG) {
+ lc.wolfTime = System.currentTimeMillis() / 1000;
+ lc.wolfBosses = 0;
+ lc.wolfTimeSession = System.currentTimeMillis() / 1000;
+ lc.wolfBossesSession = 0;
+ cf.writeDoubleConfig("wolf", "timeRNG", lc.wolfTime);
+ cf.writeIntConfig("wolf", "bossRNG", 0);
}
- if (message.contains(" [Lvl 1] Spirit")) {
- String formattedMessage = event.message.getFormattedText();
- // Unicode colour code messes up here, just gonna remove the symbols
- if (formattedMessage.contains("5Spirit")) {
- lc.epicSpiritPets++;
- lc.epicSpiritPetsSession++;
- cf.writeIntConfig("catacombs", "spiritPetEpic", lc.epicSpiritPets);
- } else if (formattedMessage.contains("6Spirit")) {
- lc.legSpiritPets++;
- lc.legSpiritPetsSession++;
- cf.writeIntConfig("catacombs", "spiritPetLeg", lc.legSpiritPets);
- }
+ if (spiderRNG) {
+ lc.spiderTime = System.currentTimeMillis() / 1000;
+ lc.spiderBosses = 0;
+ lc.spiderTimeSession = System.currentTimeMillis() / 1000;
+ lc.spiderBossesSession = 0;
+ cf.writeDoubleConfig("spider", "timeRNG", lc.spiderTime);
+ cf.writeIntConfig("spider", "bossRNG", 0);
}
- if (message.contains(" Spirit Sword")) {
- lc.spiritSwords++;
- lc.spiritSwordsSession++;
- cf.writeIntConfig("catacombs", "spiritSword", lc.spiritSwords);
+ if (zombieRNG) {
+ lc.zombieTime = System.currentTimeMillis() / 1000;
+ lc.zombieBosses = 0;
+ lc.zombieTimeSession = System.currentTimeMillis() / 1000;
+ lc.zombieBossesSession = 0;
+ cf.writeDoubleConfig("zombie", "timeRNG", lc.zombieTime);
+ cf.writeIntConfig("zombie", "bossRNG", 0);
}
- if (message.contains(" Spirit Bow")) {
- lc.spiritBows++;
- lc.spiritBowsSession++;
- cf.writeIntConfig("catacombs", "spiritBow", lc.spiritBows);
+
+ // Dungeons Trackers
+ if (message.contains(" ")) {
+ if (message.contains("Recombobulator 3000")) {
+ lc.recombobulators++;
+ lc.recombobulatorsSession++;
+ cf.writeIntConfig("catacombs", "recombobulator", lc.recombobulators);
+ } else if (message.contains("Fuming Potato Book")) {
+ lc.fumingPotatoBooks++;
+ lc.fumingPotatoBooksSession++;
+ cf.writeIntConfig("catacombs", "fumingBooks", lc.fumingPotatoBooks);
+ } else if (message.contains("Bonzo's Staff")) { // F1
+ lc.bonzoStaffs++;
+ lc.bonzoStaffsSession++;
+ cf.writeIntConfig("catacombs", "bonzoStaff", lc.bonzoStaffs);
+ } else if (message.contains("Scarf's Studies")) { // F2
+ lc.scarfStudies++;
+ lc.scarfStudiesSession++;
+ cf.writeIntConfig("catacombs", "scarfStudies", lc.scarfStudies);
+ } else if (message.contains("Adaptive Helmet")) { // F3
+ lc.adaptiveHelms++;
+ lc.adaptiveHelmsSession++;
+ cf.writeIntConfig("catacombs", "adaptiveHelm", lc.adaptiveHelms);
+ } else if (message.contains("Adaptive Chestplate")) {
+ lc.adaptiveChests++;
+ lc.adaptiveChestsSession++;
+ cf.writeIntConfig("catacombs", "adaptiveChest", lc.adaptiveChests);
+ } else if (message.contains("Adaptive Leggings")) {
+ lc.adaptiveLegs++;
+ lc.adaptiveLegsSession++;
+ cf.writeIntConfig("catacombs", "adaptiveLegging", lc.adaptiveLegs);
+ } else if (message.contains("Adaptive Boots")) {
+ lc.adaptiveBoots++;
+ lc.adaptiveBootsSession++;
+ cf.writeIntConfig("catacombs", "adaptiveBoot", lc.adaptiveBoots);
+ } else if (message.contains("Adaptive Blade")) {
+ lc.adaptiveSwords++;
+ lc.adaptiveSwordsSession++;
+ cf.writeIntConfig("catacombs", "adaptiveSword", lc.adaptiveSwords);
+ } else if (message.contains("Spirit Wing")) { // F4
+ lc.spiritWings++;
+ lc.spiritWingsSession++;
+ cf.writeIntConfig("catacombs", "spiritWing", lc.spiritWings);
+ } else if (message.contains("Spirit Bone")) {
+ lc.spiritBones++;
+ lc.spiritBonesSession++;
+ cf.writeIntConfig("catacombs", "spiritBone", lc.spiritBones);
+ } else if (message.contains("Spirit Boots")) {
+ lc.spiritBoots++;
+ lc.spiritBootsSession++;
+ cf.writeIntConfig("catacombs", "spiritBoot", lc.spiritBoots);
+ } else if (message.contains("[Lvl 1] Spirit")) {
+ String formattedMessage = event.message.getFormattedText();
+ // Unicode colour code messes up here, just gonna remove the symbols
+ if (formattedMessage.contains("5Spirit")) {
+ lc.epicSpiritPets++;
+ lc.epicSpiritPetsSession++;
+ cf.writeIntConfig("catacombs", "spiritPetEpic", lc.epicSpiritPets);
+ } else if (formattedMessage.contains("6Spirit")) {
+ lc.legSpiritPets++;
+ lc.legSpiritPetsSession++;
+ cf.writeIntConfig("catacombs", "spiritPetLeg", lc.legSpiritPets);
+ }
+ } else if (message.contains("Spirit Sword")) {
+ lc.spiritSwords++;
+ lc.spiritSwordsSession++;
+ cf.writeIntConfig("catacombs", "spiritSword", lc.spiritSwords);
+ } else if (message.contains("Spirit Bow")) {
+ lc.spiritBows++;
+ lc.spiritBowsSession++;
+ cf.writeIntConfig("catacombs", "spiritBow", lc.spiritBows);
+ } else if (message.contains("Warped Stone")) { // F5
+ lc.warpedStones++;
+ lc.warpedStonesSession++;
+ cf.writeIntConfig("catacombs", "warpedStone", lc.warpedStones);
+ } else if (message.contains("Shadow Assassin Helmet")) {
+ lc.shadowAssHelms++;
+ lc.shadowAssHelmsSession++;
+ cf.writeIntConfig("catacombs", "shadowAssassinHelm", lc.shadowAssHelms);
+ } else if (message.contains("Shadow Assassin Chestplate")) {
+ lc.shadowAssChests++;
+ lc.shadowAssChestsSession++;
+ cf.writeIntConfig("catacombs", "shadowAssassinChest", lc.shadowAssChests);
+ } else if (message.contains("Shadow Assassin Leggings")) {
+ lc.shadowAssLegs++;
+ lc.shadowAssLegsSession++;
+ cf.writeIntConfig("catacombs", "shadowAssassinLegging", lc.shadowAssLegs);
+ } else if (message.contains("Shadow Assassin Boots")) {
+ lc.shadowAssBoots++;
+ lc.shadowAssBootsSession++;
+ cf.writeIntConfig("catacombs", "shadowAssassinBoot", lc.shadowAssBoots);
+ } else if (message.contains("Livid Dagger")) {
+ lc.lividDaggers++;
+ lc.lividDaggersSession++;
+ cf.writeIntConfig("catacombs", "lividDagger", lc.lividDaggers);
+ } else if (message.contains("Shadow Fury")) {
+ lc.shadowFurys++;
+ lc.shadowFurysSession++;
+ cf.writeIntConfig("catacombs", "shadowFury", lc.shadowFurys);
+ } else if (message.contains("Ancient Rose")) { // F6
+ lc.ancientRoses++;
+ lc.ancientRosesSession++;
+ cf.writeIntConfig("catacombs", "ancientRose", lc.ancientRoses);
+ } else if (message.contains("Precursor Eye")) {
+ lc.precursorEyes++;
+ lc.precursorEyesSession++;
+ cf.writeIntConfig("catacombs", "precursorEye", lc.precursorEyes);
+ } else if (message.contains("Giant's Sword")) {
+ lc.giantsSwords++;
+ lc.giantsSwordsSession++;
+ cf.writeIntConfig("catacombs", "giantsSword", lc.giantsSwords);
+ } else if (message.contains("Necromancer Lord Helmet")) {
+ lc.necroLordHelms++;
+ lc.necroLordHelmsSession++;
+ cf.writeIntConfig("catacombs", "necroLordHelm", lc.necroLordHelms);
+ } else if (message.contains("Necromancer Lord Chestplate")) {
+ lc.necroLordChests++;
+ lc.necroLordChestsSession++;
+ cf.writeIntConfig("catacombs", "necroLordChest", lc.necroLordChests);
+ } else if (message.contains("Necromancer Lord Leggings")) {
+ lc.necroLordLegs++;
+ lc.necroLordLegsSession++;
+ cf.writeIntConfig("catacombs", "necroLordLegging", lc.necroLordLegs);
+ } else if (message.contains("Necromancer Lord Boots")) {
+ lc.necroLordBoots++;
+ lc.necroLordBootsSession++;
+ cf.writeIntConfig("catacombs", "necroLordBoot", lc.necroLordBoots);
+ } else if (message.contains("Necromancer Sword")) {
+ lc.necroSwords++;
+ lc.necroSwordsSession++;
+ cf.writeIntConfig("catacombs", "necroSword", lc.necroSwords);
+ }
}
// Chat Maddox
@@ -871,11 +965,26 @@ public class TheMod
@SubscribeEvent
public void renderPlayerInfo(final RenderGameOverlayEvent.Post event) {
- if (event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE) return;
+ if (usingLabymod) return;
+ if (event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE && event.type != RenderGameOverlayEvent.ElementType.JUMPBAR) return;
+ renderEverything();
+ }
+
+ // LabyMod Support
+ @SubscribeEvent
+ public void renderPlayerInfoLabyMod(final RenderGameOverlayEvent event) {
+ if (!usingLabymod) return;
+ if (event.type != null) return;
+ renderEverything();
+ }
+
+ public void renderEverything() {
final ToggleCommand tc = new ToggleCommand();
final MoveCommand moc = new MoveCommand();
final DisplayCommand ds = new DisplayCommand();
+ if (Minecraft.getMinecraft().currentScreen instanceof EditLocationsGui) return;
+
if (tc.coordsToggled) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
@@ -1339,12 +1448,46 @@ public class TheMod
EnumChatFormatting.GOLD + nf.format(lc.yetisSession) + "\n" +
EnumChatFormatting.AQUA + timeBetween + "\n" +
EnumChatFormatting.AQUA + bossesBetween;
- } else if (ds.display.equals("catacombs_floor_one")) {
+ } else if (ds.display.equals("fishing_festival")) {
+ dropsText = EnumChatFormatting.AQUA + "Creatures Caught:\n" +
+ EnumChatFormatting.AQUA + "Fishing Milestone:\n" +
+ EnumChatFormatting.GOLD + "Good Catches:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Great Catches:\n" +
+ EnumChatFormatting.LIGHT_PURPLE + "Nurse Sharks:\n" +
+ EnumChatFormatting.BLUE + "Blue Sharks:\n" +
+ EnumChatFormatting.GOLD + "Tiger Sharks:\n" +
+ EnumChatFormatting.WHITE + "Great White Sharks:";
+ countText = EnumChatFormatting.AQUA + nf.format(lc.seaCreatures) + "\n" +
+ EnumChatFormatting.AQUA + nf.format(lc.fishingMilestone) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.goodCatches) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.greatCatches) + "\n" +
+ EnumChatFormatting.LIGHT_PURPLE + nf.format(lc.nurseSharks) + "\n" +
+ EnumChatFormatting.BLUE + nf.format(lc.blueSharks) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.tigerSharks) + "\n" +
+ EnumChatFormatting.WHITE + nf.format(lc.greatWhiteSharks);
+ } else if (ds.display.equals("fishing_festival_session")) {
+ dropsText = EnumChatFormatting.AQUA + "Creatures Caught:\n" +
+ EnumChatFormatting.AQUA + "Fishing Milestone:\n" +
+ EnumChatFormatting.GOLD + "Good Catches:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Great Catches:\n" +
+ EnumChatFormatting.LIGHT_PURPLE + "Nurse Sharks:\n" +
+ EnumChatFormatting.BLUE + "Blue Sharks:\n" +
+ EnumChatFormatting.GOLD + "Tiger Sharks:\n" +
+ EnumChatFormatting.WHITE + "Great White Sharks:";
+ countText = EnumChatFormatting.AQUA + nf.format(lc.seaCreaturesSession) + "\n" +
+ EnumChatFormatting.AQUA + nf.format(lc.fishingMilestoneSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.goodCatchesSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.greatCatchesSession) + "\n" +
+ EnumChatFormatting.LIGHT_PURPLE + nf.format(lc.nurseSharksSession) + "\n" +
+ EnumChatFormatting.BLUE + nf.format(lc.blueSharksSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.tigerSharksSession) + "\n" +
+ EnumChatFormatting.WHITE + nf.format(lc.greatWhiteSharksSession);
+ } else if (ds.display.equals("catacombs_floor_one")) {
dropsText = EnumChatFormatting.GOLD + "Recombobulators:\n" +
EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
EnumChatFormatting.BLUE + "Bonzo's Staffs:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulators) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooks) + "\n" +
EnumChatFormatting.BLUE + nf.format(lc.bonzoStaffs) + "\n" +
@@ -1355,7 +1498,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
EnumChatFormatting.BLUE + "Bonzo's Staffs:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulatorsSession) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooksSession) + "\n" +
EnumChatFormatting.BLUE + nf.format(lc.bonzoStaffsSession) + "\n" +
@@ -1366,7 +1509,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
EnumChatFormatting.BLUE + "Scarf's Studies:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulators) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooks) + "\n" +
EnumChatFormatting.BLUE + nf.format(lc.scarfStudies) + "\n" +
@@ -1377,7 +1520,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
EnumChatFormatting.BLUE + "Scarf's Studies:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulatorsSession) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooksSession) + "\n" +
EnumChatFormatting.BLUE + nf.format(lc.scarfStudiesSession) + "\n" +
@@ -1392,7 +1535,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Adaptive Boots:\n" +
EnumChatFormatting.DARK_PURPLE + "Adaptive Blades:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulators) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooks) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.adaptiveHelms) + "\n" +
@@ -1411,7 +1554,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Adaptive Boots:\n" +
EnumChatFormatting.DARK_PURPLE + "Adaptive Blades:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulatorsSession) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooksSession) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.adaptiveHelmsSession) + "\n" +
@@ -1432,7 +1575,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Epic Spirit Pets:\n" +
EnumChatFormatting.GOLD + "Leg Spirit Pets:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulators) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooks) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.spiritWings) + "\n" +
@@ -1455,7 +1598,7 @@ public class TheMod
EnumChatFormatting.DARK_PURPLE + "Epic Spirit Pets:\n" +
EnumChatFormatting.GOLD + "Leg Spirit Pets:\n" +
EnumChatFormatting.AQUA + "Coins Spent:\n" +
- EnumChatFormatting.AQUA + "Time Spent:\n";
+ EnumChatFormatting.AQUA + "Time Spent:";
countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulatorsSession) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooksSession) + "\n" +
EnumChatFormatting.DARK_PURPLE + nf.format(lc.spiritWingsSession) + "\n" +
@@ -1467,6 +1610,102 @@ public class TheMod
EnumChatFormatting.GOLD + nf.format(lc.legSpiritPetsSession) + "\n" +
EnumChatFormatting.AQUA + Utils.getMoneySpent(lc.f4CoinsSpentSession) + "\n" +
EnumChatFormatting.AQUA + Utils.getTimeBetween(0, lc.f4TimeSpentSession);
+ } else if (ds.display.equals("catacombs_floor_five")) {
+ dropsText = EnumChatFormatting.GOLD + "Recombobulators:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
+ EnumChatFormatting.BLUE + "Warped Stones:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Helmets:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Chestplates:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Leggings:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Boots:\n" +
+ EnumChatFormatting.GOLD + "Livid Daggers:\n" +
+ EnumChatFormatting.GOLD + "Shadow Furys:\n" +
+ EnumChatFormatting.AQUA + "Coins Spent:\n" +
+ EnumChatFormatting.AQUA + "Time Spent:";
+ countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulators) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooks) + "\n" +
+ EnumChatFormatting.BLUE + nf.format(lc.warpedStones) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssHelms) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssChests) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssLegs) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssBoots) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.lividDaggers) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.shadowFurys) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getMoneySpent(lc.f5CoinsSpent) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getTimeBetween(0, lc.f5TimeSpent);
+ } else if (ds.display.equals("catacombs_floor_five_session")) {
+ dropsText = EnumChatFormatting.GOLD + "Recombobulators:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
+ EnumChatFormatting.BLUE + "Warped Stones:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Helmets:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Chestplates:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Leggings:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Shadow Boots:\n" +
+ EnumChatFormatting.GOLD + "Livid Daggers:\n" +
+ EnumChatFormatting.GOLD + "Shadow Furys:\n" +
+ EnumChatFormatting.AQUA + "Coins Spent:\n" +
+ EnumChatFormatting.AQUA + "Time Spent:";
+ countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulatorsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooksSession) + "\n" +
+ EnumChatFormatting.BLUE + nf.format(lc.warpedStonesSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssHelmsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssChestsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssLegsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.shadowAssBootsSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.lividDaggersSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.shadowFurysSession) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getMoneySpent(lc.f5CoinsSpentSession) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getTimeBetween(0, lc.f5TimeSpentSession);
+ } else if (ds.display.equals("catacombs_floor_six")) {
+ dropsText = EnumChatFormatting.GOLD + "Recombobulators:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
+ EnumChatFormatting.BLUE + "Ancient Roses:\n" +
+ EnumChatFormatting.GOLD + "Precursor Eyes:\n" +
+ EnumChatFormatting.GOLD + "Giant's Swords:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Helmets:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Chests:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Leggings:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Boots:\n" +
+ EnumChatFormatting.GOLD + "Necro Swords:\n" +
+ EnumChatFormatting.AQUA + "Coins Spent:\n" +
+ EnumChatFormatting.AQUA + "Time Spent:";
+ countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulators) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooks) + "\n" +
+ EnumChatFormatting.BLUE + nf.format(lc.ancientRoses) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.precursorEyes) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.giantsSwords) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordHelms) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordChests) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordLegs) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordBoots) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroSwords) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getMoneySpent(lc.f6CoinsSpent) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getTimeBetween(0, lc.f6TimeSpent);
+ } else if (ds.display.equals("catacombs_floor_six_session")) {
+ dropsText = EnumChatFormatting.GOLD + "Recombobulators:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Fuming Potato Books:\n" +
+ EnumChatFormatting.BLUE + "Ancient Roses:\n" +
+ EnumChatFormatting.GOLD + "Precursor Eyes:\n" +
+ EnumChatFormatting.GOLD + "Giant's Swords:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Helmets:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Chests:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Leggings:\n" +
+ EnumChatFormatting.GOLD + "Necro Lord Boots:\n" +
+ EnumChatFormatting.GOLD + "Necro Swords:\n" +
+ EnumChatFormatting.AQUA + "Coins Spent:\n" +
+ EnumChatFormatting.AQUA + "Time Spent:";
+ countText = EnumChatFormatting.GOLD + nf.format(lc.recombobulatorsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + nf.format(lc.fumingPotatoBooksSession) + "\n" +
+ EnumChatFormatting.BLUE + nf.format(lc.ancientRosesSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.precursorEyesSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.giantsSwordsSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordHelmsSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordChestsSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordLegsSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroLordBootsSession) + "\n" +
+ EnumChatFormatting.GOLD + nf.format(lc.necroSwordsSession) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getMoneySpent(lc.f6CoinsSpentSession) + "\n" +
+ EnumChatFormatting.AQUA + Utils.getTimeBetween(0, lc.f6TimeSpentSession);
} else {
ConfigHandler cf = new ConfigHandler();
@@ -1481,6 +1720,9 @@ public class TheMod
if (showTitle) {
Utils.drawTitle(titleText);
}
+ if (showSkill) {
+ new TextRenderer(Minecraft.getMinecraft(), skillText, moc.skill50XY[0], moc.skill50XY[1], ScaleCommand.skill50Scale);
+ }
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
@@ -1542,11 +1784,31 @@ public class TheMod
final ToggleCommand tc = new ToggleCommand();
if (event.toolTip == null) return;
+
+ ItemStack item = event.itemStack;
if (tc.goldenToggled) {
for (int i = 0; i < event.toolTip.size(); i++) {
event.toolTip.set(i, Utils.returnGoldenEnchants(event.toolTip.get(i)));
}
}
+
+ if (tc.expertiseLoreToggled) {
+ if (item.hasTagCompound()) {
+ NBTTagCompound tags = item.getSubCompound("ExtraAttributes", false);
+ if (tags != null) {
+ if (tags.hasKey("expertise_kills")) {
+ int index = 4;
+ if (!Minecraft.getMinecraft().gameSettings.advancedItemTooltips) index -= 2;
+
+ event.toolTip.add(event.toolTip.size() - index, "");
+ event.toolTip.add(event.toolTip.size() - index, "Expertise Kills: " + EnumChatFormatting.RED + tags.getInteger("expertise_kills"));
+ if (Utils.expertiseKillsLeft(tags.getInteger("expertise_kills")) != -1) {
+ event.toolTip.add(event.toolTip.size() - index, Utils.expertiseKillsLeft(tags.getInteger("expertise_kills")) + " kills to tier up!");
+ }
+ }
+ }
+ }
+ }
}
@SubscribeEvent
@@ -1554,11 +1816,49 @@ public class TheMod
// Check if player is in Skyblock every second
tickAmount++;
if (tickAmount % 20 == 0) {
- EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
+ Minecraft mc = Minecraft.getMinecraft();
+ EntityPlayerSP player = mc.thePlayer;
+
if (player != null) {
Utils.checkForSkyblock();
}
- tickAmount = 1;
+
+ if (DisplayCommand.auto && mc != null && mc.theWorld != null) {
+ List<String> scoreboard = ScoreboardHandler.getSidebarLines();
+ boolean found = false;
+ for (String s : scoreboard) {
+ String sCleaned = ScoreboardHandler.cleanSB(s);
+ if (sCleaned.contains("Sven Packmaster")) {
+ DisplayCommand.display = "wolf";
+ found = true;
+ } else if (sCleaned.contains("Tarantula Broodfather")) {
+ DisplayCommand.display = "spider";
+ found = true;
+ } else if (sCleaned.contains("Revenant Horror")) {
+ DisplayCommand.display = "zombie";
+ found = true;
+ } else if (sCleaned.contains("The Catacombs (")) {
+ if (sCleaned.contains("F1")) {
+ DisplayCommand.display = "catacombs_floor_one";
+ } else if (sCleaned.contains("F2")) {
+ DisplayCommand.display = "catacombs_floor_two";
+ } else if (sCleaned.contains("F3")) {
+ DisplayCommand.display = "catacombs_floor_three";
+ } else if (sCleaned.contains("F4")) {
+ DisplayCommand.display = "catacombs_floor_four";
+ } else if (sCleaned.contains("F5")) {
+ DisplayCommand.display = "catacombs_floor_five";
+ } else if (sCleaned.contains("F6")) {
+ DisplayCommand.display = "catacombs_floor_six";
+ }
+ found = true;
+ }
+ }
+ if (!found) DisplayCommand.display = "off";
+ ConfigHandler.writeStringConfig("misc", "display", DisplayCommand.display);
+ }
+
+ tickAmount = 0;
}
if (titleTimer >= 0) {
@@ -1567,6 +1867,31 @@ public class TheMod
}
titleTimer--;
}
+ if (skillTimer >= 0) {
+ if (skillTimer == 0) {
+ showSkill = false;
+ }
+ skillTimer--;
+ }
+ }
+
+ // Delay GUI by 1 tick
+ @SubscribeEvent
+ public void onRenderTick(TickEvent.RenderTickEvent event) {
+ if (guiToOpen != null) {
+ Minecraft mc = Minecraft.getMinecraft();
+ if (guiToOpen.startsWith("dankergui")) {
+ int page = Character.getNumericValue(guiToOpen.charAt(guiToOpen.length() - 1));
+ mc.displayGuiScreen(new DankerGui(page));
+ } else if (guiToOpen.equals("displaygui")) {
+ mc.displayGuiScreen(new DisplayGui());
+ } else if (guiToOpen.equals("onlyslayergui")) {
+ mc.displayGuiScreen(new OnlySlayerGui());
+ } else if (guiToOpen.equals("editlocations")) {
+ mc.displayGuiScreen(new EditLocationsGui());
+ }
+ guiToOpen = null;
+ }
}
@SubscribeEvent
@@ -1575,8 +1900,13 @@ public class TheMod
ItemStack item = event.entityPlayer.getHeldItem();
if (item == null) return;
- if (ToggleCommand.aotdToggled && item.getDisplayName().contains("Aspect of the Dragons") && event.action == PlayerInteractEvent.Action.RIGHT_CLICK_AIR) {
- event.setCanceled(true);
+ if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_AIR) {
+ if (ToggleCommand.aotdToggled && item.getDisplayName().contains("Aspect of the Dragons")) {
+ event.setCanceled(true);
+ }
+ if (ToggleCommand.lividDaggerToggled && item.getDisplayName().contains("Livid Dagger")) {
+ event.setCanceled(true);
+ }
}
}
@@ -1596,50 +1926,85 @@ public class TheMod
if (Mouse.getEventButton() != 0 && Mouse.getEventButton() != 1) return; // Left click or right click
if (event.gui instanceof GuiChest) {
- LootCommand lc = new LootCommand();
- ConfigHandler cf = new ConfigHandler();
- GuiChest inventory = (GuiChest) event.gui;
- Slot mouseSlot = inventory.getSlotUnderMouse();
- if (mouseSlot == null || mouseSlot.getStack() == null) return;
- ItemStack item = mouseSlot.getStack();
-
- if (item.getDisplayName().contains("Open Reward Chest")) {
- List<String> tooltip = item.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
- for (String lineUnclean : tooltip) {
- String line = StringUtils.stripControlCodes(lineUnclean);
- if (line.contains("FREE")) {
- break;
- } else if (line.contains(" Coins")) {
- int coinsSpent = Integer.parseInt(line.substring(0, line.indexOf(" ")).replaceAll(",", ""));
-
- List<String> scoreboard = ScoreboardHandler.getSidebarLines();
- for (String s : scoreboard) {
- String sCleaned = ScoreboardHandler.cleanSB(s);
- if (sCleaned.contains("The Catacombs (")) {
- if (sCleaned.contains("F1")) {
- lc.f1CoinsSpent += coinsSpent;
- lc.f1CoinsSpentSession += coinsSpent;
- cf.writeDoubleConfig("catacombs", "floorOneCoins", lc.f1CoinsSpent);
- } else if (sCleaned.contains("F2")) {
- lc.f2CoinsSpent += coinsSpent;
- lc.f2CoinsSpentSession += coinsSpent;
- cf.writeDoubleConfig("catacombs", "floorTwoCoins", lc.f2CoinsSpent);
- } else if (sCleaned.contains("F3")) {
- lc.f3CoinsSpent += coinsSpent;
- lc.f3CoinsSpentSession += coinsSpent;
- cf.writeDoubleConfig("catacombs", "floorThreeCoins", lc.f3CoinsSpent);
- } else if (sCleaned.contains("F4")) {
- lc.f4CoinsSpent += coinsSpent;
- lc.f4CoinsSpentSession += coinsSpent;
- cf.writeDoubleConfig("catacombs", "floorFourCoins", lc.f4CoinsSpent);
- }
- break;
- }
- }
- break;
- }
- }
- }
+ Container containerChest = ((GuiChest) event.gui).inventorySlots;
+ if (containerChest instanceof ContainerChest) {
+ // a lot of declarations here, if you get scarred, my bad
+ LootCommand lc = new LootCommand();
+ ConfigHandler cf = new ConfigHandler();
+ GuiChest chest = (GuiChest) event.gui;
+ IInventory inventory = ((ContainerChest) containerChest).getLowerChestInventory();
+ Slot mouseSlot = chest.getSlotUnderMouse();
+ if (mouseSlot == null || mouseSlot.getStack() == null) return;
+ ItemStack item = mouseSlot.getStack();
+ String inventoryName = inventory.getDisplayName().getUnformattedText();
+
+ if (inventoryName.endsWith(" Chest") && item.getDisplayName().contains("Open Reward Chest")) {
+ List<String> tooltip = item.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
+ for (String lineUnclean : tooltip) {
+ String line = StringUtils.stripControlCodes(lineUnclean);
+ if (line.contains("FREE")) {
+ break;
+ } else if (line.contains(" Coins")) {
+ int coinsSpent = Integer.parseInt(line.substring(0, line.indexOf(" ")).replaceAll(",", ""));
+
+ List<String> scoreboard = ScoreboardHandler.getSidebarLines();
+ for (String s : scoreboard) {
+ String sCleaned = ScoreboardHandler.cleanSB(s);
+ if (sCleaned.contains("The Catacombs (")) {
+ if (sCleaned.contains("F1")) {
+ lc.f1CoinsSpent += coinsSpent;
+ lc.f1CoinsSpentSession += coinsSpent;
+ cf.writeDoubleConfig("catacombs", "floorOneCoins", lc.f1CoinsSpent);
+ } else if (sCleaned.contains("F2")) {
+ lc.f2CoinsSpent += coinsSpent;
+ lc.f2CoinsSpentSession += coinsSpent;
+ cf.writeDoubleConfig("catacombs", "floorTwoCoins", lc.f2CoinsSpent);
+ } else if (sCleaned.contains("F3")) {
+ lc.f3CoinsSpent += coinsSpent;
+ lc.f3CoinsSpentSession += coinsSpent;
+ cf.writeDoubleConfig("catacombs", "floorThreeCoins", lc.f3CoinsSpent);
+ } else if (sCleaned.contains("F4")) {
+ lc.f4CoinsSpent += coinsSpent;
+ lc.f4CoinsSpentSession += coinsSpent;
+ cf.writeDoubleConfig("catacombs", "floorFourCoins", lc.f4CoinsSpent);
+ } else if (sCleaned.contains("F5")) {
+ lc.f5CoinsSpent += coinsSpent;
+ lc.f5CoinsSpentSession += coinsSpent;
+ cf.writeDoubleConfig("catacombs", "floorFiveCoins", lc.f5CoinsSpent);
+ } else if (sCleaned.contains("F6")) {
+ lc.f6CoinsSpent += coinsSpent;
+ lc.f6CoinsSpentSession += coinsSpent;
+ cf.writeDoubleConfig("catacombs", "floorSixCoins", lc.f6CoinsSpent);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ if (!BlockSlayerCommand.onlySlayerName.equals("")) {
+ if (inventoryName.equals("Slayer")) {
+ if (!item.getDisplayName().contains("Revenant Horror") && !item.getDisplayName().contains("Tarantula Broodfather") && !item.getDisplayName().contains("Sven Packmaster")) return;
+ if (!item.getDisplayName().contains(BlockSlayerCommand.onlySlayerName)) {
+ Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Danker's Skyblock Mod has stopped you from starting this quest (Set to " + BlockSlayerCommand.onlySlayerName + " " + BlockSlayerCommand.onlySlayerNumber + ")"));
+ Minecraft.getMinecraft().thePlayer.playSound("note.bass", 1, (float) 0.5);
+ event.setCanceled(true);
+ }
+ } else if (inventoryName.equals("Revenant Horror") || inventoryName.equals("Tarantula Broodfather") || inventoryName.equals("Sven Packmaster")) {
+ if (item.getDisplayName().contains("Revenant Horror") || item.getDisplayName().contains("Tarantula Broodfather") || item.getDisplayName().contains("Sven Packmaster")) {
+ // Only check number as they passed the above check
+ String slayerNumber = item.getDisplayName().substring(item.getDisplayName().lastIndexOf(" ") + 1, item.getDisplayName().length());
+ if (!slayerNumber.equals(BlockSlayerCommand.onlySlayerNumber)) {
+ Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Danker's Skyblock Mod has stopped you from starting this quest (Set to " + BlockSlayerCommand.onlySlayerName + " " + BlockSlayerCommand.onlySlayerNumber + ")"));
+ Minecraft.getMinecraft().thePlayer.playSound("note.bass", 1, (float) 0.5);
+ event.setCanceled(true);
+ }
+ }
+ }
+ }
+ }
}
}
@@ -1649,11 +2014,12 @@ public class TheMod
if (ToggleCommand.petColoursToggled && event.gui instanceof GuiChest) {
GuiChest inventory = (GuiChest) event.gui;
List<Slot> invSlots = inventory.inventorySlots.inventorySlots;
+ Pattern petPattern = Pattern.compile("\\[Lvl [\\d]{1,3}]");
for (Slot slot : invSlots) {
ItemStack item = slot.getStack();
if (item == null) continue;
String name = item.getDisplayName();
- if (name.contains("[Lvl ")) {
+ if (petPattern.matcher(StringUtils.stripControlCodes(name)).find()) {
if (name.endsWith("aHealer") || name.endsWith("aMage") || name.endsWith("aBerserk") || name.endsWith("aArcher") || name.endsWith("aTank")) continue;
int colour;
int petLevel = Integer.parseInt(item.getDisplayName().substring(item.getDisplayName().indexOf(" ") + 1, item.getDisplayName().indexOf("]")));
@@ -1686,6 +2052,15 @@ public class TheMod
}
}
+ @SubscribeEvent
+ public void onServerConnect(ClientConnectedToServerEvent event) {
+ if (!PacketHandler.added) {
+ event.manager.channel().pipeline().addBefore("packet_handler", "danker_packet_handler", new PacketHandler());
+ PacketHandler.added = true;
+ System.out.println("Added packet handler to channel pipeline.");
+ }
+ }
+
public void increaseSeaCreatures() {
LootCommand lc = new LootCommand();
ConfigHandler cf = new ConfigHandler();
@@ -1700,7 +2075,8 @@ public class TheMod
List<String> scoreboard = ScoreboardHandler.getSidebarLines();
for (String s : scoreboard) {
String sCleaned = ScoreboardHandler.cleanSB(s);
- if (sCleaned.contains("Jerry's Workshop")) {
+ System.out.println(sCleaned);
+ if (sCleaned.contains("Jerry's Workshop") || sCleaned.contains("Jerry Pond")) {
if (lc.yetiSCs != -1) {
lc.yetiSCs++;
}
diff --git a/src/main/java/me/Danker/commands/ArmourCommand.java b/src/main/java/me/Danker/commands/ArmourCommand.java
index 255825c..4fcd282 100644
--- a/src/main/java/me/Danker/commands/ArmourCommand.java
+++ b/src/main/java/me/Danker/commands/ArmourCommand.java
@@ -38,7 +38,7 @@ public class ArmourCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " [name]";
+ return "/" + getCommandName() + " [name]";
}
@Override
diff --git a/src/main/java/me/Danker/commands/BankCommand.java b/src/main/java/me/Danker/commands/BankCommand.java
index 952929f..0d9540c 100644
--- a/src/main/java/me/Danker/commands/BankCommand.java
+++ b/src/main/java/me/Danker/commands/BankCommand.java
@@ -32,7 +32,7 @@ public class BankCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " [name]";
+ return "/" + getCommandName() + " [name]";
}
@Override
diff --git a/src/main/java/me/Danker/commands/BlockSlayerCommand.java b/src/main/java/me/Danker/commands/BlockSlayerCommand.java
new file mode 100644
index 0000000..83a0358
--- /dev/null
+++ b/src/main/java/me/Danker/commands/BlockSlayerCommand.java
@@ -0,0 +1,97 @@
+package me.Danker.commands;
+
+import java.util.List;
+
+import me.Danker.handlers.ConfigHandler;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.CommandException;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+
+public class BlockSlayerCommand extends CommandBase {
+
+ public static String onlySlayerName = "";
+ public static String onlySlayerNumber = "";
+
+ @Override
+ public String getCommandName() {
+ return "onlyslayer";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return "/" + getCommandName() + " <zombie/spider/wolf> <1/2/3/4>";
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
+ if (args.length == 1) {
+ return getListOfStringsMatchingLastWord(args, "zombie", "spider", "wolf");
+ } else if (args.length == 2) {
+ return getListOfStringsMatchingLastWord(args, "1", "2", "3", "4");
+ }
+ return null;
+ }
+
+ @Override
+ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException {
+ final EntityPlayer player = (EntityPlayer)arg0;
+ final ConfigHandler cf = new ConfigHandler();
+
+ if (arg1.length == 0 || (arg1.length == 1 && !arg1[0].equalsIgnoreCase("off"))) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
+ return;
+ }
+
+ if (arg1[0].equalsIgnoreCase("zombie")) {
+ onlySlayerName = "Revenant Horror";
+ } else if (arg1[0].equalsIgnoreCase("spider")) {
+ onlySlayerName = "Tarantula Broodfather";
+ } else if (arg1[0].equalsIgnoreCase("wolf")) {
+ onlySlayerName = "Sven Packmaster";
+ } else if (arg1[0].equalsIgnoreCase("off")) {
+ onlySlayerName = "";
+ onlySlayerNumber = "";
+ cf.writeStringConfig("toggles", "BlockSlayer", "");
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Slayer blocking turned off."));
+ return;
+ } else {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
+ return;
+ }
+
+ int slayerNumber = Integer.parseInt(arg1[1]);
+ // Just manually set to roman numeral, I don't wanna put a whole converter in here
+ switch (slayerNumber) {
+ case 1:
+ onlySlayerNumber = "I";
+ break;
+ case 2:
+ onlySlayerNumber = "II";
+ break;
+ case 3:
+ onlySlayerNumber = "III";
+ break;
+ case 4:
+ onlySlayerNumber = "IV";
+ break;
+ default:
+ onlySlayerName = "";
+ onlySlayerNumber = "";
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
+ return;
+ }
+
+ cf.writeStringConfig("toggles", "BlockSlayer", onlySlayerName + " " + onlySlayerNumber);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Slayer blocking set to " + EnumChatFormatting.DARK_GREEN + onlySlayerName + " " + onlySlayerNumber));
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/DHelpCommand.java b/src/main/java/me/Danker/commands/DHelpCommand.java
index 52db06b..03aa318 100644
--- a/src/main/java/me/Danker/commands/DHelpCommand.java
+++ b/src/main/java/me/Danker/commands/DHelpCommand.java
@@ -17,7 +17,7 @@ public class DHelpCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName();
+ return "/" + getCommandName();
}
@Override
@@ -33,22 +33,26 @@ public class DHelpCommand extends CommandBase {
EnumChatFormatting.AQUA + " <> = Mandatory parameter. [] = Optional parameter.\n" +
EnumChatFormatting.GOLD + " Commands, " + EnumChatFormatting.GREEN + " Keybinds.\n" +
EnumChatFormatting.GOLD + " /dhelp" + EnumChatFormatting.AQUA + " - Returns this message.\n" +
- EnumChatFormatting.GOLD + " /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/sceptremessages/petcolors/dungeontimer/list>" + EnumChatFormatting.AQUA + " - Toggles features. /toggle list returns values of every toggle.\n" +
+ EnumChatFormatting.GOLD + " /dsm" + EnumChatFormatting.AQUA + " - Opens the GUI for Danker's Skyblock Mod.\n" +
+ EnumChatFormatting.GOLD + " /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/lividdagger/sceptremessages/petcolors/dungeontimer/golemalerts/expertiselore/skill50display/outlinetext/list>" + EnumChatFormatting.AQUA + " - Toggles features. /toggle list returns values of every toggle.\n" +
EnumChatFormatting.GOLD + " /setkey <key>" + EnumChatFormatting.AQUA + " - Sets API key.\n" +
EnumChatFormatting.GOLD + " /getkey" + EnumChatFormatting.AQUA + " - Returns key set with /setkey and copies it to your clipboard.\n" +
- EnumChatFormatting.GOLD + " /loot <zombie/spider/wolf/fishing/catacombs> [winter/f(1-4)/session]" + EnumChatFormatting.AQUA + " - Returns loot received from slayer quests or fishing stats. /loot fishing winter returns winter sea creatures instead.\n" +
- EnumChatFormatting.GOLD + " /display <zombie/spider/wolf/fishing/catacombs/off> [winter/f(1-4)/session]" + EnumChatFormatting.AQUA + " - Text display for trackers. /display fishing winter displays winter sea creatures instead.\n" +
+ EnumChatFormatting.GOLD + " /loot <zombie/spider/wolf/fishing/catacombs> [winter/f(1-6)/session]" + EnumChatFormatting.AQUA + " - Returns loot received from slayer quests or fishing stats. /loot fishing winter returns winter sea creatures instead.\n" +
+ EnumChatFormatting.GOLD + " /display <zombie/spider/wolf/fishing/catacombs/auto/off> [winter/f(1-6)/session]" + EnumChatFormatting.AQUA + " - 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.\n" +
EnumChatFormatting.GOLD + " /resetloot <zombie/spider/wolf/fishing/catacombs/confirm/cancel>" + EnumChatFormatting.AQUA + " - Resets loot for trackers. /resetloot confirm confirms the reset.\n" +
- EnumChatFormatting.GOLD + " /move <coords/display/dungeontimer> <x> <y>" + EnumChatFormatting.AQUA + " - Moves text display to specified X and Y coordinates.\n" +
- EnumChatFormatting.GOLD + " /scale <coords/display/dungeontimer> <scale (0.1 - 10)>" + EnumChatFormatting.AQUA + " - Scales text display to a specified multipler between 0.1x and 10x.\n" +
+ EnumChatFormatting.GOLD + " /move <coords/display/dungeontimer/skill50> <x> <y>" + EnumChatFormatting.AQUA + " - Moves text display to specified X and Y coordinates.\n" +
+ EnumChatFormatting.GOLD + " /scale <coords/display/dungeontimer/skill50> <scale (0.1 - 10)>" + EnumChatFormatting.AQUA + " - Scales text display to a specified multipler between 0.1x and 10x.\n" +
EnumChatFormatting.GOLD + " /slayer [player]" + EnumChatFormatting.AQUA + " - Uses API to get slayer xp of a person. If no name is provided, it checks yours.\n" +
EnumChatFormatting.GOLD + " /skills [player]" + EnumChatFormatting.AQUA + " - Uses API to get skill levels of a person. If no name is provided, it checks yours.\n" +
+ EnumChatFormatting.GOLD + " /lobbyskills" + EnumChatFormatting.AQUA + " - Uses API to find the average skills of the lobby, as well the three players with the highest skill average.\n" +
EnumChatFormatting.GOLD + " /guildof [player]" + EnumChatFormatting.AQUA + " - Uses API to get guild name and guild master of a person. If no name is provided, it checks yours.\n" +
EnumChatFormatting.GOLD + " /petsof [player]" + EnumChatFormatting.AQUA + " - Uses API to get pets of a person. If no name is provided, it checks yours.\n" +
EnumChatFormatting.GOLD + " /bank [player]" + EnumChatFormatting.AQUA + " - Uses API to get bank and purse coins of a person. If no name is provided, it checks yours.\n" +
EnumChatFormatting.GOLD + " /armor [player]" + EnumChatFormatting.AQUA + " - Uses API to get armour of a person. If no name is provided, it checks yours.\n" +
+ EnumChatFormatting.GOLD + " /dungeons [player] " + EnumChatFormatting.AQUA + " - Uses API to get dungeon levels of a person. If no name is provided, it checks yours.\n" +
EnumChatFormatting.GOLD + " /importfishing" + EnumChatFormatting.AQUA + " - Imports your fishing stats from your latest profile to your fishing tracker using the API.\n" +
EnumChatFormatting.GOLD + " /sbplayers" + EnumChatFormatting.AQUA + " - Uses API to find how many players are on each Skyblock island.\n" +
+ EnumChatFormatting.GOLD + " /onlyslayer <zombie/spider/wolf> <1/2/3/4>" + EnumChatFormatting.AQUA + " - Stops you from starting a slayer quest other than the one specified.\n" +
EnumChatFormatting.GREEN + " Open Maddox Menu" + EnumChatFormatting.AQUA + " - M by default.\n"));
}
diff --git a/src/main/java/me/Danker/commands/DankerGuiCommand.java b/src/main/java/me/Danker/commands/DankerGuiCommand.java
new file mode 100644
index 0000000..ef39d24
--- /dev/null
+++ b/src/main/java/me/Danker/commands/DankerGuiCommand.java
@@ -0,0 +1,32 @@
+package me.Danker.commands;
+
+import me.Danker.TheMod;
+import me.Danker.gui.DankerGui;
+import net.minecraft.client.Minecraft;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.CommandException;
+import net.minecraft.command.ICommandSender;
+
+public class DankerGuiCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "dsm";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return null;
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException {
+ TheMod.guiToOpen = "dankergui1";
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/DisplayCommand.java b/src/main/java/me/Danker/commands/DisplayCommand.java
index 2f7690d..b96ab2b 100644
--- a/src/main/java/me/Danker/commands/DisplayCommand.java
+++ b/src/main/java/me/Danker/commands/DisplayCommand.java
@@ -13,6 +13,7 @@ import net.minecraft.util.EnumChatFormatting;
public class DisplayCommand extends CommandBase {
public static String display;
+ public static boolean auto;
@Override
public String getCommandName() {
@@ -21,7 +22,7 @@ public class DisplayCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " <zombie/spider/wolf/fishing/catacombs/off> [winter/session/f(1-4)]";
+ return "/" + getCommandName() + " <zombie/spider/wolf/fishing/catacombs/auto/off> [winter/festival/session/f(1-6)]";
}
@Override
@@ -32,11 +33,11 @@ public class DisplayCommand extends CommandBase {
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
- return getListOfStringsMatchingLastWord(args, "wolf", "spider", "zombie", "fishing", "catacombs", "off");
+ return getListOfStringsMatchingLastWord(args, "wolf", "spider", "zombie", "fishing", "catacombs", "auto", "off");
} else if (args.length == 2 && args[0].equalsIgnoreCase("fishing")) {
- return getListOfStringsMatchingLastWord(args, "winter", "session");
+ return getListOfStringsMatchingLastWord(args, "winter", "festival", "session");
} else if (args.length == 2 && args[0].equalsIgnoreCase("catacombs")) {
- return getListOfStringsMatchingLastWord(args, "f1", "floor1", "f2", "floor2", "f3", "floor3", "f4", "floor4");
+ return getListOfStringsMatchingLastWord(args, "f1", "floor1", "f2", "floor2", "f3", "floor3", "f4", "floor4", "f5", "floor5", "f6", "floor6");
} else if (args.length > 1 || (args.length == 3 && args[0].equalsIgnoreCase("fishing") && args[1].equalsIgnoreCase("winter"))) {
return getListOfStringsMatchingLastWord(args, "session");
}
@@ -48,7 +49,7 @@ public class DisplayCommand extends CommandBase {
final EntityPlayer player = (EntityPlayer) arg0;
if (arg1.length == 0) {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: <zombie/spider/wolf/fishing/catacombs/off> [winter/session/f(1-4)]"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
@@ -82,6 +83,12 @@ public class DisplayCommand extends CommandBase {
} else {
display = "fishing_winter";
}
+ } else if (arg1.length > 1 && arg1[1].equalsIgnoreCase("festival")) {
+ if (showSession) {
+ display = "fishing_festival_session";
+ } else {
+ display = "fishing_festival";
+ }
} else {
if (showSession) {
display = "fishing_session";
@@ -118,17 +125,36 @@ public class DisplayCommand extends CommandBase {
} else {
display = "catacombs_floor_four";
}
+ } else if (arg1[1].equalsIgnoreCase("f5") || arg1[1].equalsIgnoreCase("floor5")) {
+ if (showSession) {
+ display = "catacombs_floor_five_session";
+ } else {
+ display = "catacombs_floor_five";
+ }
+ } else if (arg1[1].equalsIgnoreCase("f6") || arg1[1].equalsIgnoreCase("floor6")) {
+ if (showSession) {
+ display = "catacombs_floor_six_session";
+ } else {
+ display = "catacombs_floor_six";
+ }
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /display catacombs <f1/f2/f3/f4>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /display catacombs <f1/f2/f3/f4/f5/f6>"));
return;
}
+ } else if (arg1[0].equalsIgnoreCase("auto")) {
+ auto = true;
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Display set to " + EnumChatFormatting.DARK_GREEN + "auto" + EnumChatFormatting.GREEN + "."));
+ cf.writeBooleanConfig("misc", "autoDisplay", true);
+ return;
} else if (arg1[0].equalsIgnoreCase("off")) {
display = "off";
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: <zombie/spider/wolf/fishing/catacombs/off> [winter/session/f(1-4)]"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
+ auto = false;
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Display set to " + EnumChatFormatting.DARK_GREEN + display + EnumChatFormatting.GREEN + "."));
+ cf.writeBooleanConfig("misc", "autoDisplay", false);
cf.writeStringConfig("misc", "display", display);
}
diff --git a/src/main/java/me/Danker/commands/DungeonsCommand.java b/src/main/java/me/Danker/commands/DungeonsCommand.java
new file mode 100644
index 0000000..251cf3d
--- /dev/null
+++ b/src/main/java/me/Danker/commands/DungeonsCommand.java
@@ -0,0 +1,110 @@
+package me.Danker.commands;
+
+import java.util.List;
+
+import com.google.gson.JsonObject;
+
+import me.Danker.handlers.APIHandler;
+import me.Danker.handlers.ConfigHandler;
+import me.Danker.utils.Utils;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.CommandException;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+
+public class DungeonsCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "dungeons";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return "/" + getCommandName() + " [name]";
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
+ if (args.length == 1) {
+ return Utils.getMatchingPlayers(args[0]);
+ }
+ return null;
+ }
+
+ @Override
+ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException {
+ // MULTI THREAD DRIFTING
+ new Thread(() -> {
+ APIHandler ah = new APIHandler();
+ ConfigHandler cf = new ConfigHandler();
+ EntityPlayer player = (EntityPlayer) arg0;
+
+ // Check key
+ String key = cf.getString("api", "APIKey");
+ if (key.equals("")) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "API key not set. Use /setkey."));
+ }
+
+ // Get UUID for Hypixel API requests
+ String username;
+ String uuid;
+ if (arg1.length == 0) {
+ username = player.getName();
+ uuid = player.getUniqueID().toString().replaceAll("[\\-]", "");
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking dungeon stats of " + EnumChatFormatting.DARK_GREEN + username));
+ } else {
+ username = arg1[0];
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking dungeon stats of " + EnumChatFormatting.DARK_GREEN + username));
+ uuid = ah.getUUID(username);
+ }
+
+ // Find stats of latest profile
+ String latestProfile = ah.getLatestProfileID(uuid, key);
+ if (latestProfile == null) return;
+
+ String profileURL = "https://api.hypixel.net/skyblock/profile?profile=" + latestProfile + "&key=" + key;
+ System.out.println("Fetching profile...");
+ JsonObject profileResponse = ah.getResponse(profileURL);
+ if (!profileResponse.get("success").getAsBoolean()) {
+ String reason = profileResponse.get("cause").getAsString();
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason));
+ return;
+ }
+
+ System.out.println("Fetching dungeon stats...");
+ JsonObject dungeonsObject = profileResponse.get("profile").getAsJsonObject().get("members").getAsJsonObject().get(uuid).getAsJsonObject().get("dungeons").getAsJsonObject();
+ if (!dungeonsObject.get("dungeon_types").getAsJsonObject().get("catacombs").getAsJsonObject().has("experience")) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This player has not played dungeons."));
+ return;
+ }
+
+ double catacombs = Utils.xpToDungeonsLevel(dungeonsObject.get("dungeon_types").getAsJsonObject().get("catacombs").getAsJsonObject().get("experience").getAsDouble());
+ double healer = Utils.xpToDungeonsLevel(dungeonsObject.get("player_classes").getAsJsonObject().get("healer").getAsJsonObject().get("experience").getAsDouble());
+ double mage = Utils.xpToDungeonsLevel(dungeonsObject.get("player_classes").getAsJsonObject().get("mage").getAsJsonObject().get("experience").getAsDouble());
+ double berserk = Utils.xpToDungeonsLevel(dungeonsObject.get("player_classes").getAsJsonObject().get("berserk").getAsJsonObject().get("experience").getAsDouble());
+ double archer = Utils.xpToDungeonsLevel(dungeonsObject.get("player_classes").getAsJsonObject().get("archer").getAsJsonObject().get("experience").getAsDouble());
+ double tank = Utils.xpToDungeonsLevel(dungeonsObject.get("player_classes").getAsJsonObject().get("tank").getAsJsonObject().get("experience").getAsDouble());
+ String selectedClass = Utils.capitalizeString(dungeonsObject.get("selected_dungeon_class").getAsString());
+
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.RED + " Catacombs Level: " + catacombs + "\n" +
+ EnumChatFormatting.GOLD + " Selected Class: " + selectedClass + "\n\n" +
+ EnumChatFormatting.YELLOW + " Healer Level: " + healer + "\n" +
+ EnumChatFormatting.LIGHT_PURPLE + " Mage Level: " + mage + "\n" +
+ EnumChatFormatting.RED + " Berserk Level: " + berserk + "\n" +
+ EnumChatFormatting.GREEN + " Archer Level: " + archer + "\n" +
+ EnumChatFormatting.BLUE + " Tank Level: " + tank + "\n" +
+ EnumChatFormatting.AQUA + " " + EnumChatFormatting.BOLD + "-------------------"));
+ }).start();
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/GetkeyCommand.java b/src/main/java/me/Danker/commands/GetkeyCommand.java
index f06e66f..8a650de 100644
--- a/src/main/java/me/Danker/commands/GetkeyCommand.java
+++ b/src/main/java/me/Danker/commands/GetkeyCommand.java
@@ -22,7 +22,7 @@ public class GetkeyCommand extends CommandBase implements ICommand {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName();
+ return "/" + getCommandName();
}
@Override
diff --git a/src/main/java/me/Danker/commands/GuildOfCommand.java b/src/main/java/me/Danker/commands/GuildOfCommand.java
index 238ba81..be804c1 100644
--- a/src/main/java/me/Danker/commands/GuildOfCommand.java
+++ b/src/main/java/me/Danker/commands/GuildOfCommand.java
@@ -26,7 +26,7 @@ public class GuildOfCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " [name]";
+ return "/" + getCommandName() + " [name]";
}
@Override
@@ -83,12 +83,14 @@ public class GuildOfCommand extends CommandBase {
String guildName = "N/A";
String guildMaster = "N/A";
+ int players = 0;
// Check if player is in guild
if (!guildResponse.get("guild").isJsonNull()) {
guildName = guildResponse.get("guild").getAsJsonObject().get("name").getAsString();
// Loop through members to find guildmaster
JsonArray guildMembers = guildResponse.get("guild").getAsJsonObject().get("members").getAsJsonArray();
+ players = guildMembers.size();
for (JsonElement member : guildMembers) {
JsonObject memberObject = member.getAsJsonObject();
String memberRank = memberObject.get("rank").getAsString();
@@ -109,6 +111,7 @@ public class GuildOfCommand extends CommandBase {
EnumChatFormatting.AQUA + " " + username + "'s Guild:\n" +
EnumChatFormatting.GREEN + " Guild: " + EnumChatFormatting.DARK_GREEN + EnumChatFormatting.BOLD + guildName + "\n" +
EnumChatFormatting.GREEN + " Guildmaster: " + EnumChatFormatting.DARK_GREEN + EnumChatFormatting.BOLD + guildMaster + "\n" +
+ EnumChatFormatting.GREEN + " Members: " + EnumChatFormatting.DARK_GREEN + EnumChatFormatting.BOLD + players + "\n" +
EnumChatFormatting.AQUA + " " + EnumChatFormatting.BOLD + "-------------------"));
}).start();
}
diff --git a/src/main/java/me/Danker/commands/ImportFishingCommand.java b/src/main/java/me/Danker/commands/ImportFishingCommand.java
index bbbcb9f..9376a8d 100644
--- a/src/main/java/me/Danker/commands/ImportFishingCommand.java
+++ b/src/main/java/me/Danker/commands/ImportFishingCommand.java
@@ -20,7 +20,7 @@ public class ImportFishingCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName();
+ return "/" + getCommandName();
}
@Override
@@ -202,6 +202,30 @@ public class ImportFishingCommand extends CommandBase {
}
lc.seaCreatures += lc.yetis;
+ lc.nurseSharks = 0;
+ if (statsObject.has("kills_nurse_shark")) {
+ lc.nurseSharks = statsObject.get("kills_nurse_shark").getAsInt();
+ }
+ lc.seaCreatures += lc.nurseSharks;
+
+ lc.blueSharks = 0;
+ if (statsObject.has("kills_nurse_shark")) {
+ lc.blueSharks = statsObject.get("kills_blue_shark").getAsInt();
+ }
+ lc.seaCreatures += lc.blueSharks;
+
+ lc.tigerSharks = 0;
+ if (statsObject.has("kills_nurse_shark")) {
+ lc.tigerSharks = statsObject.get("kills_tiger_shark").getAsInt();
+ }
+ lc.seaCreatures += lc.tigerSharks;
+
+ lc.greatWhiteSharks = 0;
+ if (statsObject.has("kills_nurse_shark")) {
+ lc.greatWhiteSharks = statsObject.get("kills_great_white_shark").getAsInt();
+ }
+ lc.seaCreatures += lc.greatWhiteSharks;
+
System.out.println("Writing to config...");
cf.writeIntConfig("fishing", "goodCatch", lc.goodCatches);
cf.writeIntConfig("fishing", "greatCatch", lc.greatCatches);
@@ -225,6 +249,10 @@ public class ImportFishingCommand extends CommandBase {
cf.writeIntConfig("fishing", "snowman", lc.frostyTheSnowmans);
cf.writeIntConfig("fishing", "grinch", lc.grinches);
cf.writeIntConfig("fishing", "yeti", lc.yetis);
+ cf.writeIntConfig("fishing", "nurseShark", lc.nurseSharks);
+ cf.writeIntConfig("fishing", "blueShark", lc.blueSharks);
+ cf.writeIntConfig("fishing", "tigerShark", lc.tigerSharks);
+ cf.writeIntConfig("fishing", "greatWhiteShark", lc.greatWhiteSharks);
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Fishing stats imported."));
}).start();
diff --git a/src/main/java/me/Danker/commands/LobbySkillsCommand.java b/src/main/java/me/Danker/commands/LobbySkillsCommand.java
new file mode 100644
index 0000000..9eb01a3
--- /dev/null
+++ b/src/main/java/me/Danker/commands/LobbySkillsCommand.java
@@ -0,0 +1,215 @@
+package me.Danker.commands;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+
+import me.Danker.handlers.APIHandler;
+import me.Danker.handlers.ConfigHandler;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.CommandException;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+
+public class LobbySkillsCommand extends CommandBase {
+
+ Thread mainThread = null;
+
+ @Override
+ public String getCommandName() {
+ return "lobbyskills";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return "/" + getCommandName();
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException {
+ EntityPlayer playerSP = (EntityPlayer) arg0;
+ ConfigHandler cf = new ConfigHandler();
+ APIHandler ah = new APIHandler();
+ boolean someErrored = false;
+ Map<String, Double> unsortedSAList = new HashMap<String, Double>();
+ ArrayList<Double> lobbySkills = new ArrayList<Double>();
+ // Check key
+ String key = cf.getString("api", "APIKey");
+ if (key.equals("")) {
+ playerSP.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "API key not set. Use /setkey."));
+ return;
+ }
+
+ mainThread = new Thread(() -> {
+ try {
+ // Create deep copy of players to prevent passing reference and ConcurrentModificationException
+ Collection<NetworkPlayerInfo> players = new ArrayList<NetworkPlayerInfo>(Minecraft.getMinecraft().getNetHandler().getPlayerInfoMap());
+ playerSP.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking skill average of lobby. Estimated time: " + (int) (players.size() * 1.2 + 1) + " seconds."));
+ // Send request every .6 seconds, leaving room for another 20 requests per minute
+
+ for (final NetworkPlayerInfo player : players) {
+ if (player.getGameProfile().getName().startsWith("!")) continue;
+ // Manually get latest profile to use reduced requests on extra achievement API
+ String UUID = player.getGameProfile().getId().toString().replaceAll("-", "");
+ long biggestLastSave = 0;
+ int profileIndex = -1;
+ Thread.sleep(600);
+ JsonObject profileResponse = ah.getResponse("https://api.hypixel.net/skyblock/profiles?uuid=" + UUID + "&key=" + key);
+ if (!profileResponse.get("success").getAsBoolean()) {
+ String reason = profileResponse.get("cause").getAsString();
+ System.out.println("User " + player.getGameProfile().getName() + " failed with reason: " + reason);
+ continue;
+ }
+ if (profileResponse.get("profiles").isJsonNull()) continue;
+
+ JsonArray profiles = profileResponse.get("profiles").getAsJsonArray();
+ for (int i = 0; i < profiles.size(); i++) {
+ JsonObject profile = profiles.get(i).getAsJsonObject();
+ if (!profile.get("members").getAsJsonObject().get(UUID).getAsJsonObject().has("last_save")) continue;
+ if (profile.get("members").getAsJsonObject().get(UUID).getAsJsonObject().get("last_save").getAsLong() > biggestLastSave) {
+ biggestLastSave = profile.get("members").getAsJsonObject().get(UUID).getAsJsonObject().get("last_save").getAsLong();
+ profileIndex = i;
+ }
+ }
+ if (profileIndex == -1 || biggestLastSave == 0) continue;
+ JsonObject latestProfile = profiles.get(profileIndex).getAsJsonObject().get("members").getAsJsonObject().get(UUID).getAsJsonObject();
+
+ // Get SA
+ double farmingLevel = 0;
+ double miningLevel = 0;
+ double combatLevel = 0;
+ double foragingLevel = 0;
+ double fishingLevel = 0;
+ double enchantingLevel = 0;
+ double alchemyLevel = 0;
+ double tamingLevel = 0;
+
+ if (latestProfile.has("experience_skill_farming") || latestProfile.has("experience_skill_mining") || latestProfile.has("experience_skill_combat") || latestProfile.has("experience_skill_foraging") || latestProfile.has("experience_skill_fishing") || latestProfile.has("experience_skill_enchanting") || latestProfile.has("experience_skill_alchemy")) {
+ if (latestProfile.has("experience_skill_farming")) {
+ farmingLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_farming").getAsDouble());
+ farmingLevel = (double) Math.round(farmingLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_mining")) {
+ miningLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_mining").getAsDouble());
+ miningLevel = (double) Math.round(miningLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_combat")) {
+ combatLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_combat").getAsDouble());
+ combatLevel = (double) Math.round(combatLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_foraging")) {
+ foragingLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_foraging").getAsDouble());
+ foragingLevel = (double) Math.round(foragingLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_fishing")) {
+ fishingLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_fishing").getAsDouble());
+ fishingLevel = (double) Math.round(fishingLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_enchanting")) {
+ enchantingLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_enchanting").getAsDouble());
+ enchantingLevel = (double) Math.round(enchantingLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_alchemy")) {
+ alchemyLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_alchemy").getAsDouble());
+ alchemyLevel = (double) Math.round(alchemyLevel * 100) / 100;
+ }
+ if (latestProfile.has("experience_skill_taming")) {
+ tamingLevel = Utils.xpToSkillLevel(latestProfile.get("experience_skill_taming").getAsDouble());
+ tamingLevel = (double) Math.round(tamingLevel * 100) / 100;
+ }
+ } else {
+ Thread.sleep(600); // Sleep for another request
+ System.out.println("Fetching skills from achievement API");
+ JsonObject playerObject = ah.getResponse("https://api.hypixel.net/player?uuid=" + UUID + "&key=" + key);
+
+ if (!playerObject.get("success").getAsBoolean()) {
+ String reason = profileResponse.get("cause").getAsString();
+ System.out.println("User " + player.getGameProfile().getName() + " failed with reason: " + reason);
+ continue;
+ }
+
+ JsonObject achievementObject = playerObject.get("player").getAsJsonObject().get("achievements").getAsJsonObject();
+ if (achievementObject.has("skyblock_harvester")) {
+ farmingLevel = achievementObject.get("skyblock_harvester").getAsInt();
+ }
+ if (achievementObject.has("skyblock_excavator")) {
+ miningLevel = achievementObject.get("skyblock_excavator").getAsInt();
+ }
+ if (achievementObject.has("skyblock_combat")) {
+ combatLevel = achievementObject.get("skyblock_combat").getAsInt();
+ }
+ if (achievementObject.has("skyblock_gatherer")) {
+ foragingLevel = achievementObject.get("skyblock_gatherer").getAsInt();
+ }
+ if (achievementObject.has("skyblock_angler")) {
+ fishingLevel = achievementObject.get("skyblock_angler").getAsInt();
+ }
+ if (achievementObject.has("skyblock_augmentation")) {
+ enchantingLevel = achievementObject.get("skyblock_augmentation").getAsInt();
+ }
+ if (achievementObject.has("skyblock_concoctor")) {
+ alchemyLevel = achievementObject.get("skyblock_concoctor").getAsInt();
+ }
+ if (achievementObject.has("skyblock_domesticator")) {
+ tamingLevel = achievementObject.get("skyblock_domesticator").getAsInt();
+ }
+ }
+
+ double skillAvg = (farmingLevel + miningLevel + combatLevel + foragingLevel + fishingLevel + enchantingLevel + alchemyLevel + tamingLevel) / 8;
+ skillAvg = (double) Math.round(skillAvg * 100) / 100;
+ unsortedSAList.put(player.getGameProfile().getName(), skillAvg); // Put SA in HashMap
+ lobbySkills.add(skillAvg); // Add SA to lobby skills
+ }
+
+ // I have no idea how this works, or even what :: does but this sorts the skill averages
+ Map<String, Double> sortedSAList = unsortedSAList.entrySet().stream()
+ .sorted(Entry.<String, Double>comparingByValue().reversed())
+ .collect(Collectors.toMap(Entry::getKey, Entry::getValue,
+ (e1, e2) -> e1, LinkedHashMap::new));
+
+ String[] sortedSAListKeys = sortedSAList.keySet().toArray(new String[sortedSAList.keySet().size()]);
+ String top3 = "";
+ for (int i = 0; i < 3 && i < sortedSAListKeys.length; i++) {
+ top3 += "\n " + EnumChatFormatting.AQUA + sortedSAListKeys[i] + ": " + EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + sortedSAList.get(sortedSAListKeys[i]);
+ }
+
+ // Get lobby sa
+ double lobbySA = 0;
+ for (int i = 0; i < lobbySkills.size(); i++) {
+ lobbySA += lobbySkills.get(i);
+ }
+ lobbySA = (double) Math.round((lobbySA / lobbySkills.size()) * 100) / 100;
+
+ // Finally say skill lobby avg and highest SA users
+ playerSP.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.GREEN + " Lobby Skill Average: " + EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + lobbySA + "\n" +
+ EnumChatFormatting.GREEN + " Highest Skill Averages:" + top3 + "\n" +
+ EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + " -------------------"));
+ } catch (InterruptedException ex) {
+ System.out.println("Current skill average list: " + unsortedSAList.toString());
+ Thread.currentThread().interrupt();
+ System.out.println("Interrupted /lobbyskills thread.");
+ }
+
+ });
+ mainThread.start();
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/LootCommand.java b/src/main/java/me/Danker/commands/LootCommand.java
index a877a8d..bbe4f73 100644
--- a/src/main/java/me/Danker/commands/LootCommand.java
+++ b/src/main/java/me/Danker/commands/LootCommand.java
@@ -83,6 +83,11 @@ public class LootCommand extends CommandBase {
public static int yetis;
public static double yetiTime;
public static int yetiSCs;
+ // Fishing Festival
+ public static int nurseSharks;
+ public static int blueSharks;
+ public static int tigerSharks;
+ public static int greatWhiteSharks;
// Catacombs Dungeons
public static int recombobulators;
@@ -113,6 +118,27 @@ public class LootCommand extends CommandBase {
public static int legSpiritPets;
public static double f4CoinsSpent;
public static double f4TimeSpent;
+ // F5
+ public static int warpedStones;
+ public static int shadowAssHelms;
+ public static int shadowAssChests;
+ public static int shadowAssLegs;
+ public static int shadowAssBoots;
+ public static int lividDaggers;
+ public static int shadowFurys;
+ public static double f5CoinsSpent;
+ public static double f5TimeSpent;
+ // F6
+ public static int ancientRoses;
+ public static int precursorEyes;
+ public static int giantsSwords;
+ public static int necroLordHelms;
+ public static int necroLordChests;
+ public static int necroLordLegs;
+ public static int necroLordBoots;
+ public static int necroSwords;
+ public static double f6CoinsSpent;
+ public static double f6TimeSpent;
// Single sessions (No config saves)
// Wolf
@@ -182,8 +208,13 @@ public class LootCommand extends CommandBase {
public static int frostyTheSnowmansSession = 0;
public static int grinchesSession = 0;
public static int yetisSession = 0;
- public static double yetiTimeSession = 0;
- public static int yetiSCsSession = 0;
+ public static double yetiTimeSession = -1;
+ public static int yetiSCsSession = -1;
+ // Fishing Festival
+ public static int nurseSharksSession = 0;
+ public static int blueSharksSession = 0;
+ public static int tigerSharksSession = 0;
+ public static int greatWhiteSharksSession = 0;
// Catacombs Dungeons
public static int recombobulatorsSession = 0;
@@ -214,6 +245,27 @@ public class LootCommand extends CommandBase {
public static int legSpiritPetsSession = 0;
public static double f4CoinsSpentSession = 0;
public static double f4TimeSpentSession = 0;
+ // F5
+ public static int warpedStonesSession = 0;
+ public static int shadowAssHelmsSession = 0;
+ public static int shadowAssChestsSession = 0;
+ public static int shadowAssLegsSession = 0;
+ public static int shadowAssBootsSession = 0;
+ public static int lividDaggersSession = 0;
+ public static int shadowFurysSession = 0;
+ public static double f5CoinsSpentSession = 0;
+ public static double f5TimeSpentSession = 0;
+ // F6
+ public static int ancientRosesSession = 0;
+ public static int precursorEyesSession = 0;
+ public static int giantsSwordsSession = 0;
+ public static int necroLordHelmsSession = 0;
+ public static int necroLordChestsSession = 0;
+ public static int necroLordLegsSession = 0;
+ public static int necroLordBootsSession = 0;
+ public static int necroSwordsSession = 0;
+ public static double f6CoinsSpentSession = 0;
+ public static double f6TimeSpentSession = 0;
@Override
public String getCommandName() {
@@ -222,7 +274,7 @@ public class LootCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " <zombie/spider/wolf/fishing/catacombs> [winter/f(1-4)/session]";
+ return "/" + getCommandName() + " <zombie/spider/wolf/fishing/catacombs> [winter/festival/f(1-6)/session]";
}
@Override
@@ -235,9 +287,9 @@ public class LootCommand extends CommandBase {
if (args.length == 1) {
return getListOfStringsMatchingLastWord(args, "wolf", "spider", "zombie", "fishing", "catacombs");
} else if (args.length == 2 && args[0].equalsIgnoreCase("fishing")) {
- return getListOfStringsMatchingLastWord(args, "winter", "session");
+ return getListOfStringsMatchingLastWord(args, "winter", "festival", "session");
} else if (args.length == 2 && args[0].equalsIgnoreCase("catacombs")) {
- return getListOfStringsMatchingLastWord(args, "f1", "floor1", "f2", "floor2", "f3", "floor3", "f4", "floor4");
+ return getListOfStringsMatchingLastWord(args, "f1", "floor1", "f2", "floor2", "f3", "floor3", "f4", "floor4", "f5", "floor5", "f6", "floor6");
} else if (args.length > 1 || (args.length == 3 && args[0].equalsIgnoreCase("fishing") && args[1].equalsIgnoreCase("winter"))) {
return getListOfStringsMatchingLastWord(args, "session");
}
@@ -249,7 +301,7 @@ public class LootCommand extends CommandBase {
final EntityPlayer player = (EntityPlayer) arg0;
if (arg1.length == 0) {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /loot <zombie/spider/wolf/fishing/catacombs> [winter/f(1-4)/session]"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
@@ -507,6 +559,25 @@ public class LootCommand extends CommandBase {
EnumChatFormatting.AQUA + " Creatures Since Yeti: " + bossesBetween + "\n" +
EnumChatFormatting.AQUA + EnumChatFormatting.BOLD + " -------------------"));
return;
+ } else if (arg1[1].equalsIgnoreCase("festival")) {
+ if (showSession) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.DARK_BLUE + EnumChatFormatting.BOLD + " Fishing Festival Summary (Current Session):\n" +
+ EnumChatFormatting.LIGHT_PURPLE + " Nurse Sharks: " + nf.format(nurseSharksSession) + "\n" +
+ EnumChatFormatting.BLUE + " Blue Sharks: " + nf.format(blueSharksSession) + "\n" +
+ EnumChatFormatting.GOLD + " Tiger Sharks: " + nf.format(tigerSharksSession) + "\n" +
+ EnumChatFormatting.WHITE + " Great White Sharks: " + nf.format(greatWhiteSharksSession) + "\n" +
+ EnumChatFormatting.AQUA + EnumChatFormatting.BOLD + " -------------------"));
+ return;
+ }
+
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.DARK_BLUE + EnumChatFormatting.BOLD + " Fishing Festival Summary:\n" +
+ EnumChatFormatting.LIGHT_PURPLE + " Nurse Sharks: " + nf.format(nurseSharks) + "\n" +
+ EnumChatFormatting.BLUE + " Blue Sharks: " + nf.format(blueSharks) + "\n" +
+ EnumChatFormatting.GOLD + " Tiger Sharks: " + nf.format(tigerSharks) + "\n" +
+ EnumChatFormatting.WHITE + " Great White Sharks: " + nf.format(greatWhiteSharks) + "\n" +
+ EnumChatFormatting.AQUA + EnumChatFormatting.BOLD + " -------------------"));
}
}
@@ -685,11 +756,77 @@ public class LootCommand extends CommandBase {
EnumChatFormatting.AQUA + " Coins Spent: " + Utils.getMoneySpent(f4CoinsSpent) + "\n" +
EnumChatFormatting.AQUA + " Time Spent: " + Utils.getTimeBetween(0, f4TimeSpent) + "\n" +
EnumChatFormatting.DARK_RED + EnumChatFormatting.BOLD + " -------------------"));
+ } else if (arg1[1].equalsIgnoreCase("f5") || arg1[1].equalsIgnoreCase("floor5")) {
+ if (showSession) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_RED + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.RED + EnumChatFormatting.BOLD + " Catacombs F5 Summary (Current Session):\n" +
+ EnumChatFormatting.GOLD + " Recombobulator 3000s: " + nf.format(recombobulatorsSession) + "\n" +
+ EnumChatFormatting.BLUE + " Warped Stones: " + nf.format(warpedStonesSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Fuming Potato Books: " + nf.format(fumingPotatoBooksSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Helmets: " + nf.format(shadowAssHelmsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Chests: " + nf.format(shadowAssChestsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Legs: " + nf.format(shadowAssLegsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Boots: " + nf.format(shadowAssBootsSession) + "\n" +
+ EnumChatFormatting.GOLD + " Livid Daggers: " + nf.format(lividDaggersSession) + "\n" +
+ EnumChatFormatting.GOLD + " Shadow Furys: " + nf.format(shadowFurysSession) + "\n" +
+ EnumChatFormatting.AQUA + " Coins Spent: " + Utils.getMoneySpent(f5CoinsSpentSession) + "\n" +
+ EnumChatFormatting.AQUA + " Time Spent: " + Utils.getTimeBetween(0, f5TimeSpentSession) + "\n" +
+ EnumChatFormatting.DARK_RED + EnumChatFormatting.BOLD + " -------------------"));
+ return;
+ }
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_RED + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.RED + EnumChatFormatting.BOLD + " Catacombs F5 Summary:\n" +
+ EnumChatFormatting.GOLD + " Recombobulator 3000s: " + nf.format(recombobulators) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Fuming Potato Books: " + nf.format(fumingPotatoBooks) + "\n" +
+ EnumChatFormatting.BLUE + " Warped Stones: " + nf.format(warpedStones) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Helmets: " + nf.format(shadowAssHelms) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Chests: " + nf.format(shadowAssChests) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Legs: " + nf.format(shadowAssLegs) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Shadow Assassin Boots: " + nf.format(shadowAssBoots) + "\n" +
+ EnumChatFormatting.GOLD + " Livid Daggers: " + nf.format(lividDaggers) + "\n" +
+ EnumChatFormatting.GOLD + " Shadow Furys: " + nf.format(shadowFurys) + "\n" +
+ EnumChatFormatting.AQUA + " Coins Spent: " + Utils.getMoneySpent(f5CoinsSpent) + "\n" +
+ EnumChatFormatting.AQUA + " Time Spent: " + Utils.getTimeBetween(0, f5TimeSpent) + "\n" +
+ EnumChatFormatting.DARK_RED + EnumChatFormatting.BOLD + " -------------------"));
+ } else if (arg1[1].equalsIgnoreCase("f6") || arg1[1].equalsIgnoreCase("floor6")) {
+ if (showSession) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_RED + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.RED + EnumChatFormatting.BOLD + " Catacombs F6 Summary (Current Session):\n" +
+ EnumChatFormatting.GOLD + " Recombobulator 3000s: " + nf.format(recombobulatorsSession) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Fuming Potato Books: " + nf.format(fumingPotatoBooksSession) + "\n" +
+ EnumChatFormatting.BLUE + " Ancient Roses: " + nf.format(ancientRosesSession) + "\n" +
+ EnumChatFormatting.GOLD + " Precursor Eyes: " + nf.format(precursorEyesSession) + "\n" +
+ EnumChatFormatting.GOLD + " Giant's Swords: " + nf.format(giantsSwordsSession) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Helmets: " + nf.format(necroLordHelmsSession) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Chestplates: " + nf.format(necroLordChestsSession) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Leggings: " + nf.format(necroLordLegsSession) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Boots: " + nf.format(necroLordBootsSession) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Swords: " + nf.format(necroSwordsSession) + "\n" +
+ EnumChatFormatting.AQUA + " Coins Spent: " + Utils.getMoneySpent(f6CoinsSpentSession) + "\n" +
+ EnumChatFormatting.AQUA + " Time Spent: " + Utils.getTimeBetween(0, f6TimeSpentSession) + "\n" +
+ EnumChatFormatting.DARK_RED + EnumChatFormatting.BOLD + " -------------------"));
+ return;
+ }
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_RED + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.RED + EnumChatFormatting.BOLD + " Catacombs F6 Summary:\n" +
+ EnumChatFormatting.GOLD + " Recombobulator 3000s: " + nf.format(recombobulators) + "\n" +
+ EnumChatFormatting.DARK_PURPLE + " Fuming Potato Books: " + nf.format(fumingPotatoBooks) + "\n" +
+ EnumChatFormatting.BLUE + " Ancient Roses: " + nf.format(ancientRoses) + "\n" +
+ EnumChatFormatting.GOLD + " Precursor Eyes: " + nf.format(precursorEyes) + "\n" +
+ EnumChatFormatting.GOLD + " Giant's Swords: " + nf.format(giantsSwords) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Helmets: " + nf.format(necroLordHelms) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Chestplates: " + nf.format(necroLordChests) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Leggings: " + nf.format(necroLordLegs) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Lord Boots: " + nf.format(necroLordBoots) + "\n" +
+ EnumChatFormatting.GOLD + " Necro Swords: " + nf.format(necroSwords) + "\n" +
+ EnumChatFormatting.AQUA + " Coins Spent: " + Utils.getMoneySpent(f6CoinsSpent) + "\n" +
+ EnumChatFormatting.AQUA + " Time Spent: " + Utils.getTimeBetween(0, f6TimeSpent) + "\n" +
+ EnumChatFormatting.DARK_RED + EnumChatFormatting.BOLD + " -------------------"));
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /loot catacombs <f1/f2/f3/f4>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /loot catacombs <f1/f2/f3/f4/f5/f6>"));
}
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /loot <zombie/spider/wolf/fishing/catacombs> [winter/f(1-4)/session]"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
}
}
diff --git a/src/main/java/me/Danker/commands/MoveCommand.java b/src/main/java/me/Danker/commands/MoveCommand.java
index 24396ff..7fb9acd 100644
--- a/src/main/java/me/Danker/commands/MoveCommand.java
+++ b/src/main/java/me/Danker/commands/MoveCommand.java
@@ -16,6 +16,7 @@ public class MoveCommand extends CommandBase {
public static int[] coordsXY = {0, 0};
public static int[] displayXY = {0, 0};
public static int[] dungeonTimerXY = {0, 0};
+ public static int[] skill50XY = {0, 0};
@Override
public String getCommandName() {
@@ -24,7 +25,7 @@ public class MoveCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " <coords/display/dungeontimer> <x> <y>";
+ return "/" + getCommandName() + " <coords/display/dungeontimer/skill50> <x> <y>";
}
@Override
@@ -35,7 +36,7 @@ public class MoveCommand extends CommandBase {
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
- return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer");
+ return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer", "skill50");
}
return null;
}
@@ -46,7 +47,7 @@ public class MoveCommand extends CommandBase {
final ConfigHandler cf = new ConfigHandler();
if (arg1.length < 2) {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /move <coords/display/dungeontimer> <x> <y>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
@@ -68,8 +69,14 @@ public class MoveCommand extends CommandBase {
cf.writeIntConfig("locations", "dungeonTimerX", dungeonTimerXY[0]);
cf.writeIntConfig("locations", "dungeonTimerY", dungeonTimerXY[1]);
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Dungeon timer has been moved to " + EnumChatFormatting.DARK_GREEN + arg1[1] + ", " + arg1[2]));
+ } else if (arg1[0].equalsIgnoreCase("skill50")) {
+ skill50XY[0] = Integer.parseInt(arg1[1]);
+ skill50XY[1] = Integer.parseInt(arg1[2]);
+ cf.writeIntConfig("locations", "skill50X", skill50XY[0]);
+ cf.writeIntConfig("locations", "skill50Y", skill50XY[1]);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Skill 50 display has been moved to " + EnumChatFormatting.DARK_GREEN + arg1[1] + ", " + arg1[2]));
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /move <coords/display/dungeontimer> <x> <y>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
}
}
diff --git a/src/main/java/me/Danker/commands/PetsCommand.java b/src/main/java/me/Danker/commands/PetsCommand.java
index c697689..d6d4122 100644
--- a/src/main/java/me/Danker/commands/PetsCommand.java
+++ b/src/main/java/me/Danker/commands/PetsCommand.java
@@ -58,7 +58,7 @@ public class PetsCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " [name]";
+ return "/" + getCommandName() + " [name]";
}
@Override
@@ -159,8 +159,9 @@ public class PetsCommand extends CommandBase {
}
}
+ int totalPets = commonPets.size() + uncommonPets.size() + rarePets.size() + epicPets.size() + legendaryPets.size();
String finalMessage = EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
- EnumChatFormatting.AQUA + " " + username + "'s Pets:\n";
+ EnumChatFormatting.AQUA + " " + username + "'s Pets (" + totalPets + "):\n";
// Loop through pet rarities
for (JsonObject legPet : legendaryPets) {
diff --git a/src/main/java/me/Danker/commands/ReloadConfigCommand.java b/src/main/java/me/Danker/commands/ReloadConfigCommand.java
index 122f1c1..75ee215 100644
--- a/src/main/java/me/Danker/commands/ReloadConfigCommand.java
+++ b/src/main/java/me/Danker/commands/ReloadConfigCommand.java
@@ -17,7 +17,7 @@ public class ReloadConfigCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName();
+ return "/" + getCommandName();
}
@Override
diff --git a/src/main/java/me/Danker/commands/ResetLootCommand.java b/src/main/java/me/Danker/commands/ResetLootCommand.java
index dd540d6..bf5b218 100644
--- a/src/main/java/me/Danker/commands/ResetLootCommand.java
+++ b/src/main/java/me/Danker/commands/ResetLootCommand.java
@@ -23,7 +23,7 @@ public class ResetLootCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + "<zombie/spider/wolf/fishing/catacombs/confirm/cancel>";
+ return "/" + getCommandName() + "<zombie/spider/wolf/fishing/catacombs/confirm/cancel>";
}
@Override
@@ -178,6 +178,10 @@ public class ResetLootCommand extends CommandBase {
lc.yetisSession = 0;
lc.yetiTimeSession = -1;
lc.yetiSCsSession = -1;
+ lc.nurseSharksSession = 0;
+ lc.blueSharksSession = 0;
+ lc.tigerSharksSession = 0;
+ lc.greatWhiteSharksSession = 0;
cf.deleteCategory("fishing");
cf.reloadConfig();
}
@@ -207,6 +211,14 @@ public class ResetLootCommand extends CommandBase {
lc.epicSpiritPetsSession = 0;
lc.f4CoinsSpentSession = 0;
lc.f4TimeSpentSession = 0;
+ lc.warpedStonesSession = 0;
+ lc.shadowAssHelmsSession = 0;
+ lc.shadowAssChestsSession = 0;
+ lc.shadowAssLegsSession = 0;
+ lc.shadowAssBootsSession = 0;
+ lc.lividDaggersSession = 0;
+ lc.f5CoinsSpentSession = 0;
+ lc.f5TimeSpentSession = 0;
cf.deleteCategory("catacombs");
cf.reloadConfig();
}
diff --git a/src/main/java/me/Danker/commands/ScaleCommand.java b/src/main/java/me/Danker/commands/ScaleCommand.java
index 7b56b6d..5f21b77 100644
--- a/src/main/java/me/Danker/commands/ScaleCommand.java
+++ b/src/main/java/me/Danker/commands/ScaleCommand.java
@@ -16,6 +16,7 @@ public class ScaleCommand extends CommandBase {
public static double coordsScale;
public static double displayScale;
public static double dungeonTimerScale;
+ public static double skill50Scale;
@Override
public String getCommandName() {
@@ -24,7 +25,7 @@ public class ScaleCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " <coords/display/dungeontimer> <size (0.1 - 10)>";
+ return "/" + getCommandName() + " <coords/display/dungeontimer/skill50> <size (0.1 - 10)>";
}
@Override
@@ -35,7 +36,7 @@ public class ScaleCommand extends CommandBase {
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
- return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer");
+ return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer", "skill50");
}
return null;
}
@@ -45,7 +46,7 @@ public class ScaleCommand extends CommandBase {
final EntityPlayer player = (EntityPlayer) arg0;
if (arg1.length < 2) {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /scale <coords/display/dungeontimer> <size (0.1 - 10)>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
@@ -67,8 +68,12 @@ public class ScaleCommand extends CommandBase {
dungeonTimerScale = scaleAmount;
ConfigHandler.writeDoubleConfig("scales", "dungeonTimerScale", dungeonTimerScale);
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Dungeon timer has been scaled to " + EnumChatFormatting.DARK_GREEN + dungeonTimerScale + "x"));
+ } else if (arg1[0].equalsIgnoreCase("skill50")) {
+ skill50Scale = scaleAmount;
+ ConfigHandler.writeDoubleConfig("scales", "skill50Scale", skill50Scale);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Skill 50 display has been scaled to " + EnumChatFormatting.DARK_GREEN + skill50Scale + "x"));
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /scale <coords/display/dungeontimer> <size (0.1 - 10)>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
}
}
diff --git a/src/main/java/me/Danker/commands/SetkeyCommand.java b/src/main/java/me/Danker/commands/SetkeyCommand.java
index f68ff75..9fc5228 100644
--- a/src/main/java/me/Danker/commands/SetkeyCommand.java
+++ b/src/main/java/me/Danker/commands/SetkeyCommand.java
@@ -18,7 +18,7 @@ public class SetkeyCommand extends CommandBase implements ICommand {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " <key>";
+ return "/" + getCommandName() + " <key>";
}
@Override
@@ -31,7 +31,7 @@ public class SetkeyCommand extends CommandBase implements ICommand {
final EntityPlayer player = (EntityPlayer)arg0;
if (arg1.length == 0) {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /setkey <key>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
diff --git a/src/main/java/me/Danker/commands/SkillsCommand.java b/src/main/java/me/Danker/commands/SkillsCommand.java
index 8128c90..50f2767 100644
--- a/src/main/java/me/Danker/commands/SkillsCommand.java
+++ b/src/main/java/me/Danker/commands/SkillsCommand.java
@@ -24,7 +24,7 @@ public class SkillsCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " [name]";
+ return "/" + getCommandName() + " [name]";
}
@Override
@@ -139,14 +139,30 @@ public class SkillsCommand extends CommandBase {
}
JsonObject achievementObject = playerObject.get("player").getAsJsonObject().get("achievements").getAsJsonObject();
- farmingLevel = achievementObject.get("skyblock_harvester").getAsInt();
- miningLevel = achievementObject.get("skyblock_excavator").getAsInt();
- combatLevel = achievementObject.get("skyblock_combat").getAsInt();
- foragingLevel = achievementObject.get("skyblock_gatherer").getAsInt();
- fishingLevel = achievementObject.get("skyblock_angler").getAsInt();
- enchantingLevel = achievementObject.get("skyblock_augmentation").getAsInt();
- alchemyLevel = achievementObject.get("skyblock_concoctor").getAsInt();
- tamingLevel = achievementObject.get("skyblock_domesticator").getAsInt();
+ if (achievementObject.has("skyblock_harvester")) {
+ farmingLevel = achievementObject.get("skyblock_harvester").getAsInt();
+ }
+ if (achievementObject.has("skyblock_excavator")) {
+ miningLevel = achievementObject.get("skyblock_excavator").getAsInt();
+ }
+ if (achievementObject.has("skyblock_combat")) {
+ combatLevel = achievementObject.get("skyblock_combat").getAsInt();
+ }
+ if (achievementObject.has("skyblock_gatherer")) {
+ foragingLevel = achievementObject.get("skyblock_gatherer").getAsInt();
+ }
+ if (achievementObject.has("skyblock_angler")) {
+ fishingLevel = achievementObject.get("skyblock_angler").getAsInt();
+ }
+ if (achievementObject.has("skyblock_augmentation")) {
+ enchantingLevel = achievementObject.get("skyblock_augmentation").getAsInt();
+ }
+ if (achievementObject.has("skyblock_concoctor")) {
+ alchemyLevel = achievementObject.get("skyblock_concoctor").getAsInt();
+ }
+ if (achievementObject.has("skyblock_domesticator")) {
+ tamingLevel = achievementObject.get("skyblock_domesticator").getAsInt();
+ }
}
double skillAvg = (farmingLevel + miningLevel + combatLevel + foragingLevel + fishingLevel + enchantingLevel + alchemyLevel + tamingLevel) / 8;
diff --git a/src/main/java/me/Danker/commands/SkyblockPlayersCommand.java b/src/main/java/me/Danker/commands/SkyblockPlayersCommand.java
index ee3c522..1c70bc2 100644
--- a/src/main/java/me/Danker/commands/SkyblockPlayersCommand.java
+++ b/src/main/java/me/Danker/commands/SkyblockPlayersCommand.java
@@ -31,7 +31,7 @@ public class SkyblockPlayersCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return null;
+ return "/" + getCommandName();
}
@Override
diff --git a/src/main/java/me/Danker/commands/SlayerCommand.java b/src/main/java/me/Danker/commands/SlayerCommand.java
index 0aba569..58ded5e 100644
--- a/src/main/java/me/Danker/commands/SlayerCommand.java
+++ b/src/main/java/me/Danker/commands/SlayerCommand.java
@@ -26,7 +26,7 @@ public class SlayerCommand extends CommandBase {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " [name]";
+ return "/" + getCommandName() + " [name]";
}
@Override
diff --git a/src/main/java/me/Danker/commands/ToggleCommand.java b/src/main/java/me/Danker/commands/ToggleCommand.java
index b1e5270..2835db6 100644
--- a/src/main/java/me/Danker/commands/ToggleCommand.java
+++ b/src/main/java/me/Danker/commands/ToggleCommand.java
@@ -22,9 +22,14 @@ public class ToggleCommand extends CommandBase implements ICommand {
public static boolean chatMaddoxToggled;
public static boolean spiritBearAlerts;
public static boolean aotdToggled;
+ public static boolean lividDaggerToggled;
public static boolean sceptreMessages;
public static boolean petColoursToggled;
public static boolean dungeonTimerToggled;
+ public static boolean golemAlertToggled;
+ public static boolean expertiseLoreToggled;
+ public static boolean skill50DisplayToggled;
+ public static boolean outlineTextToggled;
@Override
public String getCommandName() {
@@ -33,7 +38,7 @@ public class ToggleCommand extends CommandBase implements ICommand {
@Override
public String getCommandUsage(ICommandSender arg0) {
- return getCommandName() + " <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalert/aotd/sceptremessages/petcolors/dungeontimer/list>";
+ return "/" + getCommandName() + " <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalert/aotd/lividdagger/sceptremessages/petcolors/dungeontimer/golemalerts/expertiselore/skill50display/outlinetext/list>";
}
@Override
@@ -44,7 +49,7 @@ public class ToggleCommand extends CommandBase implements ICommand {
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
- return getListOfStringsMatchingLastWord(args, "gparty", "coords", "golden", "slayercount", "rngesusalerts", "splitfishing", "chatmaddox", "spiritbearalerts", "aotd", "sceptremessages", "petcolors", "dungeontimer", "list");
+ return getListOfStringsMatchingLastWord(args, "gparty", "coords", "golden", "slayercount", "rngesusalerts", "splitfishing", "chatmaddox", "spiritbearalerts", "aotd", "lividdagger", "sceptremessages", "petcolors", "dungeontimer", "golemalerts", "expertiselore", "skill50display", "outlinetext", "list");
}
return null;
}
@@ -55,7 +60,7 @@ public class ToggleCommand extends CommandBase implements ICommand {
final ConfigHandler cf = new ConfigHandler();
if (arg1.length == 0) {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/sceptremessages/petcolors/dungeontimer/list>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
return;
}
@@ -95,6 +100,10 @@ public class ToggleCommand extends CommandBase implements ICommand {
aotdToggled = !aotdToggled;
cf.writeBooleanConfig("toggles", "AOTD", aotdToggled);
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Block AOTD ability been set to " + EnumChatFormatting.DARK_GREEN + aotdToggled + EnumChatFormatting.GREEN + "."));
+ } else if (arg1[0].equalsIgnoreCase("lividdagger")) {
+ lividDaggerToggled = !lividDaggerToggled;
+ cf.writeBooleanConfig("toggles", "LividDagger", lividDaggerToggled);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Block Livid Dagger ability been set to " + EnumChatFormatting.DARK_GREEN + lividDaggerToggled + EnumChatFormatting.GREEN + "."));
} else if (arg1[0].equalsIgnoreCase("sceptremessages")) {
sceptreMessages = !sceptreMessages;
cf.writeBooleanConfig("toggles", "SceptreMessages", sceptreMessages);
@@ -107,6 +116,22 @@ public class ToggleCommand extends CommandBase implements ICommand {
dungeonTimerToggled = !dungeonTimerToggled;
cf.writeBooleanConfig("toggles", "DungeonTimer", dungeonTimerToggled);
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Dungeon timer has been set to " + EnumChatFormatting.DARK_GREEN + dungeonTimerToggled + EnumChatFormatting.GREEN + "."));
+ } else if (arg1[0].equalsIgnoreCase("golemalerts")) {
+ golemAlertToggled = !golemAlertToggled;
+ cf.writeBooleanConfig("toggles", "GolemAlerts", golemAlertToggled);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Golem spawn alerts has been set to " + EnumChatFormatting.DARK_GREEN + golemAlertToggled + EnumChatFormatting.GREEN + "."));
+ } else if (arg1[0].equalsIgnoreCase("expertiselore")) {
+ expertiseLoreToggled = !expertiseLoreToggled;
+ cf.writeBooleanConfig("toggles", "ExpertiseLore", expertiseLoreToggled);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Expertise in lore has been set to " + EnumChatFormatting.DARK_GREEN + expertiseLoreToggled + EnumChatFormatting.GREEN + "."));
+ } else if (arg1[0].equalsIgnoreCase("skill50display")) {
+ skill50DisplayToggled = !skill50DisplayToggled;
+ cf.writeBooleanConfig("toggles", "Skill50Display", skill50DisplayToggled);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Skill 50 display has been set to " + EnumChatFormatting.DARK_GREEN + skill50DisplayToggled + EnumChatFormatting.GREEN + "."));
+ } else if (arg1[0].equalsIgnoreCase("outlinetext")) {
+ outlineTextToggled = !outlineTextToggled;
+ cf.writeBooleanConfig("toggles", "OutlineText", outlineTextToggled);
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Outline displayed text has been set to " + EnumChatFormatting.DARK_GREEN + outlineTextToggled + EnumChatFormatting.GREEN + "."));
} else if (arg1[0].equalsIgnoreCase("list")) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Guild party notifications: " + EnumChatFormatting.DARK_GREEN + gpartyToggled + "\n" +
EnumChatFormatting.GREEN + " Coord/Angle display: " + EnumChatFormatting.DARK_GREEN + coordsToggled + "\n" +
@@ -117,11 +142,16 @@ public class ToggleCommand extends CommandBase implements ICommand {
EnumChatFormatting.GREEN + " Chat Maddox menu: " + EnumChatFormatting.DARK_GREEN + chatMaddoxToggled + "\n" +
EnumChatFormatting.GREEN + " Spirit Bear alerts: " + EnumChatFormatting.DARK_GREEN + spiritBearAlerts + "\n" +
EnumChatFormatting.GREEN + " Block AOTD ability: " + EnumChatFormatting.DARK_GREEN + aotdToggled + "\n" +
+ EnumChatFormatting.GREEN + " Block Livid Dagger ability: " + EnumChatFormatting.DARK_GREEN + lividDaggerToggled + "\n" +
EnumChatFormatting.GREEN + " Spirit Sceptre messages: " + EnumChatFormatting.DARK_GREEN + sceptreMessages + "\n" +
EnumChatFormatting.GREEN + " Pet colours: " + EnumChatFormatting.DARK_GREEN + petColoursToggled + "\n" +
- EnumChatFormatting.GREEN + " Dungeon timer: " + EnumChatFormatting.DARK_GREEN + dungeonTimerToggled));
+ EnumChatFormatting.GREEN + " Dungeon timer: " + EnumChatFormatting.DARK_GREEN + dungeonTimerToggled + "\n" +
+ EnumChatFormatting.GREEN + " Golem spawn alerts: " + EnumChatFormatting.DARK_GREEN + golemAlertToggled + "\n" +
+ EnumChatFormatting.GREEN + " Expertise in lore: " + EnumChatFormatting.DARK_GREEN + expertiseLoreToggled + "\n" +
+ EnumChatFormatting.GREEN + " Skill 50 display: " + EnumChatFormatting.DARK_GREEN + skill50DisplayToggled + "\n" +
+ EnumChatFormatting.GREEN + " Outline displayed text: " + EnumChatFormatting.DARK_GREEN + outlineTextToggled));
} else {
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /toggle <gparty/coords/golden/slayercount/rngesusalerts/splitfishing/chatmaddox/spiritbearalerts/aotd/sceptremessages/petcolors/dungeontimer/list>"));
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: " + getCommandUsage(arg0)));
}
}
}
diff --git a/src/main/java/me/Danker/gui/DankerGui.java b/src/main/java/me/Danker/gui/DankerGui.java
new file mode 100644
index 0000000..0ee10b9
--- /dev/null
+++ b/src/main/java/me/Danker/gui/DankerGui.java
@@ -0,0 +1,206 @@
+package me.Danker.gui;
+
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import me.Danker.TheMod;
+import me.Danker.commands.ToggleCommand;
+import me.Danker.handlers.ConfigHandler;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiConfirmOpenLink;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+
+public class DankerGui extends GuiScreen {
+
+ private int page;
+
+ private GuiButton closeGUI;
+ private GuiButton backPage;
+ private GuiButton nextPage;
+ private GuiButton githubLink;
+ private GuiButton discordLink;
+ private GuiButton changeDisplay;
+ private GuiButton onlySlayer;
+ // Toggles
+ private GuiButton gparty;
+ private GuiButton coords;
+ private GuiButton goldenEnch;
+ private GuiButton slayerCount;
+ private GuiButton rngesusAlert;
+ private GuiButton splitFishing;
+ private GuiButton chatMaddox;
+ private GuiButton spiritBearAlert;
+ private GuiButton aotd;
+ private GuiButton lividDagger;
+ private GuiButton sceptreMessages;
+ private GuiButton petColours;
+ private GuiButton dungeonTimer;
+ private GuiButton golemAlerts;
+ private GuiButton expertiseLore;
+ private GuiButton skill50Display;
+ private GuiButton outlineText;
+
+ public DankerGui(int page) {
+ this.page = page;
+ }
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ @Override
+ public void initGui() {
+ super.initGui();
+
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+ int height = sr.getScaledHeight();
+ int width = sr.getScaledWidth();
+
+ // Default button size is 200, 20
+ closeGUI = new GuiButton(0, width / 2 - 100, (int) (height * 0.9), "Close");
+ backPage = new GuiButton(0, width / 2 - 100, (int) (height * 0.8), 80, 20, "< Back");
+ nextPage = new GuiButton(0, width / 2 + 20, (int) (height * 0.8), 80, 20, "Next >");
+ githubLink = new GuiButton(0, 2, height - 50, 80, 20, "GitHub");
+ discordLink = new GuiButton(0, 2, height - 30, 80, 20, "Discord");
+
+ // Page 1
+ changeDisplay = new GuiButton(0, width / 2 - 100, (int) (height * 0.1), "Change Display Settings");
+ onlySlayer = new GuiButton(0, width / 2 - 100, (int) (height * 0.2), "Set Slayer Quest");
+ outlineText = new GuiButton(0, width / 2 - 100, (int) (height * 0.3), "Outline Displayed Text: " + Utils.getColouredBoolean(ToggleCommand.outlineTextToggled));
+ gparty = new GuiButton(0, width / 2 - 100, (int) (height * 0.4), "Guild Party Notifications: " + Utils.getColouredBoolean(ToggleCommand.gpartyToggled));
+ coords = new GuiButton(0, width / 2 - 100, (int) (height * 0.5), "Coordinate/Angle Display: " + Utils.getColouredBoolean(ToggleCommand.coordsToggled));
+ goldenEnch = new GuiButton(0, width / 2 - 100, (int) (height * 0.6), "Golden T10/T6/T4 Enchantments: " + Utils.getColouredBoolean(ToggleCommand.goldenToggled));
+ slayerCount = new GuiButton(0, width / 2 - 100, (int) (height * 0.7), "Count Total 20% Drops: " + Utils.getColouredBoolean(ToggleCommand.slayerCountTotal));
+ // Page 2
+ aotd = new GuiButton(0, width / 2 - 100, (int) (height * 0.1), "Disable AOTD Ability: " + Utils.getColouredBoolean(ToggleCommand.aotdToggled));
+ lividDagger = new GuiButton(0, width / 2 - 100, (int) (height * 0.2), "Disable Livid Dagger Ability: " + Utils.getColouredBoolean(ToggleCommand.lividDaggerToggled));
+ sceptreMessages = new GuiButton(0, width / 2 - 100, (int) (height * 0.3), "Enable Spirit Sceptre Messages: " + Utils.getColouredBoolean(ToggleCommand.sceptreMessages));
+ petColours = new GuiButton(0, width / 2 - 100, (int) (height * 0.4), "Colour Pet Backgrounds: " + Utils.getColouredBoolean(ToggleCommand.petColoursToggled));
+ dungeonTimer = new GuiButton(0, width / 2 - 100, (int) (height * 0.5), "Display Dungeon Timers: " + Utils.getColouredBoolean(ToggleCommand.dungeonTimerToggled));
+ golemAlerts = new GuiButton(0, width / 2 - 100, (int) (height * 0.6), "Alert When Golem Spawns: " + Utils.getColouredBoolean(ToggleCommand.golemAlertToggled));
+ expertiseLore = new GuiButton(0, width / 2 - 100, (int) (height * 0.7), "Expertise Kills In Lore: " + Utils.getColouredBoolean(ToggleCommand.expertiseLoreToggled));
+ // Page 3
+ skill50Display = new GuiButton(0, width / 2 - 100, (int) (height * 0.1), "Display Progress To Skill Level 50: " + Utils.getColouredBoolean(ToggleCommand.skill50DisplayToggled));
+
+ if (page == 1) {
+ this.buttonList.add(changeDisplay);
+ this.buttonList.add(onlySlayer);
+ this.buttonList.add(outlineText);
+ this.buttonList.add(gparty);
+ this.buttonList.add(coords);
+ this.buttonList.add(goldenEnch);
+ this.buttonList.add(slayerCount);
+ this.buttonList.add(nextPage);
+ this.buttonList.add(closeGUI);
+ } else if (page == 2) {
+ this.buttonList.add(aotd);
+ this.buttonList.add(lividDagger);
+ this.buttonList.add(sceptreMessages);
+ this.buttonList.add(petColours);
+ this.buttonList.add(dungeonTimer);
+ this.buttonList.add(golemAlerts);
+ this.buttonList.add(expertiseLore);
+ this.buttonList.add(nextPage);
+ this.buttonList.add(backPage);
+ this.buttonList.add(closeGUI);
+ } else if (page == 3) {
+ this.buttonList.add(skill50Display);
+ this.buttonList.add(backPage);
+ this.buttonList.add(closeGUI);
+ }
+ this.buttonList.add(githubLink);
+ this.buttonList.add(discordLink);
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ this.drawDefaultBackground();
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+ @Override
+ public void actionPerformed(GuiButton button) {
+ if (button == closeGUI) {
+ Minecraft.getMinecraft().thePlayer.closeScreen();
+ } else if (button == nextPage) {
+ TheMod.guiToOpen = "dankergui" + (page + 1);
+ } else if (button == backPage) {
+ TheMod.guiToOpen = "dankergui" + (page - 1);
+ } else if (button == githubLink) {
+ try {
+ Desktop.getDesktop().browse(new URI("https://github.com/bowser0000/SkyblockMod"));
+ } catch (IOException | URISyntaxException ex) {
+ System.err.println(ex);
+ }
+ } else if (button == discordLink) {
+ try {
+ Desktop.getDesktop().browse(new URI("https://discord.gg/QsEkNQS"));
+ } catch (IOException | URISyntaxException ex) {
+ System.err.println(ex);
+ }
+ } else if (button == changeDisplay) {
+ TheMod.guiToOpen = "displaygui";
+ } else if (button == onlySlayer) {
+ TheMod.guiToOpen = "onlyslayergui";
+ } else if (button == outlineText) {
+ ToggleCommand.outlineTextToggled = !ToggleCommand.outlineTextToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "OutlineText", ToggleCommand.outlineTextToggled);
+ outlineText.displayString = "Outline Displayed Text: " + Utils.getColouredBoolean(ToggleCommand.outlineTextToggled);
+ } else if (button == gparty) {
+ ToggleCommand.gpartyToggled = !ToggleCommand.gpartyToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "GParty", ToggleCommand.gpartyToggled);
+ gparty.displayString = "Guild Party Notifications: " + Utils.getColouredBoolean(ToggleCommand.gpartyToggled);
+ } else if (button == coords) {
+ ToggleCommand.coordsToggled = !ToggleCommand.coordsToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "Coords", ToggleCommand.coordsToggled);
+ coords.displayString = "Coordinate/Angle Display: " + Utils.getColouredBoolean(ToggleCommand.coordsToggled);
+ } else if (button == goldenEnch) {
+ ToggleCommand.goldenToggled = !ToggleCommand.goldenToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "Golden", ToggleCommand.goldenToggled);
+ goldenEnch.displayString = "Golden T10/T6/T4 Enchantments: " + Utils.getColouredBoolean(ToggleCommand.goldenToggled);
+ } else if (button == slayerCount) {
+ ToggleCommand.slayerCountTotal = !ToggleCommand.slayerCountTotal;
+ ConfigHandler.writeBooleanConfig("toggles", "SlayerCount", ToggleCommand.slayerCountTotal);
+ slayerCount.displayString = "Count Total 20% Drops: " + Utils.getColouredBoolean(ToggleCommand.slayerCountTotal);
+ } else if (button == aotd) {
+ ToggleCommand.aotdToggled = !ToggleCommand.aotdToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "AOTD", ToggleCommand.aotdToggled);
+ aotd.displayString = "Disable AOTD Ability: " + Utils.getColouredBoolean(ToggleCommand.aotdToggled);
+ } else if (button == lividDagger) {
+ ToggleCommand.lividDaggerToggled = !ToggleCommand.lividDaggerToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "LividDagger", ToggleCommand.lividDaggerToggled);
+ lividDagger.displayString = "Disable Livid Dagger Ability: " + Utils.getColouredBoolean(ToggleCommand.lividDaggerToggled);
+ } else if (button == sceptreMessages) {
+ ToggleCommand.sceptreMessages = !ToggleCommand.sceptreMessages;
+ ConfigHandler.writeBooleanConfig("toggles", "SceptreMessages", ToggleCommand.sceptreMessages);
+ sceptreMessages.displayString = "Enable Spirit Sceptre Messages: " + Utils.getColouredBoolean(ToggleCommand.sceptreMessages);
+ } else if (button == petColours) {
+ ToggleCommand.petColoursToggled = !ToggleCommand.petColoursToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "PetColors", ToggleCommand.petColoursToggled);
+ petColours.displayString = "Colour Pet Backgrounds: " + Utils.getColouredBoolean(ToggleCommand.petColoursToggled);
+ } else if (button == dungeonTimer) {
+ ToggleCommand.dungeonTimerToggled = !ToggleCommand.dungeonTimerToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "DungeonTimer", ToggleCommand.dungeonTimerToggled);
+ dungeonTimer.displayString = "Display Dungeon Timers: " + Utils.getColouredBoolean(ToggleCommand.dungeonTimerToggled);
+ } else if (button == golemAlerts) {
+ ToggleCommand.golemAlertToggled = !ToggleCommand.golemAlertToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "GolemAlerts", ToggleCommand.golemAlertToggled);
+ golemAlerts.displayString = "Alert When Golem Spawns: " + Utils.getColouredBoolean(ToggleCommand.golemAlertToggled);
+ } else if (button == expertiseLore) {
+ ToggleCommand.expertiseLoreToggled = !ToggleCommand.expertiseLoreToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "ExpertiseLore", ToggleCommand.expertiseLoreToggled);
+ expertiseLore.displayString = "Expertise Kills In Lore: " + Utils.getColouredBoolean(ToggleCommand.expertiseLoreToggled);
+ } else if (button == skill50Display) {
+ ToggleCommand.skill50DisplayToggled = !ToggleCommand.skill50DisplayToggled;
+ ConfigHandler.writeBooleanConfig("toggles", "Skill50Display", ToggleCommand.skill50DisplayToggled);
+ skill50Display.displayString = "Display Progress To Skill Level 50: " + Utils.getColouredBoolean(ToggleCommand.skill50DisplayToggled);
+ }
+ }
+
+}
diff --git a/src/main/java/me/Danker/gui/DisplayGui.java b/src/main/java/me/Danker/gui/DisplayGui.java
new file mode 100644
index 0000000..243bedb
--- /dev/null
+++ b/src/main/java/me/Danker/gui/DisplayGui.java
@@ -0,0 +1,155 @@
+package me.Danker.gui;
+
+import me.Danker.TheMod;
+import me.Danker.commands.DisplayCommand;
+import me.Danker.handlers.ConfigHandler;
+import me.Danker.handlers.TextRenderer;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+
+public class DisplayGui extends GuiScreen {
+
+ private boolean addSession = false;
+
+ private GuiButton goBack;
+ private GuiButton editLocations;
+ private GuiButton off;
+ private GuiButton showSession;
+ private GuiButton zombie;
+ private GuiButton spider;
+ private GuiButton wolf;
+ private GuiButton auto;
+ private GuiButton fishing;
+ private GuiButton fishingWinter;
+ private GuiButton fishingFestival;
+ private GuiButton catacombsF1;
+ private GuiButton catacombsF2;
+ private GuiButton catacombsF3;
+ private GuiButton catacombsF4;
+ private GuiButton catacombsF5;
+ private GuiButton catacombsF6;
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ @Override
+ public void initGui() {
+ super.initGui();
+
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+ int height = sr.getScaledHeight();
+ int width = sr.getScaledWidth();
+
+ goBack = new GuiButton(0, 2, height - 30, 100, 20, "Go Back");
+ editLocations = new GuiButton(0, 2, height - 55, 100, 20, "Edit Locations");
+ showSession = new GuiButton(0, width / 2 - 100, (int) (height * 0.1), "Current Session Only: " + Utils.getColouredBoolean(addSession));
+ off = new GuiButton(0, width / 2 - 210, (int) (height * 0.2), "Off");
+ auto = new GuiButton(0, width / 2 + 10, (int) (height * 0.2), "Auto");
+ zombie = new GuiButton(0, width / 2 - 190, (int) (height * 0.3), 110, 20, "Zombie");
+ spider = new GuiButton(0, width / 2 - 55, (int) (height * 0.3), 110, 20, "Spider");
+ wolf = new GuiButton(0, width / 2 + 75, (int) (height * 0.3), 110, 20, "Wolf");
+ fishing = new GuiButton(0, width / 2 - 190, (int) (height * 0.4), 110, 20, "Fishing");
+ fishingWinter = new GuiButton(0, width / 2 - 55, (int) (height * 0.4), 110, 20, "Fishing Winter");
+ fishingFestival = new GuiButton(0, width / 2 + 75, (int) (height * 0.4), 110, 20, "Fishing Festival");
+ catacombsF1 = new GuiButton(0, width / 2 - 145, (int) (height * 0.55), 50, 20, "F1");
+ catacombsF2 = new GuiButton(0, width / 2 - 85, (int) (height * 0.55), 50, 20, "F2");
+ catacombsF3 = new GuiButton(0, width / 2 - 25, (int) (height * 0.55), 50, 20, "F3");
+ catacombsF4 = new GuiButton(0, width / 2 + 35, (int) (height * 0.55), 50, 20, "F4");
+ catacombsF5 = new GuiButton(0, width / 2 + 95, (int) (height * 0.55), 50, 20, "F5");
+ catacombsF6 = new GuiButton(0, width / 2 - 145, (int) (height * 0.63), 50, 20, "F6");
+
+ this.buttonList.add(showSession);
+ this.buttonList.add(off);
+ this.buttonList.add(auto);
+ this.buttonList.add(zombie);
+ this.buttonList.add(spider);
+ this.buttonList.add(wolf);
+ this.buttonList.add(fishing);
+ this.buttonList.add(fishingWinter);
+ this.buttonList.add(fishingFestival);
+ this.buttonList.add(catacombsF1);
+ this.buttonList.add(catacombsF2);
+ this.buttonList.add(catacombsF3);
+ this.buttonList.add(catacombsF4);
+ this.buttonList.add(catacombsF5);
+ this.buttonList.add(catacombsF6);
+ this.buttonList.add(editLocations);
+ this.buttonList.add(goBack);
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ this.drawDefaultBackground();
+ Minecraft mc = Minecraft.getMinecraft();
+
+ String displayText;
+ if (DisplayCommand.auto) {
+ displayText = "Current Display: auto";
+ } else {
+ displayText = "Current Display: " + DisplayCommand.display;
+ }
+ int displayWidth = mc.fontRendererObj.getStringWidth(displayText);
+ new TextRenderer(mc, displayText, width / 2 - displayWidth / 2, 10, 1D);
+
+ String catacombsTitleText = "Catacombs Dungeon";
+ int catacombsTitleWidth = mc.fontRendererObj.getStringWidth(catacombsTitleText);
+ new TextRenderer(mc, catacombsTitleText, width / 2 - catacombsTitleWidth / 2, (int) (height * 0.5), 1D);
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+ @Override
+ public void actionPerformed(GuiButton button) {
+ if (button == goBack) {
+ TheMod.guiToOpen = "dankergui1";
+ } else if (button == editLocations) {
+ TheMod.guiToOpen = "editlocations";
+ } else if (button == showSession) {
+ addSession = !addSession;
+ showSession.displayString = "Current Session Only: " + Utils.getColouredBoolean(addSession);
+ } else if (button == off) {
+ setDisplay("off", true);
+ } else if (button == zombie) {
+ setDisplay("zombie", false);
+ } else if (button == spider) {
+ setDisplay("spider", false);
+ } else if (button == wolf) {
+ setDisplay("wolf", false);
+ } else if (button == auto) {
+ DisplayCommand.auto = true;
+ ConfigHandler.writeBooleanConfig("misc", "autoDisplay", true);
+ } else if (button == fishing) {
+ setDisplay("fishing", false);
+ } else if (button == fishingWinter) {
+ setDisplay("fishing_winter", false);
+ } else if (button == fishingFestival) {
+ setDisplay("fishing_festival", false);
+ } else if (button == catacombsF1) {
+ setDisplay("catacombs_floor_one", false);
+ } else if (button == catacombsF2) {
+ setDisplay("catacombs_floor_two", false);
+ } else if (button == catacombsF3) {
+ setDisplay("catacombs_floor_three", false);
+ } else if (button == catacombsF4) {
+ setDisplay("catacombs_floor_four", false);
+ } else if (button == catacombsF5) {
+ setDisplay("catacombs_floor_five", false);
+ } else if (button == catacombsF6) {
+ setDisplay("catacombs_floor_six", false);
+ }
+ }
+
+ public void setDisplay(String display, boolean forceNoSession) {
+ if (!forceNoSession && addSession) display += "_session";
+ DisplayCommand.auto = false;
+ DisplayCommand.display = display;
+ ConfigHandler.writeBooleanConfig("misc", "autoDisplay", false);
+ ConfigHandler.writeStringConfig("misc", "display", display);
+ }
+
+}
diff --git a/src/main/java/me/Danker/gui/EditLocationsGui.java b/src/main/java/me/Danker/gui/EditLocationsGui.java
new file mode 100644
index 0000000..8fbc4cb
--- /dev/null
+++ b/src/main/java/me/Danker/gui/EditLocationsGui.java
@@ -0,0 +1,152 @@
+package me.Danker.gui;
+
+import me.Danker.commands.MoveCommand;
+import me.Danker.commands.ScaleCommand;
+import me.Danker.gui.buttons.LocationButton;
+import me.Danker.handlers.ConfigHandler;
+import me.Danker.utils.Utils;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.util.EnumChatFormatting;
+
+public class EditLocationsGui extends GuiScreen {
+
+ private String moving = null;
+ private int lastMouseX = -1;
+ private int lastMouseY = -1;
+
+ private LocationButton display;
+ private LocationButton dungeonTimer;
+ private LocationButton coords;
+ private LocationButton skill50;
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ @Override
+ public void initGui() {
+ super.initGui();
+ // Ease of typing
+ MoveCommand moc = new MoveCommand();
+ ScaleCommand sc = new ScaleCommand();
+
+ String displayText = EnumChatFormatting.GOLD + "Svens Killed:\n" +
+ EnumChatFormatting.GREEN + "Wolf Teeth:\n" +
+ EnumChatFormatting.BLUE + "Hamster Wheels:\n" +
+ EnumChatFormatting.AQUA + "Spirit Runes:\n" +
+ EnumChatFormatting.WHITE + "Critical VI Books:\n" +
+ EnumChatFormatting.DARK_RED + "Red Claw Eggs:\n" +
+ EnumChatFormatting.GOLD + "Couture Runes:\n" +
+ EnumChatFormatting.AQUA + "Grizzly Baits:\n" +
+ EnumChatFormatting.DARK_PURPLE + "Overfluxes:\n" +
+ EnumChatFormatting.AQUA + "Time Since RNG:\n" +
+ EnumChatFormatting.AQUA + "Bosses Since RNG:";
+ String displayNums = EnumChatFormatting.GOLD + "1,024" + "\n" +
+ EnumChatFormatting.GREEN + "59,719" + "\n" +
+ EnumChatFormatting.BLUE + "36" + "\n" +
+ EnumChatFormatting.AQUA + "64" + "\n" +
+ EnumChatFormatting.WHITE + "17" + "\n" +
+ EnumChatFormatting.DARK_RED + "3" + "\n" +
+ EnumChatFormatting.GOLD + "4" + "\n" +
+ EnumChatFormatting.AQUA + "0" + "\n" +
+ EnumChatFormatting.DARK_PURPLE + "5" + "\n" +
+ EnumChatFormatting.AQUA + Utils.getTimeBetween(0, 2678400) + "\n" +
+ EnumChatFormatting.AQUA + "5,000";
+
+ String dungeonTimerText = EnumChatFormatting.GRAY + "Wither Doors:\n" +
+ EnumChatFormatting.DARK_RED + "Blood Open:\n" +
+ EnumChatFormatting.RED + "Watcher Clear:\n" +
+ EnumChatFormatting.BLUE + "Boss Clear:\n" +
+ EnumChatFormatting.YELLOW + "Deaths:\n" +
+ EnumChatFormatting.YELLOW + "Puzzle Fails:";
+ String dungeonTimerNums = EnumChatFormatting.GRAY + "" + 5 + "\n" +
+ EnumChatFormatting.DARK_RED + Utils.getTimeBetween(0, 33) + "\n" +
+ EnumChatFormatting.RED + Utils.getTimeBetween(0, 129) + "\n" +
+ EnumChatFormatting.BLUE + Utils.getTimeBetween(0, 169) + "\n" +
+ EnumChatFormatting.YELLOW + 2 + "\n" +
+ EnumChatFormatting.YELLOW + 1;
+
+ display = new LocationButton(0, moc.displayXY[0], moc.displayXY[1], 145 * sc.displayScale, 102 * sc.displayScale, sc.displayScale, displayText, displayNums, 110);
+ dungeonTimer = new LocationButton(0, moc.dungeonTimerXY[0], moc.dungeonTimerXY[1], 113 * sc.dungeonTimerScale, 57 * sc.dungeonTimerScale, sc.dungeonTimerScale, dungeonTimerText, dungeonTimerNums, 80);
+ coords = new LocationButton(0, moc.coordsXY[0], moc.coordsXY[1], 141 * sc.coordsScale, 12 * sc.coordsScale, sc.coordsScale, "74 / 14 / -26 (141.1 / 6.7)", null, null);
+ skill50 = new LocationButton(0, moc.skill50XY[0], moc.skill50XY[1], 233 * sc.skill50Scale, 12 * sc.skill50Scale, sc.skill50Scale, EnumChatFormatting.AQUA + "+3.5 Farming (28,882,117.7/55,172,425) 52.34%", null, null);
+
+ this.buttonList.add(coords);
+ this.buttonList.add(dungeonTimer);
+ this.buttonList.add(display);
+ this.buttonList.add(skill50);
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ this.drawDefaultBackground();
+ mouseMoved(mouseX, mouseY);
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+ private void mouseMoved(int mouseX, int mouseY) {
+ int xMoved = mouseX - lastMouseX;
+ int yMoved = mouseY - lastMouseY;
+
+ if (moving != null) {
+ if (moving.equals("display")) {
+ MoveCommand.displayXY[0] += xMoved;
+ MoveCommand.displayXY[1] += yMoved;
+ display.xPosition = MoveCommand.displayXY[0];
+ display.yPosition = MoveCommand.displayXY[1];
+ } else if (moving.equals("dungeonTimer")) {
+ MoveCommand.dungeonTimerXY[0] += xMoved;
+ MoveCommand.dungeonTimerXY[1] += yMoved;
+ dungeonTimer.xPosition = MoveCommand.dungeonTimerXY[0];
+ dungeonTimer.yPosition = MoveCommand.dungeonTimerXY[1];
+ } else if (moving.equals("coords")) {
+ MoveCommand.coordsXY[0] += xMoved;
+ MoveCommand.coordsXY[1] += yMoved;
+ coords.xPosition = MoveCommand.coordsXY[0];
+ coords.yPosition = MoveCommand.coordsXY[1];
+ } else if (moving.equals("skill50")) {
+ MoveCommand.skill50XY[0] += xMoved;
+ MoveCommand.skill50XY[1] += yMoved;
+ skill50.xPosition = MoveCommand.skill50XY[0];
+ skill50.yPosition = MoveCommand.skill50XY[1];
+ }
+ this.buttonList.clear();
+ initGui();
+ }
+
+ lastMouseX = mouseX;
+ lastMouseY = mouseY;
+ }
+
+ @Override
+ public void actionPerformed(GuiButton button) {
+ if (button instanceof LocationButton) {
+ if (button == display) {
+ moving = "display";
+ } else if (button == dungeonTimer) {
+ moving = "dungeonTimer";
+ } else if (button == coords) {
+ moving = "coords";
+ } else if (button == skill50) {
+ moving = "skill50";
+ }
+ }
+ }
+
+ @Override
+ public void mouseReleased(int mouseX, int mouseY, int state) {
+ super.mouseReleased(mouseX, mouseY, state);
+ moving = null;
+ ConfigHandler.writeIntConfig("locations", "coordsX", MoveCommand.coordsXY[0]);
+ ConfigHandler.writeIntConfig("locations", "coordsY", MoveCommand.coordsXY[1]);
+ ConfigHandler.writeIntConfig("locations", "displayX", MoveCommand.displayXY[0]);
+ ConfigHandler.writeIntConfig("locations", "displayY", MoveCommand.displayXY[1]);
+ ConfigHandler.writeIntConfig("locations", "dungeonTimerX", MoveCommand.dungeonTimerXY[0]);
+ ConfigHandler.writeIntConfig("locations", "dungeonTimerY", MoveCommand.dungeonTimerXY[1]);
+ ConfigHandler.writeIntConfig("locations", "skill50X", MoveCommand.skill50XY[0]);
+ ConfigHandler.writeIntConfig("locations", "skill50Y", MoveCommand.skill50XY[1]);
+ }
+
+}
diff --git a/src/main/java/me/Danker/gui/OnlySlayerGui.java b/src/main/java/me/Danker/gui/OnlySlayerGui.java
new file mode 100644
index 0000000..c96bfd6
--- /dev/null
+++ b/src/main/java/me/Danker/gui/OnlySlayerGui.java
@@ -0,0 +1,135 @@
+package me.Danker.gui;
+
+import me.Danker.TheMod;
+import me.Danker.commands.BlockSlayerCommand;
+import me.Danker.handlers.ConfigHandler;
+import me.Danker.handlers.TextRenderer;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+
+public class OnlySlayerGui extends GuiScreen {
+
+ private int onlyNumberInt = 4;
+ private String onlyName = "Revenant Horror";
+
+ private GuiButton goBack;
+ private GuiButton off;
+ private GuiButton zombie;
+ private GuiButton spider;
+ private GuiButton wolf;
+ private GuiButton one;
+ private GuiButton two;
+ private GuiButton three;
+ private GuiButton four;
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ @Override
+ public void initGui() {
+ super.initGui();
+
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+ int height = sr.getScaledHeight();
+ int width = sr.getScaledWidth();
+
+ onlyName = BlockSlayerCommand.onlySlayerName;
+ if (BlockSlayerCommand.onlySlayerNumber.equals("I")) {
+ onlyNumberInt = 1;
+ } else if (BlockSlayerCommand.onlySlayerNumber.equals("II")) {
+ onlyNumberInt = 2;
+ } else if (BlockSlayerCommand.onlySlayerNumber.equals("III")) {
+ onlyNumberInt = 3;
+ } else {
+ onlyNumberInt = 4;
+ }
+
+ goBack = new GuiButton(0, 2, height - 30, 100, 20, "Go Back");
+ off = new GuiButton(0, width / 2 - 100, (int) (height * 0.3), "Off");
+ zombie = new GuiButton(0, width / 2 - 200, (int) (height * 0.4), 120, 20, "Zombie");
+ spider = new GuiButton(0, width / 2 - 60, (int) (height * 0.4), 120, 20, "Spider");
+ wolf = new GuiButton(0, width / 2 + 80, (int) (height * 0.4), 120, 20, "Wolf");
+ one = new GuiButton(0, width / 2 - 190, (int) (height * 0.6), 85, 20, "I");
+ two = new GuiButton(0, width / 2 - 95, (int) (height * 0.6), 85, 20, "II");
+ three = new GuiButton(0, width / 2 + 10, (int) (height * 0.6), 85, 20, "III");
+ four = new GuiButton(0, width / 2 + 115, (int) (height * 0.6), 85, 20, "IV");
+
+ this.buttonList.add(off);
+ this.buttonList.add(zombie);
+ this.buttonList.add(spider);
+ this.buttonList.add(wolf);
+ this.buttonList.add(one);
+ this.buttonList.add(two);
+ this.buttonList.add(three);
+ this.buttonList.add(four);
+ this.buttonList.add(goBack);
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ this.drawDefaultBackground();
+ Minecraft mc = Minecraft.getMinecraft();
+
+ String displayText;
+ if (BlockSlayerCommand.onlySlayerName.equals("")) {
+ displayText = "Only Allow Slayer: Off";
+ } else {
+ displayText = "Only Allow Slayer: " + BlockSlayerCommand.onlySlayerName + " " + BlockSlayerCommand.onlySlayerNumber;
+ }
+ int displayWidth = mc.fontRendererObj.getStringWidth(displayText);
+ new TextRenderer(mc, displayText, width / 2 - displayWidth / 2, 10, 1D);
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+ @Override
+ public void actionPerformed(GuiButton button) {
+ if (button == goBack) {
+ TheMod.guiToOpen = "dankergui1";
+ } else if (button == off) {
+ BlockSlayerCommand.onlySlayerName = "";
+ BlockSlayerCommand.onlySlayerNumber = "";
+ ConfigHandler.writeStringConfig("toggles", "BlockSlayer", "");
+ return;
+ } else if (button == zombie) {
+ onlyName = "Revenant Horror";
+ } else if (button == spider) {
+ onlyName = "Tarantula Broodfather";
+ } else if (button == wolf) {
+ onlyName = "Sven Packmaster";
+ } else if (button == one) {
+ onlyNumberInt = 1;
+ } else if (button == two) {
+ onlyNumberInt = 2;
+ } else if (button == three) {
+ onlyNumberInt = 3;
+ } else if (button == four) {
+ onlyNumberInt = 4;
+ }
+
+ String onlyNumber;
+ switch (onlyNumberInt) {
+ case 1:
+ onlyNumber = "I";
+ break;
+ case 2:
+ onlyNumber = "II";
+ break;
+ case 3:
+ onlyNumber = "III";
+ break;
+ case 4:
+ default:
+ onlyNumber = "IV";
+ }
+
+ BlockSlayerCommand.onlySlayerName = onlyName;
+ BlockSlayerCommand.onlySlayerNumber = onlyNumber;
+ ConfigHandler.writeStringConfig("toggles", "BlockSlayer", BlockSlayerCommand.onlySlayerName + " " + BlockSlayerCommand.onlySlayerNumber);
+ }
+
+}
diff --git a/src/main/java/me/Danker/gui/buttons/LocationButton.java b/src/main/java/me/Danker/gui/buttons/LocationButton.java
new file mode 100644
index 0000000..061f198
--- /dev/null
+++ b/src/main/java/me/Danker/gui/buttons/LocationButton.java
@@ -0,0 +1,61 @@
+package me.Danker.gui.buttons;
+
+import me.Danker.handlers.TextRenderer;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.audio.SoundHandler;
+import net.minecraft.client.gui.GuiButton;
+
+public class LocationButton extends GuiButton {
+
+ private int x;
+ private int y;
+ private double scale;
+ private String text;
+ private String text2;
+ private Integer text2Offset;
+
+ public LocationButton(int buttonId, int x, int y, double width, double height, double scale, String text, String text2, Integer text2Offset) {
+ super(buttonId, x, y, text);
+ this.x = x;
+ this.y = y;
+ this.width = (int) width;
+ this.height = (int) height;
+ this.scale = scale;
+ this.text = text;
+ this.text2 = text2;
+ this.text2Offset = text2Offset;
+ }
+
+ @Override
+ public void drawButton(Minecraft mc, int mouseX, int mouseY) {
+ String[] splitText;
+ if (text2 == null) {
+ splitText = text.split("\n");
+ } else {
+ splitText = text2.split("\n");
+ }
+ int index = 0;
+ int longestText = -1;
+ for (int i = 0; i < splitText.length; i++) {
+ int stringLength = mc.fontRendererObj.getStringWidth(splitText[i]);
+ if (stringLength > longestText) {
+ index = i;
+ longestText = stringLength;
+ }
+ }
+
+ if (text2 == null) {
+ drawRect(x - 2, y - 2, (int) (x + longestText * scale + 3), (int) (y + (splitText.length * 9 + 3) * scale), 0x40D3D3D3);
+ } else {
+ drawRect(x - 2, y - 2, (int) (x + (longestText + text2Offset) * scale + 3), (int) (y + (splitText.length * 9 + 3) * scale), 0x40D3D3D3);
+ new TextRenderer(mc, text2, (int) (x + (text2Offset * scale)), y, scale);
+ }
+ new TextRenderer(mc, text, x, y, scale);
+ }
+
+ @Override
+ public void playPressSound(SoundHandler soundHandler) {
+
+ }
+
+}
diff --git a/src/main/java/me/Danker/handlers/APIHandler.java b/src/main/java/me/Danker/handlers/APIHandler.java
index 34a73ff..b8d52dc 100644
--- a/src/main/java/me/Danker/handlers/APIHandler.java
+++ b/src/main/java/me/Danker/handlers/APIHandler.java
@@ -53,8 +53,11 @@ public class APIHandler {
JsonObject object = gson.fromJson(error, JsonObject.class);
return object;
}
+ } else if (urlString.startsWith("https://api.mojang.com/users/profiles/minecraft/") && conn.getResponseCode() == 204) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: Player does not exist."));
+ } else {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Request failed. HTTP Error Code: " + conn.getResponseCode()));
}
- player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Request failed. HTTP Error Code: " + conn.getResponseCode()));
}
} catch (MalformedURLException ex) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "An error has occured. See logs for more details."));
diff --git a/src/main/java/me/Danker/handlers/ConfigHandler.java b/src/main/java/me/Danker/handlers/ConfigHandler.java
index 34aaffe..b903cd3 100644
--- a/src/main/java/me/Danker/handlers/ConfigHandler.java
+++ b/src/main/java/me/Danker/handlers/ConfigHandler.java
@@ -2,6 +2,7 @@ package me.Danker.handlers;
import java.io.File;
+import me.Danker.commands.BlockSlayerCommand;
import me.Danker.commands.DisplayCommand;
import me.Danker.commands.LootCommand;
import me.Danker.commands.MoveCommand;
@@ -178,9 +179,15 @@ public class ConfigHandler {
if (!hasKey("toggles", "ChatMaddox")) writeBooleanConfig("toggles", "ChatMaddox", true);
if (!hasKey("toggles", "SpiritBearAlerts")) writeBooleanConfig("toggles", "SpiritBearAlerts", true);
if (!hasKey("toggles", "AOTD")) writeBooleanConfig("toggles", "AOTD", false);
+ if (!hasKey("toggles", "LividDagger")) writeBooleanConfig("toggles", "LividDagger", false);
if (!hasKey("toggles", "SceptreMessages")) writeBooleanConfig("toggles", "SceptreMessages", true);
if (!hasKey("toggles", "PetColors")) writeBooleanConfig("toggles", "PetColors", false);
if (!hasKey("toggles", "DungeonTimer")) writeBooleanConfig("toggles", "DungeonTimer", false);
+ if (!hasKey("toggles", "BlockSlayer")) writeStringConfig("toggles", "BlockSlayer", "");
+ if (!hasKey("toggles", "GolemAlerts")) writeBooleanConfig("toggles", "GolemAlerts", false);
+ if (!hasKey("toggles", "ExpertiseLore")) writeBooleanConfig("toggles", "ExpertiseLore", true);
+ if (!hasKey("toggles", "Skill50Display")) writeBooleanConfig("toggles", "Skill50Display", false);
+ if (!hasKey("toggles", "OutlineText")) writeBooleanConfig("toggles", "OutlineText", false);
if (!hasKey("api", "APIKey")) writeStringConfig("api", "APIKey", "");
@@ -253,6 +260,11 @@ public class ConfigHandler {
if (!hasKey("fishing", "yeti")) writeIntConfig("fishing", "yeti", 0);
if (!hasKey("fishing", "yetiTime")) writeDoubleConfig("fishing", "yetiTime", -1);
if (!hasKey("fishing", "yetiSC")) writeIntConfig("fishing", "yetiSC", -1);
+ // Fishing Festival
+ if (!hasKey("fishing", "nurseShark")) writeIntConfig("fishing", "nurseShark", 0);
+ if (!hasKey("fishing", "blueShark")) writeIntConfig("fishing", "blueShark", 0);
+ if (!hasKey("fishing", "tigerShark")) writeIntConfig("fishing", "tigerShark", 0);
+ if (!hasKey("fishing", "greatWhiteShark")) writeIntConfig("fishing", "greatWhiteShark", 0);
// Dungeons
if (!hasKey("catacombs", "recombobulator")) writeIntConfig("catacombs", "recombobulator", 0);
@@ -283,8 +295,30 @@ public class ConfigHandler {
if (!hasKey("catacombs", "spiritPetLeg")) writeIntConfig("catacombs", "spiritPetLeg", 0);
if (!hasKey("catacombs", "floorFourCoins")) writeDoubleConfig("catacombs", "floorFourCoins", 0);
if (!hasKey("catacombs", "floorFourTime")) writeDoubleConfig("catacombs", "floorFourTime", 0);
+ // F5
+ if (!hasKey("catacombs", "warpedStone")) writeIntConfig("catacombs", "warpedStone", 0);
+ if (!hasKey("catacombs", "shadowAssassinHelm")) writeIntConfig("catacombs", "shadowAssassinHelm", 0);
+ if (!hasKey("catacombs", "shadowAssassinChest")) writeIntConfig("catacombs", "shadowAssassinChest", 0);
+ if (!hasKey("catacombs", "shadowAssassinLegging")) writeIntConfig("catacombs", "shadowAssassinLegging", 0);
+ if (!hasKey("catacombs", "shadowAssassinBoot")) writeIntConfig("catacombs", "shadowAssassinBoot", 0);
+ if (!hasKey("catacombs", "lividDagger")) writeIntConfig("catacombs", "lividDagger", 0);
+ if (!hasKey("catacombs", "shadowFury")) writeIntConfig("catacombs", "shadowFury", 0);
+ if (!hasKey("catacombs", "floorFiveCoins")) writeDoubleConfig("catacombs", "floorFiveCoins", 0);
+ if (!hasKey("catacombs", "floorFiveTime")) writeDoubleConfig("catacombs", "floorFiveTime", 0);
+ // F6
+ if (!hasKey("catacombs", "ancientRose")) writeIntConfig("catacombs", "ancientRose", 0);
+ if (!hasKey("catacombs", "precursorEye")) writeIntConfig("catacombs", "precursorEye", 0);
+ if (!hasKey("catacombs", "giantsSword")) writeIntConfig("catacombs", "giantsSword", 0);
+ if (!hasKey("catacombs", "necroLordHelm")) writeIntConfig("catacombs", "necroHelm", 0);
+ if (!hasKey("catacombs", "necroLordChest")) writeIntConfig("catacombs", "necroChest", 0);
+ if (!hasKey("catacombs", "necroLordLegging")) writeIntConfig("catacombs", "necroLegging", 0);
+ if (!hasKey("catacombs", "necroLordBoot")) writeIntConfig("catacombs", "necroBoot", 0);
+ if (!hasKey("catacombs", "necroSword")) writeIntConfig("catacombs", "necroSword", 0);
+ if (!hasKey("catacombs", "floorSixCoins")) writeDoubleConfig("catacombs", "floorSixCoins", 0);
+ if (!hasKey("catacombs", "floorSixTime")) writeDoubleConfig("catacombs", "floorSixTime", 0);
if (!hasKey("misc", "display")) writeStringConfig("misc", "display", "off");
+ if (!hasKey("misc", "autoDisplay")) writeBooleanConfig("misc", "autoDisplay", false);
ScaledResolution scaled = new ScaledResolution(Minecraft.getMinecraft());
int height = scaled.getScaledHeight();
@@ -294,9 +328,12 @@ public class ConfigHandler {
if (!hasKey("locations", "displayY")) writeIntConfig("locations", "displayY", 5);
if (!hasKey("locations", "dungeonTimerX")) writeIntConfig("locations", "dungeonTimerX", 5);
if (!hasKey("locations", "dungeonTimerY")) writeIntConfig("locations", "dungeonTimerY", 5);
+ if (!hasKey("locations", "skill50X")) writeIntConfig("locations", "skill50X", 40);
+ if (!hasKey("locations", "skill50Y")) writeIntConfig("locations", "skill50Y", 10);
if (!hasKey("scales", "coordsScale")) writeDoubleConfig("scales", "coordsScale", 1);
if (!hasKey("scales", "displayScale")) writeDoubleConfig("scales", "displayScale", 1);
if (!hasKey("scales", "dungeonTimerScale")) writeDoubleConfig("scales", "dungeonTimerScale", 1);
+ if (!hasKey("scales", "skill50Scale")) writeDoubleConfig("scales", "skill50Scale", 1);
final ToggleCommand tf = new ToggleCommand();
tf.gpartyToggled = getBoolean("toggles", "GParty");
@@ -308,9 +345,21 @@ public class ConfigHandler {
tf.chatMaddoxToggled = getBoolean("toggles", "ChatMaddox");
tf.spiritBearAlerts = getBoolean("toggles", "SpiritBearAlerts");
tf.aotdToggled = getBoolean("toggles", "AOTD");
+ tf.lividDaggerToggled = getBoolean("toggles", "LividDagger");
tf.sceptreMessages = getBoolean("toggles", "SceptreMessages");
tf.petColoursToggled = getBoolean("toggles", "PetColors");
tf.dungeonTimerToggled = getBoolean("toggles", "DungeonTimer");
+ tf.golemAlertToggled = getBoolean("toggles", "GolemAlerts");
+ tf.expertiseLoreToggled = getBoolean("toggles", "ExpertiseLore");
+ tf.skill50DisplayToggled = getBoolean("toggles", "Skill50Display");
+ tf.outlineTextToggled = getBoolean("toggles", "OutlineText");
+
+ final BlockSlayerCommand bs = new BlockSlayerCommand();
+ String onlySlayer = getString("toggles", "BlockSlayer");
+ if (!onlySlayer.equals("")) {
+ bs.onlySlayerName = onlySlayer.substring(0, onlySlayer.lastIndexOf(" "));
+ bs.onlySlayerNumber = onlySlayer.substring(onlySlayer.lastIndexOf(" ") + 1, onlySlayer.length());
+ }
final LootCommand lc = new LootCommand();
// Wolf
@@ -382,6 +431,11 @@ public class ConfigHandler {
lc.yetis = getInt("fishing", "yeti");
lc.yetiTime = getDouble("fishing", "yetiTime");
lc.yetiSCs = getInt("fishing", "yetiSC");
+ // Fishing Festival
+ lc.nurseSharks = getInt("fishing", "nurseShark");
+ lc.blueSharks = getInt("fishing", "blueShark");
+ lc.tigerSharks = getInt("fishing", "tigerShark");
+ lc.greatWhiteSharks = getInt("fishing", "greatWhiteShark");
// Dungeons
lc.recombobulators = getInt("catacombs", "recombobulator");
@@ -412,9 +466,31 @@ public class ConfigHandler {
lc.legSpiritPets = getInt("catacombs", "spiritPetLeg");
lc.f4CoinsSpent = getDouble("catacombs", "floorFourCoins");
lc.f4TimeSpent = getDouble("catacombs", "floorFourTime");
+ // F5
+ lc.warpedStones = getInt("catacombs", "warpedStone");
+ lc.shadowAssHelms = getInt("catacombs", "shadowAssassinHelm");
+ lc.shadowAssChests = getInt("catacombs", "shadowAssassinChest");
+ lc.shadowAssLegs = getInt("catacombs", "shadowAssassinLegging");
+ lc.shadowAssBoots = getInt("catacombs", "shadowAssassinBoot");
+ lc.lividDaggers = getInt("catacombs", "lividDagger");
+ lc.shadowFurys = getInt("catacombs", "shadowFury");
+ lc.f5CoinsSpent = getDouble("catacombs", "floorFiveCoins");
+ lc.f5TimeSpent = getDouble("catacombs", "floorFiveTime");
+ // F6
+ lc.ancientRoses = getInt("catacombs", "ancientRose");
+ lc.precursorEyes = getInt("catacombs", "precursorEye");
+ lc.giantsSwords = getInt("catacombs", "giantsSword");
+ lc.necroLordHelms = getInt("catacombs", "necroLordHelm");
+ lc.necroLordChests = getInt("catacombs", "necroLordChest");
+ lc.necroLordLegs = getInt("catacombs", "necroLordLegging");
+ lc.necroLordBoots = getInt("catacombs", "necroLordBoot");
+ lc.necroSwords = getInt("catacombs", "necroSword");
+ lc.f6CoinsSpent = getDouble("catacombs", "floorSixCoins");
+ lc.f6TimeSpent = getDouble("catacombs", "floorSixTime");
final DisplayCommand ds = new DisplayCommand();
ds.display = getString("misc", "display");
+ ds.auto = getBoolean("misc", "autoDisplay");
final MoveCommand moc = new MoveCommand();
moc.coordsXY[0] = getInt("locations", "coordsX");
@@ -423,11 +499,14 @@ public class ConfigHandler {
moc.displayXY[1] = getInt("locations", "displayY");
moc.dungeonTimerXY[0] = getInt("locations", "dungeonTimerX");
moc.dungeonTimerXY[1] = getInt("locations", "dungeonTimerY");
+ moc.skill50XY[0] = getInt("locations", "skill50X");
+ moc.skill50XY[1] = getInt("locations", "skill50Y");
final ScaleCommand sc = new ScaleCommand();
sc.coordsScale = getDouble("scales", "coordsScale");
sc.displayScale = getDouble("scales", "displayScale");
sc.dungeonTimerScale = getDouble("scales", "dungeonTimerScale");
+ sc.skill50Scale = getDouble("scales", "skill50Scale");
}
}
diff --git a/src/main/java/me/Danker/handlers/PacketHandler.java b/src/main/java/me/Danker/handlers/PacketHandler.java
new file mode 100644
index 0000000..56bbc24
--- /dev/null
+++ b/src/main/java/me/Danker/handlers/PacketHandler.java
@@ -0,0 +1,31 @@
+package me.Danker.handlers;
+
+import java.lang.reflect.Field;
+
+import io.netty.channel.ChannelDuplexHandler;
+import io.netty.channel.ChannelHandlerContext;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S04PacketEntityEquipment;
+
+public class PacketHandler extends ChannelDuplexHandler {
+
+ public static boolean added = false;
+
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (Utils.inSkyblock && msg instanceof Packet && msg.getClass().getName().endsWith("S04PacketEntityEquipment")) { // Inventory packet name
+ S04PacketEntityEquipment packet = (S04PacketEntityEquipment) msg;
+ if (packet.getEntityID() == Minecraft.getMinecraft().thePlayer.getEntityId()) {
+ Field slot = packet.getClass().getDeclaredField("field_149392_b"); // equipmentSlot
+ slot.setAccessible(true);
+ slot.setInt(packet, slot.getInt(packet) + 1);
+ msg = packet;
+ }
+ }
+
+ super.channelRead(ctx, msg);
+ }
+
+}
diff --git a/src/main/java/me/Danker/handlers/ScoreboardHandler.java b/src/main/java/me/Danker/handlers/ScoreboardHandler.java
index e89591b..92fc844 100644
--- a/src/main/java/me/Danker/handlers/ScoreboardHandler.java
+++ b/src/main/java/me/Danker/handlers/ScoreboardHandler.java
@@ -41,7 +41,7 @@ public class ScoreboardHandler {
Collection<Score> scores = scoreboard.getSortedScores(objective);
List<Score> list = Lists.newArrayList(scores.stream()
.filter(input -> input != null && input.getPlayerName() != null && !input.getPlayerName()
- .startsWith("#"))
+ .startsWith("#"))
.collect(Collectors.toList()));
if (list.size() > 15) {
diff --git a/src/main/java/me/Danker/handlers/TextRenderer.java b/src/main/java/me/Danker/handlers/TextRenderer.java
index bf5711d..0e965e6 100644
--- a/src/main/java/me/Danker/handlers/TextRenderer.java
+++ b/src/main/java/me/Danker/handlers/TextRenderer.java
@@ -2,8 +2,10 @@ package me.Danker.handlers;
import org.lwjgl.opengl.GL11;
+import me.Danker.commands.ToggleCommand;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
+import net.minecraft.util.StringUtils;
public class TextRenderer extends Gui {
public TextRenderer(Minecraft mc, String text, int x, int y, double scale) {
@@ -13,7 +15,16 @@ public class TextRenderer extends Gui {
y -= mc.fontRendererObj.FONT_HEIGHT;
for (String line : text.split("\n")) {
y += mc.fontRendererObj.FONT_HEIGHT * scale;
- drawString(mc.fontRendererObj, line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF);
+ if (ToggleCommand.outlineTextToggled) {
+ String noColorLine = StringUtils.stripControlCodes(line);
+ mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale) - 1, (int) Math.round(y / scale), 0x000000, false);
+ mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale) + 1, (int) Math.round(y / scale), 0x000000, false);
+ mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale), (int) Math.round(y / scale) - 1, 0x000000, false);
+ mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale), (int) Math.round(y / scale) + 1, 0x000000, false);
+ mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, false);
+ } else {
+ mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, true);
+ }
}
GL11.glScaled(scaleReset, scaleReset, scaleReset);
}
diff --git a/src/main/java/me/Danker/utils/Utils.java b/src/main/java/me/Danker/utils/Utils.java
index 67f8439..ba01071 100644
--- a/src/main/java/me/Danker/utils/Utils.java
+++ b/src/main/java/me/Danker/utils/Utils.java
@@ -1,6 +1,7 @@
package me.Danker.utils;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.regex.Matcher;
@@ -12,20 +13,26 @@ import me.Danker.handlers.TextRenderer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
-import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.scoreboard.ScoreObjective;
import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StringUtils;
public class Utils {
public static boolean inSkyblock = false;
static int[] skillXPPerLevel = {0, 50, 125, 200, 300, 500, 750, 1000, 1500, 2000, 3500, 5000, 7500, 10000, 15000, 20000, 30000, 50000,
- 75000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000, 1100000,
- 1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1900000, 2000000, 2100000, 2200000,
- 2300000, 2400000, 2500000, 2600000, 2750000, 2900000, 3100000, 3400000, 3700000, 4000000};
+ 75000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000, 1100000,
+ 1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1900000, 2000000, 2100000, 2200000,
+ 2300000, 2400000, 2500000, 2600000, 2750000, 2900000, 3100000, 3400000, 3700000, 4000000};
+ static int[] dungeonsXPPerLevel = {0, 50, 75, 110, 160, 230, 330, 470, 670, 950, 1340, 1890, 2665, 3760, 5260, 7380, 10300, 14400,
+ 20000, 27600, 38000, 52500, 71500, 97000, 132000, 180000, 243000, 328000, 445000, 600000, 800000,
+ 1065000, 1410000, 1900000, 2500000, 3300000, 4300000, 5600000, 7200000, 9200000, 12000000, 15000000,
+ 19000000, 24000000, 30000000, 38000000, 48000000, 60000000, 75000000, 93000000, 116250000};
+ static int[] expertiseKills = {50, 100, 250, 500, 1000, 2500, 5500, 10000, 15000};
public static int getItems(String item) {
Minecraft mc = Minecraft.getMinecraft();
@@ -59,10 +66,11 @@ public class Utils {
public static List<String> getMatchingPlayers(String arg) {
List<String> matchingPlayers = new ArrayList<>();
- List<EntityPlayer> players = Minecraft.getMinecraft().theWorld.playerEntities;
+ Collection<NetworkPlayerInfo> players = Minecraft.getMinecraft().getNetHandler().getPlayerInfoMap();
- for (EntityPlayer player : players) {
- String playerName = player.getName();
+ for (NetworkPlayerInfo player : players) {
+ String playerName = player.getGameProfile().getName();
+ if (playerName.startsWith("!")) continue; // New tablist
if (playerName.toLowerCase().startsWith(arg.toLowerCase())) {
matchingPlayers.add(playerName);
}
@@ -187,4 +195,37 @@ public class Utils {
return 50D;
}
+ public static double xpToDungeonsLevel(double xp) {
+ for (int i = 0, xpAdded = 0; i < dungeonsXPPerLevel.length; i++) {
+ xpAdded += dungeonsXPPerLevel[i];
+ if (xp < xpAdded) {
+ double level = (i - 1) + (xp - (xpAdded - dungeonsXPPerLevel[i])) / dungeonsXPPerLevel[i];
+ return (double) Math.round(level * 100) / 100;
+ }
+ }
+ return 50D;
+ }
+
+ public static int expertiseKillsLeft(int kills) {
+ for (int i = 0; i < expertiseKills.length; i++) {
+ if (kills < expertiseKills[i]) {
+ return expertiseKills[i] - kills;
+ }
+ }
+ return -1;
+ }
+
+ public static int getPastXpEarned(int currentLevelXp) {
+ if (currentLevelXp == 0) return 55172425;
+ for (int i = 1, xpAdded = 0; i < skillXPPerLevel.length; i++) {
+ xpAdded += skillXPPerLevel[i - 1];
+ if (currentLevelXp == skillXPPerLevel[i]) return xpAdded;
+ }
+ return 0;
+ }
+
+ public static String getColouredBoolean(boolean bool) {
+ return bool ? EnumChatFormatting.GREEN + "On" : EnumChatFormatting.RED + "Off";
+ }
+
}