Skip to content

Commit 0fe6d59

Browse files
committed
fix: fix command empty overload
fix: fix compatibility with old ParameterType fix: fix LOG_ERROR_WITH_SCRIPT_INFO feat: add EventTests
1 parent dcc9954 commit 0fe6d59

22 files changed

+343
-173
lines changed

src/legacy/api/APIHelp.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,32 +36,36 @@ std::string ValueKindToString(const ValueKind& kind);
3636
#if !defined(NEW_DEFINES)
3737

3838
// 输出脚本调用堆栈,API名称,以及插件名
39-
inline void LOG_ERROR_WITH_SCRIPT_INFO(std::string const& msg = "") {
39+
inline void LOG_ERROR_WITH_SCRIPT_INFO(std::string const& func = "", std::string const& msg = "") {
4040
PrintScriptStackTrace(msg);
41-
lse::getSelfPluginInstance().getLogger().error("In API: " __FUNCTION__);
41+
lse::getSelfPluginInstance().getLogger().error("In API: " + func);
4242
lse::getSelfPluginInstance().getLogger().error("In Plugin: " + getEngineOwnData()->pluginName);
4343
}
4444

4545
// 参数类型错误输出
46-
inline void LOG_WRONG_ARG_TYPE() { LOG_ERROR_WITH_SCRIPT_INFO("Wrong type of argument!"); }
46+
inline void LOG_WRONG_ARG_TYPE(std::string const& func = "") {
47+
LOG_ERROR_WITH_SCRIPT_INFO(func, "Wrong type of argument!");
48+
}
4749

4850
// 参数数量错误输出
49-
inline void LOG_TOO_FEW_ARGS() { LOG_ERROR_WITH_SCRIPT_INFO("Too Few arguments!"); }
51+
inline void LOG_TOO_FEW_ARGS(std::string const& func = "") { LOG_ERROR_WITH_SCRIPT_INFO(func, "Too Few arguments!"); }
5052

5153
// 参数数量错误输出
52-
inline void LOG_WRONG_ARGS_COUNT() { LOG_ERROR_WITH_SCRIPT_INFO("Wrong number of arguments!"); }
54+
inline void LOG_WRONG_ARGS_COUNT(std::string const& func = "") {
55+
LOG_ERROR_WITH_SCRIPT_INFO(func, "Wrong number of arguments!");
56+
}
5357

5458
// 至少COUNT个参数
5559
#define CHECK_ARGS_COUNT(ARGS, COUNT) \
5660
if (ARGS.size() < COUNT) { \
57-
LOG_TOO_FEW_ARGS(); \
61+
LOG_TOO_FEW_ARGS(__FUNCTION__); \
5862
return Local<Value>(); \
5963
}
6064

6165
// 检查是否TYPE类型
6266
#define CHECK_ARG_TYPE(ARG, TYPE) \
6367
if (ARG.getKind() != TYPE) { \
64-
LOG_WRONG_ARG_TYPE(); \
68+
LOG_WRONG_ARG_TYPE(__FUNCTION__); \
6569
return Local<Value>(); \
6670
}
6771

@@ -75,28 +79,28 @@ inline void LOG_WRONG_ARGS_COUNT() { LOG_ERROR_WITH_SCRIPT_INFO("Wrong number of
7579
catch (...) { \
7680
lse::getSelfPluginInstance().getLogger().error(LOG); \
7781
ll::error_utils::printCurrentException(lse::getSelfPluginInstance().getLogger()); \
78-
LOG_ERROR_WITH_SCRIPT_INFO(); \
82+
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__); \
7983
return Local<Value>(); \
8084
}
8185

8286
// 至少COUNT个参数_Constructor
8387
#define CHECK_ARGS_COUNT_C(ARGS, COUNT) \
8488
if (ARGS.size() < COUNT) { \
85-
LOG_TOO_FEW_ARGS(); \
89+
LOG_TOO_FEW_ARGS(__FUNCTION__); \
8690
return nullptr; \
8791
}
8892

8993
// 检查是否TYPE类型_Constructor
9094
#define CHECK_ARG_TYPE_C(ARG, TYPE) \
9195
if (ARG.getKind() != TYPE) { \
92-
LOG_WRONG_ARG_TYPE(); \
96+
LOG_WRONG_ARG_TYPE(__FUNCTION__); \
9397
return nullptr; \
9498
}
9599

96100
// 检查是否TYPE类型_Setter
97101
#define CHECK_ARG_TYPE_S(ARG, TYPE) \
98102
if (ARG.getKind() != TYPE) { \
99-
LOG_WRONG_ARG_TYPE(); \
103+
LOG_WRONG_ARG_TYPE(__FUNCTION__); \
100104
return; \
101105
}
102106

@@ -110,7 +114,7 @@ inline void LOG_WRONG_ARGS_COUNT() { LOG_ERROR_WITH_SCRIPT_INFO("Wrong number of
110114
catch (...) { \
111115
lse::getSelfPluginInstance().getLogger().error(LOG); \
112116
ll::error_utils::printCurrentException(lse::getSelfPluginInstance().getLogger()); \
113-
LOG_ERROR_WITH_SCRIPT_INFO(); \
117+
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__); \
114118
return nullptr; \
115119
}
116120

@@ -124,7 +128,7 @@ inline void LOG_WRONG_ARGS_COUNT() { LOG_ERROR_WITH_SCRIPT_INFO("Wrong number of
124128
catch (...) { \
125129
lse::getSelfPluginInstance().getLogger().error(LOG); \
126130
ll::error_utils::printCurrentException(lse::getSelfPluginInstance().getLogger()); \
127-
LOG_ERROR_WITH_SCRIPT_INFO(); \
131+
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__); \
128132
return; \
129133
}
130134

@@ -137,7 +141,7 @@ inline void LOG_WRONG_ARGS_COUNT() { LOG_ERROR_WITH_SCRIPT_INFO("Wrong number of
137141
catch (...) { \
138142
lse::getSelfPluginInstance().getLogger().error(LOG); \
139143
ll::error_utils::printCurrentException(lse::getSelfPluginInstance().getLogger()); \
140-
LOG_ERROR_WITH_SCRIPT_INFO(); \
144+
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__); \
141145
}
142146

143147
// 截获回调函数异常

src/legacy/api/BlockAPI.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ Local<Value> McClass::getBlock(const Arguments& args) {
403403
pos = posObj->toIntVec4();
404404
}
405405
} else {
406-
LOG_WRONG_ARG_TYPE();
406+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
407407
return Local<Value>();
408408
}
409409
} else if (args.size() == 4) {
@@ -419,7 +419,7 @@ Local<Value> McClass::getBlock(const Arguments& args) {
419419
args[3].asNumber().toInt32()
420420
};
421421
} else {
422-
LOG_WRONG_ARGS_COUNT();
422+
LOG_WRONG_ARGS_COUNT(__FUNCTION__);
423423
return Local<Value>();
424424
}
425425

@@ -435,7 +435,7 @@ Local<Value> McClass::getBlock(const Arguments& args) {
435435
ChunkBlockPos cbpos = ChunkBlockPos(pos.getBlockPos(), minHeight);
436436
auto block = &const_cast<Block&>(lc->getBlock(cbpos));
437437
if (!block) {
438-
// LOG_WRONG_ARG_TYPE();
438+
// LOG_WRONG_ARG_TYPE(__FUNCTION__);
439439
return {};
440440
}
441441
BlockPos bp{pos.x, pos.y, pos.z};
@@ -474,7 +474,7 @@ Local<Value> McClass::setBlock(const Arguments& args) {
474474
block = args[1];
475475
}
476476
} else {
477-
LOG_WRONG_ARG_TYPE();
477+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
478478
return Local<Value>();
479479
}
480480
} else if (args.size() == 5 || args.size() == 6) {
@@ -496,7 +496,7 @@ Local<Value> McClass::setBlock(const Arguments& args) {
496496
tileData = args[5].asNumber().toInt32();
497497
}
498498
} else {
499-
LOG_WRONG_ARGS_COUNT();
499+
LOG_WRONG_ARGS_COUNT(__FUNCTION__);
500500
return Local<Value>();
501501
}
502502

@@ -520,7 +520,7 @@ Local<Value> McClass::setBlock(const Arguments& args) {
520520
// other block object
521521
Block* bl = BlockClass::extract(block);
522522
if (!bl) {
523-
LOG_WRONG_ARG_TYPE();
523+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
524524
return Local<Value>();
525525
}
526526
BlockSource& bs = ll::service::getLevel()->getDimension(pos.dim)->getBlockSourceFromMainChunkSource();
@@ -561,7 +561,7 @@ Local<Value> McClass::spawnParticle(const Arguments& args) {
561561
type = args[1];
562562
}
563563
} else {
564-
LOG_WRONG_ARG_TYPE();
564+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
565565
return Local<Value>();
566566
}
567567
} else if (args.size() == 5) {
@@ -580,7 +580,7 @@ Local<Value> McClass::spawnParticle(const Arguments& args) {
580580
};
581581
type = args[4];
582582
} else {
583-
LOG_WRONG_ARGS_COUNT();
583+
LOG_WRONG_ARGS_COUNT(__FUNCTION__);
584584
return Local<Value>();
585585
}
586586

src/legacy/api/CommandAPI.cpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ using ll::event::ServerStartedEvent;
5252
//////////////////// Class Definition ////////////////////
5353

5454
ClassDefine<void> PermissionStaticBuilder = EnumDefineBuilder<OldCommandPermissionLevel>::build("PermType");
55-
ClassDefine<void> ParamTypeStaticBuilder = EnumDefineBuilder<ParamKind::Kind>::build("ParamType");
55+
ClassDefine<void> ParamTypeStaticBuilder = EnumDefineBuilder<OldParameterType>::build("ParamType");
5656
ClassDefine<void> ParamOptionStaticBuilder = EnumDefineBuilder<CommandParameterOption>::build("ParamOption");
5757

5858
ClassDefine<CommandClass> CommandClassBuilder =
@@ -370,12 +370,14 @@ void onExecute(CommandOrigin const& origin, CommandOutput& output, RuntimeComman
370370
}
371371
for (auto& info : registeredCommands[commandName]) {
372372
try {
373-
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
374-
auto& param = runtime[info.enumName];
375-
args.set(info.name, convertResult(param, origin, output));
376-
} else {
377-
auto& param = runtime[info.name];
378-
args.set(info.name, convertResult(param, origin, output));
373+
if (!info.name.empty()) {
374+
if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
375+
auto& param = runtime[info.enumName];
376+
args.set(info.name, convertResult(param, origin, output));
377+
} else {
378+
auto& param = runtime[info.name];
379+
args.set(info.name, convertResult(param, origin, output));
380+
}
379381
}
380382
} catch (std::out_of_range&) {
381383
continue;
@@ -395,7 +397,7 @@ Local<Value> CommandClass::newParameter(const Arguments& args) {
395397
CHECK_ARG_TYPE(args[0], ValueKind::kString);
396398
try {
397399
auto name = args[0].asString().toString();
398-
ParamKind::Kind type = parseEnum<ParamKind::Kind>(args[1]);
400+
ParamKind::Kind type = (ParamKind::Kind)parseEnum<OldParameterType>(args[1]);
399401
std::string enumName = "";
400402
bool optional = false;
401403
std::string identifier = "";
@@ -423,7 +425,7 @@ Local<Value> CommandClass::mandatory(const Arguments& args) {
423425
CHECK_ARG_TYPE(args[0], ValueKind::kString);
424426
try {
425427
auto name = args[0].asString().toString();
426-
ParamKind::Kind type = parseEnum<ParamKind::Kind>(args[1]);
428+
ParamKind::Kind type = (ParamKind::Kind)parseEnum<OldParameterType>(args[1]);
427429
std::string enumName = "";
428430
std::string identifier = "";
429431
size_t index = 2;
@@ -449,7 +451,7 @@ Local<Value> CommandClass::optional(const Arguments& args) {
449451
CHECK_ARG_TYPE(args[0], ValueKind::kString);
450452
try {
451453
auto name = args[0].asString().toString();
452-
ParamKind::Kind type = parseEnum<ParamKind::Kind>(args[1]);
454+
ParamKind::Kind type = (ParamKind::Kind)parseEnum<OldParameterType>(args[1]);
453455
std::string enumName = "";
454456
std::string identifier = "";
455457
size_t index = 2;
@@ -472,7 +474,6 @@ Local<Value> CommandClass::optional(const Arguments& args) {
472474
// vector<index>
473475
Local<Value> CommandClass::addOverload(const Arguments& args) {
474476
try {
475-
if (args.size() == 0) return Boolean::newBoolean(true);
476477
auto overloadFunc = [e(EngineScope::currentEngine()
477478
)](RuntimeOverload& cmd, std::string const& commandName, std::string const& paramName) {
478479
auto& paramList = getEngineData(e)->plugin->registeredCommands[commandName];
@@ -552,13 +553,15 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
552553
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
553554
EventBus::getInstance().emplaceListener<ServerStartedEvent>(
554555
[commandName(commandName), e(EngineScope::currentEngine())](ServerStartedEvent&) {
556+
getEngineData(e)->plugin->registeredCommands[commandName].push_back({});
555557
auto cmd = ll::command::CommandRegistrar::getInstance()
556558
.getOrCreateCommand(commandName)
557559
.runtimeOverload(getEngineData(e)->plugin);
558560
cmd.execute(onExecute);
559561
}
560562
);
561563
} else {
564+
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({});
562565
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
563566
cmd.execute(onExecute);
564567
}
@@ -602,7 +605,7 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
602605
return Boolean::newBoolean(true);
603606
}
604607
}
605-
LOG_WRONG_ARG_TYPE();
608+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
606609
return Local<Value>();
607610
}
608611
CATCH("Fail in addOverload!")

src/legacy/api/CommandAPI.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,36 @@ enum class OldCommandPermissionLevel : schar {
1717
Internal = 0x5,
1818
};
1919

20+
enum class OldParameterType {
21+
Int,
22+
Bool,
23+
Float,
24+
Dimension,
25+
String,
26+
Enum,
27+
SoftEnum,
28+
Actor,
29+
Player,
30+
BlockPos,
31+
Vec3,
32+
RawText,
33+
Message,
34+
JsonValue,
35+
Item,
36+
Block,
37+
BlockState,
38+
Effect,
39+
ActorType,
40+
Command,
41+
RelativeFloat,
42+
IntegerRange,
43+
FilePath,
44+
WildcardInt,
45+
WildcardActor,
46+
// New types can
47+
Count,
48+
};
49+
2050
class CommandClass : public ScriptClass {
2151
std::string commandName;
2252
std::string description;

src/legacy/api/ContainerAPI.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Local<Value> ContainerClass::addItem(const Arguments& args) {
6666
try {
6767
ItemStack* item = ItemClass::extract(args[0]);
6868
if (!item) {
69-
LOG_WRONG_ARG_TYPE();
69+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
7070
return Local<Value>();
7171
}
7272
if (args.size() >= 2) {
@@ -88,7 +88,7 @@ Local<Value> ContainerClass::addItemToFirstEmptySlot(const Arguments& args) {
8888
try {
8989
ItemStack* item = ItemClass::extract(args[0]);
9090
if (!item) {
91-
LOG_WRONG_ARG_TYPE();
91+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
9292
return Local<Value>();
9393
}
9494
return Boolean::newBoolean(container->addItemToFirstEmptySlot(*item));
@@ -102,7 +102,7 @@ Local<Value> ContainerClass::hasRoomFor(const Arguments& args) {
102102
try {
103103
ItemStack* item = ItemClass::extract(args[0]);
104104
if (!item) {
105-
LOG_WRONG_ARG_TYPE();
105+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
106106
return Local<Value>();
107107
}
108108
return Boolean::newBoolean(container->hasRoomForItem(*item));
@@ -129,7 +129,7 @@ Local<Value> ContainerClass::getItem(const Arguments& args) {
129129
try {
130130
ItemStack* item = &const_cast<ItemStack&>(container->getItem(args[0].asNumber().toInt32()));
131131
if (!item) {
132-
LOG_ERROR_WITH_SCRIPT_INFO("Fail to get slot from container!");
132+
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, "Fail to get slot from container!");
133133
return Local<Value>();
134134
}
135135
return ItemClass::newItem(item);
@@ -144,7 +144,7 @@ Local<Value> ContainerClass::setItem(const Arguments& args) {
144144
try {
145145
ItemStack* item = ItemClass::extract(args[1]);
146146
if (!item) {
147-
LOG_WRONG_ARG_TYPE();
147+
LOG_WRONG_ARG_TYPE(__FUNCTION__);
148148
return Local<Value>();
149149
}
150150

0 commit comments

Comments
 (0)