diff options
| author | bowser0000 <bowser0000@gmail.com> | 2020-08-08 23:07:53 -0400 |
|---|---|---|
| committer | bowser0000 <bowser0000@gmail.com> | 2020-08-08 23:07:53 -0400 |
| commit | fddf14fd04c50e02704c946d8893a3604f1abb11 (patch) | |
| tree | a0dbf80dc346a460c865e97e79cd4ce15af361bf /src/main/java/me/Danker/commands | |
| parent | 91aa2e90f5d802bb88b17f6a818e948823888e7b (diff) | |
| download | SkyblockMod-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')
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; + + |
