aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/Danker/commands
diff options
context:
space:
mode:
authorbowser0000 <bowser0000@gmail.com>2020-08-08 23:07:53 -0400
committerbowser0000 <bowser0000@gmail.com>2020-08-08 23:07:53 -0400
commitfddf14fd04c50e02704c946d8893a3604f1abb11 (patch)
treea0dbf80dc346a460c865e97e79cd4ce15af361bf /src/main/java/me/Danker/commands
parent91aa2e90f5d802bb88b17f6a818e948823888e7b (diff)
downloadSkyblockMod-fddf14fd04c50e02704c946d8893a3604f1abb11.tar.gz
SkyblockMod-fddf14fd04c50e02704c946d8893a3604f1abb11.tar.bz2
SkyblockMod-fddf14fd04c50e02704c946d8893a3604f1abb11.zip
v1.6.1
Add all build files
Diffstat (limited to 'src/main/java/me/Danker/commands')
-rw-r--r--src/main/java/me/Danker/commands/ArmourCommand.java150
-rw-r--r--src/main/java/me/Danker/commands/BankCommand.java115
-rw-r--r--src/main/java/me/Danker/commands/DHelpCommand.java52
-rw-r--r--src/main/java/me/Danker/commands/DisplayCommand.java108
-rw-r--r--src/main/java/me/Danker/commands/GetkeyCommand.java41
-rw-r--r--src/main/java/me/Danker/commands/GuildOfCommand.java116
-rw-r--r--src/main/java/me/Danker/commands/ImportFishingCommand.java233
-rw-r--r--src/main/java/me/Danker/commands/LootCommand.java533
-rw-r--r--src/main/java/me/Danker/commands/MoveCommand.java69
-rw-r--r--src/main/java/me/Danker/commands/PetsCommand.java247
-rw-r--r--src/main/java/me/Danker/commands/ReloadConfigCommand.java36
-rw-r--r--src/main/java/me/Danker/commands/ResetLootCommand.java181
-rw-r--r--src/main/java/me/Danker/commands/ScaleCommand.java70
-rw-r--r--src/main/java/me/Danker/commands/SetkeyCommand.java43
-rw-r--r--src/main/java/me/Danker/commands/SkillsCommand.java334
-rw-r--r--src/main/java/me/Danker/commands/SlayerCommand.java112
-rw-r--r--src/main/java/me/Danker/commands/ToggleCommand.java83
17 files changed, 2523 insertions, 0 deletions
diff --git a/src/main/java/me/Danker/commands/ArmourCommand.java b/src/main/java/me/Danker/commands/ArmourCommand.java
new file mode 100644
index 0000000..255825c
--- /dev/null
+++ b/src/main/java/me/Danker/commands/ArmourCommand.java
@@ -0,0 +1,150 @@
+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 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.nbt.CompressedStreamTools;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.BlockPos;
+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 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 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/src/main/java/me/Danker/commands/BankCommand.java b/src/main/java/me/Danker/commands/BankCommand.java
new file mode 100644
index 0000000..e32e66f
--- /dev/null
+++ b/src/main/java/me/Danker/commands/BankCommand.java
@@ -0,0 +1,115 @@
+package me.Danker.commands;
+
+import java.text.NumberFormat;
+import java.util.Collections;
+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 BankCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "bank";
+ }
+
+ @Override
+ public List<String> getCommandAliases()
+ {
+ return Collections.singletonList("purse");
+ }
+
+ @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 coins of " + EnumChatFormatting.DARK_GREEN + username));
+ } else {
+ username = arg1[0];
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking coins 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 bank + purse coins...");
+ double purseCoins = profileResponse.get("profile").getAsJsonObject().get("members").getAsJsonObject().get(uuid).getAsJsonObject().get("coin_purse").getAsDouble();
+ purseCoins = (double) Math.floor(purseCoins * 100.0) / 100.0;
+
+ // Check for bank api
+ if (profileResponse.get("profile").getAsJsonObject().has("banking")) {
+ double bankCoins = profileResponse.get("profile").getAsJsonObject().get("banking").getAsJsonObject().get("balance").getAsDouble();
+ bankCoins = (double) Math.floor(bankCoins * 100.0) / 100.0;
+
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.AQUA + " " + username + "'s Coins:\n" +
+ EnumChatFormatting.GREEN + " Bank: " + EnumChatFormatting.GOLD + NumberFormat.getInstance().format(bankCoins) + "\n" +
+ EnumChatFormatting.GREEN + " Purse: " + EnumChatFormatting.GOLD + NumberFormat.getInstance().format(purseCoins) + "\n" +
+ EnumChatFormatting.AQUA + " " + EnumChatFormatting.BOLD + "-------------------"));
+ } else {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.AQUA + " " + username + "'s Coins:\n" +
+ EnumChatFormatting.GREEN + " Bank: " + EnumChatFormatting.RED + "Bank API disabled.\n" +
+ EnumChatFormatting.GREEN + " Purse: " + EnumChatFormatting.GOLD + NumberFormat.getInstance().format(purseCoins) + "\n" +
+ EnumChatFormatting.AQUA + " " + EnumChatFormatting.BOLD + "-------------------"));
+ }
+ }).start();
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/DHelpCommand.java b/src/main/java/me/Danker/commands/DHelpCommand.java
new file mode 100644
index 0000000..9ca6a6e
--- /dev/null
+++ b/src/main/java/me/Danker/commands/DHelpCommand.java
@@ -0,0 +1,52 @@
+package me.Danker.commands;
+
+import me.Danker.TheMod;
+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 DHelpCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "dhelp";
+ }
+
+ @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 player = (EntityPlayer) arg0;
+
+ player.addChatMessage(new ChatComponentText("\n" + EnumChatFormatting.GOLD + " " + TheMod.MODID + " Version " + TheMod.VERSION + "\n" +
+ EnumChatFormatting.AQUA + " <> = Mandatory parameter. [] = Optional parameter.\n" +
+ EnumChatFormatting.GOLD + " /dhelp" + EnumChatFormatting.AQUA + " - Returns this message.\n" +
+ EnumChatFormatting.GOLD + " /toggle <gparty/coords/golden/slayercount/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/fishing> [winter/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/off> [winter/session]" + EnumChatFormatting.AQUA + " - Text display for trackers. /display fishing winter displays winter sea creatures instead.\n" +
+ EnumChatFormatting.GOLD + " /resetloot <zombie/spider/wolf/fishing/confirm/cancel>" + EnumChatFormatting.AQUA + " - Resets loot for trackers. /resetloot confirm confirms the reset.\n" +
+ EnumChatFormatting.GOLD + " /move <coords/display> <x> <y>" + EnumChatFormatting.AQUA + " - Moves text display to specified X and Y coordinates.\n" +
+ EnumChatFormatting.GOLD + " /scale <coords/display> <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 + " /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 + " /importfishing" + EnumChatFormatting.AQUA + " - Imports your fishing stats from your latest profile to your fishing tracker using the API.\n"));
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/DisplayCommand.java b/src/main/java/me/Danker/commands/DisplayCommand.java
new file mode 100644
index 0000000..916245e
--- /dev/null
+++ b/src/main/java/me/Danker/commands/DisplayCommand.java
@@ -0,0 +1,108 @@
+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 DisplayCommand extends CommandBase {
+ public static String display;
+
+ @Override
+ public String getCommandName() {
+ return "display";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return getCommandName() + " <zombie/spider/wolf/fishing/off> [winter/session]";
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
+ if (args.length == 1) {
+ return getListOfStringsMatchingLastWord(args, "wolf", "spider", "zombie", "fishing", "off");
+ } else if (args.length == 2 && args[0].equalsIgnoreCase("fishing")) {
+ return getListOfStringsMatchingLastWord(args, "winter", "session");
+ } else if (args.length == 2 || (args.length == 3 && args[0].equalsIgnoreCase("fishing") && args[1].equalsIgnoreCase("winter"))) {
+ return getListOfStringsMatchingLastWord(args, "session");
+ }
+ return null;
+ }
+
+ @Override
+ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException {
+ final EntityPlayer player = (EntityPlayer) arg0;
+
+ if (arg1.length == 0) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /display <zombie/spider/wolf/fishing/off> [winter/session]"));
+ return;
+ }
+
+ final ConfigHandler cf = new ConfigHandler();
+ boolean showSession = false;
+
+ if (arg1.length > 1) {
+ if (arg1[1].equalsIgnoreCase("session")) {
+ showSession = true;
+ } else if (arg1.length > 2) {
+ if (arg1[2].equalsIgnoreCase("session")) {
+ showSession = true;
+ }
+ }
+ }
+
+ if (arg1[0].equalsIgnoreCase("wolf")) {
+ if (showSession) {
+ display = "wolf_session";
+ } else {
+ display = "wolf";
+ }
+ } else if (arg1[0].equalsIgnoreCase("spider")) {
+ if (showSession) {
+ display = "spider_session";
+ } else {
+ display = "spider";
+ }
+ } else if (arg1[0].equalsIgnoreCase("zombie")) {
+ if (showSession) {
+ display = "zombie_session";
+ } else {
+ display = "zombie";
+ }
+ } else if (arg1[0].equalsIgnoreCase("fishing")) {
+ if (arg1.length > 1 && arg1[1].equalsIgnoreCase("winter")) {
+ if (showSession) {
+ display = "fishing_winter_session";
+ } else {
+ display = "fishing_winter";
+ }
+ } else {
+ if (showSession) {
+ display = "fishing_session";
+ } else {
+ display = "fishing";
+ }
+ }
+ } else if (arg1[0].equalsIgnoreCase("off")) {
+ display = "off";
+ } else {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Usage: /display <zombie/spider/wolf/fishing/off> [winter/session]"));
+ return;
+ }
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Display set to " + EnumChatFormatting.DARK_GREEN + display + EnumChatFormatting.GREEN + "."));
+ cf.writeStringConfig("misc", "display", display);
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/GetkeyCommand.java b/src/main/java/me/Danker/commands/GetkeyCommand.java
new file mode 100644
index 0000000..80354fe
--- /dev/null
+++ b/src/main/java/me/Danker/commands/GetkeyCommand.java
@@ -0,0 +1,41 @@
+package me.Danker.commands;
+
+import me.Danker.handlers.ConfigHandler;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.CommandException;
+import net.minecraft.command.ICommand;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+
+public class GetkeyCommand extends CommandBase implements ICommand {
+
+ @Override
+ public String getCommandName() {
+ return "getkey";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return getCommandName();
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandException {
+ final EntityPlayer player = (EntityPlayer)arg0;
+ final ConfigHandler cf = new ConfigHandler();
+
+ if (cf.getString("api", "APIKey").equals("")) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "API key not set. Set your API key using /setkey."));
+ } else {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Your set API key is " + EnumChatFormatting.DARK_GREEN + cf.getString("api", "APIKey")));
+ }
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/GuildOfCommand.java b/src/main/java/me/Danker/commands/GuildOfCommand.java
new file mode 100644
index 0000000..238ba81
--- /dev/null
+++ b/src/main/java/me/Danker/commands/GuildOfCommand.java
@@ -0,0 +1,116 @@
+package me.Danker.commands;
+
+import java.util.List;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+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 GuildOfCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "guildof";
+ }
+
+ @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 guild of " + EnumChatFormatting.DARK_GREEN + username));
+ } else {
+ username = arg1[0];
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking guild of " + EnumChatFormatting.DARK_GREEN + username));
+ uuid = ah.getUUID(username);
+ }
+
+ // Find guild ID
+ System.out.println("Fetching guild...");
+ String guildURL = "https://api.hypixel.net/guild?player=" + uuid + "&key=" + key;
+ JsonObject guildResponse = ah.getResponse(guildURL);
+ if (!guildResponse.get("success").getAsBoolean()) {
+ String reason = guildResponse.get("cause").getAsString();
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason));
+ return;
+ }
+
+ System.out.println("Fetching guild stats and members...");
+
+ String guildName = "N/A";
+ String guildMaster = "N/A";
+ // 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();
+ for (JsonElement member : guildMembers) {
+ JsonObject memberObject = member.getAsJsonObject();
+ String memberRank = memberObject.get("rank").getAsString();
+
+ if (memberRank.equals("GUILDMASTER") || memberRank.equals("Guild Master")) {
+ // Get username from UUID
+ String gmUUID = memberObject.get("uuid").getAsString();
+ String gmNameURL = "https://api.mojang.com/user/profiles/" + gmUUID + "/names";
+ JsonArray gmNameResponse = ah.getArrayResponse(gmNameURL);
+
+ guildMaster = gmNameResponse.get(gmNameResponse.size() - 1).getAsJsonObject().get("name").getAsString();
+ break;
+ }
+ }
+ }
+
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ 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.AQUA + " " + EnumChatFormatting.BOLD + "-------------------"));
+ }).start();
+ }
+
+}
diff --git a/src/main/java/me/Danker/commands/ImportFishingCommand.java b/src/main/java/me/Danker/commands/ImportFishingCommand.java
new file mode 100644
index 0000000..bbbcb9f
--- /dev/null
+++ b/src/main/java/me/Danker/commands/ImportFishingCommand.java
@@ -0,0 +1,233 @@
+package me.Danker.commands;
+
+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.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+
+public class ImportFishingCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "importfishing";
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return getCommandName();
+ }
+
+ @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();
+ LootCommand lc = new LootCommand();
+ 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."));
+ }
+
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Importing your fishing stats..."));
+
+ // Get UUID for Hypixel API requests
+ String username = player.getName();
+ String uuid = player.getUniqueID().toString().replaceAll("[\\-]", "");
+
+ 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 fishing stats...");
+ JsonObject statsObject = profileResponse.get("profile").getAsJsonObject().get("members").getAsJsonObject().get(uuid).getAsJsonObject().get("stats").getAsJsonObject();
+
+ lc.greatCatches = 0;
+ lc.goodCatches = 0;
+ if (statsObject.has("items_fished_treasure")) {
+ if (statsObject.has("items_fished_large_treasure")) {
+ lc.greatCatches = statsObject.get("items_fished_large_treasure").getAsInt();
+ lc.goodCatches = statsObject.get("items_fished_treasure").getAsInt() - lc.greatCatches;
+ } else {
+ lc.goodCatches = statsObject.get("items_fished_treasure").getAsInt();
+ }
+ }
+
+ lc.seaCreatures = 0;
+ lc.squids = 0;
+ if (statsObject.has("kills_pond_squid")) {
+ lc.squids = statsObject.get("kills_pond_squid").getAsInt();
+ }
+ lc.seaCreatures += lc.squids;
+
+ lc.seaWalkers = 0;
+ if (statsObject.has("kills_sea_walker")) {
+ lc.seaWalkers = statsObject.get("kills_sea_walker").getAsInt();
+ }
+ lc.seaCreatures += lc.seaWalkers;
+
+ lc.nightSquids = 0;
+ if (statsObject.has("kills_night_squid")) {
+ lc.nightSquids = statsObject.get("kills_night_squid").getAsInt();
+ }
+ lc.seaCreatures += lc.nightSquids;
+
+ lc.seaGuardians = 0;
+ if (statsObject.has("kills_sea_guardian")) {
+ lc.seaGuardians = statsObject.get("kills_sea_guardian").getAsInt();
+ }
+ lc.seaCreatures += lc.seaGuardians;
+
+ lc.seaWitches = 0;
+ if (statsObject.has("kills_sea_witch")) {
+ lc.seaWitches = statsObject.get("kills_sea_witch").getAsInt();
+ }
+ lc.seaCreatures += lc.seaWitches;
+
+ lc.seaArchers = 0;
+ if (statsObject.has("kills_sea_archer")) {
+ lc.seaArchers = statsObject.get("kills_sea_archer").getAsInt();
+ }
+ lc.seaCreatures += lc.seaArchers;
+
+ lc.monsterOfTheDeeps = 0;
+ if (statsObject.has("kills_zombie_deep")) {
+ if (statsObject.has("kills_chicken_deep")) {
+ lc.monsterOfTheDeeps = statsObject.get("kills_zombie_deep").getAsInt() + statsObject.get("kills_chicken_deep").getAsInt();
+ } else {
+ lc.monsterOfTheDeeps = statsObject.get("kills_zombie_deep").getAsInt();
+ }
+ } else if (statsObject.has("kills_chicken_deep")) {
+ lc.monsterOfTheDeeps = statsObject.get("kills_chicken_deep").getAsInt();
+ }
+ lc.seaCreatures += lc.monsterOfTheDeeps;
+
+ lc.catfishes = 0;
+ if (statsObject.has("kills_catfish")) {
+ lc.catfishes = statsObject.get("kills_catfish").getAsInt();
+ }
+ lc.seaCreatures += lc.catfishes;
+
+ lc.carrotKings = 0;
+ if (statsObject.has("kills_carrot_king")) {
+ lc.carrotKings = statsObject.get("kills_carrot_king").getAsInt();
+ }
+ lc.seaCreatures += lc.carrotKings;
+
+ lc.seaLeeches = 0;
+ if (statsObject.has("kills_sea_leech")) {
+ lc.seaLeeches = statsObject.get("kills_sea_leech").getAsInt();
+ }
+ lc.seaCreatures += lc.seaLeeches;
+
+ lc.guardianDefenders = 0;
+ if (statsObject.has("kills_guardian_defender")) {
+ lc.guardianDefenders = statsObject.get("kills_guardian_defender").getAsInt();
+ }
+ lc.seaCreatures += lc.guardianDefenders;
+
+ lc.deepSeaProtectors = 0;
+ if (statsObject.has("kills_deep_sea_protector")) {
+ lc.deepSeaProtectors = statsObject.get("kills_deep_sea_protector").getAsInt();
+ }
+ lc.seaCreatures += lc.deepSeaProtectors;
+
+ lc.hydras = 0;
+ if (statsObject.has("kills_water_hydra")) {
+ // Hydra splits
+ lc.hydras = statsObject.get("kills_water_hydra").getAsInt() / 2;
+ }
+ lc.seaCreatures += lc.hydras;
+
+ lc.seaEmperors = 0;
+ if (statsObject.has("kills_skeleton_emperor")) {
+ if (statsObject.has("kills_guardian_emperor")) {
+ lc.seaEmperors = statsObject.get("kills_skeleton_emperor").getAsInt() + statsObject.get("kills_guardian_emperor").getAsInt();
+ } else {
+ lc.seaEmperors = statsObject.get("kills_skeleton_emperor").getAsInt();
+ }
+ } else if (statsObject.has("kills_guardian_emperor")) {
+ lc.seaEmperors = statsObject.get("kills_guardian_emperor").getAsInt();
+ }
+ lc.seaCreatures += lc.seaEmperors;
+
+ lc.fishingMilestone = 0;
+ if (statsObject.has("pet_milestone_sea_creatures_killed")) {
+ lc.fishingMilestone = statsObject.get("pet_milestone_sea_creatures_killed").getAsInt();
+ }
+
+ lc.frozenSteves = 0;
+ if (statsObject.has("kills_frozen_steve")) {
+ lc.frozenSteves = statsObject.get("kills_frozen_steve").getAsInt();
+ }
+ lc.seaCreatures += lc.frozenSteves;
+
+