aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/eu/olli/cowmoonication/command
diff options
context:
space:
mode:
authorCow <cow@volloeko.de>2020-03-28 21:38:33 +0100
committerCow <cow@volloeko.de>2020-03-28 21:38:33 +0100
commitf831d34ab792fc234dae2be3e879a5aaa0354149 (patch)
treeb7f91e69555c25e3bc3aeaacb6a51a4a72a68de7 /src/main/java/eu/olli/cowmoonication/command
parent25714bc7ec6295630506b4ce0e6d4c4d8341ab34 (diff)
downloadCowlection-f831d34ab792fc234dae2be3e879a5aaa0354149.tar.gz
Cowlection-f831d34ab792fc234dae2be3e879a5aaa0354149.tar.bz2
Cowlection-f831d34ab792fc234dae2be3e879a5aaa0354149.zip
Added first iteration of Hypixel API integration
- /moo stalk <player> to get online status of a player
Diffstat (limited to 'src/main/java/eu/olli/cowmoonication/command')
-rw-r--r--src/main/java/eu/olli/cowmoonication/command/MooCommand.java89
1 files changed, 86 insertions, 3 deletions
diff --git a/src/main/java/eu/olli/cowmoonication/command/MooCommand.java b/src/main/java/eu/olli/cowmoonication/command/MooCommand.java
index 22d510a..e933c30 100644
--- a/src/main/java/eu/olli/cowmoonication/command/MooCommand.java
+++ b/src/main/java/eu/olli/cowmoonication/command/MooCommand.java
@@ -3,6 +3,9 @@ package eu.olli.cowmoonication.command;
import eu.olli.cowmoonication.Cowmoonication;
import eu.olli.cowmoonication.config.MooConfig;
import eu.olli.cowmoonication.config.MooGuiConfig;
+import eu.olli.cowmoonication.friends.Friend;
+import eu.olli.cowmoonication.util.ApiUtils;
+import eu.olli.cowmoonication.util.HyStalking;
import eu.olli.cowmoonication.util.TickDelay;
import eu.olli.cowmoonication.util.Utils;
import net.minecraft.client.Minecraft;
@@ -33,7 +36,15 @@ public class MooCommand extends CommandBase {
return;
}
// sub commands: friends
- if (args.length == 2 && args[0].equalsIgnoreCase("add")) {
+ if (args[0].equalsIgnoreCase("stalk")) {
+ if (args.length != 2) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Usage: /" + getCommandName() + " stalk <playerName>");
+ } else if (!Utils.isValidMcName(args[1])) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "\"" + args[1] + "\" is not a valid player name.");
+ } else {
+ handleStalking(args[1]);
+ }
+ } else if (args.length == 2 && args[0].equalsIgnoreCase("add")) {
handleBestFriendAdd(args[1]);
} else if (args.length == 2 && args[0].equalsIgnoreCase("remove")) {
handleBestFriendRemove(args[1]);
@@ -58,6 +69,8 @@ public class MooCommand extends CommandBase {
Minecraft.getMinecraft().gameSettings.guiScale = scale;
main.getChatHelper().sendMessage(EnumChatFormatting.GREEN, "\u2714 New GUI scale: " + EnumChatFormatting.DARK_GREEN + scale + EnumChatFormatting.GREEN + " (previous: " + EnumChatFormatting.DARK_GREEN + currentGuiScale + EnumChatFormatting.GREEN + ")");
}
+ } else if (args[0].equalsIgnoreCase("apikey")) {
+ handleApiKey(args);
}
// sub-commands: update mod
else if (args[0].equalsIgnoreCase("update")) {
@@ -101,6 +114,75 @@ public class MooCommand extends CommandBase {
}
}
+ private void handleApiKey(String[] args) {
+ if (args.length == 1) {
+ String firstSentence;
+ EnumChatFormatting color;
+ EnumChatFormatting colorSecondary;
+ if (Utils.isValidUuid(MooConfig.moo)) {
+ firstSentence = "You already set your Hypixel API key.";
+ color = EnumChatFormatting.GREEN;
+ colorSecondary = EnumChatFormatting.DARK_GREEN;
+ } else {
+ firstSentence = "You haven't set your Hypixel API key yet.";
+ color = EnumChatFormatting.RED;
+ colorSecondary = EnumChatFormatting.DARK_RED;
+ }
+ main.getChatHelper().sendMessage(color, firstSentence + " Use " + colorSecondary + "/api new" + color + " to request a new API key from Hypixel or use " + colorSecondary + "/" + this.getCommandName() + " apikey <key>" + color + " to manually set your existing API key.");
+ } else {
+ String key = args[1];
+ if (Utils.isValidUuid(key)) {
+ MooConfig.moo = key;
+ main.getConfig().syncFromFields();
+ main.getChatHelper().sendMessage(EnumChatFormatting.GREEN, "Updated API key!");
+ } else {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "That doesn't look like a valid API key...");
+ }
+ }
+ }
+
+ private void handleStalking(String playerName) {
+ if (!Utils.isValidUuid(MooConfig.moo)) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "You haven't set your Hypixel API key yet. Use " + EnumChatFormatting.DARK_RED + "/api new" + EnumChatFormatting.RED + " to request a new API key from Hypixel or use " + EnumChatFormatting.DARK_RED + "/" + this.getCommandName() + " apikey <key>" + EnumChatFormatting.RED + " to manually set your existing API key.");
+ return;
+ }
+ main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW, "Stalking " + EnumChatFormatting.GOLD + playerName + EnumChatFormatting.YELLOW + ". This may take a few seconds.");
+ boolean isBestFriend = main.getFriends().isBestFriend(playerName, true);
+ if (isBestFriend) {
+ Friend stalkedPlayer = main.getFriends().getBestFriend(playerName);
+ // we have the uuid already, so stalk the player
+ stalkPlayer(stalkedPlayer);
+ } else {
+ // fetch player uuid
+ ApiUtils.fetchFriendData(playerName, stalkedPlayer -> {
+ if (stalkedPlayer == null) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Sorry, could contact Mojang's API and thus couldn't stalk " + EnumChatFormatting.DARK_RED + playerName);
+ } else if (stalkedPlayer.equals(Friend.FRIEND_NOT_FOUND)) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "There is no player with the name " + EnumChatFormatting.DARK_RED + playerName + EnumChatFormatting.RED + ".");
+ } else {
+ // ... then stalk the player
+ stalkPlayer(stalkedPlayer);
+ }
+ });
+ }
+ }
+
+ private void stalkPlayer(Friend stalkedPlayer) {
+ ApiUtils.fetchPlayerStatus(stalkedPlayer, hyStalking -> {
+ if (hyStalking != null && hyStalking.isSuccess()) {
+ HyStalking.HySession session = hyStalking.getSession();
+ if (session.isOnline()) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW, EnumChatFormatting.GOLD + stalkedPlayer.getName() + EnumChatFormatting.YELLOW + " is currently playing " + session.getGameType() + ": " + session.getMode() + (session.getMap() != null ? " (Map: " + session.getMap() + ")" : ""));
+ } else {
+ main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW, EnumChatFormatting.GOLD + stalkedPlayer.getName() + EnumChatFormatting.YELLOW + " is currently " + EnumChatFormatting.RED + "offline" + EnumChatFormatting.YELLOW + " (or deactivated API access).");
+ }
+ } else {
+ String cause = (hyStalking != null) ? hyStalking.getCause() : null;
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Something went wrong contacting the Hypixel API. Couldn't stalk " + EnumChatFormatting.DARK_RED + stalkedPlayer.getName() + EnumChatFormatting.RED + (cause != null ? " (Reason: " + EnumChatFormatting.DARK_RED + cause + EnumChatFormatting.RED + ")" : "") + ".");
+ }
+ });
+ }
+
private void handleBestFriendAdd(String username) {
if (!Utils.isValidMcName(username)) {
main.getChatHelper().sendMessage(EnumChatFormatting.RED, EnumChatFormatting.DARK_RED + username + EnumChatFormatting.RED + "? This... doesn't look like a valid username.");
@@ -147,6 +229,7 @@ public class MooCommand extends CommandBase {
public String getCommandUsage(ICommandSender sender) {
IChatComponent usage = new ChatComponentText("\u279C Cowmoonication commands:").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD).setBold(true))
.appendSibling(createCmdHelpSection(1, "Friends"))
+ .appendSibling(createCmdHelpEntry("stalk", "Get info of player's status"))
.appendSibling(createCmdHelpEntry("add", "Add best friends"))
.appendSibling(createCmdHelpEntry("remove", "Remove best friends"))
.appendSibling(createCmdHelpEntry("list", "View list of best friends"))
@@ -187,8 +270,8 @@ public class MooCommand extends CommandBase {
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
return getListOfStringsMatchingLastWord(args,
- /* friends */ "add", "remove", "list", "nameChangeCheck", "toggle",
- /* miscellaneous */ "guiscale", "config",
+ /* friends */ "stalk", "add", "remove", "list", "nameChangeCheck", "toggle",
+ /* miscellaneous */ "config", "guiscale", "apikey",
/* update mod */ "update", "updateHelp", "version", "folder",
/* help */ "help");
}