using System.Reflection; using Server.Commands; namespace Server; public class CommandManager { private readonly Dictionary _commands = new(); public CommandManager() { LoadCommands(); } private void LoadCommands() { // Get all types implementing ICommand var commandTypes = Assembly.GetExecutingAssembly() .GetTypes() .Where(t => typeof(ICommand).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract); foreach (var type in commandTypes) { // Create an instance of the command if (Activator.CreateInstance(type) is ICommand command) { // Use the Executor property as the key _commands[command.Executor] = command; } } } public void ExecuteCommand(string executor, params string[] args) { if (_commands.TryGetValue(executor, out var command)) { command.Exec(args); } else { Console.WriteLine($"Command '{executor}' not found."); } } }