aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Server/Console/commands/IServerCliCommand.h
blob: 9cf5ef0e3aff3e144547eb9d46e1134e5a84e848 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#pragma once

#include <string>
#include <vector>

namespace ServerRuntime
{
	class ServerCliEngine;
	struct ServerCliParsedLine;
	struct ServerCliCompletionContext;

	/**
	 * **Command interface for server CLI**
	 *
	 * Implement this contract to add new commands without changing engine internals.
	 */
	class IServerCliCommand
	{
	public:
		virtual ~IServerCliCommand() = default;

		/** Primary command name */
		virtual const char *Name() const = 0;
		/** Optional aliases */
		virtual std::vector<std::string> Aliases() const { return {}; }
		/** Usage text for help */
		virtual const char *Usage() const = 0;
		/** Short command description*/
		virtual const char *Description() const = 0;

		/**
		 * **Execute command logic**
		 *
		 * Called after tokenization and command lookup.
		 */
		virtual bool Execute(const ServerCliParsedLine &line, ServerCliEngine *engine) = 0;

		/**
		 * **Provide argument completion candidates**
		 *
		 * Override when command-specific completion is needed.
		 */
		virtual void Complete(const ServerCliCompletionContext &context, const ServerCliEngine *engine, std::vector<std::string> *out) const
		{
			(void)context;
			(void)engine;
			(void)out;
		}
	};
}