diff options
Diffstat (limited to 'me/Danker')
-rw-r--r-- | me/Danker/TheMod.java | 349 | ||||
-rw-r--r-- | me/Danker/commands/ArmourCommand.java | 140 | ||||
-rw-r--r-- | me/Danker/commands/DHelpCommand.java | 29 |
3 files changed, 331 insertions, 187 deletions
diff --git a/me/Danker/TheMod.java b/me/Danker/TheMod.java index 66a4fd8..c904886 100644 --- a/me/Danker/TheMod.java +++ b/me/Danker/TheMod.java @@ -7,6 +7,7 @@ import java.awt.TrayIcon; import java.text.NumberFormat; import java.util.List; +import me.Danker.commands.ArmourCommand; import me.Danker.commands.BankCommand; import me.Danker.commands.DHelpCommand; import me.Danker.commands.DisplayCommand; @@ -76,6 +77,7 @@ public class TheMod ClientCommandHandler.instance.registerCommand(new DHelpCommand()); ClientCommandHandler.instance.registerCommand(new PetsCommand()); ClientCommandHandler.instance.registerCommand(new BankCommand()); + ClientCommandHandler.instance.registerCommand(new ArmourCommand()); } // It randomly broke, so I had to make it the highest priority @@ -84,182 +86,183 @@ public class TheMod final ToggleCommand tc = new ToggleCommand(); String message = event.message.getUnformattedText(); - if (!message.contains(":")) { - if (tc.gpartyToggled) { - if (message.contains(" has invited all members of ")) { - System.out.println(message); - try { - final SystemTray tray = SystemTray.getSystemTray(); - final Image image = Toolkit.getDefaultToolkit().createImage("icon.png"); - final TrayIcon trayIcon = new TrayIcon(image, "Guild Party Notifier"); - trayIcon.setImageAutoSize(true); - trayIcon.setToolTip("Guild Party Notifier"); - tray.add(trayIcon); - trayIcon.displayMessage("Guild Party", message, TrayIcon.MessageType.INFO); - tray.remove(trayIcon); - } catch (Exception ex) { - System.err.print(ex); - } - } - } - - final LootCommand lc = new LootCommand(); - final ConfigHandler cf = new ConfigHandler(); - boolean wolfRNG = false; - boolean spiderRNG = false; - boolean zombieRNG = false; - // T6 books - if (message.contains("VERY RARE DROP! (Enchanted Book)")) { - // Loop through scoreboard to see what boss you're doing - List<String> scoreboard = ScoreboardHandler.getSidebarLines(); - for (String s : scoreboard) { - String sCleaned = ScoreboardHandler.cleanSB(s); - if (sCleaned.contains("Sven Packmaster")) { - lc.wolfBooks++; - cf.writeIntConfig("wolf", "book", lc.wolfBooks); - } else if (sCleaned.contains("Tarantula Broodfather")) { - lc.spiderBooks++; - cf.writeIntConfig("spider", "book", lc.spiderBooks); - } else if (sCleaned.contains("Revenant Horror")) { - lc.zombieBooks++; - cf.writeIntConfig("zombie", "book", lc.zombieBooks); - } - } - } - - // Wolf - if (message.contains("Talk to Maddox to claim your Wolf Slayer XP!")) { - lc.wolfSvens++; - if (lc.wolfBosses != -1) { - lc.wolfBosses++; - } - cf.writeIntConfig("wolf", "svens", lc.wolfSvens); - cf.writeIntConfig("wolf", "bossRNG", lc.wolfBosses); - } - // Removing the unicode here *should* fix rune drops not counting - if (message.contains("VERY RARE DROP! (") && message.contains(" Spirit Rune I)")) { - lc.wolfSpirits++; - cf.writeIntConfig("wolf", "spirit", lc.wolfSpirits); - } - if (message.contains("CRAZY RARE DROP! (Red Claw Egg)")) { - wolfRNG = true; - lc.wolfEggs++; - cf.writeIntConfig("wolf", "egg", lc.wolfEggs); - } - if (message.contains("CRAZY RARE DROP! (") && message.contains(" Couture Rune I)")) { - wolfRNG = true; - lc.wolfCoutures++; - cf.writeIntConfig("wolf", "couture", lc.wolfCoutures); - } - // 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)")) { - wolfRNG = true; - lc.wolfBaits++; - cf.writeIntConfig("wolf", "bait", lc.wolfBaits); - } - if (message.contains("CRAZY RARE DROP! (Overflux Capacitor)")) { - wolfRNG = true; - lc.wolfFluxes++; - cf.writeIntConfig("wolf", "flux", lc.wolfFluxes); - } + if (message.contains(":")) return; + + if (tc.gpartyToggled) { + if (message.contains(" has invited all members of ")) { + System.out.println(message); + try { + final SystemTray tray = SystemTray.getSystemTray(); + final Image image = Toolkit.getDefaultToolkit().createImage("icon.png"); + final TrayIcon trayIcon = new TrayIcon(image, "Guild Party Notifier"); + trayIcon.setImageAutoSize(true); + trayIcon.setToolTip("Guild Party Notifier"); + tray.add(trayIcon); + trayIcon.displayMessage("Guild Party", message, TrayIcon.MessageType.INFO); + tray.remove(trayIcon); + } catch (Exception ex) { + System.err.print(ex); + } + } + } - // Spider - if (message.contains("Talk to Maddox to claim your Spider Slayer XP!")) { - lc.spiderTarantulas++; - if (lc.spiderBosses != -1) { - lc.spiderBosses++; - } - cf.writeIntConfig("spider", "tarantulas", lc.spiderTarantulas); - cf.writeIntConfig("spider", "bossRNG", lc.spiderBosses); - } - if (message.contains("VERY RARE DROP! (") && message.contains(" Bite Rune I)")) { - lc.spiderBites++; - cf.writeIntConfig("spider", "bite", lc.spiderBites); - } - if (message.contains("VERY RARE DROP! (Spider Catalyst)")) { - lc.spiderCatalysts++; - cf.writeIntConfig("spider", "catalyst", lc.spiderCatalysts); - } - // T3 Spider Book Drop - if (message.contains("CRAZY RARE DROP! (Enchanted Book)")) { - lc.spiderBooks++; - cf.writeIntConfig("spider", "book", lc.spiderBooks); - } - if (message.contains("CRAZY RARE DROP! (Fly Swatter)")) { - spiderRNG = true; - lc.spiderSwatters++; - cf.writeIntConfig("spider", "swatter", lc.spiderSwatters); - } - if (message.contains("CRAZY RARE DROP! (Tarantula Talisman")) { - spiderRNG = true; - lc.spiderTalismans++; - cf.writeIntConfig("spider", "talisman", lc.spiderTalismans); - } - if (message.contains("CRAZY RARE DROP! (Digested Mosquito)")) { - spiderRNG = true; - lc.spiderMosquitos++; - cf.writeIntConfig("spider", "mosquito", lc.spiderMosquitos); - } + final LootCommand lc = new LootCommand(); + final ConfigHandler cf = new ConfigHandler(); + boolean wolfRNG = false; + boolean spiderRNG = false; + boolean zombieRNG = false; + // T6 books + if (message.contains("VERY RARE DROP! (Enchanted Book)")) { + // Loop through scoreboard to see what boss you're doing + List<String> scoreboard = ScoreboardHandler.getSidebarLines(); + for (String s : scoreboard) { + String sCleaned = ScoreboardHandler.cleanSB(s); + if (sCleaned.contains("Sven Packmaster")) { + lc.wolfBooks++; + cf.writeIntConfig("wolf", "book", lc.wolfBooks); + } else if (sCleaned.contains("Tarantula Broodfather")) { + lc.spiderBooks++; + cf.writeIntConfig("spider", "book", lc.spiderBooks); + } else if (sCleaned.contains("Revenant Horror")) { + lc.zombieBooks++; + cf.writeIntConfig("zombie", "book", lc.zombieBooks); + } + } + } - // Zombie - if (message.contains("Talk to Maddox to claim your Zombie Slayer XP!")) { - lc.zombieRevs++; - if (lc.zombieBosses != -1) { - lc.zombieBosses++; - } - cf.writeIntConfig("zombie", "revs", lc.zombieRevs); - cf.writeIntConfig("wolf", "bossRNG", lc.zombieBosses); - } - // I couldn't find a pic of someone getting this drop, so I'm assuming this works - if (message.contains("VERY RARE DROP! (Revenant Catalyst)")) { - lc.zombieRevCatas++; - cf.writeIntConfig("zombie", "revCatalyst", lc.zombieRevCatas); - } - if (message.contains("VERY RARE DROP! (") && message.contains(" Pestilence Rune I)")) { - lc.zombiePestilences++; - cf.writeIntConfig("zombie", "pestilence", lc.zombiePestilences); - } - if (message.contains("VERY RARE DROP! (Undead Catalyst)")) { - lc.zombieUndeadCatas++; - cf.writeIntConfig("zombie", "undeadCatalyst", lc.zombieUndeadCatas); - } - if (message.contains("CRAZY RARE DROP! (Beheaded Horror)")) { - zombieRNG = true; - lc.zombieBeheadeds++; - cf.writeIntConfig("zombie", "beheaded", lc.zombieBeheadeds); - } - if (message.contains("CRAZY RARE DROP! (") && message.contains(" Snake Rune I)")) { - zombieRNG = true; - lc.zombieSnakes++; - cf.writeIntConfig("zombie", "snake", lc.zombieSnakes); - } - if (message.contains("CRAZY RARE DROP! (Scythe Blade)")) { - zombieRNG = true; - lc.zombieScythes++; - cf.writeIntConfig("zombie", "scythe", lc.zombieScythes); - } + // Wolf + if (message.contains("Talk to Maddox to claim your Wolf Slayer XP!")) { + lc.wolfSvens++; + if (lc.wolfBosses != -1) { + lc.wolfBosses++; + } + cf.writeIntConfig("wolf", "svens", lc.wolfSvens); + cf.writeIntConfig("wolf", "bossRNG", lc.wolfBosses); + } + // Removing the unicode here *should* fix rune drops not counting + if (message.contains("VERY RARE DROP! (") && message.contains(" Spirit Rune I)")) { + lc.wolfSpirits++; + cf.writeIntConfig("wolf", "spirit", lc.wolfSpirits); + } + if (message.contains("CRAZY RARE DROP! (Red Claw Egg)")) { + wolfRNG = true; + lc.wolfEggs++; + cf.writeIntConfig("wolf", "egg", lc.wolfEggs); + } + if (message.contains("CRAZY RARE DROP! (") && message.contains(" Couture Rune I)")) { + wolfRNG = true; + lc.wolfCoutures++; + cf.writeIntConfig("wolf", "couture", lc.wolfCoutures); + } + // 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)")) { + wolfRNG = true; + lc.wolfBaits++; + cf.writeIntConfig("wolf", "bait", lc.wolfBaits); + } + if (message.contains("CRAZY RARE DROP! (Overflux Capacitor)")) { + wolfRNG = true; + lc.wolfFluxes++; + cf.writeIntConfig("wolf", "flux", lc.wolfFluxes); + } - // Time is stored in seconds, so if Skyblock - // survives until 2038, I'll just update it then - if (wolfRNG) { - lc.wolfTime = (int) System.currentTimeMillis() / 1000; - lc.wolfBosses = 0; - cf.writeIntConfig("wolf", "timeRNG", lc.wolfTime); - cf.writeIntConfig("wolf", "bossRNG", 0); - } - if (spiderRNG) { - lc.spiderTime = (int) System.currentTimeMillis() / 1000; - lc.spiderBosses = 0; - cf.writeIntConfig("spider", "timeRNG", lc.spiderTime); - cf.writeIntConfig("spider", "bossRNG", 0); - } - if (zombieRNG) { - lc.zombieTime = (int) System.currentTimeMillis() / 1000; - lc.zombieBosses = 0; - cf.writeIntConfig("zombie", "timeRNG", lc.zombieTime); - cf.writeIntConfig("zombie", "bossRNG", 0); - } - } + // Spider + if (message.contains("Talk to Maddox to claim your Spider Slayer XP!")) { + lc.spiderTarantulas++; + if (lc.spiderBosses != -1) { + lc.spiderBosses++; + } + cf.writeIntConfig("spider", "tarantulas", lc.spiderTarantulas); + cf.writeIntConfig("spider", "bossRNG", lc.spiderBosses); + } + if (message.contains("VERY RARE DROP! (") && message.contains(" Bite Rune I)")) { + lc.spiderBites++; + cf.writeIntConfig("spider", "bite", lc.spiderBites); + } + if (message.contains("VERY RARE DROP! (Spider Catalyst)")) { + lc.spiderCatalysts++; + cf.writeIntConfig("spider", "catalyst", lc.spiderCatalysts); + } + // T3 Spider Book Drop + if (message.contains("CRAZY RARE DROP! (Enchanted Book)")) { + lc.spiderBooks++; + cf.writeIntConfig("spider", "book", lc.spiderBooks); + } + if (message.contains("CRAZY RARE DROP! (Fly Swatter)")) { + spiderRNG = true; + lc.spiderSwatters++; + cf.writeIntConfig("spider", "swatter", lc.spiderSwatters); + } + if (message.contains("CRAZY RARE DROP! (Tarantula Talisman")) { + spiderRNG = true; + lc.spiderTalismans++; + cf.writeIntConfig("spider", "talisman", lc.spiderTalismans); + } + if (message.contains("CRAZY RARE DROP! (Digested Mosquito)")) { + spiderRNG = true; + lc.spiderMosquitos++; + cf.writeIntConfig("spider", "mosquito", lc.spiderMosquitos); + } + + // Zombie + if (message.contains("Talk to Maddox to claim your Zombie Slayer XP!")) { + lc.zombieRevs++; + if (lc.zombieBosses != -1) { + lc.zombieBosses++; + } + cf.writeIntConfig("zombie", "revs", lc.zombieRevs); + cf.writeIntConfig("wolf", "bossRNG", lc.zombieBosses); + } + // I couldn't find a pic of someone getting this drop, so I'm assuming this + // works + if (message.contains("VERY RARE DROP! (Revenant Catalyst)")) { + lc.zombieRevCatas++; + cf.writeIntConfig("zombie", "revCatalyst", lc.zombieRevCatas); + } + if (message.contains("VERY RARE DROP! (") && message.contains(" Pestilence Rune I)")) { + lc.zombiePestilences++; + cf.writeIntConfig("zombie", "pestilence", lc.zombiePestilences); + } + if (message.contains("VERY RARE DROP! (Undead Catalyst)")) { + lc.zombieUndeadCatas++; + cf.writeIntConfig("zombie", "undeadCatalyst", lc.zombieUndeadCatas); + } + if (message.contains("CRAZY RARE DROP! (Beheaded Horror)")) { + zombieRNG = true; + lc.zombieBeheadeds++; + cf.writeIntConfig("zombie", "beheaded", lc.zombieBeheadeds); + } + if (message.contains("CRAZY RARE DROP! (") && message.contains(" Snake Rune I)")) { + zombieRNG = true; + lc.zombieSnakes++; + cf.writeIntConfig("zombie", "snake", lc.zombieSnakes); + } + if (message.contains("CRAZY RARE DROP! (Scythe Blade)")) { + zombieRNG = true; + lc.zombieScythes++; + cf.writeIntConfig("zombie", "scythe", lc.zombieScythes); + } + + // Time is stored in seconds, so if Skyblock + // survives until 2038, I'll just update it then + if (wolfRNG) { + lc.wolfTime = (int) System.currentTimeMillis() / 1000; + lc.wolfBosses = 0; + cf.writeIntConfig("wolf", "timeRNG", lc.wolfTime); + cf.writeIntConfig("wolf", "bossRNG", 0); + } + if (spiderRNG) { + lc.spiderTime = (int) System.currentTimeMillis() / 1000; + lc.spiderBosses = 0; + cf.writeIntConfig("spider", "timeRNG", lc.spiderTime); + cf.writeIntConfig("spider", "bossRNG", 0); + } + if (zombieRNG) { + lc.zombieTime = (int) System.currentTimeMillis() / 1000; + lc.zombieBosses = 0; + cf.writeIntConfig("zombie", "timeRNG", lc.zombieTime); + cf.writeIntConfig("zombie", "bossRNG", 0); + } } @SubscribeEvent diff --git a/me/Danker/commands/ArmourCommand.java b/me/Danker/commands/ArmourCommand.java new file mode 100644 index 0000000..4d89bcd --- /dev/null +++ b/me/Danker/commands/ArmourCommand.java @@ -0,0 +1,140 @@ +package me.Danker.commands; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Base64; +import java.util.Collections; +import java.util.List; + +import com.google.gson.JsonObject; + +import me.Danker.handlers.APIHandler; +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.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +public class ArmourCommand extends CommandBase { + + @Override + public String getCommandName() { + return "armor"; + } + + @Override + public List<String> getCommandAliases() + { + return Collections.singletonList("armour"); + } + + @Override + public String getCommandUsage(ICommandSender arg0) { + return getCommandName() + " [name]"; + } + + @Override + public int getRequiredPermissionLevel() { + return 0; + } + + @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 armour of " + EnumChatFormatting.DARK_GREEN + username)); + } else { + username = arg1[0]; + player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking armour 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; + } + + String armourBase64 = profileResponse.get("profile").getAsJsonObject().get("members").getAsJsonObject().get(uuid).getAsJsonObject().get("inv_armor").getAsJsonObject().get("data").getAsString(); + InputStream armourStream = new ByteArrayInputStream(Base64.getDecoder().decode(armourBase64)); + // String armourDecodedGZIP = new String(Base64.getDecoder().decode(armourBase64)); + + try { + NBTTagCompound armour = CompressedStreamTools.readCompressed(armourStream); + NBTTagList armourList = armour.getTagList("i", 10); + + String helmet = EnumChatFormatting.RED + "None"; + String chest = EnumChatFormatting.RED + "None"; + String legs = EnumChatFormatting.RED + "None"; + String boots = EnumChatFormatting.RED + "None"; + // Loop through armour + for (int i = 0; i < armourList.tagCount(); i++) { + NBTTagCompound armourPiece = armourList.getCompoundTagAt(i); + if (armourPiece.hasNoTags()) continue; + + String armourPieceName = armourPiece.getCompoundTag("tag").getCompoundTag("display").getString("Name"); + // NBT is served boots -> helmet + switch (i) { + case 0: + boots = armourPieceName; + break; + case 1: + legs = armourPieceName; + break; + case 2: + chest = armourPieceName; + break; + case 3: + helmet = armourPieceName; + break; + default: + System.err.println("An error has occurred."); + break; + } + } + armourStream.close(); + + player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" + + EnumChatFormatting.AQUA + " " + username + "'s Armour:\n" + + EnumChatFormatting.GREEN + " Helmet: " + helmet + "\n" + + EnumChatFormatting.GREEN + " Chestplate: " + chest + "\n" + + EnumChatFormatting.GREEN + " Leggings: " + legs + "\n" + + EnumChatFormatting.GREEN + " Boots: " + boots + "\n" + + EnumChatFormatting.AQUA + " " + EnumChatFormatting.BOLD + "-------------------")); + } catch (IOException ex) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "An error has occurred while reading inventory data. See logs for more info.")); + System.err.println(ex); + } + }).start(); + } + +} diff --git a/me/Danker/commands/DHelpCommand.java b/me/Danker/commands/DHelpCommand.java index 34b1dec..e086813 100644 --- a/me/Danker/commands/DHelpCommand.java +++ b/me/Danker/commands/DHelpCommand.java @@ -28,20 +28,21 @@ public class DHelpCommand extends CommandBase { public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException { EntityPlayer player = (EntityPlayer) arg0; - player.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + "Danker's Skyblock Mod Version 1.5.3\n" + - EnumChatFormatting.AQUA + "<> = Mandatory parameter. [] = Optional parameter.\n" + - EnumChatFormatting.GOLD + "/dhelp" + EnumChatFormatting.AQUA + " - Returns this message.\n" + - EnumChatFormatting.GOLD + "/toggle <gparty/coords/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.\n" + - EnumChatFormatting.GOLD + "/loot <zombie/spider/wolf>" + EnumChatFormatting.AQUA + " - Returns loot received from slayer quests.\n" + - EnumChatFormatting.GOLD + "/display <zombie/spider/wolf/off>" + EnumChatFormatting.AQUA + " - Text display for slayer tracker.\n" + - EnumChatFormatting.GOLD + "/move <coords/display> <x> <y>" + EnumChatFormatting.AQUA + " - Moves text display to specified X and Y coordinates.\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 + "/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 + "/pets [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")); + player.addChatMessage(new ChatComponentText("\n" + EnumChatFormatting.GOLD + " Danker's Skyblock Mod Version 1.5.3\n" + + EnumChatFormatting.AQUA + " <> = Mandatory parameter. [] = Optional parameter.\n" + + EnumChatFormatting.GOLD + " /dhelp" + EnumChatFormatting.AQUA + " - Returns this message.\n" + + EnumChatFormatting.GOLD + " /toggle <gparty/coords/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.\n" + + EnumChatFormatting.GOLD + " /loot <zombie/spider/wolf>" + EnumChatFormatting.AQUA + " - Returns loot received from slayer quests.\n" + + EnumChatFormatting.GOLD + " /display <zombie/spider/wolf/off>" + EnumChatFormatting.AQUA + " - Text display for slayer tracker.\n" + + EnumChatFormatting.GOLD + " /move <coords/display> <x> <y>" + EnumChatFormatting.AQUA + " - Moves text display to specified X and Y coordinates.\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 + " /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 + " /pets [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")); } } |