aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorbowser0000 <bowser0000@gmail.com>2021-11-21 18:17:31 -0500
committerbowser0000 <bowser0000@gmail.com>2021-11-21 18:17:31 -0500
commit69d505b5b1d215a7bba3f1aecd31b187d1705d08 (patch)
treeaa3cc589b4aa5341d5c328e432e3ea25798f22d6 /src/main
parent2f0925e3ceb2af3a96de034a3f6e390ca15ba1d9 (diff)
downloadSkyblockMod-69d505b5b1d215a7bba3f1aecd31b187d1705d08.tar.gz
SkyblockMod-69d505b5b1d215a7bba3f1aecd31b187d1705d08.tar.bz2
SkyblockMod-69d505b5b1d215a7bba3f1aecd31b187d1705d08.zip
Add /networth command
Uses Maro API
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/me/Danker/DankersSkyblockMod.java1
-rw-r--r--src/main/java/me/Danker/commands/DHelpCommand.java1
-rw-r--r--src/main/java/me/Danker/commands/NetworthCommand.java171
-rw-r--r--src/main/java/me/Danker/handlers/APIHandler.java29
4 files changed, 202 insertions, 0 deletions
diff --git a/src/main/java/me/Danker/DankersSkyblockMod.java b/src/main/java/me/Danker/DankersSkyblockMod.java
index 2730868..7aceb20 100644
--- a/src/main/java/me/Danker/DankersSkyblockMod.java
+++ b/src/main/java/me/Danker/DankersSkyblockMod.java
@@ -205,6 +205,7 @@ public class DankersSkyblockMod {
ClientCommandHandler.instance.registerCommand(new LobbySkillsCommand());
ClientCommandHandler.instance.registerCommand(new LootCommand());
ClientCommandHandler.instance.registerCommand(new MoveCommand());
+ ClientCommandHandler.instance.registerCommand(new NetworthCommand());
ClientCommandHandler.instance.registerCommand(new PetsCommand());
ClientCommandHandler.instance.registerCommand(new PlayerCommand());
ClientCommandHandler.instance.registerCommand(new ReloadConfigCommand());
diff --git a/src/main/java/me/Danker/commands/DHelpCommand.java b/src/main/java/me/Danker/commands/DHelpCommand.java
index 0c81af5..ea3a5e3 100644
--- a/src/main/java/me/Danker/commands/DHelpCommand.java
+++ b/src/main/java/me/Danker/commands/DHelpCommand.java
@@ -62,6 +62,7 @@ public class DHelpCommand extends CommandBase {
EnumChatFormatting.GOLD + ReloadRepoCommand.usage(arg0) + EnumChatFormatting.AQUA + " - Reloads Danker's Skyblock Mod repository.\n" +
EnumChatFormatting.GOLD + FarmLengthCommand.usage(arg0) + EnumChatFormatting.AQUA + " - Sets coords to be used for end of farm alert.\n" +
EnumChatFormatting.GOLD + HOTMCommand.usage(arg0) + EnumChatFormatting.AQUA + " - Uses API to find total powder and HotM tree of a person. If no name is provided, it checks yours.\n" +
+ EnumChatFormatting.GOLD + NetworthCommand.usage(arg0) + EnumChatFormatting.AQUA + " - Uses API to find networth of a person. If no name is provided, it checks yours.\n" +
EnumChatFormatting.GREEN + " Open Maddox Menu" + EnumChatFormatting.AQUA + " - M by default.\n" +
EnumChatFormatting.GREEN + " Start/Stop Skill Tracker" + EnumChatFormatting.AQUA + " - Numpad 5 by default.\n"));
}
diff --git a/src/main/java/me/Danker/commands/NetworthCommand.java b/src/main/java/me/Danker/commands/NetworthCommand.java
new file mode 100644
index 0000000..be35c84
--- /dev/null
+++ b/src/main/java/me/Danker/commands/NetworthCommand.java
@@ -0,0 +1,171 @@
+package me.Danker.commands;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import me.Danker.DankersSkyblockMod;
+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;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class NetworthCommand extends CommandBase {
+
+ @Override
+ public String getCommandName() {
+ return "networth";
+ }
+
+ @Override
+ public List<String> getCommandAliases() {
+ return Collections.singletonList("nw");
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender arg0) {
+ return "/" + getCommandName() + " [name]";
+ }
+
+ public static String usage(ICommandSender arg0) {
+ return new NetworthCommand().getCommandUsage(arg0);
+ }
+
+ @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(() -> {
+ EntityPlayer player = (EntityPlayer) arg0;
+
+ // Check key
+ String key = ConfigHandler.getString("api", "APIKey");
+ if (key.equals("")) {
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "API key not set. Use /setkey."));
+ return;
+ }
+
+ // 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(DankersSkyblockMod.MAIN_COLOUR + "Checking networth of " + DankersSkyblockMod.SECONDARY_COLOUR + username));
+ } else {
+ username = arg1[0];
+ player.addChatMessage(new ChatComponentText(DankersSkyblockMod.MAIN_COLOUR + "Checking networth of " + DankersSkyblockMod.SECONDARY_COLOUR + username));
+ uuid = APIHandler.getUUID(username);
+ }
+
+ // Find stats of latest profile
+ String latestProfile = APIHandler.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 = APIHandler.getResponse(profileURL, true);
+ if (!profileResponse.get("success").getAsBoolean()) {
+ String reason = profileResponse.get("cause").getAsString();
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason));
+ return;
+ }
+
+ try {
+ System.out.println("Fetching networth...");
+
+ JsonObject body = new JsonObject();
+ body.add("data", profileResponse.get("profile").getAsJsonObject().get("members").getAsJsonObject().get(uuid).getAsJsonObject());
+ body.get("data").getAsJsonObject().add("banking", profileResponse.get("profile").getAsJsonObject().get("banking").getAsJsonObject());
+
+ JsonObject networth = APIHandler.getResponsePOST("https://nariah-dev.com/api/networth/categories", body, true);
+ if (networth.has("success") && !networth.get("success").getAsBoolean()) {
+ String reason = profileResponse.get("cause").getAsString();
+ player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed with reason: " + reason));
+ return;
+ }
+
+ JsonObject data = networth.get("data").getAsJsonObject();
+ JsonObject categoriesObject = data.get("categories").getAsJsonObject();
+
+ long total = data.get("networth").getAsLong();
+ long purse = data.get("purse").getAsLong();
+ long bank = data.get("bank").getAsLong();
+ long sacks = data.get("sacks").getAsLong();
+
+ List<String> categories = categoriesObject.entrySet().stream()
+ .map(Map.Entry::getKey)
+ .collect(Collectors.toCollection(ArrayList::new));
+ StringBuilder subcategories = new StringBuilder();
+
+ for (String category : categories) {
+ JsonObject categoryObject = categoriesObject.get(category).getAsJsonObject();
+ subcategories.append("\n").append(DankersSkyblockMod.TYPE_COLOUR).append(Utils.capitalizeString(category)).append(" value - ").append(formatPrice(categoryObject.get("total").getAsLong())).append("\n");
+
+ JsonArray topItems = categoryObject.get("top_items").getAsJsonArray();
+
+ for (int i = 0; i < 5 && i < topItems.size(); i++) {
+ JsonObject item = topItems.get(i).getAsJsonObject();
+
+ subcategories.append(EnumChatFormatting.AQUA);
+ if (item.has("count") && item.get("count").getAsInt() > 1) {
+ subcategories.append(item.get("count").getAsInt()).append("x").append(" ");
+ }
+ subcategories.append(item.get("name").getAsString());
+ if (item.has("recomb") && item.get("recomb").getAsBoolean()) {
+ subcategories.append(" ⇑");
+ }
+ subcategories.append(" ➜ ").append(EnumChatFormatting.GOLD).append(formatPrice(item.get("price").getAsLong())).append("\n");
+ }
+ }
+
+ player.addChatMessage(new ChatComponentText(DankersSkyblockMod.DELIMITER_COLOUR + "" + EnumChatFormatting.BOLD + "-------------------\n" +
+ EnumChatFormatting.AQUA + username + "'s Networth:\n" +
+ DankersSkyblockMod.TYPE_COLOUR + "Purse: " + EnumChatFormatting.GOLD + formatPrice(purse) + "\n" +
+ DankersSkyblockMod.TYPE_COLOUR + "Bank: " + EnumChatFormatting.GOLD + formatPrice(bank) + "\n" +
+ DankersSkyblockMod.TYPE_COLOUR + "Sacks: " + EnumChatFormatting.GOLD + formatPrice(sacks) + "\n" +
+ subcategories + "\n" +
+ DankersSkyblockMod.TYPE_COLOUR + "Total: " + EnumChatFormatting.GOLD + formatPrice(total) + "\n" +
+ DankersSkyblockMod.DELIMITER_COLOUR + EnumChatFormatting.BOLD + "-------------------"));
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }).start();
+ }
+
+ String formatPrice(long price) {
+ String[] suffixes = {"", "K", "M", "B", "T"};
+ double p = price;
+ int i = 0;
+ while ((p / 1000) >= 1) {
+ p /= 1000;
+ i++;
+ }
+ return new DecimalFormat("#.#").format(p) + suffixes[i];
+ }
+
+}
diff --git a/src/main/java/me/Danker/handlers/APIHandler.java b/src/main/java/me/Danker/handlers/APIHandler.java
index 736a7d7..3c3d9b2 100644
--- a/src/main/java/me/Danker/handlers/APIHandler.java
+++ b/src/main/java/me/Danker/handlers/APIHandler.java
@@ -8,6 +8,12 @@ import me.Danker.DankersSkyblockMod;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
import java.io.BufferedReader;
import java.io.IOException;
@@ -64,6 +70,29 @@ public class APIHandler {
return new JsonObject();
}
+
+ public static JsonObject getResponsePOST(String urlString, JsonObject body, boolean hasError) throws IOException {
+ EntityPlayer player = Minecraft.getMinecraft().thePlayer;
+
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+
+ try {
+ HttpPost req = new HttpPost(urlString);
+ StringEntity params = new StringEntity(body.toString());
+ req.addHeader("content-type", "application/json");
+ req.setEntity(params);
+ HttpResponse response = httpClient.execute(req);
+
+ return new Gson().fromJson(EntityUtils.toString(response.getEntity(), "UTF-8"), JsonObject.class);
+ } catch (Exception ex) {
+ player.addChatMessage(new ChatComponentText(DankersSkyblockMod.ERROR_COLOUR + "An error has occured. See logs for more details."));
+ ex.printStackTrace();
+ } finally {
+ httpClient.close();
+ }
+
+ return new JsonObject();
+ }
// Only used for UUID => Username
public static JsonArray getArrayResponse(String urlString) {