Back
ModuleCommand.java
javasrc/main/java/com/scriptslab/core/command/commands/ModuleCommand.java
package com.scriptslab.core.command.commands;
import com.scriptslab.ScriptsLabPlugin;
import com.scriptslab.api.module.Module;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Module management command.
* /module <list|enable|disable|reload> [name]
*/
public class ModuleCommand implements CommandExecutor, TabCompleter {
private final ScriptsLabPlugin plugin;
public ModuleCommand(ScriptsLabPlugin plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
if (!sender.hasPermission("scriptslab.module")) {
sender.sendMessage("§cYou don't have permission to use this command!");
return true;
}
if (args.length == 0) {
sendHelp(sender);
return true;
}
switch (args[0].toLowerCase()) {
case "list" -> handleList(sender);
case "enable" -> handleEnable(sender, args);
case "disable" -> handleDisable(sender, args);
case "reload" -> handleReload(sender, args);
default -> sendHelp(sender);
}
return true;
}
private void handleList(CommandSender sender) {
var modules = plugin.getModuleManager().getModules();
sender.sendMessage("§6╔═══════════════════════════════════════╗");
sender.sendMessage("§6║ Loaded Modules ║");
sender.sendMessage("§6╚═══════════════════════════════════════╝");
if (modules.isEmpty()) {
sender.sendMessage("§7No modules loaded");
return;
}
for (Module module : modules) {
String status = module.isEnabled() ? "§a✓ Enabled" : "§c✗ Disabled";
sender.sendMessage(String.format("§e%s §7v%s %s",
module.getName(), module.getVersion(), status));
}
sender.sendMessage("");
sender.sendMessage("§7Total: §e" + modules.size() + " §7modules");
}
private void handleEnable(CommandSender sender, String[] args) {
if (args.length < 2) {
sender.sendMessage("§cUsage: /module enable <name>");
return;
}
String moduleName = args[1];
if (!plugin.getModuleManager().isLoaded(moduleName)) {
sender.sendMessage("§cModule not found: " + moduleName);
return;
}
if (plugin.getModuleManager().isEnabled(moduleName)) {
sender.sendMessage("§eModule is already enabled: " + moduleName);
return;
}
sender.sendMessage("§6Enabling module: " + moduleName);
plugin.getModuleManager().enableModule(moduleName)
.thenRun(() -> sender.sendMessage("§aModule enabled: " + moduleName))
.exceptionally(ex -> {
sender.sendMessage("§cFailed to enable module: " + ex.getMessage());
return null;
});
}
private void handleDisable(CommandSender sender, String[] args) {
if (args.length < 2) {
sender.sendMessage("§cUsage: /module disable <name>");
return;
}
String moduleName = args[1];
if (!plugin.getModuleManager().isLoaded(moduleName)) {
sender.sendMessage("§cModule not found: " + moduleName);
return;
}
if (!plugin.getModuleManager().isEnabled(moduleName)) {
sender.sendMessage("§eModule is already disabled: " + moduleName);
return;
}
sender.sendMessage("§6Disabling module: " + moduleName);
plugin.getModuleManager().disableModule(moduleName)
.thenRun(() -> sender.sendMessage("§aModule disabled: " + moduleName))
.exceptionally(ex -> {
sender.sendMessage("§cFailed to disable module: " + ex.getMessage());
return null;
});
}
private void handleReload(CommandSender sender, String[] args) {
if (args.length < 2) {
sender.sendMessage("§cUsage: /module reload <name>");
return;
}
String moduleName = args[1];
if (!plugin.getModuleManager().isLoaded(moduleName)) {
sender.sendMessage("§cModule not found: " + moduleName);
return;
}
sender.sendMessage("§6Reloading module: " + moduleName);
plugin.getModuleManager().reloadModule(moduleName)
.thenRun(() -> sender.sendMessage("§aModule reloaded: " + moduleName))
.exceptionally(ex -> {
sender.sendMessage("§cFailed to reload module: " + ex.getMessage());
return null;
});
}
private void sendHelp(CommandSender sender) {
sender.sendMessage("§6╔═══════════════════════════════════════╗");
sender.sendMessage("§6║ Module Commands ║");
sender.sendMessage("§6╚═══════════════════════════════════════╝");
sender.sendMessage("§e/module list §7- List all modules");
sender.sendMessage("§e/module enable <name> §7- Enable a module");
sender.sendMessage("§e/module disable <name> §7- Disable a module");
sender.sendMessage("§e/module reload <name> §7- Reload a module");
}
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
if (!sender.hasPermission("scriptslab.module")) {
return new ArrayList<>();
}
if (args.length == 1) {
return Arrays.asList("list", "enable", "disable", "reload").stream()
.filter(s -> s.startsWith(args[0].toLowerCase()))
.toList();
}
if (args.length == 2 && !args[0].equalsIgnoreCase("list")) {
return new ArrayList<>(plugin.getModuleManager().getModules().stream()
.map(Module::getId)
.filter(s -> s.toLowerCase().startsWith(args[1].toLowerCase()))
.toList());
}
return new ArrayList<>();
}
}