11#include "ll/api/base/StdInt.h"
12#include "ll/api/command/CommandRegistrar.h"
13#include "ll/api/command/EnumName.h"
14#include "ll/api/command/Optional.h"
15#include "ll/api/command/SoftEnum.h"
17#include "mc/deps/core/utility/typeid_t.h"
18#include "mc/deps/json/Value.h"
19#include "mc/server/commands/BlockStateCommandParam.h"
20#include "mc/server/commands/Command.h"
21#include "mc/server/commands/CommandBlockName.h"
22#include "mc/server/commands/CommandCompareOperator.h"
23#include "mc/server/commands/CommandFilePath.h"
24#include "mc/server/commands/CommandIntegerRange.h"
25#include "mc/server/commands/CommandItem.h"
26#include "mc/server/commands/CommandMessage.h"
27#include "mc/server/commands/CommandOperator.h"
28#include "mc/server/commands/CommandParameterData.h"
29#include "mc/server/commands/CommandParameterOption.h"
30#include "mc/server/commands/CommandPositionFloat.h"
31#include "mc/server/commands/CommandRawText.h"
32#include "mc/server/commands/CommandWildcardInt.h"
33#include "mc/server/commands/RelativeFloat.h"
34#include "mc/server/commands/WildcardCommandSelector.h"
35#include "mc/world/actor/ActorDefinitionIdentifier.h"
36#include "mc/world/actor/player/Player.h"
37#include "mc/world/effect/MobEffect.h"
39namespace ll::command {
45 static constexpr CommandParameterDataType dataType() {
return CommandParameterDataType::Basic; }
46 static constexpr CommandParameterOption options() {
return CommandParameterOption::None; }
47 static inline CommandRegistry::ParseFunction parseFn() {
return &CommandRegistry::parse<T>; }
48 static constexpr std::string_view enumNameOrPostfix() {
return {}; }
49 static constexpr std::string_view subChain() {
return {}; }
54 result.parse.get() = ParamTraits<T>::parseFn();
70 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
71 return CommandRegistry::HardNonTerminal::Int;
76 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
77 return CommandRegistry::HardNonTerminal::Val;
82 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
83 return CommandRegistry::HardNonTerminal::Id;
88 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
89 return CommandRegistry::HardNonTerminal::Operator;
94 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
95 return CommandRegistry::HardNonTerminal::CompareOperator;
100 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
101 return CommandRegistry::HardNonTerminal::RVal;
106 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
107 return CommandRegistry::HardNonTerminal::WildcardInt;
112 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
113 return CommandRegistry::HardNonTerminal::FullIntegerRange;
118 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
119 return CommandRegistry::HardNonTerminal::FilePath;
124 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
125 return CommandRegistry::HardNonTerminal::Position;
130 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
131 return CommandRegistry::HardNonTerminal::PositionFloat;
136 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
137 return CommandRegistry::HardNonTerminal::Selection;
142 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
143 return CommandRegistry::HardNonTerminal::Selection;
148 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
149 return CommandRegistry::HardNonTerminal::WildcardSelection;
154 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
155 return CommandRegistry::HardNonTerminal::MessageRoot;
160 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
161 return CommandRegistry::HardNonTerminal::RawText;
166 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
167 return CommandRegistry::HardNonTerminal::JsonObject;
172 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
173 return CommandRegistry::HardNonTerminal::BlockStateArray;
178 static constexpr CommandRegistry::HardNonTerminal parseRuleValue() {
179 return CommandRegistry::HardNonTerminal::SlashCommand;
191 std::vector<std::string>&
193 *(T*)storage = (T)registry.getEnumData(token);
197template <concepts::Require<std::is_enum> T>
200 static constexpr CommandParameterDataType dataType() {
return CommandParameterDataType::Enum; }
201 static constexpr CommandParameterOption options() {
return CommandParameterOption::EnumAutocompleteExpansion; }
202 static constexpr std::string_view enumNameOrPostfix() {
return enum_name_v<T>; }
205template <concepts::Specializes<SoftEnum> T>
207 static constexpr CommandParameterDataType dataType() {
return CommandParameterDataType::SoftEnum; }
208 static constexpr CommandParameterOption options() {
return CommandParameterOption::EnumAutocompleteExpansion; }
209 static inline CommandRegistry::ParseFunction parseFn() {
return &CommandRegistry::parse<std::string>; }
210 static constexpr std::string_view enumNameOrPostfix() {
return enum_name_v<T>; }
211 static Bedrock::typeid_t<CommandRegistry> typeId() {
return Bedrock::type_id<CommandRegistry, std::string>(); }
212 static void transformData(CommandParameterData&, CommandRegistrar& registrar) {
213 registrar.template tryRegisterSoftEnum<T>();
224 std::vector<std::string>&
240 static constexpr CommandParameterOption options() {
return CommandParameterOption::HasSemanticConstraint; }
245 static constexpr CommandParameterOption options() {
return CommandParameterOption::HasSemanticConstraint; }
258inline bool CommandRegistry::parse(
264 std::vector<std::string>& errorParams
267 if constexpr (
requires {
typename Traits::Parser; }) {
268 return (
typename Traits::Parser{})(*
this, storage, token, origin, version, error, errorParams);
270 static_assert(ll::traits::always_false<T>,
"param traits missing parser type");
Definition CommandBlockName.h:12
Definition CommandFilePath.h:5
Definition CommandIntegerRange.h:5
Definition CommandItem.h:11
Definition CommandMessage.h:16
Definition CommandOrigin.h:32
Definition CommandParameterData.h:18
Definition CommandPositionFloat.h:8
Definition CommandPosition.h:15
Definition CommandRawText.h:5
Definition CommandRegistry.h:264
Definition CommandRegistry.h:51
Definition CommandSelector.h:15
Definition CommandWildcardInt.h:5
Definition MobEffect.h:26
Definition RelativeFloat.h:5
Definition WildcardCommandSelector.h:12
Definition CommandRegistrar.h:35
Definition ActorDefinitionIdentifier.h:15
Definition CommandRegistry.h:471
Definition CommandRegistry.h:398
Definition DimensionType.h:5
Definition ParamTraits.h:216
Definition ParamTraits.h:183
Definition ParamTraits.h:44
Definition ParamTraits.h:67