diff --git a/build.gradle b/build.gradle index 662ca37..15e82c0 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,15 @@ plugins { group = project.group version = project.version +jar { + from { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + configurations.runtimeClasspath.collect { + it.isDirectory() ? it : zipTree(it) + } + } +} + repositories { mavenCentral() maven { @@ -20,6 +29,7 @@ repositories { dependencies { compileOnly "org.spigotmc:spigot-api:1.20.2-R0.1-SNAPSHOT" implementation 'com.google.code.gson:gson:2.10.1' + implementation files("libs/PDK-1.3.3.jar") } def targetJavaVersion = 16 @@ -52,4 +62,3 @@ compileJava.options.encoding("UTF-8") tasks.withType(JavaCompile) { options.encoding = "UTF-8" } - diff --git a/libs/PDK-1.3.3.jar b/libs/PDK-1.3.3.jar new file mode 100644 index 0000000..e949bf1 Binary files /dev/null and b/libs/PDK-1.3.3.jar differ diff --git a/src/main/java/io/github/thetrouper/sentinel/Sentinel.java b/src/main/java/io/github/thetrouper/sentinel/Sentinel.java index e91b660..fe7e38e 100644 --- a/src/main/java/io/github/thetrouper/sentinel/Sentinel.java +++ b/src/main/java/io/github/thetrouper/sentinel/Sentinel.java @@ -1,10 +1,12 @@ package io.github.thetrouper.sentinel; +import io.github.itzispyder.pdk.PDK; import io.github.thetrouper.sentinel.auth.Auth; -import io.github.thetrouper.sentinel.commands.*; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.LanguageFile; +import io.github.thetrouper.sentinel.cmds.*; import io.github.thetrouper.sentinel.events.*; +import io.github.thetrouper.sentinel.server.config.Config; +import io.github.thetrouper.sentinel.server.config.LanguageFile; +import io.github.thetrouper.sentinel.server.config.MainConfig; import io.github.thetrouper.sentinel.server.functions.AntiSpam; import io.github.thetrouper.sentinel.server.functions.Authenticator; import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; @@ -15,11 +17,14 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import java.io.File; import java.util.logging.Logger; public final class Sentinel extends JavaPlugin { private static Sentinel instance; public static LanguageFile dict; + private static File cfgfile = new File("plugins/Sentinel/main-config.json"); + public static MainConfig mainConfig = JsonSerializable.load(cfgfile, MainConfig.class, new MainConfig()); public static final PluginManager manager = Bukkit.getPluginManager(); public static String prefix = ""; public static String key = ""; @@ -33,6 +38,7 @@ public final class Sentinel extends JavaPlugin { @Override public void onEnable() { log.info("\n]======------ Pre-load started! ------======["); + PDK.init(this); instance = this; log.info("Loading Config..."); loadConfig(); @@ -49,7 +55,7 @@ public final class Sentinel extends JavaPlugin { } catch (Exception e) { e.printStackTrace(); log.info("WTFFFF ARE YOU DOING MAN??????"); - getServer().getPluginManager().disablePlugin(this); + manager.disablePlugin(this); } switch (authStatus) { case "AUTHORIZED" -> { @@ -67,21 +73,21 @@ public final class Sentinel extends JavaPlugin { } case "FAILURE" -> { log.info("Dynamic IP Failure. Webhook Error possible? Please contact obvWolf to fix this."); - getServer().getPluginManager().disablePlugin(this); + manager.disablePlugin(this); } } } case "INVALID-ID" -> { log.info("Authentication Failure, You have not whitelisted this server ID yet."); - getServer().getPluginManager().disablePlugin(this); + manager.disablePlugin(this); } case "UNREGISTERED" -> { log.warning("Authentication Failure, YOU SHALL NOT PASS! License: " + key + " Server ID: " + serverID); - getServer().getPluginManager().disablePlugin(this); + manager.disablePlugin(this); } case "ERROR" -> { log.warning("Hmmmmmm thats not right... License: " + key + " Server ID: " + serverID + "\nPlease report the above stacktrace."); - getServer().getPluginManager().disablePlugin(this); + manager.disablePlugin(this); } } } @@ -96,7 +102,7 @@ public final class Sentinel extends JavaPlugin { AntiSpam.enableAntiSpam(); ProfanityFilter.enableAntiSwear(); - prefix = Config.Plugin.getPrefix(); + prefix = MainConfig.Plugin.prefix; // Commands -> BE SURE TO REGISTER ANY NEW COMMANDS IN PLUGIN.YML (src/main/java/resources/plugin.yml)! new SentinelCommand().register(); @@ -107,14 +113,15 @@ public final class Sentinel extends JavaPlugin { new ChatClickCallback().register(); // Events - manager.registerEvents(new CommandEvent(),this); - manager.registerEvents(new CMDBlockExecute(), this); - manager.registerEvents(new CMDBlockPlace(), this); - manager.registerEvents(new CMDBlockUse(), this); - manager.registerEvents(new CMDMinecartPlace(), this); - manager.registerEvents(new CMDMinecartUse(), this); - manager.registerEvents(new NBTEvents(), this); - manager.registerEvents(new ChatEvent(),this); + new ChatEvent().register(); + new CommandEvent().register(); + new CMDBlockExecute().register(); + new CMDBlockPlace().register(); + new CMDBlockUse().register(); + new CMDMinecartPlace().register(); + new CMDMinecartUse().register(); + new NBTEvents().register(); + // Scheduled timers Bukkit.getScheduler().runTaskTimer(this, AntiSpam::decayHeat,0, 20); @@ -132,9 +139,8 @@ public final class Sentinel extends JavaPlugin { public void loadConfig() { // Init - Config.loadConfiguration(); - log.info("Loading Dictionary (" + Config.lang + ")..."); + log.info("Loading Dictionary (" + MainConfig.Plugin.lang + ")..."); dict = JsonSerializable.load(LanguageFile.PATH,LanguageFile.class,new LanguageFile()); log.info("Verifying Config..."); @@ -160,7 +166,7 @@ public final class Sentinel extends JavaPlugin { * @return true if the player is trusted, false otherwise */ public static boolean isTrusted(Player player) { - return Config.trustedPlayers.contains(player.getUniqueId().toString()); + return MainConfig.Plugin.trustedPlayers.contains(player.getUniqueId().toString()); } /** @@ -169,7 +175,7 @@ public final class Sentinel extends JavaPlugin { * @return true if the command is logged, false otherwise */ public static boolean isLoggedCommand(String command) { - return Config.logged.contains(command); + return MainConfig.Plugin.logged.contains(command); } /** @@ -178,7 +184,7 @@ public final class Sentinel extends JavaPlugin { * @return true if the command is dangerous, false otherwise */ public static boolean isDangerousCommand(String command) { - return Config.dangerous.contains(command); + return MainConfig.Plugin.dangerous.contains(command); } /** * Returns an instance of this plugin diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/ChatClickCallback.java b/src/main/java/io/github/thetrouper/sentinel/cmds/ChatClickCallback.java similarity index 50% rename from src/main/java/io/github/thetrouper/sentinel/commands/ChatClickCallback.java rename to src/main/java/io/github/thetrouper/sentinel/cmds/ChatClickCallback.java index 272fb9a..e6e5c74 100644 --- a/src/main/java/io/github/thetrouper/sentinel/commands/ChatClickCallback.java +++ b/src/main/java/io/github/thetrouper/sentinel/cmds/ChatClickCallback.java @@ -1,38 +1,28 @@ -/** - * This file is for tutorial purposes made by ImproperIssues. Distribute if you want :) - */ - -package io.github.thetrouper.sentinel.commands; +package io.github.thetrouper.sentinel.cmds; +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; +import io.github.itzispyder.pdk.utils.misc.Cooldown; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.server.functions.ReportFalsePositives; -import io.github.thetrouper.sentinel.server.util.Cooldown; import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.UUID; -/** - * Example command - */ -public class ChatClickCallback extends CustomCommand { - public static Cooldown fpReportCooldown = new Cooldown<>(); - public ChatClickCallback() { - super("sentinelcallback"); - this.setPrintStacktrace(true); - } - +public class ChatClickCallback implements CustomCommand { + Cooldown fpReportCooldown = new Cooldown<>(); @Override - public void dispatchCommand(CommandSender sender, Command command, String label, String[] args) { + public void dispatchCommand(CommandSender sender, Args args) { Player p = (Player) sender; - switch (args[0]) { + switch (args.get(0).toString()) { case "fpreport" -> { if (fpReportCooldown.isOnCooldown(p.getUniqueId()) && !p.isOp()) { p.sendMessage(Text.prefix(Sentinel.dict.get("cooldown") + fpReportCooldown.getCooldown(p.getUniqueId()))); } else { - ReportFalsePositives.sendFalsePositiveReport(args[1]); + ReportFalsePositives.sendFalsePositiveReport(args.get(1).toString()); p.sendMessage(Text.prefix(Sentinel.dict.get("false-positive-report-success"))); } } @@ -40,7 +30,7 @@ public class ChatClickCallback extends CustomCommand { } @Override - public void registerCompletions(CompletionBuilder builder) { - builder.addCompletion(1,"a_you","b_must","c_be","d_called","e_before","f_running","g_a","h_callback"); + public void dispatchCompletions(CompletionBuilder b) { + b.then(b.arg("a_you","b_must","c_be","d_called","e_before","f_running","g_a","h_callback")); } } diff --git a/src/main/java/io/github/thetrouper/sentinel/cmds/MessageCommand.java b/src/main/java/io/github/thetrouper/sentinel/cmds/MessageCommand.java new file mode 100644 index 0000000..ab63368 --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/cmds/MessageCommand.java @@ -0,0 +1,45 @@ +package io.github.thetrouper.sentinel.cmds; + +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CommandRegistry; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.Permission; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; +import io.github.thetrouper.sentinel.Sentinel; +import io.github.thetrouper.sentinel.server.functions.Message; +import io.github.thetrouper.sentinel.server.util.ServerUtils; +import io.github.thetrouper.sentinel.server.util.Text; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandRegistry(value = "sentinelmessage",permission = @Permission("sentinel.message")) +public class MessageCommand implements CustomCommand { + @Override + public void dispatchCommand(CommandSender sender, Args args) { + Player p = (Player) sender; + Player r = null; + if (args.getSize() == 0) { + p.sendMessage(Text.prefix(Sentinel.dict.get("no-online-player"))); + return; + } + if (args.getSize() == 1) { + p.sendMessage(Text.prefix(Sentinel.dict.get("no-message-provided"))); + return; + } + r = Bukkit.getPlayer(args.get(0).toString()); + + String msg = args.getAll(1).toString().trim(); + + if (p.hasPermission("sentinel.message") && r != null) { + Message.messagePlayer(p,r,msg); + } else if (r == null) p.sendMessage(Text.prefix((Sentinel.dict.get("no-online-player")))); + else sender.sendMessage(Text.prefix(Sentinel.dict.get("no-permission"))); + } + + @Override + public void dispatchCompletions(CompletionBuilder b) { + b.then(b.arg(ServerUtils.unVanishedPlayers()) + .then(b.arg("[]"))); + } +} diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/ReopCommand.java b/src/main/java/io/github/thetrouper/sentinel/cmds/ReopCommand.java similarity index 67% rename from src/main/java/io/github/thetrouper/sentinel/commands/ReopCommand.java rename to src/main/java/io/github/thetrouper/sentinel/cmds/ReopCommand.java index a01d44e..fd1f698 100644 --- a/src/main/java/io/github/thetrouper/sentinel/commands/ReopCommand.java +++ b/src/main/java/io/github/thetrouper/sentinel/cmds/ReopCommand.java @@ -1,19 +1,16 @@ -package io.github.thetrouper.sentinel.commands; +package io.github.thetrouper.sentinel.cmds; +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -public class ReopCommand extends CustomCommand { - public ReopCommand() { - super("reop"); - this.setPrintStacktrace(true); - } - +public class ReopCommand implements CustomCommand { @Override - public void dispatchCommand(CommandSender sender, Command command, String label, String[] args) { + public void dispatchCommand(CommandSender sender, Args args) { Player p = (Player) sender; if (Sentinel.isTrusted(p)) { if (!p.isOp()) { @@ -31,8 +28,7 @@ public class ReopCommand extends CustomCommand { } @Override - public void registerCompletions(CompletionBuilder builder) { + public void dispatchCompletions(CompletionBuilder completionBuilder) { } - } diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/ReplyCommand.java b/src/main/java/io/github/thetrouper/sentinel/cmds/ReplyCommand.java similarity index 61% rename from src/main/java/io/github/thetrouper/sentinel/commands/ReplyCommand.java rename to src/main/java/io/github/thetrouper/sentinel/cmds/ReplyCommand.java index d504ec8..76be823 100644 --- a/src/main/java/io/github/thetrouper/sentinel/commands/ReplyCommand.java +++ b/src/main/java/io/github/thetrouper/sentinel/cmds/ReplyCommand.java @@ -1,26 +1,21 @@ -package io.github.thetrouper.sentinel.commands; +package io.github.thetrouper.sentinel.cmds; +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.server.functions.Message; import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; import java.util.Map; import java.util.UUID; -public class ReplyCommand extends CustomCommand { - public static Map replyMap = MessageCommand.replyMap; - - public ReplyCommand() { - super("reply"); - this.setPrintStacktrace(true); - } - +public class ReplyCommand implements CustomCommand { + public static Map replyMap = Message.replyMap; @Override - public void dispatchCommand(CommandSender sender, Command command, String label, String[] args) { + public void dispatchCommand(CommandSender sender, Args args) { String name = sender.getName(); Player p = sender.getServer().getPlayer(name); UUID senderID = p.getUniqueId(); @@ -29,10 +24,10 @@ public class ReplyCommand extends CustomCommand { } Player r = sender.getServer().getPlayer(replyMap.get(senderID)); UUID reciverID = r.getUniqueId(); - if (args[0] == null) { + if (args.get(0).toString() == null) { p.sendMessage(Text.prefix(Sentinel.dict.get("no-message-provided"))); } - String msg = String.join(" ", Arrays.asList(args)); + String msg = args.getAll().toString(); if (p.hasPermission("sentinel.message")) { Message.messagePlayer(p,r,msg); replyMap.put(senderID,reciverID); @@ -42,7 +37,7 @@ public class ReplyCommand extends CustomCommand { } @Override - public void registerCompletions(CompletionBuilder builder) { - builder.addCompletion(1,builder.args.length >= 2, "[]"); + public void dispatchCompletions(CompletionBuilder b) { + b.then(b.arg("[]")); } } diff --git a/src/main/java/io/github/thetrouper/sentinel/cmds/SentinelCommand.java b/src/main/java/io/github/thetrouper/sentinel/cmds/SentinelCommand.java new file mode 100644 index 0000000..769e02e --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/cmds/SentinelCommand.java @@ -0,0 +1,75 @@ +package io.github.thetrouper.sentinel.cmds; + +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CommandRegistry; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.Permission; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; +import io.github.thetrouper.sentinel.Sentinel; +import io.github.thetrouper.sentinel.server.config.Config; +import io.github.thetrouper.sentinel.server.functions.AntiSpam; +import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; +import io.github.thetrouper.sentinel.server.util.Text; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +import java.util.HashSet; +@CommandRegistry(value = "sentinel",permission = @Permission("sentinel.debug")) +public class SentinelCommand implements CustomCommand { + public static boolean debugMode; + @Override + public void dispatchCommand(CommandSender commandSender, Args args) { + Player p = (Player) commandSender; + Sentinel instance = Sentinel.getInstance(); + switch (args.get(0).toString()) { + case "reload" -> { + if (!Sentinel.isTrusted(p)) return; + p.sendMessage(Text.prefix("Reloading Sentinel!")); + Sentinel.log.info("[Sentinel] Re-Initializing Sentinel!"); + instance.loadConfig(); + } + case "debug" -> { + switch (args.get(1).toString()) { + case "antiswear" -> { + HashSet players = new HashSet<>(); + players.add(p); + String msg = args.getAll(1).toString().trim(); + AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, p, msg, players); + ProfanityFilter.handleProfanityFilter(e); + } + case "antispam" -> { + HashSet players = new HashSet<>(); + players.add(p); + String msg = args.getAll(1).toString().trim(); + AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, p, msg, players); + AntiSpam.handleAntiSpam(e); + } + case "lang" -> { + p.sendMessage(Sentinel.dict.get("exmaple-message")); + } + case "toggle" -> { + debugMode = !debugMode; + p.sendMessage(Text.prefix((debugMode ? "Enabled" : "Disabled") + " debug mode.")); + } + } + } + case "getHeat" -> { + Player target = Bukkit.getPlayer(args.get(1).toString()); + if (target == null) { + p.sendMessage(Text.prefix("Invalid Player!")); + return; + } + p.sendMessage(Text.prefix("Heat of " + target.getName() + ": &8(&c" + AntiSpam.heatMap.get(target) + "&7/&4" + Config.punishHeat + "&8)")); + } + } + } + + @Override + public void dispatchCompletions(CompletionBuilder b) { + b.then(b.arg("reload","getheat")); + b.then(b.arg("debug").then( + b.arg("antiswear","antispam","lang","toggle"))); + } +} diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/SocialSpyCommand.java b/src/main/java/io/github/thetrouper/sentinel/cmds/SocialSpyCommand.java similarity index 67% rename from src/main/java/io/github/thetrouper/sentinel/commands/SocialSpyCommand.java rename to src/main/java/io/github/thetrouper/sentinel/cmds/SocialSpyCommand.java index 55b18dc..a88281c 100644 --- a/src/main/java/io/github/thetrouper/sentinel/commands/SocialSpyCommand.java +++ b/src/main/java/io/github/thetrouper/sentinel/cmds/SocialSpyCommand.java @@ -1,8 +1,10 @@ -package io.github.thetrouper.sentinel.commands; +package io.github.thetrouper.sentinel.cmds; +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -10,16 +12,11 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -public class SocialSpyCommand extends CustomCommand { +public class SocialSpyCommand implements CustomCommand { + public static Map spyMap = new HashMap<>(); - - public SocialSpyCommand() { - super("socialspy"); - this.setPrintStacktrace(true); - } - @Override - public void dispatchCommand(CommandSender sender, Command command, String label, String[] args) { + public void dispatchCommand(CommandSender sender, Args args) { String name = sender.getName(); Player p = sender.getServer().getPlayer(name); UUID senderID = p.getUniqueId(); @@ -33,7 +30,7 @@ public class SocialSpyCommand extends CustomCommand { } @Override - public void registerCompletions(CompletionBuilder builder) { + public void dispatchCompletions(CompletionBuilder completionBuilder) { } } diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/CustomCommand.java b/src/main/java/io/github/thetrouper/sentinel/commands/CustomCommand.java deleted file mode 100644 index 6bb43ab..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/commands/CustomCommand.java +++ /dev/null @@ -1,166 +0,0 @@ -package io.github.thetrouper.sentinel.commands; - -import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabExecutor; - -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; - -public abstract class CustomCommand implements TabExecutor { - - protected static final Sentinel system = Sentinel.getInstance(); - private final String name; - private boolean printStacktrace; - - public CustomCommand(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setPrintStacktrace(boolean printStacktrace) { - this.printStacktrace = printStacktrace; - } - - public boolean canPrintStacktrace() { - return printStacktrace; - } - - public abstract void dispatchCommand(CommandSender sender, Command command, String label, String[] args); - public abstract void registerCompletions(CompletionBuilder builder); - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - try { - dispatchCommand(sender, command, label, args); - } - catch (Exception ex) { - String msg = ex.getMessage(); - - if (ex instanceof IndexOutOfBoundsException) - msg = "command incomplete"; - else if (ex instanceof NullPointerException) - msg = "command contains a null value"; - - sender.sendMessage(Text.prefix("\u00a74Command Error: \u00a7cUnknown or incomplete command!")); - sender.sendMessage(Text.prefix("\u00a7cCaused by: \u00a78\u00a7o(" + ex.getClass().getSimpleName() + ") \u00a77" + msg)); - sender.sendMessage(Text.prefix("\u00a7cCorrect Usage: \u00a77" + command.getUsage())); - - if (printStacktrace) { - ex.printStackTrace(); - } - } - return true; - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - CompletionBuilder builder = new CompletionBuilder(sender, command, label, args); - registerCompletions(builder); - return builder.build(); - } - - public CustomCommand register() { - return register(this); - } - - public static CustomCommand register(CustomCommand command) { - system.getCommand(command.name).setExecutor(command); - system.getCommand(command.name).setTabCompleter(command); - return command; - } - - public static class CompletionBuilder { - - public final CommandSender sender; - public final Command command; - public final String label; - public final String[] args; - private final Map> entries; - - public CompletionBuilder(CommandSender sender, Command command, String label, String[] args) { - this.sender = sender; - this.command = command; - this.label = label; - this.args = args; - this.entries = new HashMap<>(); - } - - public CompletionBuilder addCompletion(int index, Predicate condition, Iterable args) { - addCompletion(index, condition.test(this), args); - return this; - } - - public CompletionBuilder addCompletion(int index, Predicate condition, String... args) { - addCompletion(index, condition.test(this), args); - return this; - } - - public CompletionBuilder addCompletion(int index, Predicate condition, List args) { - addCompletion(index, condition.test(this), args); - return this; - } - - public CompletionBuilder addCompletion(int index, boolean condition, Iterable args) { - if (condition) { - addCompletion(index, args); - } - return this; - } - - public CompletionBuilder addCompletion(int index, boolean condition, String... args) { - if (condition) { - addCompletion(index, args); - } - return this; - } - - public CompletionBuilder addCompletion(int index, boolean condition, List args) { - if (condition) { - addCompletion(index, args); - } - return this; - } - - public CompletionBuilder addCompletion(int index, Iterable args) { - List list = new ArrayList<>(); - args.forEach(list::add); - addCompletion(index, list); - return this; - } - - public CompletionBuilder addCompletion(int index, String... args) { - addCompletion(index, Arrays.asList(args)); - return this; - } - - public CompletionBuilder addCompletion(int index, List args) { - entries.put(index, args); - return this; - } - - public void removeCompletion(int index) { - entries.remove(index); - } - - public List convertLists(Collection input, Function conversion) { - List list = new ArrayList<>(); - for (I i : input) { - list.add(conversion.apply(i)); - } - return list; - } - - public List build() { - return entries.getOrDefault(args.length, new ArrayList<>()).stream() - .filter(s -> s.toLowerCase().contains(args[args.length - 1].toLowerCase())) - .toList(); - } - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/MessageCommand.java b/src/main/java/io/github/thetrouper/sentinel/commands/MessageCommand.java deleted file mode 100644 index 0395c0c..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/commands/MessageCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.github.thetrouper.sentinel.commands; - -import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.server.functions.Message; -import io.github.thetrouper.sentinel.server.util.ArrayUtils; -import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class MessageCommand extends CustomCommand { - public static Map replyMap = new HashMap<>(); - - public MessageCommand() { - super("msg"); - this.setPrintStacktrace(true); - } - - @Override - public void dispatchCommand(CommandSender sender, Command command, String label, String[] args) { - Player p = (Player) sender; - Player r = null; - if (args.length == 0) { - p.sendMessage(Text.prefix(Sentinel.dict.get("no-online-player"))); - } - if (args.length == 1) { - p.sendMessage(Text.prefix(Sentinel.dict.get("no-message-provided"))); - } - r = Bukkit.getPlayer(args[0]); - String msg = ""; - for (int i = 1; i < args.length; i++) { - msg = msg.concat(" " + args[i]); - } - msg = msg.trim(); - if (p.hasPermission("sentinel.message") && r != null) { - Message.messagePlayer(p,r,msg); - } else if (r == null) { - p.sendMessage(Text.prefix((Sentinel.dict.get("no-online-player")))); - } - else { - sender.sendMessage(Text.prefix(Sentinel.dict.get("no-permission"))); - } - } - - @Override - public void registerCompletions(CompletionBuilder builder) { - builder.addCompletion(1, ArrayUtils.toNewList(Bukkit.getOnlinePlayers(), Player::getName)); - builder.addCompletion(2,builder.args.length >= 2, "[]"); - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/commands/SentinelCommand.java b/src/main/java/io/github/thetrouper/sentinel/commands/SentinelCommand.java deleted file mode 100644 index 42f56aa..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/commands/SentinelCommand.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * This file is for tutorial purposes made by ImproperIssues. Distribute if you want :) - */ - -package io.github.thetrouper.sentinel.commands; - -import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.functions.AntiSpam; -import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; -import io.github.thetrouper.sentinel.server.util.ArrayUtils; -import io.github.thetrouper.sentinel.server.util.Text; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.player.AsyncPlayerChatEvent; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -/** - * Example command - */ -public class SentinelCommand extends CustomCommand { - public static boolean debugmode; - - public SentinelCommand() { - super("sentinel"); - this.setPrintStacktrace(true); - } - - @Override - public void dispatchCommand(CommandSender sender, Command command, String label, String[] args) { - Player p = (Player) sender; - Sentinel instance = Sentinel.getInstance(); - switch (args[0]) { - case "reload" -> { - if (!Sentinel.isTrusted(p)) return; - p.sendMessage(Text.prefix("Reloading Sentinel!")); - Sentinel.log.info("[Sentinel] Re-Initializing Sentinel!"); - instance.loadConfig(); - } - case "debug" -> { - switch (args[1]) { - case "antiswear" -> { - HashSet players = new HashSet<>(); - players.add((Player) sender); - String msg = ""; - for (int i = 1; i < args.length; i++) { - msg = msg.concat(" " + args[i]); - } - msg = msg.trim(); - AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, (Player) sender, msg, players); - ProfanityFilter.handleProfanityFilter(e); - } - case "antispam" -> { - HashSet players = new HashSet<>(); - players.add((Player) sender); - String msg = ""; - for (int i = 1; i < args.length; i++) { - msg = msg.concat(" " + args[i]); - } - msg = msg.trim(); - AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, (Player) sender, msg, players); - AntiSpam.handleAntiSpam(e); - } - case "lang" -> { - p.sendMessage(Sentinel.dict.get("exmaple-message")); - } - case "toggle" -> { - debugmode = !debugmode; - p.sendMessage(Text.prefix((debugmode ? "enabled" : "disabled") + " debug mode.")); - } - } - } - case "getHeat" -> { - Player target = Bukkit.getPlayer(args[1]); - if (target == null) { - p.sendMessage(Text.prefix("Invalid Player!")); - return; - } - p.sendMessage(Text.prefix("Heat of " + target.getName() + ": &8(&c" + AntiSpam.heatMap.get(target) + "&7/&4" + Config.punishHeat + "&8)")); - } - } - } - - @Override - public void registerCompletions(CompletionBuilder builder) { - builder.addCompletion(1, "debug", - "getHeat", - "reload"); - if (builder.args.length >= 2 && builder.args[1].equals("debug")) { - builder.addCompletion(2, "antiswear", - "antispam", - "lang", - "toggle"); - //builder.addCompletion(2, (builder.args.length >= 1 && builder.args[1].equals("getHeat")), ArrayUtils.toNewList(Bukkit.getOnlinePlayers(), Player::getName)); - } - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/data/ActionType.java b/src/main/java/io/github/thetrouper/sentinel/data/ActionType.java index 16bd7c4..45e3e9c 100644 --- a/src/main/java/io/github/thetrouper/sentinel/data/ActionType.java +++ b/src/main/java/io/github/thetrouper/sentinel/data/ActionType.java @@ -17,8 +17,8 @@ public enum ActionType { private final String messageTitle; private final Color embedColor; - ActionType(String messagetop, String messageTitle, Color embedColor) { - this.messageTop = messagetop; + ActionType(String messageTop, String messageTitle, Color embedColor) { + this.messageTop = messageTop; this.messageTitle = messageTitle; this.embedColor = embedColor; } diff --git a/src/main/java/io/github/thetrouper/sentinel/data/FAT.java b/src/main/java/io/github/thetrouper/sentinel/data/FAT.java index a10c09f..dbc26cb 100644 --- a/src/main/java/io/github/thetrouper/sentinel/data/FAT.java +++ b/src/main/java/io/github/thetrouper/sentinel/data/FAT.java @@ -1,5 +1,7 @@ package io.github.thetrouper.sentinel.data; +import io.github.thetrouper.sentinel.server.config.Config; + import java.awt.*; public enum FAT { diff --git a/src/main/java/io/github/thetrouper/sentinel/discord/DiscordWebhook.java b/src/main/java/io/github/thetrouper/sentinel/discord/DiscordWebhook.java index 2cf3e7e..0f67fc6 100644 --- a/src/main/java/io/github/thetrouper/sentinel/discord/DiscordWebhook.java +++ b/src/main/java/io/github/thetrouper/sentinel/discord/DiscordWebhook.java @@ -1,16 +1,13 @@ package io.github.thetrouper.sentinel.discord; import javax.net.ssl.HttpsURLConnection; -import java.awt.Color; -import java.io.*; +import java.awt.*; +import java.io.IOException; +import java.io.OutputStream; import java.lang.reflect.Array; import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Class used to execute Discord Webhooks with low effort diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockExecute.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockExecute.java index 6615691..da4fe92 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockExecute.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockExecute.java @@ -1,15 +1,7 @@ package io.github.thetrouper.sentinel.events; -import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.commands.SentinelCommand; -import org.bukkit.Material; -import org.bukkit.block.CommandBlock; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.ServerCommandEvent; -import org.bukkit.inventory.meta.BlockDataMeta; +import io.github.itzispyder.pdk.events.CustomListener; -public class CMDBlockExecute implements Listener { +public class CMDBlockExecute implements CustomListener { } diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java index 53533d0..4f54237 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockPlace.java @@ -1,18 +1,18 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Action; import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.server.Action; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; -public class CMDBlockPlace implements Listener { +public class CMDBlockPlace implements CustomListener { @EventHandler private void onCMDBlockPlace(BlockPlaceEvent e) { ServerUtils.sendDebugMessage("CommandBlockPlace: Detected block place"); diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java index 6548b94..2a22307 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDBlockUse.java @@ -1,9 +1,10 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Action; import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.server.Action; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; import org.bukkit.Material; import org.bukkit.block.Block; @@ -11,11 +12,10 @@ import org.bukkit.block.BlockState; import org.bukkit.block.CommandBlock; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.player.PlayerInteractEvent; -public class CMDBlockUse implements Listener { +public class CMDBlockUse implements CustomListener { @EventHandler private void onCMDBlockUse(PlayerInteractEvent e) { ServerUtils.sendDebugMessage("CommandBlockUse: Detected Interaction"); diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java index cd25cb8..965bb28 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartPlace.java @@ -1,17 +1,17 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Action; import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.server.Action; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; -public class CMDMinecartPlace implements Listener { +public class CMDMinecartPlace implements CustomListener { @EventHandler private void onCMDMinecartPlace(PlayerInteractEvent e) { diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java index 058fb0f..a208195 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CMDMinecartUse.java @@ -1,17 +1,17 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Action; import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.server.Action; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; -public class CMDMinecartUse implements Listener { +public class CMDMinecartUse implements CustomListener { @EventHandler private void onCMDBlockMinecartUse(PlayerInteractEntityEvent e) { ServerUtils.sendDebugMessage("MinecartCommandUse: Detected Interaction with entity"); diff --git a/src/main/java/io/github/thetrouper/sentinel/events/ChatEvent.java b/src/main/java/io/github/thetrouper/sentinel/events/ChatEvent.java index 5225c00..8103bbf 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/ChatEvent.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/ChatEvent.java @@ -1,17 +1,17 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; +import io.github.thetrouper.sentinel.server.config.Config; +import io.github.thetrouper.sentinel.server.config.MainConfig; import io.github.thetrouper.sentinel.server.functions.AntiSpam; import io.github.thetrouper.sentinel.server.functions.AntiUnicode; import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; import io.github.thetrouper.sentinel.server.util.ServerUtils; -import io.github.thetrouper.sentinel.server.util.Text; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; -public class ChatEvent implements Listener { +public class ChatEvent implements CustomListener { @EventHandler public static void onChat(AsyncPlayerChatEvent e) { @@ -19,7 +19,7 @@ public class ChatEvent implements Listener { ServerUtils.sendDebugMessage("ChatEvent: Chat event detected!"); if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiunicode.bypass")) { ServerUtils.sendDebugMessage("ChatEvent: Permission bypass failed, checking for unicode"); - if (Config.antiUnicode) { + if (MainConfig.Chat.antiUnicode) { ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing unicode check!")); AntiUnicode.handleAntiUnicode(e); } diff --git a/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java b/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java index 797ed6a..a198173 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/CommandEvent.java @@ -1,17 +1,16 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Action; import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.server.Action; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; -import io.github.thetrouper.sentinel.server.util.Text; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -public class CommandEvent implements Listener { +public class CommandEvent implements CustomListener { private String trusted; @EventHandler private void onCommand(PlayerCommandPreprocessEvent e) { diff --git a/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java b/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java index 580b573..a6064ca 100644 --- a/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java +++ b/src/main/java/io/github/thetrouper/sentinel/events/NBTEvents.java @@ -1,9 +1,10 @@ package io.github.thetrouper.sentinel.events; +import io.github.itzispyder.pdk.events.CustomListener; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.Action; import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.server.Action; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -12,7 +13,6 @@ import org.bukkit.block.Container; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryCreativeEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -21,7 +21,7 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.Map; -public class NBTEvents implements Listener { +public class NBTEvents implements CustomListener { @EventHandler private void onNBTPull(InventoryCreativeEvent e) { ServerUtils.sendDebugMessage("NBT: Detected creative mode action"); diff --git a/src/main/java/io/github/thetrouper/sentinel/data/Action.java b/src/main/java/io/github/thetrouper/sentinel/server/Action.java similarity index 88% rename from src/main/java/io/github/thetrouper/sentinel/data/Action.java rename to src/main/java/io/github/thetrouper/sentinel/server/Action.java index d9b74bc..db31a94 100644 --- a/src/main/java/io/github/thetrouper/sentinel/data/Action.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/Action.java @@ -1,15 +1,17 @@ -package io.github.thetrouper.sentinel.data; +package io.github.thetrouper.sentinel.server; import io.github.thetrouper.sentinel.Sentinel; +import io.github.thetrouper.sentinel.data.ActionType; +import io.github.thetrouper.sentinel.data.Emojis; import io.github.thetrouper.sentinel.discord.DiscordWebhook; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.FileUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.Text; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.GameMode; -import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; @@ -19,36 +21,8 @@ import java.io.IOException; import java.util.List; public class Action { - private final Cancellable event; - private final ActionType action; - private final Player player; - private final String command; - private final String loggedCommand; - private final ItemStack item; - private final Block block; - private final boolean denied; - private final boolean deoped; - private final boolean punished; - private final boolean revertGM; - private final boolean notifyDiscord; - private final boolean notifyTrusted; - private final boolean notifyConsole; - private Action(Cancellable event, ActionType action, Player player, String command, String loggedCommand, ItemStack item, Block block,boolean denied, boolean deoped, boolean punished, boolean revertedGM, boolean notifyDiscord, boolean notifyTrusted, boolean notifyConsole) { - this.event = event; - this.action = action; - this.player = player; - this.command = command; - this.loggedCommand = loggedCommand; - this.item = item; - this.block = block; - this.denied = denied; - this.deoped = deoped; - this.punished = punished; - this.revertGM = revertedGM; - this.notifyDiscord = notifyDiscord; - this.notifyTrusted = notifyTrusted; - this.notifyConsole = notifyConsole; + private Action(Cancellable event, ActionType action, Player player, String command, String loggedCommand, ItemStack item, Block block, boolean denied, boolean deoped, boolean punished, boolean revertedGM, boolean notifyDiscord, boolean notifyTrusted, boolean notifyConsole) { } public static class Builder { @@ -140,7 +114,7 @@ public class Action { if (punished) { for (String command : punishCommands) { - ServerUtils.sendCommand(command); + ServerUtils.sendCommand(command.replaceAll("%player%",player.getName())); } } diff --git a/src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java b/src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java similarity index 97% rename from src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java rename to src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java index 3b13352..299308d 100644 --- a/src/main/java/io/github/thetrouper/sentinel/data/FilterAction.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/FilterAction.java @@ -1,10 +1,11 @@ -package io.github.thetrouper.sentinel.data; +package io.github.thetrouper.sentinel.server; import io.github.thetrouper.sentinel.Sentinel; +import io.github.thetrouper.sentinel.data.Emojis; +import io.github.thetrouper.sentinel.data.FAT; import io.github.thetrouper.sentinel.discord.DiscordWebhook; -import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.functions.ReportFalsePositives; -import io.github.thetrouper.sentinel.server.util.GPTUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.Text; import net.md_5.bungee.api.chat.ClickEvent; @@ -13,7 +14,6 @@ import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; -import java.awt.*; import java.io.IOException; import java.math.RoundingMode; import java.text.DecimalFormat; diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/AdvancedConfig.java b/src/main/java/io/github/thetrouper/sentinel/server/config/AdvancedConfig.java new file mode 100644 index 0000000..27b184b --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/AdvancedConfig.java @@ -0,0 +1,38 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +public class AdvancedConfig implements JsonSerializable { + + @Override + public File getFile() { + return new File("plugins/Sentinel/advanced-config.json"); + } + + public static Map leetPatterns = new HashMap<>() {{ + put("0", "o"); + put("1", "i"); + put("3", "e"); + put("4", "a"); + put("5", "s"); + put("6", "g"); + put("7", "l"); + put("$", "s"); + put("!", "i"); + put("|", "i"); + put("+", "t"); + put("#", "h"); + put("@", "a"); + put("<", "c"); + put("V", "u"); + put("v", "u"); + }}; + public static String falsePosRegex = ""; + public static String swearRegex; + public static String strictRegex; + public static String urlRegex = "^(https?://)?([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.[a-zA-Z]{2,}(/\\S*)?$\n"; +} diff --git a/src/main/java/io/github/thetrouper/sentinel/data/Config.java b/src/main/java/io/github/thetrouper/sentinel/server/config/Config.java similarity index 98% rename from src/main/java/io/github/thetrouper/sentinel/data/Config.java rename to src/main/java/io/github/thetrouper/sentinel/server/config/Config.java index f2b9850..e43d8c9 100644 --- a/src/main/java/io/github/thetrouper/sentinel/data/Config.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/Config.java @@ -2,18 +2,14 @@ * This file is for tutorial purposes made by ImproperIssues. Distribute if you want :) */ -package io.github.thetrouper.sentinel.data; +package io.github.thetrouper.sentinel.server.config; -import com.google.common.base.Charsets; import io.github.thetrouper.sentinel.Sentinel; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/FPConfig.java b/src/main/java/io/github/thetrouper/sentinel/server/config/FPConfig.java new file mode 100644 index 0000000..8feb961 --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/FPConfig.java @@ -0,0 +1,16 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.File; +import java.util.List; + +public class FPConfig implements JsonSerializable { + + @Override + public File getFile() { + return new File("plugins/Sentinel/false-positives.json"); + } + + public static List swearWhitelist; +} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/Lang.java b/src/main/java/io/github/thetrouper/sentinel/server/config/Lang.java new file mode 100644 index 0000000..2561892 --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/Lang.java @@ -0,0 +1,15 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.File; + +public class Lang implements JsonSerializable { + + @Override + public File getFile() { + return new File("plugins/Sentinel/lang/" + Config.lang); + } + + +} diff --git a/src/main/java/io/github/thetrouper/sentinel/data/LanguageFile.java b/src/main/java/io/github/thetrouper/sentinel/server/config/LanguageFile.java similarity index 93% rename from src/main/java/io/github/thetrouper/sentinel/data/LanguageFile.java rename to src/main/java/io/github/thetrouper/sentinel/server/config/LanguageFile.java index e87d854..2ca3ce0 100644 --- a/src/main/java/io/github/thetrouper/sentinel/data/LanguageFile.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/LanguageFile.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.sentinel.data; +package io.github.thetrouper.sentinel.server.config; import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.server.util.JsonSerializable; diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/MainConfig.java b/src/main/java/io/github/thetrouper/sentinel/server/config/MainConfig.java new file mode 100644 index 0000000..5a18573 --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/MainConfig.java @@ -0,0 +1,77 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.thetrouper.sentinel.server.util.JsonSerializable; + +import java.io.File; +import java.util.List; +import java.util.Map; + +public class MainConfig implements JsonSerializable { + + @Override + public File getFile() { + return new File("plugins/Sentinel/main-config.json"); + } + + public static class Plugin { + public static String prefix = "§d§lSentinel §8» §7"; + public static String webhook; + public static String lang; + public static List trustedPlayers; + public static boolean blockSpecific; + public static boolean preventNBT; + public static boolean preventCmdBlockPlace; + public static boolean preventCmdBlockUse; + public static boolean preventCmdBlockChange; + public static boolean preventCmdCartPlace; + public static boolean preventCmdCartUse; + public static boolean cmdBlockOpCheck; + public static List dangerous; + public static boolean logDangerous; + public static boolean logCmdBlocks; + public static boolean logNBT; + public static boolean logSpecific; + public static List logged; + public static boolean deop; + public static boolean nbtPunish; + public static boolean cmdBlockPunish; + public static boolean commandPunish; + public static boolean specificPunish; + public static List punishCommands; + public static boolean reopCommand; + } + + public static class Chat { + public static boolean antiUnicode; + + public static class antiSpam { + public static boolean antiSpamEnabled; + public static int defaultGain; + public static int lowGain; + public static int mediumGain; + public static int highGain; + public static int heatDecay; + public static int blockHeat; + public static int punishHeat; + public static boolean clearChat; + public static String chatClearCommand; + public static String spamPunishCommand; + public static boolean logSpam; + } + public static class antiSwear { + public static boolean antiSwearEnabled; + public static int lowScore; + public static int mediumLowScore; + public static int mediumScore; + public static int mediumHighScore; + public static int highScore; + public static int scoreDecay; + public static int punishScore; + public static boolean strictInstaPunish; + public static String swearPunishCommand; + public static String strictPunishCommand; + public static boolean logSwears; + } + + } +} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/NBTConfig.java b/src/main/java/io/github/thetrouper/sentinel/server/config/NBTConfig.java new file mode 100644 index 0000000..7bc76a3 --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/NBTConfig.java @@ -0,0 +1,59 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.itzispyder.pdk.utils.FileValidationUtils; +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; + +public class NBTConfig implements JsonSerializable { + @Override + public File getFile() { + return new File("plugins/Sentinel/NBTConfig.json"); + } + + public static boolean allowName; + public static boolean allowLore; + public static boolean allowAttributes; + public static int globalMaxEnchant; + public static int maxMending; + public static int maxUnbreaking; + public static int maxVanishing; + public static int maxAquaAffinity; + public static int maxBlastProtection; + public static int maxCurseOfBinding; + public static int maxDepthStrider; + public static int maxFeatherFalling; + public static int maxFireProtection; + public static int maxFrostWalker; + public static int maxProjectileProtection; + public static int maxProtection; + public static int maxRespiration; + public static int maxSoulSpeed; + public static int maxThorns; + public static int maxSwiftSneak; + public static int maxBaneOfArthropods; + public static int maxEfficiency; + public static int maxFireAspect; + public static int maxLooting; + public static int maxImpaling; + public static int maxKnockback; + public static int maxSharpness; + public static int maxSmite; + public static int maxSweepingEdge; + public static int maxChanneling; + public static int maxFlame; + public static int maxInfinity; + public static int maxLoyalty; + public static int maxRiptide; + public static int maxMultishot; + public static int maxPiercing; + public static int maxPower; + public static int maxPunch; + public static int maxQuickCharge; + public static int maxFortune; + public static int maxLuckOfTheSea; + public static int maxLure; + public static int maxSilkTouch; +} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/StrictConfig.java b/src/main/java/io/github/thetrouper/sentinel/server/config/StrictConfig.java new file mode 100644 index 0000000..f45859e --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/StrictConfig.java @@ -0,0 +1,15 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.File; +import java.util.List; + +public class StrictConfig implements JsonSerializable { + @Override + public File getFile() { + return new File("plugins/Sentinel/strict.json"); + } + + public static List strict; +} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/config/SwearsConfig.java b/src/main/java/io/github/thetrouper/sentinel/server/config/SwearsConfig.java new file mode 100644 index 0000000..89f2a8f --- /dev/null +++ b/src/main/java/io/github/thetrouper/sentinel/server/config/SwearsConfig.java @@ -0,0 +1,15 @@ +package io.github.thetrouper.sentinel.server.config; + +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.File; +import java.util.List; + +public class SwearsConfig implements JsonSerializable { + @Override + public File getFile() { + return new File("plugins/Sentinel/swears.json"); + } + + public static List swears; +} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/functions/AntiSpam.java b/src/main/java/io/github/thetrouper/sentinel/server/functions/AntiSpam.java index dc25594..60558e9 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/functions/AntiSpam.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/functions/AntiSpam.java @@ -1,8 +1,8 @@ package io.github.thetrouper.sentinel.server.functions; -import io.github.thetrouper.sentinel.data.Config; import io.github.thetrouper.sentinel.data.FAT; -import io.github.thetrouper.sentinel.data.FilterAction; +import io.github.thetrouper.sentinel.server.FilterAction; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.GPTUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.Text; @@ -29,6 +29,7 @@ public class AntiSpam { lastMessageMap.put(p,"/* Placeholder Message from Sentinel */"); ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " did not have a previous message, setting to placeholder!"); } + if (!heatMap.containsKey(p)) { heatMap.put(p,0); ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " did not have a heat, setting it to 0!"); diff --git a/src/main/java/io/github/thetrouper/sentinel/server/functions/Message.java b/src/main/java/io/github/thetrouper/sentinel/server/functions/Message.java index d255bda..9f07a79 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/functions/Message.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/functions/Message.java @@ -1,22 +1,22 @@ package io.github.thetrouper.sentinel.server.functions; +import io.github.itzispyder.pdk.utils.ServerUtils; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.commands.MessageCommand; -import io.github.thetrouper.sentinel.commands.SocialSpyCommand; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.server.util.ServerUtils; +import io.github.thetrouper.sentinel.cmds.SocialSpyCommand; +import io.github.thetrouper.sentinel.server.config.Config; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.hover.content.Text; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.UUID; public class Message { - private static final Map replyMap = MessageCommand.replyMap; + public static final Map replyMap = new HashMap<>(); public static void messagePlayer(Player sender, Player receiver, String message) { HashSet receivers = new HashSet<>(); receivers.add(receiver); @@ -26,9 +26,7 @@ public class Message { if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antiswear.bypass")) if (Config.antiSwearEnabled) ProfanityFilter.handleProfanityFilter(checkEvent); if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antispam.bypass")) if (Config.antiSpamEnabled) AntiSpam.handleAntiSpam(checkEvent); if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antiunicode.bypass")) if (Config.antiUnicode) AntiUnicode.handleAntiUnicode(checkEvent); - if (checkEvent.isCancelled()) { - return; - } + if (checkEvent.isCancelled()) return; sender.sendMessage(Sentinel.dict.get("message-sent").formatted(receiver.getName(),message)); receiver.sendMessage(Sentinel.dict.get("message-received").formatted(sender.getName(),message)); diff --git a/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java b/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java index 597252c..20a7f62 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/functions/ProfanityFilter.java @@ -1,18 +1,17 @@ package io.github.thetrouper.sentinel.server.functions; -import io.github.thetrouper.sentinel.data.Config; -import io.github.thetrouper.sentinel.data.FilterAction; + import io.github.thetrouper.sentinel.data.FAT; +import io.github.thetrouper.sentinel.server.FilterAction; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.Text; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; -import java.util.List; import java.util.HashMap; +import java.util.List; import java.util.Map; -import static io.github.thetrouper.sentinel.server.util.Text.SECTION_SYMBOL; - public class ProfanityFilter { public static Map scoreMap; private static final List swearBlacklist = Config.swearBlacklist; diff --git a/src/main/java/io/github/thetrouper/sentinel/server/functions/ReportFalsePositives.java b/src/main/java/io/github/thetrouper/sentinel/server/functions/ReportFalsePositives.java index d9b9166..4cc486c 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/functions/ReportFalsePositives.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/functions/ReportFalsePositives.java @@ -1,12 +1,11 @@ package io.github.thetrouper.sentinel.server.functions; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; import io.github.thetrouper.sentinel.data.Emojis; import io.github.thetrouper.sentinel.discord.DiscordWebhook; +import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.util.Randomizer; import io.github.thetrouper.sentinel.server.util.ServerUtils; -import io.github.thetrouper.sentinel.server.util.Text; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/ArgBuilder.java b/src/main/java/io/github/thetrouper/sentinel/server/util/ArgBuilder.java deleted file mode 100644 index 5415385..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/ArgBuilder.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * This file is for tutorial purposes made by ImproperIssues. Distribute if you want :) - */ - -package io.github.thetrouper.sentinel.server.util; - -import java.util.List; -import java.util.Set; - -/** - * Represents Argument builder - */ -public class ArgBuilder { - - private String result; - - /** - * Constructs an argument builder. - */ - public ArgBuilder() { - this.result = " "; - } - - /** - * Constructs an argument builder with a string. - * @param begin the beginner string - */ - public ArgBuilder(String begin) { - this.result = begin + " "; - } - - /** - * Appends a string - * @param string string - * @return this class - */ - public ArgBuilder append(String string) { - this.result += string + " "; - return this; - } - - /** - * Appends a string array - * @param args string array - * @return this class - */ - public ArgBuilder append(String[] args) { - StringBuilder builder = new StringBuilder(); - for (String arg : args) builder.append(arg).append(" "); - this.result += builder.toString(); - return this; - } - - /** - * Appends a string list - * @param args string list - * @return this class - */ - public ArgBuilder append(List args) { - StringBuilder builder = new StringBuilder(); - for (String arg : args) builder.append(arg).append(" "); - this.result += builder.toString(); - return this; - } - - /** - * Appends a string set - * @param args string set - * @return this class - */ - public ArgBuilder append(Set args) { - StringBuilder builder = new StringBuilder(); - for (String arg : args) builder.append(arg).append(" "); - this.result += builder.toString(); - return this; - } - - /** - * Returns this class as a string - * @return this class as a string - */ - public String build() { - return this.toString().trim(); - } - - @Override - public String toString() { - return result; - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/ArrayUtils.java b/src/main/java/io/github/thetrouper/sentinel/server/util/ArrayUtils.java deleted file mode 100644 index 3a8fbec..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/ArrayUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.github.thetrouper.sentinel.server.util; - -import org.bukkit.Material; -import org.bukkit.entity.EntityType; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; - -public final class ArrayUtils { - - /** - * Transforms an array to another one - * @param e iterable list - * @param a action - * @return new transformed list - * @param input - * @param output - */ - public static List toNewList(Iterable e, Function a) { - List list = new ArrayList<>(); - e.forEach(i -> list.add(a.apply(i))); - return list; - } - - public static String list2string(List list) { - return ("\u00a77[\u00a7e" + String.join("\u00a77, \u00a7e", ArrayUtils.toNewList(list, Object::toString)) + "\u00a77]"); - } - - public static List bind(Iterable tList, T... ts) { - List list = Arrays.asList(ts); - tList.forEach(list::add); - return list; - } - - public static class Constants { - public static final List MATERIAL_NAMES = toNewList(Arrays.stream(Material.values()).toList(),m -> m.name().toLowerCase()); - public static final List ENTITY_NAMES = toNewList(Arrays.stream(EntityType.values()).toList(),e -> e.name().toLowerCase()); - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/Cooldown.java b/src/main/java/io/github/thetrouper/sentinel/server/util/Cooldown.java deleted file mode 100644 index f772a05..0000000 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/Cooldown.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.github.thetrouper.sentinel.server.util; - -import java.util.HashMap; -import java.util.Map; - -public class Cooldown { - - private final Map timer; - - public Cooldown() { - this.timer = new HashMap<>(); - } - - private O getOrDefault(O value, O def) { - return value != null ? value : def; - } - - public long getCooldown(T obj) { - return Math.max(getOrDefault(timer.get(obj), 0L) - System.currentTimeMillis(), 0L); - } - - public double getCooldownSec(T obj) { - final long cooldown = this.getCooldown(obj); - return MathUtils.round(cooldown / 1000.0, 100); - } - - public boolean isOnCooldown(T obj) { - return getCooldown(obj) > 0L; - } - - public void setCooldown(T obj, long millis) { - timer.put(obj, System.currentTimeMillis() + millis); - } - - public void addCooldown(T obj, long millis) { - setCooldown(obj, getCooldown(obj) + millis); - } -} diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/FileUtils.java b/src/main/java/io/github/thetrouper/sentinel/server/util/FileUtils.java index 92c7f60..086bc00 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/FileUtils.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/util/FileUtils.java @@ -1,33 +1,11 @@ package io.github.thetrouper.sentinel.server.util; -import com.google.gson.reflect.TypeToken; import io.github.thetrouper.sentinel.Sentinel; -import java.io.*; -import java.time.*; -import java.util.List; -import java.util.Random; -import com.google.gson.Gson; -import org.bukkit.Location; -import com.google.gson.Gson; -import java.io.FileReader; -import java.io.IOException; -import java.util.Map; +import java.io.BufferedWriter; +import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.util.Map; -import java.util.UUID; -import com.google.gson.Gson; -import java.lang.reflect.Type; -import java.io.FileWriter; -import java.io.FileReader; -import java.io.IOException; -import java.util.Map; -import java.util.List; -import java.util.HashMap; -import java.util.ArrayList; -import java.util.UUID; -import org.bukkit.Location; public class FileUtils { public static boolean folderExists(String folderName) { File folder = new File(Sentinel.getInstance().getDataFolder(), folderName); diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/Randomizer.java b/src/main/java/io/github/thetrouper/sentinel/server/util/Randomizer.java index 940965f..105ce8a 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/Randomizer.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/util/Randomizer.java @@ -1,10 +1,10 @@ package io.github.thetrouper.sentinel.server.util; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Set; -import java.text.SimpleDateFormat; -import java.util.Date; /** * Randomize items from a list diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/ServerUtils.java b/src/main/java/io/github/thetrouper/sentinel/server/util/ServerUtils.java index 84c2800..98326c5 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/ServerUtils.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/util/ServerUtils.java @@ -1,12 +1,13 @@ package io.github.thetrouper.sentinel.server.util; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.commands.SentinelCommand; +import io.github.thetrouper.sentinel.cmds.SentinelCommand; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.metadata.MetadataValue; import java.util.ArrayList; import java.util.Arrays; @@ -27,7 +28,7 @@ public class ServerUtils { },1); } public static void sendDebugMessage(String message) { - if (SentinelCommand.debugmode) { + if (SentinelCommand.debugMode) { String log = "[Sentinel] [DEBUG]: " + message; Sentinel.log.info(log); for (Player trustedPlayer : Bukkit.getOnlinePlayers()) { @@ -90,4 +91,15 @@ public class ServerUtils { } return false; } + + public static boolean isVanished(Player player) { + for (MetadataValue meta : player.getMetadata("vanished")) { + if (meta.asBoolean()) return true; + } + return false; + } + + public static String[] unVanishedPlayers() { + return io.github.itzispyder.pdk.utils.ServerUtils.players(ServerUtils::isVanished).stream().map(Player::getName).toArray(String[]::new); + } } diff --git a/src/main/java/io/github/thetrouper/sentinel/server/util/Text.java b/src/main/java/io/github/thetrouper/sentinel/server/util/Text.java index ab15b1f..84286ee 100644 --- a/src/main/java/io/github/thetrouper/sentinel/server/util/Text.java +++ b/src/main/java/io/github/thetrouper/sentinel/server/util/Text.java @@ -2,7 +2,7 @@ package io.github.thetrouper.sentinel.server.util; import io.github.thetrouper.sentinel.Sentinel; -import io.github.thetrouper.sentinel.data.Config; +import io.github.thetrouper.sentinel.server.config.Config; import java.util.Map; import java.util.regex.PatternSyntaxException; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6fe96f9..6594d27 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -15,7 +15,7 @@ # config: plugin: - key: "beta" # Put your license key here. If you do not have one, join the discord to verify your purchase + key: "beta" # Put your license key here. If you do not have one, join the discord to verify your purchase lang: "en_us.json" # Languages # -------------------------------- # Anti-Nuke Setup (Do this first)