package org.stevewinfield.suja.idk.dedicated.commands; import org.apache.log4j.Logger; import org.stevewinfield.suja.idk.dedicated.commands.defaults.*; import java.util.concurrent.ConcurrentHashMap; public class DedicatedServerCommandHandler { private static final Logger logger = Logger.getLogger(DedicatedServerCommandHandler.class); private ConcurrentHashMap<String, IDedicatedServerCommand> commands; public DedicatedServerCommandHandler() { this.commands = new ConcurrentHashMap<>(); } public void handle(String line) { String[] parts = line.split(" "); if (parts.length < 1 || parts[0].length() < 1) { logger.error("Invalid command"); return; } parts[0] = parts[0].toLowerCase(); if (!commands.containsKey(parts[0])) { logger.error("Command not found"); return; } IDedicatedServerCommand cmd = commands.get(parts[0]); String[] args = new String[parts.length - 1]; System.arraycopy(parts, 1, args, 0, parts.length - 1); cmd.execute(args, logger); } public void registerCommand(IDedicatedServerCommand cmd) { commands.put(cmd.getName().toLowerCase(), cmd); } public void registerDefaultCommands() { registerCommand(new StopCommand()); registerCommand(new RefreshCatalogCommand()); registerCommand(new RefreshFurnitureCommand()); registerCommand(new KickAllCommand()); registerCommand(new RefreshLocalPluginsCommand()); } public IDedicatedServerCommand getCommand(String name) { return commands.get(name); } }