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