using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Svelto.ECS; using TechbloxModdingAPI.Utility; namespace TechbloxModdingAPI.Commands { /// /// A simple implementation of ICustomCommandEngine sufficient for most commands. /// This version is for commands which take 1 argument(s) /// public class SimpleCustomCommandEngine : ICustomCommandEngine { public string Name { get; } public string Description { get; } private Action runCommand; public EntitiesDB entitiesDB { set; private get; } public bool isRemovable => true; public void Dispose() { Logging.MetaDebugLog($"Unregistering SimpleCustomCommandEngine {this.Name}"); CommandRegistrationHelper.Unregister(this.Name); } public void Ready() { Logging.MetaDebugLog($"Registering SimpleCustomCommandEngine {this.Name}"); CommandRegistrationHelper.Register(this.Name, this.InvokeCatchError, this.Description); } /// /// Construct the engine /// /// The command's operation /// The name of the command /// The command's description, shown in command help messages public SimpleCustomCommandEngine(Action command, string name, string description) { this.runCommand = command; this.Name = name; this.Description = description; } public void Invoke(A a) { runCommand(a); } private void InvokeCatchError(A a) { try { runCommand(a); } catch (Exception e) { CommandRuntimeException wrappedException = new CommandRuntimeException($"Command {Name} threw an exception when executed", e); Logging.LogWarning(wrappedException.ToString()); Logging.CommandLogError(wrappedException.ToString()); } } } }