From c789aa58afa97fbbf48056f4b6cf2c0963c47684 Mon Sep 17 00:00:00 2001 From: funkemunky Date: Mon, 13 Jan 2020 09:18:46 -0500 Subject: [PATCH] Added data, info, and reload command --- .../brighten/pl/commands/AlertsCommand.java | 3 +- .../dev/brighten/pl/commands/InfoCommand.java | 80 +++++++++++++++++++ .../brighten/pl/commands/ReloadCommand.java | 35 ++++++++ .../dev/brighten/pl/commands/VpnCommand.java | 2 +- .../java/dev/brighten/pl/data/UserData.java | 39 +++++++++ .../brighten/pl/handlers/AlertsHandler.java | 13 ++- .../dev/brighten/pl/handlers/VPNHandler.java | 3 + 7 files changed, 165 insertions(+), 10 deletions(-) create mode 100644 src/main/java/dev/brighten/pl/commands/InfoCommand.java create mode 100644 src/main/java/dev/brighten/pl/commands/ReloadCommand.java create mode 100644 src/main/java/dev/brighten/pl/data/UserData.java diff --git a/src/main/java/dev/brighten/pl/commands/AlertsCommand.java b/src/main/java/dev/brighten/pl/commands/AlertsCommand.java index d95dcbb..9183cc0 100644 --- a/src/main/java/dev/brighten/pl/commands/AlertsCommand.java +++ b/src/main/java/dev/brighten/pl/commands/AlertsCommand.java @@ -9,7 +9,8 @@ import dev.brighten.pl.AntiVPN; public class AlertsCommand { @Command(name = "kaurivpn.alerts", description = "toggle vpn alerts", - display = "alerts", playerOnly = true, permission = {"kvpn.alerts", "kvpn.command.alerts"}) + display = "alerts", playerOnly = true, aliases = {"antivpn.alerts"}, + permission = {"kvpn.alerts", "kvpn.command.alerts"}) public void onCommand(CommandAdapter cmd) { boolean toggled = AntiVPN.INSTANCE.alertsHandler.toggleAlerts(cmd.getPlayer()); cmd.getSender().sendMessage(toggled diff --git a/src/main/java/dev/brighten/pl/commands/InfoCommand.java b/src/main/java/dev/brighten/pl/commands/InfoCommand.java new file mode 100644 index 0000000..746799f --- /dev/null +++ b/src/main/java/dev/brighten/pl/commands/InfoCommand.java @@ -0,0 +1,80 @@ +package dev.brighten.pl.commands; + +import cc.funkemunky.api.commands.ancmd.Command; +import cc.funkemunky.api.commands.ancmd.CommandAdapter; +import cc.funkemunky.api.utils.Color; +import cc.funkemunky.api.utils.Init; +import cc.funkemunky.api.utils.MiscUtils; +import cc.funkemunky.carbon.utils.json.JSONException; +import dev.brighten.pl.data.UserData; +import lombok.val; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +@Init(commands = true) +public class InfoCommand { + + private static String LINE = MiscUtils.line(Color.Dark_Gray); + + @Command(name = "kaurivpn.info", description = "view a player's vpn info.", display = "info [player]", + permission = "kvpn.command.info", aliases = {"antivpn.info"}) + public void onCommand(CommandAdapter cmd) { + UserData data; + if(cmd.getArgs().length == 0) { + if(cmd.getPlayer() != null) data = UserData.getData(cmd.getPlayer().getUniqueId()); + else { + cmd.getSender().sendMessage(Color.Red + "You cannot view your own info as you're not a player."); + return; + } + } else { + Player player; + if((player = Bukkit.getPlayer(cmd.getArgs()[0])) != null) { + data = UserData.getData(player.getUniqueId()); + } else { + cmd.getSender().sendMessage(Color.Red + "Could not find that player. Is he/she even online?"); + return; + } + } + sendData(cmd, data); + } + + private static void sendData(CommandAdapter cmd, UserData data) { + if(data.response != null) { + cmd.getSender().sendMessage(LINE); + sendMsg(cmd, "&6&l" + data.getPlayer().getName() + "'s Information"); + sendMsg(cmd, ""); + try { + val json = data.response.toJson(); + json.keySet().stream() + .filter(key -> { + switch(key) { + case "ip": + case "city": + case "success": + case "queriesLeft": + case "locationString": + case "usedAdvanced": + return false; + default: + return true; + } + }) + .forEach(key -> { + try { + sendMsg(cmd, "&7" + key.toUpperCase() + "&8: &f" + json.get(key)); + } catch (JSONException e) { + e.printStackTrace(); + } + }); + } catch (JSONException e) { + sendMsg(cmd, "&cThere was an error parsing the VPN response."); + e.printStackTrace(); + } + cmd.getSender().sendMessage(LINE); + } else cmd.getSender().sendMessage(Color.Red + "This user was not checked for a vpn."); + } + + private static void sendMsg(CommandAdapter cmd, String msg) { + cmd.getSender().sendMessage(Color.translate(msg)); + } +} diff --git a/src/main/java/dev/brighten/pl/commands/ReloadCommand.java b/src/main/java/dev/brighten/pl/commands/ReloadCommand.java new file mode 100644 index 0000000..675ee10 --- /dev/null +++ b/src/main/java/dev/brighten/pl/commands/ReloadCommand.java @@ -0,0 +1,35 @@ +package dev.brighten.pl.commands; + +import cc.funkemunky.api.commands.ancmd.Command; +import cc.funkemunky.api.commands.ancmd.CommandAdapter; +import cc.funkemunky.api.utils.Color; +import cc.funkemunky.api.utils.Init; +import cc.funkemunky.api.utils.MathUtils; +import dev.brighten.pl.AntiVPN; + +@Init(commands = true) +public class ReloadCommand { + + @Command(name = "kaurivpn.reload", description = "reload KauriVPN.", display = "reload", + aliases = {"antivpn.reload"}, permission = "kvpn.command.reload") + public void onCommand(CommandAdapter cmd) { + long start = System.nanoTime(); + task(cmd, "Reloading config"); + AntiVPN.INSTANCE.reloadConfig(); + + task(cmd, "Unloading KauriVPN"); + AntiVPN.INSTANCE.disable(); + + task(cmd, "Loading KauriVPN"); + AntiVPN.INSTANCE.enable(); + + double complete = System.nanoTime() - start / 1E6D; + + cmd.getSender().sendMessage(Color.Green + "Reload completed in " + + MathUtils.round(complete, 2) + "ms."); + } + + private static void task(CommandAdapter adapter, String task) { + adapter.getSender().sendMessage(Color.translate("&7" + task + "...")); + } +} diff --git a/src/main/java/dev/brighten/pl/commands/VpnCommand.java b/src/main/java/dev/brighten/pl/commands/VpnCommand.java index 6b1c97c..b5079be 100644 --- a/src/main/java/dev/brighten/pl/commands/VpnCommand.java +++ b/src/main/java/dev/brighten/pl/commands/VpnCommand.java @@ -9,7 +9,7 @@ import cc.funkemunky.api.utils.Init; public class VpnCommand { @Command(name = "kaurivpn", description = "The Kauri AntiVPN main command.", - aliases = {"antivpn", "avpn", "kvpn"}, permission = "kvpn.command") + aliases = {"antivpn"}, permission = "kvpn.command") public void onCommand(CommandAdapter cmd) { Atlas.getInstance().getCommandManager().runHelpMessage(cmd, cmd.getSender(), Atlas.getInstance().getCommandManager().getDefaultScheme()); diff --git a/src/main/java/dev/brighten/pl/data/UserData.java b/src/main/java/dev/brighten/pl/data/UserData.java new file mode 100644 index 0000000..dbff58f --- /dev/null +++ b/src/main/java/dev/brighten/pl/data/UserData.java @@ -0,0 +1,39 @@ +package dev.brighten.pl.data; + +import dev.brighten.pl.vpn.VPNResponse; +import lombok.RequiredArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@RequiredArgsConstructor +public class UserData { + public final static Map dataMap = Collections.synchronizedMap(new HashMap<>()); + + public final UUID uuid; + private Player player; + public VPNResponse response; + public boolean hasAlerts; + + public static UserData getData(UUID uuid) { + return dataMap.computeIfAbsent(uuid, key -> { + if(Bukkit.getPlayer(uuid) != null) { + UserData data = new UserData(uuid); + dataMap.put(key, data); + return data; + } + return null; + }); + } + + public Player getPlayer() { + if(player == null) { + return player = Bukkit.getPlayer(uuid); + } + return player; + } +} diff --git a/src/main/java/dev/brighten/pl/handlers/AlertsHandler.java b/src/main/java/dev/brighten/pl/handlers/AlertsHandler.java index 2bc0dbe..8045406 100644 --- a/src/main/java/dev/brighten/pl/handlers/AlertsHandler.java +++ b/src/main/java/dev/brighten/pl/handlers/AlertsHandler.java @@ -1,6 +1,7 @@ package dev.brighten.pl.handlers; import cc.funkemunky.api.utils.JsonMessage; +import dev.brighten.pl.data.UserData; import dev.brighten.pl.utils.Config; import dev.brighten.pl.utils.StringUtils; import dev.brighten.pl.vpn.VPNResponse; @@ -14,7 +15,6 @@ import java.util.Set; import java.util.UUID; public class AlertsHandler { - private Set hasAlerts = new HashSet<>(); public void sendAlert(UUID uuid, VPNResponse response) { JsonMessage message = new JsonMessage(); @@ -24,8 +24,8 @@ public class AlertsHandler { .addHoverText(Config.alertHoverMessage.stream() .map(string -> StringUtils.formatString(string, response) .replace("%player%", player.getName())).toArray(String[]::new)); - hasAlerts.parallelStream().filter(Objects::nonNull) - .forEach(message::sendToPlayer); + UserData.dataMap.values().parallelStream().filter(data -> data.hasAlerts) + .forEach(data -> message.sendToPlayer(data.getPlayer())); } //TODO When updated Atlas releases, add this functionality. @@ -34,11 +34,8 @@ public class AlertsHandler { } public boolean toggleAlerts(Player player) { - boolean contains; + UserData data = UserData.getData(player.getUniqueId()); - if(contains = hasAlerts.contains(player)) hasAlerts.remove(player); - else hasAlerts.add(player); - - return !contains; + return data.hasAlerts = !data.hasAlerts; } } diff --git a/src/main/java/dev/brighten/pl/handlers/VPNHandler.java b/src/main/java/dev/brighten/pl/handlers/VPNHandler.java index 7b37668..0f2bb74 100644 --- a/src/main/java/dev/brighten/pl/handlers/VPNHandler.java +++ b/src/main/java/dev/brighten/pl/handlers/VPNHandler.java @@ -5,6 +5,7 @@ import cc.funkemunky.api.utils.MiscUtils; import cc.funkemunky.api.utils.RunUtils; import cc.funkemunky.api.utils.Tuple; import dev.brighten.pl.AntiVPN; +import dev.brighten.pl.data.UserData; import dev.brighten.pl.listeners.impl.VPNCheckEvent; import dev.brighten.pl.utils.Config; import dev.brighten.pl.utils.StringUtils; @@ -31,6 +32,8 @@ public class VPNHandler { while(queue.size() > 0 && (element = queue.poll()) != null) { val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two); if(response != null && response.isSuccess()) { + UserData data = UserData.getData(element.one); + data.response = response; VPNCheckEvent event = new VPNCheckEvent(response); if(Config.fireEvent) RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE);