From 4b96e81629f338febcb91a88e01288f54af00edc Mon Sep 17 00:00:00 2001 From: Bug Date: Thu, 30 Jul 2026 16:21:35 -0400 Subject: [PATCH 1/3] Rename StaffChatCommand to ToggleStaffChatCommand --- .../staffchat/commands/StaffChatCommand.java | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java b/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java index 29afd78..9f62cd9 100644 --- a/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java +++ b/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java @@ -26,34 +26,23 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -public class StaffChatCommand implements CommandExecutor { +public class ToggleStaffChatCommand implements CommandExecutor { private final StaffChatPlugin plugin; - public StaffChatCommand(StaffChatPlugin plugin) { + public ToggleStaffChatCommand(StaffChatPlugin plugin) { this.plugin = plugin; } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (args.length <= 0) { - // Show usage to console (only players can enable auto chat) - if (!(sender instanceof Player)) { - return false; - } - plugin.data().getOrCreateProfile((Player) sender).toggleAutomaticStaffChat(); + if (sender instanceof Player) { + // Either join or leave so... + plugin.data().getOrCreateProfile((Player) sender) + .receivesStaffChatMessages(command.getName().contains("join")); } else { - String message = String.join(" ", args); - - if (sender instanceof Player) { - plugin.submitMessageFromPlayer((Player) sender, message); - } else if (sender instanceof ConsoleCommandSender) { - plugin.submitMessageFromConsole(message); - } else { - sender.sendMessage("Unsupported command sender type: " + sender.getClass().getSimpleName()); - } + sender.sendMessage("Only players may run this command."); } return true; From f80bc39ee8881ab3e02a02c25d07a53048b6348f Mon Sep 17 00:00:00 2001 From: Bug Date: Thu, 30 Jul 2026 16:22:26 -0400 Subject: [PATCH 2/3] Refactor StaffChatCommand and add toggle functionality --- .../staffchat/commands/StaffChatCommand.java | 68 ++++++++++++++++--- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java b/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java index 9f62cd9..c89d37c 100644 --- a/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java +++ b/src/main/java/com/rezzedup/discordsrv/staffchat/commands/StaffChatCommand.java @@ -26,25 +26,73 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; +import com.rezzedup.discordsrv.staffchat.StaffChatPlugin; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import java.util.Locale; +import static com.rezzedup.discordsrv.staffchat.util.Strings.colorful; -public class ToggleStaffChatCommand implements CommandExecutor { +public class StaffChatCommand implements CommandExecutor { private final StaffChatPlugin plugin; - - public ToggleStaffChatCommand(StaffChatPlugin plugin) { + + public StaffChatCommand(StaffChatPlugin plugin) { this.plugin = plugin; } - + @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (sender instanceof Player) { - // Either join or leave so... - plugin.data().getOrCreateProfile((Player) sender) - .receivesStaffChatMessages(command.getName().contains("join")); + // 1. NEW TOGGLE LOGIC + if (args.length >= 1 && args[0].equalsIgnoreCase("toggle")) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players can use this command."); + return true; + } + + Player player = (Player) sender; + // Get the profile + var profile = plugin.data().getOrCreateProfile(player); + + if (args.length >= 2) { + String state = args[1].toLowerCase(Locale.ROOT); + + if (state.equals("yes") || state.equals("on")) { + profile.automaticStaffChat(true); // Explicitly ENABLE + player.sendMessage(colorful("&9StaffChat &fenabled.")); + } else if (state.equals("no") || state.equals("off")) { + profile.automaticStaffChat(false); // Explicitly DISABLE + player.sendMessage(colorful("&9StaffChat &fdisabled.")); + } else { + player.sendMessage(colorful("&cUsage: /staffchat toggle ")); + } + } else { + player.sendMessage(colorful("&cUsage: /staffchat toggle ")); + } + return true; // Stop here + } + + // 2. EXISTING LOGIC + if (args.length <= 0) { + if (!(sender instanceof Player)) { + return false; + } + plugin.data().getOrCreateProfile((Player) sender).toggleAutomaticStaffChat(); } else { - sender.sendMessage("Only players may run this command."); + String message = String.join(" ", args); + + if (sender instanceof Player) { + plugin.submitMessageFromPlayer((Player) sender, message); + } else if (sender instanceof ConsoleCommandSender) { + plugin.submitMessageFromConsole(message); + } else { + sender.sendMessage("Unsupported command sender type: " + sender.getClass().getSimpleName()); + } } - + return true; } } From c90a65d5e88b716928105937ecb31fe1c9ca9fe7 Mon Sep 17 00:00:00 2001 From: Bug Date: Thu, 30 Jul 2026 16:23:20 -0400 Subject: [PATCH 3/3] Add toggle command for staff chat notifications --- .../commands/ManageStaffChatCommand.java | 61 +++++++++++++------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/rezzedup/discordsrv/staffchat/commands/ManageStaffChatCommand.java b/src/main/java/com/rezzedup/discordsrv/staffchat/commands/ManageStaffChatCommand.java index 0fad069..b6c59a0 100644 --- a/src/main/java/com/rezzedup/discordsrv/staffchat/commands/ManageStaffChatCommand.java +++ b/src/main/java/com/rezzedup/discordsrv/staffchat/commands/ManageStaffChatCommand.java @@ -60,11 +60,36 @@ public class ManageStaffChatCommand implements CommandExecutor, TabCompleter { public ManageStaffChatCommand(StaffChatPlugin plugin) { this.plugin = plugin; } - + @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @NullOr String option = (args.length >= 1) ? args[0].toLowerCase(Locale.ROOT) : null; - + + // 1. Handle your new "toggle" command first + if (args.length >= 1 && args[0].equalsIgnoreCase("toggle")) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players can use this command."); + return true; + } + Player player = (Player) sender; + if (args.length >= 2) { + String state = args[1].toLowerCase(Locale.ROOT); + if (state.equals("yes") || state.equals("on")) { + plugin.data().getOrCreateProfile(player).receivesStaffChatMessages(true); + player.sendMessage(colorful("&9StaffChat &fenabled.")); + } else if (state.equals("no") || state.equals("off")) { + plugin.data().getOrCreateProfile(player).receivesStaffChatMessages(false); + player.sendMessage(colorful("&9StaffChat &fdisabled.")); + } else { + player.sendMessage(colorful("&cUsage: /staffchat toggle ")); + } + } else { + player.sendMessage(colorful("&cUsage: /staffchat toggle ")); + } + return true; + } + + // 2. Handle your existing logic if (option == null || HELP_ALIASES.contains(option)) { usage(sender, label); } else if (RELOAD_ALIASES.contains(option)) { @@ -76,29 +101,27 @@ public boolean onCommand(CommandSender sender, Command command, String label, St "&9&lDiscordSRV-Staff-Chat&f: &7&oUnknown arguments: " + String.join(" ", args) )); } - + return true; } - + @Override public @NullOr List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { - @NullOr List suggestions = null; - - if (args.length <= 0) { - suggestions = new ArrayList<>(ALL_OPTION_ALIASES); - } else if (args.length == 1) { - String last = args[0].toLowerCase(Locale.ROOT); - - suggestions = - ALL_OPTION_ALIASES.stream() - .filter(option -> option.contains(last)) - .collect(Collectors.toCollection(ArrayList::new)); + // 1. Handle the "toggle" subcommand + if (args.length == 1) { + return List.of("toggle").stream() + .filter(option -> option.startsWith(args[0].toLowerCase(Locale.ROOT))) + .collect(Collectors.toList()); } - - if (suggestions != null) { - suggestions.sort(String.CASE_INSENSITIVE_ORDER); + + // 2. Handle the "yes/no" selection after "toggle" + else if (args.length == 2 && args[0].equalsIgnoreCase("toggle")) { + return List.of("yes", "no").stream() + .filter(option -> option.startsWith(args[1].toLowerCase(Locale.ROOT))) + .collect(Collectors.toList()); } - return suggestions; + + return null; // Or return original list if you have other completions } private void usage(CommandSender sender, String label) {