package cc.fascinated.commandspy; import cc.fascinated.account.Account; import cc.fascinated.command.CommandManager; import cc.fascinated.commandspy.command.CommandSpyCommand; import cc.fascinated.config.Lang; import cc.fascinated.utils.Manager; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import java.util.ArrayList; import java.util.List; public class CommandSpyManager extends Manager { /** * The list of accounts that have command spy enabled. */ private static final List COMMAND_SPY_ENABLED = new ArrayList<>(); public CommandSpyManager() { CommandManager.registerCommand(new CommandSpyCommand()); } /** * Toggles command spy for the specified account. * * @param account the account * @return true if command spy is enabled, false otherwise */ public static boolean toggleCommandSpy(Account account) { if (COMMAND_SPY_ENABLED.contains(account)) { // Disable command spy COMMAND_SPY_ENABLED.remove(account); return false; } COMMAND_SPY_ENABLED.add(account); // Enable command spy return true; } @Override public void onCommandPreProcess(Account account, PlayerCommandPreprocessEvent event) { for (Account commandSpyAccount : COMMAND_SPY_ENABLED) { commandSpyAccount.sendMessage(Lang.COMMAND_SPY_FORMAT.getAsString() .replace("player-color", account.getPlayerColorProfile().getColor().toString()) .replace("%player%", account.getName()) .replace("%command%", event.getMessage()) ); } } @Override public void onPlayerJoin(Account account, PlayerJoinEvent event) { if (!account.isOp()) { return; } COMMAND_SPY_ENABLED.add(account); // Add account to command spy list } @Override public void onPlayerQuit(Account account, PlayerQuitEvent event) { if (!COMMAND_SPY_ENABLED.contains(account)) { return; } COMMAND_SPY_ENABLED.remove(account); // Remove account from command spy list } @Override public void onAetheriaDisable() { COMMAND_SPY_ENABLED.clear(); // Clear command spy list } }