Skip to content

Commit 2744ca0

Browse files
committed
fix: fix dyncmd
1 parent 3e9c5f3 commit 2744ca0

File tree

3 files changed

+24
-21
lines changed

3 files changed

+24
-21
lines changed

src/legacy/legacyapi/command/DynamicCommand.cpp

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@
4545
#include <utility>
4646
#include <vector>
4747

48+
template <>
49+
bool CommandRegistry::parse<std::pair<
50+
std::string,
51+
int>>(void* p, CommandRegistry::ParseToken const& token, CommandOrigin const&, int, std::string&, std::vector<std::string>&)
52+
const {
53+
*(std::pair<std::string, int>*)p = std::pair<std::string, int>{token.toString(), (int)getEnumData(token)};
54+
return true;
55+
}
56+
4857
#define logger lse::getSelfPluginInstance().getLogger()
4958

5059
#define ForEachParameterType(func) \
@@ -457,7 +466,15 @@ DynamicCommand::preSetup(CommandRegistry& registry, std::unique_ptr<class Dynami
457466
if (commandInstance->enumRanges.count(param.description) == 0) {
458467
if (!ll::command::CommandRegistrar::getInstance().hasEnum(param.description))
459468
throw std::runtime_error("Enum " + param.description + "not found in command and BDS");
460-
commandInstance->setEnum(param.description, registry.getEnumValues(*iter));
469+
std::vector<std::string> results;
470+
auto& enums = registry.mEnums;
471+
auto iter = std::find_if(enums.begin(), enums.end(), [&](CommandRegistry::Enum const& r) {
472+
return r.name == name;
473+
});
474+
if (iter != enums.end())
475+
for (auto& i : iter->values) results.push_back(registry.mEnumValues.at(i.second));
476+
477+
commandInstance->setEnum(param.description, results);
461478
}
462479
} else if (param.type == ParameterType::SoftEnum) {
463480
// add empty Soft Enum if not found in command and BDS
@@ -498,12 +515,8 @@ DynamicCommand::preSetup(CommandRegistry& registry, std::unique_ptr<class Dynami
498515
values.emplace_back(*iter, index);
499516
++index;
500517
}
501-
registry._addEnumValuesInternal(
502-
fixedView.data(),
503-
values,
504-
++Bedrock::typeid_t<CommandRegistry>::_getCounter(),
505-
&CommandRegistry::parseEnumStringAndInt
506-
);
518+
registry
519+
._addEnumValuesInternal(fixedView.data(), values, ++Bedrock::typeid_t<CommandRegistry>::_getCounter(), &CommandRegistry::parse<std::pair<std::string, int>>);
507520
}
508521
commandInstance->enumRanges.swap(convertedEnumRanges);
509522

@@ -522,7 +535,9 @@ DynamicCommand::preSetup(CommandRegistry& registry, std::unique_ptr<class Dynami
522535
if (!commandInstance->alias_.empty()) registry.registerAlias(commandInstance->name_, commandInstance->alias_);
523536
auto builder = commandInstance->builder->get();
524537
for (auto& overload : commandInstance->overloads) {
525-
registry.registerOverload(commandInstance->name_, builder, commandInstance->buildOverload(overload));
538+
auto& si = *registry.findCommand(commandInstance->name_);
539+
si.overloads.emplace_back(CommandVersion{}, builder).params = commandInstance->buildOverload(overload);
540+
registry.registerOverloadInternal(si, si.overloads.back());
526541
}
527542
// commandInstance->overloads.clear();
528543
auto res = dynamicCommandInstances.emplace(commandInstance->name_, std::move(commandInstance));
@@ -626,15 +641,6 @@ std::unique_ptr<class DynamicCommandInstance> DynamicCommand::createCommand(
626641
return std::move(command);
627642
}
628643

629-
bool DynamicCommand::unregisterCommand(CommandRegistry& registry, std::string const& name) {
630-
if (registry.unregisterCommand(name)) {
631-
dynamicCommandInstances.erase(name);
632-
updateAvailableCommands(registry);
633-
return true;
634-
}
635-
return false;
636-
}
637-
638644
void DynamicCommand::updateAvailableCommands(CommandRegistry& registry) {
639645
registry.serializeAvailableCommands().sendToClients();
640646
}

src/legacy/legacyapi/command/DynamicCommand.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -569,9 +569,6 @@ class DynamicCommand : public Command {
569569
CommandFlag flag = CommandFlagValue::NotCheat
570570
);
571571

572-
// Experiment
573-
static bool unregisterCommand(CommandRegistry& registry, std::string const& name);
574-
575572
static void updateAvailableCommands(CommandRegistry& registry);
576573

577574
DynamicCommandInstance const* getInstance() const;

src/lse/events/EventHooks.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ LL_TYPE_INSTANCE_HOOK(
687687
CallEventRtnValue(EVENT_TYPES::onOpenContainerScreen, false, PlayerClass::newPlayer(this));
688688
}
689689
IF_LISTENED_END(EVENT_TYPES::onOpenContainerScreen);
690-
origin();
690+
return origin();
691691
}
692692

693693
LL_TYPE_INSTANCE_HOOK(

0 commit comments

Comments
 (0)