diff options
author | bowser0000 <bowser0000@gmail.com> | 2020-07-18 22:26:30 -0400 |
---|---|---|
committer | bowser0000 <bowser0000@gmail.com> | 2020-07-18 22:26:30 -0400 |
commit | d1f260be47ea166e77b2e25cd07d6b08ec3e767d (patch) | |
tree | 0acc0db6c83d0cc0c5943809ca15dd6660de902d /me/Danker/commands/SlayerCommand.java | |
parent | 94b09d4895ccffcbb3f96eabb1a5e935fc5221b6 (diff) | |
download | SkyblockMod-d1f260be47ea166e77b2e25cd07d6b08ec3e767d.tar.gz SkyblockMod-d1f260be47ea166e77b2e25cd07d6b08ec3e767d.tar.bz2 SkyblockMod-d1f260be47ea166e77b2e25cd07d6b08ec3e767d.zip |
Add /slayer, API handling and better number formatsv1.5
Added API handler which should make future API commands easier to add. Added /slayer command. Added format to numbers based on locale.
Diffstat (limited to 'me/Danker/commands/SlayerCommand.java')
-rw-r--r-- | me/Danker/commands/SlayerCommand.java | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/me/Danker/commands/SlayerCommand.java b/me/Danker/commands/SlayerCommand.java new file mode 100644 index 0000000..ec23606 --- /dev/null +++ b/me/Danker/commands/SlayerCommand.java @@ -0,0 +1,133 @@ +package me.Danker.commands; + +import java.text.NumberFormat; + +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 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 SlayerCommand extends CommandBase { + + @Override + public String getCommandName() { + return "slayer"; + } + + @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 slayer of " + username)); + } else { + username = arg1[0]; + String uuidURL = "https://api.mojang.com/users/profiles/minecraft/" + username; + player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Checking slayer of " + username)); + + JsonObject uuidResponse = ah.getResponse(uuidURL, player); + uuid = uuidResponse.get("id").getAsString(); + } + + // Get profiles + System.out.println("Fetching profiles..."); + String profilesURL = "https://api.hypixel.net/skyblock/profiles?uuid=" + uuid + "&key=" + key; + + JsonObject profilesResponse = ah.getResponse(profilesURL, player); + if (!profilesResponse.get("success").getAsBoolean()) { + String reason = profilesResponse.get("cause").getAsString(); + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason)); + return; + } + if (profilesResponse.get("profiles").isJsonNull()) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This player doesn't appear to have played SkyBlock.")); + return; + } + + // Loop through profiles to find latest + System.out.println("Looping through profiles..."); + String latestProfile = ""; + int latestSave = 0; + JsonArray profilesArray = profilesResponse.get("profiles").getAsJsonArray(); + + for (JsonElement profile : profilesArray) { + JsonObject profileJSON = profile.getAsJsonObject(); + int profileLastSave = profileJSON.get("members").getAsJsonObject().get(uuid).getAsJsonObject().get("last_save").getAsInt(); + + if (profileLastSave > latestSave) { + latestProfile = profileJSON.get("profile_id").getAsString(); + latestSave = profileLastSave; + } + } + + // Find stats of latest profile + System.out.println("Fetching profile..."); + String profileURL = "https://api.hypixel.net/skyblock/profile?profile=" + latestProfile + "&key=" + key; + + JsonObject profileResponse = ah.getResponse(profileURL, player); + if (!profileResponse.get("success").getAsBoolean()) { + String reason = profilesResponse.get("cause").getAsString(); + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason)); + return; + } + + System.out.println("Fetching slayer stats..."); + JsonObject slayersObject = profileResponse.get("profile").getAsJsonObject().get("members").getAsJsonObject().get(uuid).getAsJsonObject().get("slayer_bosses").getAsJsonObject(); + // Zombie + int zombieXP = 0; + if (slayersObject.get("zombie").getAsJsonObject().has("xp")) { + zombieXP = slayersObject.get("zombie").getAsJsonObject().get("xp").getAsInt(); + } + // Spider + int spiderXP = 0; + if (slayersObject.get("spider").getAsJsonObject().has("xp")) { + spiderXP = slayersObject.get("spider").getAsJsonObject().get("xp").getAsInt(); + } + // Wolf + int wolfXP = 0; + if (slayersObject.get("wolf").getAsJsonObject().has("xp")) { + wolfXP = slayersObject.get("wolf").getAsJsonObject().get("xp").getAsInt(); + } + + player.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + username + "'s Total XP: " + EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + NumberFormat.getIntegerInstance().format(zombieXP + spiderXP + wolfXP) + "\n" + + EnumChatFormatting.AQUA + " Zombie XP: " + EnumChatFormatting.BLUE + EnumChatFormatting.BOLD + NumberFormat.getIntegerInstance().format(zombieXP) + "\n" + + EnumChatFormatting.AQUA + " Spider XP: " + EnumChatFormatting.BLUE + EnumChatFormatting.BOLD + NumberFormat.getIntegerInstance().format(spiderXP) + "\n" + + EnumChatFormatting.AQUA + " Wolf XP: " + EnumChatFormatting.BLUE + EnumChatFormatting.BOLD + NumberFormat.getIntegerInstance().format(wolfXP))); + + }).start(); + } + +} |