74 ::ll::TypedStorage<8, 8, ::CommandRegistry const&> mRegistry;
75 ::ll::TypedStorage<8, 8, ::CommandRegistry::ParseTable const*> mParseTable;
76 ::ll::TypedStorage<8, 40, ::std::deque<::std::pair<::CommandRegistry::Symbol, ::CommandRegistry::ParseToken*>>>
78 ::ll::TypedStorage<8, 32, ::CommandRegistry::LexicalToken> mNext;
79 ::ll::TypedStorage<8, 32, ::std::string> mInput;
80 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::CommandRegistry::ParseToken>> mRoot;
81 ::ll::TypedStorage<8, 32, ::std::string> mError;
82 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mErrorParams;
83 ::ll::TypedStorage<4, 4, int> mVersion;
84 ::ll::TypedStorage<1, 1, bool> mGenerateParams;
85 ::ll::TypedStorage<1, 1, bool> mBreakAtEnd;
93 MCAPI
bool _parse(::std::string
const& in);
95 MCAPI ::std::unique_ptr<::CommandSelector<::Actor>>
96 createSelector(::std::string
const& selectorString,
::CommandOrigin const& origin);
98 MCAPI ::std::vector<::std::string> getErrorParams()
const;
100 MCAPI
bool parseCommand(::std::string
const& in);
102 MCAPI
bool parseSelector(::std::string
const& in);
120 using ValueTypeID = uint64;
122 using EnumValueID = uint64;
126 using SoftEnumID = uint;
128 using ChainedSubcommandValueID = uint64;
130 using ChainedSubcommandID = uint;
132 using SemanticConstraintID = uchar;
134 using ConstrainedValueID = uint;
136 using ConstrainedValueLookupKey = ::std::pair<uint64, uint>;
138 using CommandOverrideFunctor =
139 ::std::function<void(::std::string
const&,
::CommandFlag&, ::CommandPermissionLevel&)>;
141 using ScoreboardScoreAccessor = ::std::function<int(
bool&, ::std::string
const&,
::Actor const&)>;
143 using HardTerminal = ::CommandLexer::TokenType;
145 enum class HardNonTerminal :
int {
151 WildcardInt = 1048581,
153 CompareOperator = 1048583,
155 StandaloneSelection = 1048585,
156 WildcardSelection = 1048586,
157 NonIdSelector = 1048587,
159 ScoresArgs = 1048589,
160 ScoreSelectParam = 1048590,
161 ScoreSelector = 1048591,
162 TagSelector = 1048592,
164 FilePathVal = 1048594,
165 FilePathCont = 1048595,
166 IntegerRangeVal = 1048596,
167 IntegerRangePostVal = 1048597,
168 IntegerRange = 1048598,
169 FullIntegerRange = 1048599,
170 RationalRangeVal = 1048600,
171 RationalRangePostVal = 1048601,
172 RationalRange = 1048602,
173 FullRationalRange = 1048603,
182 HasPermissionArg = 1048612,
183 HasPermissionArgs = 1048613,
184 HasPermissionSelector = 1048614,
185 HasPermissionElement = 1048615,
186 HasPermissionElements = 1048616,
188 HasItemElement = 1048618,
189 HasItemElements = 1048619,
190 HasItemArg = 1048620,
191 HasItemArgs = 1048621,
192 HasItemSelector = 1048622,
193 EquipmentSlotEnum = 1048623,
194 PropertyValue = 1048624,
195 HasPropertyParamValue = 1048625,
196 HasPropertyParamEnumValue = 1048626,
197 HasPropertyArg = 1048627,
198 HasPropertyArgs = 1048628,
199 HasPropertyElement = 1048629,
200 HasPropertyElements = 1048630,
201 HasPropertySelector = 1048631,
207 CoordXFloat = 1048637,
208 CoordYFloat = 1048638,
209 CoordZFloat = 1048639,
211 PositionFloat = 1048641,
212 MessageExp = 1048642,
214 MessageRoot = 1048644,
215 PostSelector = 1048645,
217 RawTextCont = 1048647,
220 JsonObject = 1048650,
221 JsonObjectFields = 1048651,
222 JsonObjectCont = 1048652,
224 JsonArrayValues = 1048654,
225 JsonArrayCont = 1048655,
227 BlockStateKey = 1048657,
228 BlockStateValue = 1048658,
229 BlockStateValues = 1048659,
230 BlockStateArray = 1048660,
231 BlockStateArrayCont = 1048661,
233 SlashCommand = 1048663,
234 CodeBuilderArg = 1048664,
235 CodeBuilderArgs = 1048665,
236 CodeBuilderSelectParam = 1048666,
237 CodeBuilderSelector = 1048667,
244 static int const NonTerminalBit = 0x100000;
245 static int const EnumBit = 0x200000;
246 static int const OptionalBit = 0x400000;
247 static int const FactorizationBit = 0x800000;
248 static int const PostfixBit = 0x1000000;
249 static int const EnumValueBit = 0x2000000;
250 static int const SoftEnumBit = 0x4000000;
254 Symbol(
int val) : mValue(val) {}
259 Symbol(HardNonTerminal data) : mValue(
static_cast<int>(data)) {}
261 Symbol(CommandLexer::TokenType data) : mValue(
static_cast<int>(data)) {}
264 mValue = other.mValue;
268 [[nodiscard]]
inline bool operator==(
Symbol const& other)
const {
return mValue == other.mValue; }
270 uint64 toIndex()
const {
return mValue & 0xffffffffe00fffffull; }
277 uint64 operator()(::std::pair<::CommandRegistry::Symbol, ::CommandRegistry::Symbol>
const&)
const;
284 using SymbolVector = ::std::vector<::CommandRegistry::Symbol>;
287 ::entt::dense_set<::CommandRegistry::Symbol, ::CommandRegistry::SymbolHasher, ::std::equal_to<void>>;
289 using ParseMap = ::std::map<
291 ::entt::dense_set<::CommandRegistry::Symbol, ::CommandRegistry::SymbolHasher, ::std::equal_to<void>>>;
303 ::std::vector<::CommandParameterData> params;
306 ::std::vector<::CommandRegistry::Symbol> paramsSymbol;
315 ::std::string description;
316 ::std::vector<::CommandRegistry::Overload> overloads;
317 ::std::vector<uint> chainedSubcommandIndexes;
318 ::CommandPermissionLevel permissionLevel;
323 int firstFactorization;
377 ::std::unique_ptr<::CommandRegistry::ParseToken> child;
378 ::std::unique_ptr<::CommandRegistry::ParseToken> next;
388 MCAPI ::std::string toString()
const;
392 using ProcessFunction =
399 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> nonTerminal;
405 ::ll::TypedStorage<8, 24, ::std::vector<::CommandRegistry::Symbol>> derivation;
406 ::ll::TypedStorage<4, 8, ::CommandVersion> versions;
421 using RuleIndex = int;
453 using ParseFunction =
457 using EnumConversionFunction = ::std::function<void(
void*, uint64)>;
466 ::std::vector<::std::pair<uint64, uint64>> values;
482 using ChainedSubcommandConversionFunction = ::std::function<void(
void*, uint64)>;
491 ::std::vector<::std::pair<uint64, uint>> values;
512 ::std::vector<::std::string> mValues;
536 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> x;
537 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> y;
538 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> z;
539 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> dx;
540 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> dy;
541 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> dz;
542 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> r;
543 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> rm;
544 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> rx;
545 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> rxm;
546 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> ry;
547 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> rym;
548 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> l;
549 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> lm;
550 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> c;
551 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> m;
552 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> name;
553 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> type;
554 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> family;
555 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> score;
556 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> tag;
557 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> hasitem;
558 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> haspermission;
559 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> hasproperty;
560 ::ll::TypedStorage<4, 4, ::CommandRegistry::Symbol> codebuilder;
580 ::ll::TypedStorage<4, 4, uint> signatureCount;
581 ::ll::TypedStorage<4, 4, uint> enumValueCount;
582 ::ll::TypedStorage<4, 4, uint> postfixCount;
583 ::ll::TypedStorage<4, 4, uint> enumCount;
584 ::ll::TypedStorage<4, 4, uint> enumLookupCount;
585 ::ll::TypedStorage<4, 4, uint> typeLookupCount;
586 ::ll::TypedStorage<4, 4, uint> factorizationCount;
587 ::ll::TypedStorage<4, 4, uint> optionalCount;
588 ::ll::TypedStorage<4, 4, uint> ruleCount;
589 ::ll::TypedStorage<4, 4, uint> softEnumCount;
590 ::ll::TypedStorage<4, 4, uint> constraintCount;
591 ::ll::TypedStorage<4, 4, uint> chainedSubcommandCount;
592 ::ll::TypedStorage<4, 4, uint> chainedSubcommandValueCount;
593 ::ll::TypedStorage<8, 24, ::std::vector<uint>> enumValuesCount;
594 ::ll::TypedStorage<8, 24, ::std::vector<uint>> constrainedValueCount;
595 ::ll::TypedStorage<8, 24, ::std::vector<uint>> softEnumValuesCount;
611 using PredictTable = ::entt::dense_map<
612 ::std::pair<::CommandRegistry::Symbol, ::CommandRegistry::Symbol>,
615 ::std::equal_to<void>>;
623 ::entt::dense_set<::CommandRegistry::Symbol, ::CommandRegistry::SymbolHasher, ::std::equal_to<void>>>
627 ::entt::dense_set<::CommandRegistry::Symbol, ::CommandRegistry::SymbolHasher, ::std::equal_to<void>>>
630 ::std::pair<::CommandRegistry::Symbol, ::CommandRegistry::Symbol>,
633 ::std::equal_to<void>>
635 ::std::chrono::nanoseconds buildDuration;
657 using ParamVisitCallback = ::std::function<
662 using ParseTableMap = ::std::map<uint, ::CommandRegistry::ParseTable>;
667 ::std::function<void(
::Packet const&)> mNetworkUpdateCallback;
668 ScoreboardScoreAccessor mGetScoreForObjective;
670 ::std::vector<::CommandRegistry::ParseRule> mRules;
671 ::std::map<uint, ::CommandRegistry::ParseTable> mParseTables;
672 ::std::vector<::CommandRegistry::OptionalParameterChain> mOptionals;
673 ::std::vector<::std::string> mEnumValues;
674 ::std::vector<::CommandRegistry::Enum> mEnums;
675 ::std::vector<::std::string> mChainedSubcommandValues;
676 ::std::vector<::CommandRegistry::ChainedSubcommand> mChainedSubcommands;
677 ::std::vector<::CommandRegistry::Factorization> mFactorizations;
678 ::std::vector<::std::string> mPostfixes;
679 ::std::map<::std::string, uint> mEnumLookup;
680 ::std::map<::std::string, uint64> mEnumValueLookup;
681 ::std::map<::std::string, uint> mChainedSubcommandLookup;
682 ::std::map<::std::string, uint64> mChainedSubcommandValueLookup;
683 ::std::vector<::CommandRegistry::Symbol> mCommandSymbols;
684 ::std::map<::std::string, ::CommandRegistry::Signature> mSignatures;
685 ::std::map<::Bedrock::typeid_t<::CommandRegistry>,
int> mTypeLookup;
686 ::std::map<::std::string, ::std::string> mAliases;
687 ::std::vector<::SemanticConstraint> mSemanticConstraints;
688 ::std::map<::SemanticConstraint, uchar> mSemanticConstraintLookup;
689 ::std::vector<::CommandRegistry::ConstrainedValue> mConstrainedValues;
690 ::std::map<::std::pair<uint64, uint>, uint> mConstrainedValueLookup;
691 ::std::vector<::CommandRegistry::SoftEnum> mSoftEnums;
692 ::std::map<::std::string, uint> mSoftEnumLookup;
693 ::std::vector<::CommandRegistry::RegistryState> mStateStack;
695 ::std::unordered_set<int> mSkipOnEpsAutocompleteSymbols;
696 ::std::unordered_set<int> mAllowEmptySymbols;
697 CommandOverrideFunctor mCommandOverrideFunctor;
698 ::std::unique_ptr<::CommandRunStats> mCommandRunStats;
708 std::vector<std::string>& errorParams
711 template <
class E,
class C>
718 std::vector<std::string>& errorParams
721 uint64 getEnumData(
ParseToken const& token)
const {
722 auto& values = mEnums[token.type.toIndex()].values;
723 return std::lower_bound(
726 token.child->type.toIndex(),
727 [](
auto& pair,
auto& child) { return pair.first < child; }
736 MCAPI ::CommandRegistry::Symbol _addChainedSubcommandValuesInternal(
737 ::std::string
const& name,
738 ::std::vector<::std::pair<::std::string, uint>>
const& strings,
746 MCAPI ::CommandRegistry::Symbol _addChainedSubcommandValuesInternal(
747 ::std::string
const& name,
748 ::std::vector<::std::pair<uint64, uint>>
const& values,
756 MCAPI ::CommandRegistry::Symbol _addEnumValuesInternal(
757 ::std::string
const& name,
758 ::std::vector<::std::pair<::std::string, uint64>>
const& strings,
765 MCAPI ::CommandRegistry::Symbol _addEnumValuesInternal(
766 ::std::string
const& name,
767 ::std::vector<::std::pair<uint64, uint64>>
const& values,
774 MCAPI ::CommandRegistry::Symbol _addFunctionSoftEnum();
776 MCAPI ::std::unique_ptr<::CommandSelector<::Actor>> _createSelector(
780 ::std::string& error,
781 ::std::vector<::std::string>& errorParams
786 MCAPI
bool _isCommandElementValid(::std::string
const& name)
const;
788 MCAPI
bool _matchesEnumConstraintsSet(
792 ::SemanticConstraint requiredConstraints
795 MCAPI
void addChainedSubcommandValuesToExisting(uint index, ::std::vector<::std::pair<uint64, uint>>
const& values);
797 MCAPI
void addEnumValueConstraints(
798 ::std::string
const& enumName,
799 ::std::vector<::std::string>
const& values,
800 ::SemanticConstraint constraints
803 MCAPI
int addEnumValues(::std::string
const& name, ::std::vector<::std::string>
const& values);
805 MCAPI
void addEnumValuesToExisting(uint index, ::std::vector<::std::pair<uint64, uint64>>
const& values);
807 MCAPI ::CommandRegistry::Symbol addPostfix(::std::string
const& name);
811 ::std::vector<::CommandRegistry::Symbol> derivation,
817 MCAPI
void addSemanticConstraint(::SemanticConstraint constraintType);
819 MCAPI
int addSoftEnum(::std::string
const& name, ::std::vector<::std::string> values);
821 MCAPI
void addSoftEnumValues(::std::string
const& enumName, ::std::vector<::std::string> values);
823 MCAPI ::CommandRegistry::Symbol addSoftTerminal(::std::string
const& name);
827 MCAPI
void buildFollowSet(
831 ::std::set<::CommandRegistry::Symbol>& workingSet
834 MCAPI ::CommandRegistry::Symbol buildOptionalRuleChain(
836 ::std::vector<::CommandParameterData>
const& params,
837 ::std::vector<::CommandRegistry::Symbol>
const& symbols
840 MCAPI
void buildParseTable(uint version)
const;
844 MCAPI ::CommandRegistry::Symbol buildRules(
846 ::std::vector<::gsl::not_null<::CommandRegistry::Overload*>>
const& overloads,
853 MCAPI ::std::unique_ptr<::Command> createCommand(
857 ::std::string& error,
858 ::std::vector<::std::string>& errorParams
865 MCAPI ::std::string describe(
867 ::std::string
const& overload,
874 MCAPI ::CommandRegistry::Signature
const* findCommand(::std::string
const&)
const;
876 MCFOLD ::CommandRegistry::Signature* findCommand(::std::string
const& name);
878 MCAPI ::CommandRegistry::Symbol findEnumValue(::std::string
const& name)
const;
880 MCAPI ::CommandRegistry::Symbol findIdentifierInfo(::std::string
const& name)
const;
882 MCAPI ::CommandRegistry::Symbol findPostfix(::std::string
const& input)
const;
884 MCAPI
void fireCommandParseTableTelemetry(
::IMinecraftEventing const& eventing,
bool isServer)
const;
888 MCAPI ::Json::Value generateDocumentationMetadata(
bool generateInternalMetadata)
const;
890 MCAPI ::std::vector<::std::string> getAliases(::std::string
const& command)
const;
892 MCAPI ::std::vector<::std::string> getAlphabeticalLookup(
::CommandOrigin const& origin)
const;
894 MCAPI ::std::string getCommandName(::std::string
const& commandLine)
const;
896 MCAPI ::CommandSyntaxInformation
897 getCommandOverloadSyntaxInformation(
::CommandOrigin const& origin, ::std::string
const& commandName)
const;
907 MCAPI
bool parseSelector(
912 ::std::string& error,
913 ::std::vector<::std::string>& errorParams
916 MCAPI
void registerAlias(::std::string name, ::std::string alias);
918 MCAPI
void registerCommand(
919 ::std::string
const& name,
920 char const* description,
921 ::CommandPermissionLevel requirement,
928 MCAPI
void removeSoftEnumValues(::std::string
const& enumName, ::std::vector<::std::string> values);
930 MCAPI ::AvailableCommandsPacket serializeAvailableCommands()
const;
932 MCAPI
void setCommandRegistrationOverride(CommandOverrideFunctor functor);
934 MCAPI
void setSoftEnumValues(::std::string
const& enumName, ::std::vector<::std::string> values);
948 MCAPI static ::std::string _removeStringQuotes(::std::string
const& str);
950 MCFOLD static ::CommandRegistry::ParseToken*
953 MCAPI static ::CommandRegistry::ParseToken* collapseOn(
959 MCAPI static ::CommandRegistry::ParseToken*
962 MCAPI static ::CommandRegistry::ParseToken* expandExcept(
968 MCAPI static ::CommandRegistry::ParseToken* fold(
974 MCAPI static ::CommandRegistry::ParseToken*
977 MCAPI
static bool readFloat(
980 ::std::string& error,
981 ::std::vector<::std::string>& errorParams
984 MCAPI
static bool readInt(
987 ::std::string& error,
988 ::std::vector<::std::string>& errorParams
991 MCAPI
static bool readRelativeCoordinate(
995 bool readIntegerAsCentered,
996 ::std::string& error,
997 ::std::vector<::std::string>& errorParams
1000 MCAPI
static bool readString(
1001 ::std::string& value,
1003 ::std::string& error,
1004 ::std::vector<::std::string>& errorParams
1011 MCAPI
static char const*& CODE_STATUS_PROPERTY_NAME();
1013 MCAPI
static char const*& COMMAND_NAME_ENUM_NAME();
1015 MCAPI
static char const*& FUNCTION_NAME_SOFTENUM_NAME();
1017 MCAPI
static char const*& HASITEM_PARAM_DATA();
1019 MCAPI
static char const*& HASITEM_PARAM_ITEM();
1021 MCAPI
static char const*& HASITEM_PARAM_LOCATION();
1023 MCAPI
static char const*& HASITEM_PARAM_QUANTITY();
1025 MCAPI
static char const*& HASITEM_PARAM_SLOT();
1027 MCAPI
static char const*& HASPERMISSIONSTATE_ENUM_DISABLED();
1029 MCAPI
static char const*& HASPERMISSIONSTATE_ENUM_ENABLED();
1031 MCAPI
static char const*& HASPROPERTY_PARAM_PROPERTY_NAME();
1033 MCAPI static ::std::add_lvalue_reference_t<::std::pair<
1039 MCAPI
static char const*& TAG_VALUES_SOFTENUM_NAME();
1041 MCAPI
static char const*& UNLOCKABLE_RECIPES_SOFTENUM_NAME();
1047 MCAPI
void* $ctor(
bool isEduMode);