From e8993989f93b53baf66c3b450a50903d2d0db71a Mon Sep 17 00:00:00 2001 From: Dawson <30784509+funkemunky@users.noreply.github.com> Date: Tue, 25 Oct 2022 11:15:43 -0400 Subject: [PATCH] Adding new logs --- .../brighten/ac/command/AnticheatCommand.java | 97 +++++++++++-------- src/main/java/dev/brighten/ac/gui/Logs.java | 88 +++++++++++++++++ .../dev/brighten/ac/utils/ItemBuilder.java | 2 + .../java/dev/brighten/ac/utils/MojangAPI.java | 54 +++++++++++ .../brighten/ac/utils/json/JsonReader.java | 44 +++++++++ .../ac/utils/menu/type/impl/PagedMenu.java | 46 +++++---- 6 files changed, 271 insertions(+), 60 deletions(-) create mode 100644 src/main/java/dev/brighten/ac/gui/Logs.java create mode 100644 src/main/java/dev/brighten/ac/utils/MojangAPI.java create mode 100644 src/main/java/dev/brighten/ac/utils/json/JsonReader.java diff --git a/src/main/java/dev/brighten/ac/command/AnticheatCommand.java b/src/main/java/dev/brighten/ac/command/AnticheatCommand.java index 0ab57b3..fe05389 100644 --- a/src/main/java/dev/brighten/ac/command/AnticheatCommand.java +++ b/src/main/java/dev/brighten/ac/command/AnticheatCommand.java @@ -1,13 +1,14 @@ package dev.brighten.ac.command; import co.aikar.commands.*; -import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.*; +import co.aikar.commands.annotation.Optional; import co.aikar.commands.bukkit.contexts.OnlinePlayer; import dev.brighten.ac.Anticheat; import dev.brighten.ac.check.Check; import dev.brighten.ac.check.CheckData; import dev.brighten.ac.data.APlayer; +import dev.brighten.ac.gui.Logs; import dev.brighten.ac.handler.BBRevealHandler; import dev.brighten.ac.messages.Messages; import dev.brighten.ac.packet.handler.HandlerAbstract; @@ -226,52 +227,64 @@ public class AnticheatCommand extends BaseCommand { sender.sendMessage(Color.Red + "Getting logs for " + playername + "..."); - List logs = new ArrayList<>(); + if(sender instanceof Player) { + if(check.equals("none")) { + Logs logs = new Logs(uuid); - if(check.equals("none")) { - Anticheat.INSTANCE.getLogManager().getLogs(uuid, logsList -> { - logsList.forEach(log -> { - logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() - .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " - + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: " - + log.getVl() + ") {" + log.getData() + "}"); - }); - if(logs.size() == 0) { - sender.sendMessage(Color.Gray + "There are no logs for player \"" + playername + "\""); - } else { - String url = null; - try { - url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs", - Pastebin.Privacy.UNLISTED); + logs.showMenu((Player) sender); + } else { + Logs logs = new Logs(uuid, check); - sender.sendMessage(Color.Green + "Logs for " + playername + ": " + Color.White + url); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - }); + logs.showMenu((Player) sender); + } } else { - Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, logsList -> { - logsList.forEach(log -> { - logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() - .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " - + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) - + "(VL: " + log.getVl() + ") {" + log.getData() + "}"); - }); - if(logs.size() == 0) { - sender.sendMessage(Color.Gray + " does not have any violations for check \"" + check + "\""); - } else { - String url = null; - try { - url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs", - Pastebin.Privacy.UNLISTED); + List logs = new ArrayList<>(); - sender.sendMessage(Color.Green + "Logs for " + playername + ": " + Color.White + url); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); + if(check.equals("none")) { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, logsList -> { + logsList.forEach(log -> { + logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() + .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " + + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: " + + log.getVl() + ") {" + log.getData() + "}"); + }); + if(logs.size() == 0) { + sender.sendMessage(Color.Gray + "There are no logs for player \"" + playername + "\""); + } else { + String url = null; + try { + url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs", + Pastebin.Privacy.UNLISTED); + + sender.sendMessage(Color.Green + "Logs for " + playername + ": " + Color.White + url); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } } - } - }); + }); + } else { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, logsList -> { + logsList.forEach(log -> { + logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() + .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " + + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + + "(VL: " + log.getVl() + ") {" + log.getData() + "}"); + }); + if(logs.size() == 0) { + sender.sendMessage(Color.Gray + " does not have any violations for check \"" + check + "\""); + } else { + String url = null; + try { + url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs", + Pastebin.Privacy.UNLISTED); + + sender.sendMessage(Color.Green + "Logs for " + playername + ": " + Color.White + url); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + }); + } } } diff --git a/src/main/java/dev/brighten/ac/gui/Logs.java b/src/main/java/dev/brighten/ac/gui/Logs.java new file mode 100644 index 0000000..592e4f7 --- /dev/null +++ b/src/main/java/dev/brighten/ac/gui/Logs.java @@ -0,0 +1,88 @@ +package dev.brighten.ac.gui; + +import dev.brighten.ac.Anticheat; +import dev.brighten.ac.logging.Log; +import dev.brighten.ac.utils.*; +import dev.brighten.ac.utils.menu.button.Button; +import dev.brighten.ac.utils.menu.type.impl.PagedMenu; +import org.apache.commons.lang.time.DateFormatUtils; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class Logs extends PagedMenu { + + private final UUID uuid; + private boolean generatedItems; + + public Logs(UUID uuid) { + super(Color.Gold + MojangAPI.getUsername(uuid).orElse("Unknown Player") + "'s Logs", 6); + + this.uuid = uuid; + + generateItems(); + } + + public Logs(UUID uuid, String check) { + super(Color.Gold + MojangAPI.getUsername(uuid).orElse("Unknown Player") + "'s Logs", 6); + + this.uuid = uuid; + + generateItems(check); + } + + private void generateItems(String check) { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, check, 5000, 0, logs -> { + for (Log log : logs) { + ItemStack stack = new ItemBuilder(XMaterial.PAPER.parseMaterial()).amount(1) + .name(Color.Gold + log.getCheckId()).lore("&eVL:" + log.getVl(), "&eData:" + log.getData(), + "&eTime:" + DateFormatUtils.ISO_DATETIME_FORMAT.format(log.getTime())).build(); + + addItem(new Button(false, stack)); + } + generatedItems = true; + }); + } + private void generateItems() { + Anticheat.INSTANCE.getLogManager().getLogs(uuid, logs -> { + for (Log log : logs) { + ItemBuilder builder = new ItemBuilder(XMaterial.PAPER.parseMaterial()).amount(1) + .name(Color.Gold + log.getCheckId()); + + String[] split = MiscUtils.splitIntoLine(log.getData(), 45); + List lore = new ArrayList<>(Arrays.asList("&eVL: &f" + log.getVl(), + "&eTime: &f" + DateFormatUtils.ISO_DATETIME_FORMAT.format(log.getTime()), + "&eData: &f" + split[0])); + + for (int i = 1; i < split.length; i++) { + lore.add(Color.White + split[i]); + } + + ItemStack stack = builder.lore(lore).build(); + + addItem(new Button(false, stack)); + } + generatedItems = true; + }); + } + + @Override + public void showMenu(Player player) { + new BukkitRunnable() { + @Override + public void run() { + if(generatedItems) { + super.cancel(); + Logs.super.showMenu(player); + } + } + }.runTaskTimer(Anticheat.INSTANCE.getPluginInstance(), 0L, 4L); + } + + +} diff --git a/src/main/java/dev/brighten/ac/utils/ItemBuilder.java b/src/main/java/dev/brighten/ac/utils/ItemBuilder.java index 693e2c4..f49b3b0 100644 --- a/src/main/java/dev/brighten/ac/utils/ItemBuilder.java +++ b/src/main/java/dev/brighten/ac/utils/ItemBuilder.java @@ -117,6 +117,8 @@ public class ItemBuilder { */ public ItemBuilder lore(List lore) { ItemMeta meta = is.getItemMeta(); + lore = lore.stream().map(s -> ChatColor.translateAlternateColorCodes('&', s)) + .collect(Collectors.toList()); meta.setLore(lore); is.setItemMeta(meta); return this; diff --git a/src/main/java/dev/brighten/ac/utils/MojangAPI.java b/src/main/java/dev/brighten/ac/utils/MojangAPI.java new file mode 100644 index 0000000..2bf1492 --- /dev/null +++ b/src/main/java/dev/brighten/ac/utils/MojangAPI.java @@ -0,0 +1,54 @@ +package dev.brighten.ac.utils; + +import dev.brighten.ac.utils.json.JSONException; +import dev.brighten.ac.utils.json.JSONObject; +import dev.brighten.ac.utils.json.JsonReader; + +import java.io.IOException; +import java.util.Optional; +import java.util.UUID; + +public class MojangAPI { + + public static Optional getUsername(UUID uuid) { + try { + JSONObject object = JsonReader.readJsonFromUrl("https://funkemunky.cc/mojang/name?uuid=" + uuid.toString()); + + if(object.getBoolean("success")) { + return Optional.of(object.getString("name")); + } else { + return Optional.empty(); + } + } catch(JSONException | IOException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + public static Optional getUUID(String name) { + try { + JSONObject object = JsonReader.readJsonFromUrl("https://funkemunky.cc/mojang/uuid?name=" + name); + + if(object.getBoolean("success")) { + return Optional.of(UUID.fromString(object.getString("uuid"))); + } else { + return Optional.empty(); + } + } catch(JSONException | IOException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + public static UUID formatFromMojangUUID(String mojangUUID) { + String uuid = ""; + for(int i = 0; i <= 31; i++) { + uuid = uuid + mojangUUID.charAt(i); + if(i == 7 || i == 11 || i == 15 || i == 19) { + uuid = uuid + "-"; + } + } + + return UUID.fromString(uuid); + } +} diff --git a/src/main/java/dev/brighten/ac/utils/json/JsonReader.java b/src/main/java/dev/brighten/ac/utils/json/JsonReader.java new file mode 100644 index 0000000..a0b9227 --- /dev/null +++ b/src/main/java/dev/brighten/ac/utils/json/JsonReader.java @@ -0,0 +1,44 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package dev.brighten.ac.utils.json; + +import java.io.*; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.Charset; + +public class JsonReader { + public JsonReader() { + } + + private static String readAll(Reader rd) throws IOException { + StringBuilder sb = new StringBuilder(); + + int cp; + while((cp = rd.read()) != -1) { + sb.append((char)cp); + } + + return sb.toString(); + } + + public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException { + URLConnection connection = (new URL(url)).openConnection(); + InputStream is = connection.getInputStream(); + + JSONObject var6; + try { + BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); + String jsonText = readAll(rd); + JSONObject json = new JSONObject(jsonText); + var6 = json; + } finally { + is.close(); + } + + return var6; + } +} diff --git a/src/main/java/dev/brighten/ac/utils/menu/type/impl/PagedMenu.java b/src/main/java/dev/brighten/ac/utils/menu/type/impl/PagedMenu.java index 001ba2c..ca71e7b 100644 --- a/src/main/java/dev/brighten/ac/utils/menu/type/impl/PagedMenu.java +++ b/src/main/java/dev/brighten/ac/utils/menu/type/impl/PagedMenu.java @@ -14,11 +14,9 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; import java.util.stream.IntStream; public class PagedMenu implements Menu { @@ -33,8 +31,11 @@ public class PagedMenu implements Menu { private int currentPage = 1; @Getter BukkitInventoryHolder holder; - public List