Skip to content

Commit ad1033f

Browse files
committed
fix: fix old plugin command compatability
1 parent e1e92f1 commit ad1033f

File tree

3 files changed

+80
-70
lines changed

3 files changed

+80
-70
lines changed

src/legacy/api/CommandAPI.cpp

Lines changed: 67 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,15 @@ void onExecute(CommandOrigin const& origin, CommandOutput& output, RuntimeComman
338338
lse::getSelfPluginInstance().getLogger().warn("Could not find {} in registered commands."_tr(commandName));
339339
return;
340340
}
341-
for (std::string& name : registeredCommands[commandName]) {
341+
for (auto& info : registeredCommands[commandName]) {
342342
try {
343-
auto& param = runtime[name];
344-
args.set(name, convertResult(param, origin, output));
343+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
344+
auto& param = runtime[info.enumName];
345+
args.set(info.name, convertResult(param, origin, output));
346+
} else {
347+
auto& param = runtime[info.name];
348+
args.set(info.name, convertResult(param, origin, output));
349+
}
345350
} catch (std::out_of_range&) {
346351
continue;
347352
}
@@ -373,8 +378,7 @@ Local<Value> CommandClass::newParameter(const Arguments& args) {
373378
option = (CommandParameterOption)args[index++].asNumber().toInt32();
374379
if (index != args.size()) throw std::runtime_error("Error Argument in newParameter");
375380

376-
paramMaps[name] = {type, optional, enumName}; // Stores the parameter name for overload use
377-
getEngineOwnData()->plugin->registeredCommands[commandName].push_back(name
381+
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, optional, enumName}
378382
); // Stores the parameter name for onExecute use
379383

380384
return Boolean::newBoolean(true);
@@ -400,8 +404,7 @@ Local<Value> CommandClass::mandatory(const Arguments& args) {
400404
option = (CommandParameterOption)args[index++].asNumber().toInt32();
401405
if (index != args.size()) throw std::runtime_error("Error Argument in newParameter");
402406

403-
paramMaps[name] = {type, false, enumName, option}; // Stores the parameter name for overload use
404-
getEngineOwnData()->plugin->registeredCommands[commandName].push_back(name
407+
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, false, enumName}
405408
); // Stores the parameter name for onExecute use
406409

407410
return Boolean::newBoolean(true);
@@ -427,8 +430,7 @@ Local<Value> CommandClass::optional(const Arguments& args) {
427430
option = (CommandParameterOption)args[index++].asNumber().toInt32();
428431
if (index != args.size()) throw std::runtime_error("Error Argument in newParameter");
429432

430-
paramMaps[name] = {type, true, enumName, option}; // Stores the parameter name for overload use
431-
getEngineOwnData()->plugin->registeredCommands[commandName].push_back(name
433+
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, true, enumName}
432434
); // Stores the parameter name for onExecute use
433435

434436
return Boolean::newBoolean(true);
@@ -446,19 +448,21 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
446448
for (int i = 0; i < args.size(); ++i) {
447449
CHECK_ARG_TYPE(args[i], ValueKind::kNumber);
448450
std::string paramName = std::to_string(args[i].asNumber().toInt32());
449-
if (paramMaps.find(paramName) != paramMaps.end()) {
450-
ParamInfo& param = paramMaps[paramName];
451-
if (param.optional) {
452-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
453-
cmd.optional(paramName, param.type, param.enumName).option(param.option);
454-
} else {
455-
cmd.optional(paramName, param.type).option(param.option);
456-
}
457-
} else {
458-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
459-
cmd.required(paramName, param.type, param.enumName).option(param.option);
451+
auto& paramList = getEngineOwnData()->plugin->registeredCommands[commandName];
452+
for (auto& info : paramList) {
453+
if (info.name == paramName || info.enumName == paramName) {
454+
if (info.optional) {
455+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
456+
cmd.optional(info.enumName, info.type, info.enumName).option(info.option);
457+
} else {
458+
cmd.optional(info.name, info.type).option(info.option);
459+
}
460460
} else {
461-
cmd.required(paramName, param.type).option(param.option);
461+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
462+
cmd.required(info.enumName, info.type, info.enumName).option(info.option);
463+
} else {
464+
cmd.required(info.name, info.type).option(info.option);
465+
}
462466
}
463467
}
464468
}
@@ -469,19 +473,21 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
469473
for (int i = 0; i < args.size(); ++i) {
470474
CHECK_ARG_TYPE(args[i], ValueKind::kString);
471475
std::string paramName = args[0].asString().toString();
472-
if (paramMaps.find(paramName) != paramMaps.end()) {
473-
ParamInfo& param = paramMaps[paramName];
474-
if (param.optional) {
475-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
476-
cmd.optional(paramName, param.type, param.enumName).option(param.option);
477-
} else {
478-
cmd.optional(paramName, param.type).option(param.option);
479-
}
480-
} else {
481-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
482-
cmd.required(paramName, param.type, param.enumName).option(param.option);
476+
auto& paramList = getEngineOwnData()->plugin->registeredCommands[commandName];
477+
for (auto& info : paramList) {
478+
if (info.name == paramName || info.enumName == paramName) {
479+
if (info.optional) {
480+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
481+
cmd.optional(info.enumName, info.type, info.enumName).option(info.option);
482+
} else {
483+
cmd.optional(info.name, info.type).option(info.option);
484+
}
483485
} else {
484-
cmd.required(paramName, param.type).option(param.option);
486+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
487+
cmd.required(info.enumName, info.type, info.enumName).option(info.option);
488+
} else {
489+
cmd.required(info.name, info.type).option(info.option);
490+
}
485491
}
486492
}
487493
}
@@ -495,19 +501,21 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
495501
for (int i = 0; i < arr.size(); ++i) {
496502
CHECK_ARG_TYPE(arr.get(i), ValueKind::kNumber);
497503
std::string paramName = std::to_string(arr.get(i).asNumber().toInt32());
498-
if (paramMaps.find(paramName) != paramMaps.end()) {
499-
ParamInfo& param = paramMaps[paramName];
500-
if (param.optional) {
501-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
502-
cmd.optional(paramName, param.type, param.enumName).option(param.option);
504+
auto& paramList = getEngineOwnData()->plugin->registeredCommands[commandName];
505+
for (auto& info : paramList) {
506+
if (info.name == paramName || info.enumName == paramName) {
507+
if (info.optional) {
508+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
509+
cmd.optional(info.enumName, info.type, info.enumName).option(info.option);
510+
} else {
511+
cmd.optional(info.name, info.type).option(info.option);
512+
}
503513
} else {
504-
cmd.optional(paramName, param.type).option(param.option);
505-
}
506-
} else {
507-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
508-
cmd.required(paramName, param.type, param.enumName).option(param.option);
509-
} else {
510-
cmd.required(paramName, param.type).option(param.option);
514+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
515+
cmd.required(info.enumName, info.type, info.enumName).option(info.option);
516+
} else {
517+
cmd.required(info.name, info.type).option(info.option);
518+
}
511519
}
512520
}
513521
}
@@ -518,19 +526,21 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
518526
for (int i = 0; i < arr.size(); ++i) {
519527
CHECK_ARG_TYPE(arr.get(i), ValueKind::kString);
520528
std::string paramName = arr.get(i).asString().toString();
521-
if (paramMaps.find(paramName) != paramMaps.end()) {
522-
ParamInfo& param = paramMaps[paramName];
523-
if (param.optional) {
524-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
525-
cmd.optional(paramName, param.type, param.enumName).option(param.option);
526-
} else {
527-
cmd.optional(paramName, param.type).option(param.option);
528-
}
529-
} else {
530-
if (param.type == ParamKind::Kind::Enum || param.type == ParamKind::Kind::SoftEnum) {
531-
cmd.required(paramName, param.type, param.enumName).option(param.option);
529+
auto& paramList = getEngineOwnData()->plugin->registeredCommands[commandName];
530+
for (auto& info : paramList) {
531+
if (info.name == paramName || info.enumName == paramName) {
532+
if (info.optional) {
533+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
534+
cmd.optional(info.enumName, info.type, info.enumName).option(info.option);
535+
} else {
536+
cmd.optional(info.name, info.type).option(info.option);
537+
}
532538
} else {
533-
cmd.required(paramName, param.type).option(param.option);
539+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
540+
cmd.required(info.enumName, info.type, info.enumName).option(info.option);
541+
} else {
542+
cmd.required(info.name, info.type).option(info.option);
543+
}
534544
}
535545
}
536546
}

src/legacy/api/CommandAPI.h

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#pragma once
22
#include "api/CommandCompatibleAPI.h"
33
#include "ll/api/command/CommandHandle.h"
4-
#include "ll/api/command/runtime/ParamKind.h"
54

65
extern ClassDefine<void> ParamTypeStaticBuilder;
76
extern ClassDefine<void> PermissionStaticBuilder;
@@ -18,18 +17,10 @@ enum class OldCommandPermissionLevel : schar {
1817
Internal = 0x5,
1918
};
2019

21-
struct ParamInfo {
22-
ll::command::ParamKind::Kind type;
23-
bool optional;
24-
std::string enumName;
25-
CommandParameterOption option;
26-
};
27-
2820
class CommandClass : public ScriptClass {
29-
std::string commandName;
30-
std::string description;
31-
std::unordered_map<std::string, ParamInfo> paramMaps;
32-
inline ll::command::CommandHandle& get() {
21+
std::string commandName;
22+
std::string description;
23+
inline ll::command::CommandHandle& get() {
3324
return ll::command::CommandRegistrar::getInstance().getOrCreateCommand(commandName);
3425
}
3526
inline std::vector<std::string> parseStringList(Local<Array> arr) {

src/lse/Plugin.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,23 @@
33
#include "PluginManager.h"
44
#include "ll/api/mod/Manifest.h"
55
#include "ll/api/mod/Mod.h"
6+
#include "ll/api/command/runtime/ParamKind.h"
67

78
namespace lse {
89

910
class Plugin : public ll::mod::Mod {
1011
friend PluginManager;
1112

1213
public:
13-
std::unordered_map<std::string, std::vector<std::string>> registeredCommands;
14+
struct ParamInfo {
15+
std::string name;
16+
ll::command::ParamKind::Kind type;
17+
bool optional;
18+
std::string enumName;
19+
CommandParameterOption option;
20+
};
21+
22+
std::unordered_map<std::string, std::vector<ParamInfo>> registeredCommands;
1423

1524
Plugin(const ll::mod::Manifest& manifest);
1625
~Plugin();

0 commit comments

Comments
 (0)