From 38ce337fe97061d6ae6a43d2b2ca6bc7694ea49d Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Thu, 30 Dec 2021 18:56:14 +0100 Subject: [PATCH] Rewrote everything to be up-to date with 1.18, using Minimessage, moved config to share and added more things to the config, optimized use of the database --- pom.xml | 4 +- src/main/java/com/liteflags/LiteFlags.java | 14 +- .../java/com/liteflags/auth/AuthTimer.java | 22 +- .../com/liteflags/auth/Authentication.java | 28 +- .../liteflags/commands/CommandManager.java | 104 +++++++ .../java/com/liteflags/commands/FlagCMD.java | 278 ------------------ .../com/liteflags/commands/SubCommand.java | 20 ++ .../commands/subcommands/CommandFlagList.java | 152 ++++++++++ .../subcommands/CommandFlagPlayer.java | 158 ++++++++++ .../subcommands/CommandFlagRemove.java | 78 +++++ .../commands/subcommands/CommandHelp.java | 51 ++++ .../commands/subcommands/CommandReload.java | 33 +++ .../com/liteflags/config/AbstractConfig.java | 130 ++++++++ .../java/com/liteflags/config/Config.java | 135 +++++++++ .../com/liteflags/data/database/Database.java | 132 ++------- .../data/database/DatabaseConnection.java | 14 +- .../com/liteflags/data/database/Methods.java | 17 +- .../java/com/liteflags/events/ChatEvent.java | 51 ++-- .../java/com/liteflags/events/LoginEvent.java | 39 ++- .../com/liteflags/events/LogoutEvent.java | 8 +- .../java/com/liteflags/events/MoveEvent.java | 3 +- src/main/java/com/liteflags/util/Logger.java | 37 +++ .../java/com/liteflags/util/Utilities.java | 53 +--- src/main/resources/config.yml | 99 ------- src/main/resources/plugin.yml | 5 +- 25 files changed, 1049 insertions(+), 616 deletions(-) create mode 100644 src/main/java/com/liteflags/commands/CommandManager.java delete mode 100644 src/main/java/com/liteflags/commands/FlagCMD.java create mode 100644 src/main/java/com/liteflags/commands/SubCommand.java create mode 100644 src/main/java/com/liteflags/commands/subcommands/CommandFlagList.java create mode 100644 src/main/java/com/liteflags/commands/subcommands/CommandFlagPlayer.java create mode 100644 src/main/java/com/liteflags/commands/subcommands/CommandFlagRemove.java create mode 100644 src/main/java/com/liteflags/commands/subcommands/CommandHelp.java create mode 100644 src/main/java/com/liteflags/commands/subcommands/CommandReload.java create mode 100644 src/main/java/com/liteflags/config/AbstractConfig.java create mode 100644 src/main/java/com/liteflags/config/Config.java create mode 100644 src/main/java/com/liteflags/util/Logger.java delete mode 100644 src/main/resources/config.yml diff --git a/pom.xml b/pom.xml index 2b5f968..fe99f27 100644 --- a/pom.xml +++ b/pom.xml @@ -21,8 +21,8 @@ maven-compiler-plugin 3.5.1 - 16 - 16 + 17 + 17 diff --git a/src/main/java/com/liteflags/LiteFlags.java b/src/main/java/com/liteflags/LiteFlags.java index dbb92c8..b8c0237 100644 --- a/src/main/java/com/liteflags/LiteFlags.java +++ b/src/main/java/com/liteflags/LiteFlags.java @@ -1,13 +1,15 @@ package com.liteflags; import com.liteflags.auth.AuthTimer; -import com.liteflags.commands.FlagCMD; +import com.liteflags.commands.CommandManager; import com.liteflags.data.database.DatabaseConnection; import com.liteflags.events.ChatEvent; import com.liteflags.events.LoginEvent; import com.liteflags.events.LogoutEvent; import com.liteflags.events.MoveEvent; import java.sql.SQLException; + +import com.liteflags.config.Config; import org.bukkit.plugin.java.JavaPlugin; public class LiteFlags extends JavaPlugin { @@ -17,22 +19,20 @@ public class LiteFlags extends JavaPlugin { public void onEnable() { instance = this; - this.saveDefaultConfig(); - this.getCommand("flag").setExecutor(new FlagCMD()); - this.getCommand("flaglist").setExecutor(new FlagCMD()); + Config.reload(); + this.getCommand("flag").setExecutor(new CommandManager()); this.getServer().getPluginManager().registerEvents(new LoginEvent(), this); this.getServer().getPluginManager().registerEvents(new LogoutEvent(), this); this.getServer().getPluginManager().registerEvents(new ChatEvent(), this); this.getServer().getPluginManager().registerEvents(new MoveEvent(), this); try { - DatabaseConnection var10000 = this.database; DatabaseConnection.initialize(); - } catch (SQLException var2) { + } catch (SQLException exception) { this.getLogger().severe("*** Could not connect to the database. ***"); this.getLogger().severe("*** This plugin will be disabled. ***"); this.setEnabled(false); - var2.printStackTrace(); + exception.printStackTrace(); } } diff --git a/src/main/java/com/liteflags/auth/AuthTimer.java b/src/main/java/com/liteflags/auth/AuthTimer.java index ae9d747..3e1f242 100644 --- a/src/main/java/com/liteflags/auth/AuthTimer.java +++ b/src/main/java/com/liteflags/auth/AuthTimer.java @@ -1,36 +1,44 @@ package com.liteflags.auth; import com.liteflags.LiteFlags; +import com.liteflags.config.Config; import com.liteflags.data.maps.MapCache; import com.liteflags.util.Utilities; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; +import net.kyori.adventure.text.minimessage.Template; import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class AuthTimer { public LiteFlags flags; - public static Map taskID = new HashMap(); + public static Map taskID = new HashMap<>(); public AuthTimer(LiteFlags flags) { this.flags = flags; } public static void startTimer(final Player player) { + final String uuid = player.getUniqueId().toString(); + int tid = LiteFlags.getInstance().getServer().getScheduler().scheduleSyncRepeatingTask(LiteFlags.getInstance(), new Runnable() { - int timeRemaining = LiteFlags.getInstance().getConfig().getInt("Authenticate_Timer"); + int timeRemaining = Config.AUTH_MESSAGE_REPEAT_TIMER; public void run() { if (this.timeRemaining <= 0) { if (player.hasPermission("liteflags.authentication.success")) { AuthTimer.endTask(player); } else { - player.sendMessage(Utilities.format(LiteFlags.getInstance().getConfig().getString("Messages.Authenticate").replace("%code%", (CharSequence) MapCache.reauthedPlayers.get(player.getUniqueId().toString())))); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), LiteFlags.getInstance().getConfig().getString("Authenticate_Timer_Command").replace("%player%", player.getName()).replace("%code%", (CharSequence) MapCache.reauthedPlayers.get(player.getUniqueId().toString()))); - this.timeRemaining = LiteFlags.getInstance().getConfig().getInt("Authenticate_Timer"); + player.sendMiniMessage(Config.AUTHENTICATE, List.of( + Template.template("code", MapCache.reauthedPlayers.get(uuid)))); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), Config.AUTH_MESSAGE_COMMAND + .replaceAll("", player.getName()) + .replaceAll("", MapCache.reauthedPlayers.get(uuid))); + this.timeRemaining = Config.AUTH_MESSAGE_REPEAT_TIMER; } } else if (player.hasPermission("liteflags.authentication.success")) { AuthTimer.endTask(player); @@ -40,7 +48,9 @@ public class AuthTimer { } }, 0L, 20L); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), LiteFlags.getInstance().getConfig().getString("Authenticate_Timer_Command").replace("%player%", player.getName()).replace("%code%", (CharSequence) MapCache.reauthedPlayers.get(player.getUniqueId().toString()))); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), Config.AUTH_MESSAGE_COMMAND + .replaceAll("", player.getName()) + .replaceAll("", MapCache.reauthedPlayers.get(uuid))); taskID.put(player.getUniqueId(), tid); } diff --git a/src/main/java/com/liteflags/auth/Authentication.java b/src/main/java/com/liteflags/auth/Authentication.java index d643960..f466793 100644 --- a/src/main/java/com/liteflags/auth/Authentication.java +++ b/src/main/java/com/liteflags/auth/Authentication.java @@ -1,15 +1,14 @@ package com.liteflags.auth; -import com.liteflags.LiteFlags; import com.liteflags.data.maps.MapCache; +import com.liteflags.config.Config; import com.liteflags.util.Utilities; - -import java.util.Random; -import java.util.UUID; - -import org.bukkit.Bukkit; +import net.kyori.adventure.text.minimessage.Template; import org.bukkit.entity.Player; +import java.util.List; +import java.util.Random; + public class Authentication { public static String getAuthKey() { String randChars = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789abcdefghijklmnopqrstuvwsyz"; @@ -21,16 +20,17 @@ public class Authentication { salt.append(randChars.charAt(index)); } - return "." + salt.toString(); + return "." + salt; } - public static void checkAuthStatus(UUID uuid) { - Player player = Bukkit.getPlayer(uuid); - if (!player.hasPermission("liteflags.authentication.success")) { - MapCache.reauthedPlayers.put(player.getUniqueId().toString(), getAuthKey()); - AuthTimer.startTimer(player); - player.sendMessage(Utilities.format(LiteFlags.getInstance().getConfig().getString("Messages.Authenticate").replace("%code%", (CharSequence) MapCache.reauthedPlayers.get(player.getUniqueId().toString())))); - } + public static void checkAuthStatus(Player player) { + if (player.hasPermission("liteflags.authentication.success")) + return; + + MapCache.reauthedPlayers.put(player.getUniqueId().toString(), getAuthKey()); + AuthTimer.startTimer(player); + player.sendMiniMessage(Config.AUTHENTICATE, + List.of(Template.template("code", MapCache.reauthedPlayers.get(player.getUniqueId().toString())))); } } diff --git a/src/main/java/com/liteflags/commands/CommandManager.java b/src/main/java/com/liteflags/commands/CommandManager.java new file mode 100644 index 0000000..72781d0 --- /dev/null +++ b/src/main/java/com/liteflags/commands/CommandManager.java @@ -0,0 +1,104 @@ +package com.liteflags.commands; + +import com.liteflags.LiteFlags; +import com.liteflags.commands.subcommands.*; +import com.liteflags.config.Config; +import com.liteflags.util.Logger; +import com.liteflags.util.Utilities; +import net.kyori.adventure.text.minimessage.Template; +import org.bukkit.Bukkit; +import org.bukkit.command.*; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class CommandManager implements CommandExecutor, TabExecutor { + private final List subCommands; + private SubCommand flagPlayer = new CommandFlagPlayer(); + + public CommandManager() { + LiteFlags liteFlags = LiteFlags.getInstance(); + + PluginCommand command = liteFlags.getCommand("flag"); + if (command == null) { + subCommands = null; + Logger.severe("Unable to find LiteFLags command."); + return; + } + command.setExecutor(this); + command.setTabCompleter(this); + + subCommands = Arrays.asList(//TODO add the flag player command separately + new CommandHelp(this), + new CommandFlagList(), + new CommandFlagPlayer(), + new CommandFlagRemove(), + new CommandReload() + ); + } + + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String cmd, @NotNull String[] args) { + if (!commandSender.hasPermission("liteflags.use")) { + commandSender.sendMiniMessage(Config.NO_PERMISSION, null); + return true; + } + if (args.length == 0) { + commandSender.sendMiniMessage(Config.HELP_MESSAGE_WRAPPER.replaceAll("", subCommands.stream() + .filter(subCommand -> commandSender.hasPermission(subCommand.getPermission())) + .map(SubCommand::getHelpMessage) + .collect(Collectors.joining("\n"))), null); + return true; + } + + SubCommand subCommand = getSubCommand(args[0]); + + if (!commandSender.hasPermission(subCommand.getPermission())) { + commandSender.sendMiniMessage(Config.NO_PERMISSION, null); + return true; + } + + return subCommand.onCommand(commandSender, args); + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String cmd, @NotNull String[] args) { + List res = new ArrayList<>(); + + if (args.length <= 1) { + res.addAll(subCommands.stream() + .filter(subCommand -> commandSender.hasPermission(subCommand.getPermission())) + .map(SubCommand::getName) + .filter(Objects::nonNull) + .filter(name -> args.length == 0 || name.startsWith(args[0])) + .collect(Collectors.toList())); + res.addAll(Bukkit.getOnlinePlayers().stream() + .map(Player::getName) + .filter(name -> args.length == 0 || name.startsWith(args[0])) + .collect(Collectors.toList())); + } else { + SubCommand subCommand = getSubCommand(args[0]); + if (subCommand != null && commandSender.hasPermission(subCommand.getPermission())) + res.addAll(subCommand.getTabComplete(commandSender, args)); + } + return res; + } + + public List getSubCommands() { + return subCommands; + } + + private SubCommand getSubCommand(String cmdName) { + return subCommands.stream() + .filter(Objects::nonNull) + .filter(subCommand -> subCommand.getName() != null && subCommand.getName().equals(cmdName)) + .findFirst() + .orElse(flagPlayer); + } +} \ No newline at end of file diff --git a/src/main/java/com/liteflags/commands/FlagCMD.java b/src/main/java/com/liteflags/commands/FlagCMD.java deleted file mode 100644 index 372d190..0000000 --- a/src/main/java/com/liteflags/commands/FlagCMD.java +++ /dev/null @@ -1,278 +0,0 @@ -package com.liteflags.commands; - -import com.liteflags.LiteFlags; -import com.liteflags.data.database.Database; -import com.liteflags.data.database.Methods; -import com.liteflags.data.maps.MapCache; -import com.liteflags.util.Utilities; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.chat.HoverEvent.Action; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class FlagCMD implements CommandExecutor { - - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - OfflinePlayer target; - String removeTimeLetter; - if (cmd.getName().equalsIgnoreCase("flag") && sender instanceof Player) { - if (sender.hasPermission("liteflags.staff")) { - if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Invalid command. /flag help"); - } - - if (args.length == 1 && args[0].equalsIgnoreCase("help")) { - sender.sendMessage(ChatColor.YELLOW + "/flaglist | /fl " + ChatColor.GRAY + "- Shows all the players with active flags"); - sender.sendMessage(ChatColor.YELLOW + "/flaglist | /fl " + ChatColor.GRAY + "- Shows all flags a player has"); - sender.sendMessage(ChatColor.YELLOW + "/flag