LeviLamina
Loading...
Searching...
No Matches
RuntimeCommand.h
1#pragma once
2
3#include "ll/api/base/Containers.h"
4#include "ll/api/command/runtime/ParamKind.h"
5
6#include "mc/server/commands/Command.h"
7
8namespace ll::command {
9class RuntimeOverload;
10class RuntimeCommand : public ::Command {
11 friend RuntimeOverload;
12
13public:
14 using Fn = std::function<void(CommandOrigin const&, CommandOutput&, RuntimeCommand const&)>;
15
16private:
17 uint64 placeholder{};
18 Fn const& executor;
19 StringMap<uint64> const& paramIndexMap;
20 size_t paramCount;
21
22 LLAPI RuntimeCommand(
23 StringMap<uint64> const& map,
24 std::vector<std::pair<std::string, ParamKindType>> const& params,
25 Fn const& executor
26 );
27
28public:
29 LLAPI ~RuntimeCommand() override;
30
31 static void* operator new(size_t) = delete;
32
33 LLNDAPI static void* operator new(size_t, uint paramCount);
34 LLAPI static void operator delete(void*, uint paramCount);
35 LLAPI static void operator delete(void*);
36
37 void execute(CommandOrigin const&, CommandOutput&) const override;
38
39 LLNDAPI ParamStorageType const& operator[](std::string_view name) const;
40
41 LLNDAPI ParamStorageType const& operator[](size_t idx) const;
42};
43} // namespace ll::command
Definition CommandOrigin.h:32
Definition CommandOutput.h:19
Definition Command.h:17
Definition ParamKind.h:93
Definition RuntimeCommand.h:10
Definition RuntimeOverload.h:12