Back
MainCommand.java
javasrc/main/java/com/scriptslab/core/command/commands/MainCommand.java
package com.scriptslab.core.command.commands;
import com.scriptslab.ScriptsLabPlugin;
import com.scriptslab.core.config.ConfigurationManager;
import org.bukkit.Bukkit;
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;
/**
* Main ScriptsLab command.
* /scriptslab <reload|info|help>
*/
public class MainCommand implements CommandExecutor, TabCompleter {
private final ScriptsLabPlugin plugin;
private final ConfigurationManager config;
public MainCommand(ScriptsLabPlugin plugin) {
this.plugin = plugin;
this.config = plugin.getConfigManager();
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
if (args.length == 0) {
sendHelp(sender);
return true;
}
switch (args[0].toLowerCase()) {
case "reload" -> handleReload(sender);
case "info" -> handleInfo(sender);
case "help" -> sendHelp(sender);
default -> sendHelp(sender);
}
return true;
}
private void handleReload(CommandSender sender) {
if (!sender.hasPermission("scriptslab.reload")) {
sender.sendMessage(config.getMessage("general.no-permission"));
return;
}
if (plugin.getScriptEngine().wasPreviouslyLoaded()) {
sender.sendMessage("§c⚠ Hot reload detected!");
sender.sendMessage("§eScriptsLab uses GraalVM which is incompatible with hot reload.");
sender.sendMessage("§ePlease restart the server using §f/stop §ethen start the server again.");
sender.sendMessage("§eAlternatively use §f/restart §e(if available on your server).");
ScriptsLabPlugin.setHotReloadAttempted(true);
return;
}
sender.sendMessage("§6Reloading ScriptsLab...");
plugin.reload().thenRun(() -> {
sender.sendMessage("§aScriptsLab reloaded successfully!");
}).exceptionally(ex -> {
sender.sendMessage("§cError reloading: " + ex.getMessage());
return null;
});
}
private void handleInfo(CommandSender sender) {
sender.sendMessage("§6╔═══════════════════════════════════════╗");
sender.sendMessage("§6║ ScriptsLab Information ║");
sender.sendMessage("§6╚═══════════════════════════════════════╝");
sender.sendMessage("§eVersion: §f" + plugin.getDescription().getVersion());
sender.sendMessage("§eAuthors: §f" + String.join(", ", plugin.getDescription().getAuthors()));
sender.sendMessage("");
sender.sendMessage("§eModules loaded: §f" + plugin.getModuleManager().getModules().size());
sender.sendMessage("§eModules enabled: §f" + plugin.getModuleManager().getEnabledModules().size());
sender.sendMessage("§eScripts loaded: §f" + plugin.getScriptEngine().getAllScripts().size());
sender.sendMessage("§eCustom items: §f" + plugin.getItemManager().getAllItems().size());
sender.sendMessage("§eActive tasks: §f" + plugin.getTaskScheduler().getActiveTaskCount());
}
private void sendHelp(CommandSender sender) {
sender.sendMessage("§6╔═══════════════════════════════════════╗");
sender.sendMessage("§6║ ScriptsLab Commands ║");
sender.sendMessage("§6╚═══════════════════════════════════════╝");
sender.sendMessage("§e/scriptslab reload §7- Reload the plugin");
sender.sendMessage("§e/scriptslab info §7- Show plugin information");
sender.sendMessage("§e/scriptslab help §7- Show this help");
sender.sendMessage("");
sender.sendMessage("§e/module list §7- List all modules");
sender.sendMessage("§e/script list §7- List all scripts");
}
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
if (args.length == 1) {
return Arrays.asList("reload", "info", "help").stream()
.filter(s -> s.startsWith(args[0].toLowerCase()))
.toList();
}
return new ArrayList<>();
}
}