Skip to content

Commit 9a7d7e3

Browse files
committed
refactor: use coro for delay command registration instead of ServerStartedEvent
1 parent 3c97e4d commit 9a7d7e3

File tree

1 file changed

+42
-42
lines changed

1 file changed

+42
-42
lines changed

src/legacy/api/CommandAPI.cpp

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,15 @@
1313
#include "engine/LocalShareData.h"
1414
#include "ll/api/command/CommandHandle.h"
1515
#include "ll/api/command/runtime/RuntimeCommand.h"
16-
#include "ll/api/command/runtime/RuntimeEnum.h"
1716
#include "ll/api/command/runtime/RuntimeOverload.h"
18-
#include "ll/api/event/EventBus.h"
19-
#include "ll/api/event/server/ServerStartedEvent.h"
17+
#include "ll/api/coro/CoroTask.h"
2018
#include "ll/api/service/Bedrock.h"
2119
#include "ll/api/service/GamingStatus.h"
22-
#include "lse/Plugin.h"
2320
#include "magic_enum.hpp"
2421
#include "mc/_HeaderOutputPredefine.h"
25-
#include "mc/deps/core/string/HashedString.h"
2622
#include "mc/deps/core/utility/MCRESULT.h"
2723
#include "mc/locale/I18n.h"
2824
#include "mc/locale/Localization.h"
29-
#include "mc/server/ServerLevel.h"
3025
#include "mc/server/commands/CommandBlockName.h"
3126
#include "mc/server/commands/CommandBlockNameResult.h"
3227
#include "mc/server/commands/CommandContext.h"
@@ -42,13 +37,12 @@
4237
#include "mc/world/item/ItemInstance.h"
4338
#include "mc/world/item/ItemStack.h"
4439
#include "mc/world/level/dimension/Dimension.h"
40+
#include "ll/api/thread/ServerThreadExecutor.h"
4541

4642
#include <string>
4743
#include <vector>
4844

4945
using namespace ll::command;
50-
using ll::event::EventBus;
51-
using ll::event::ServerStartedEvent;
5246

5347
//////////////////// Class Definition ////////////////////
5448

@@ -277,11 +271,10 @@ Local<Value> McClass::newCommand(const Arguments& args) {
277271
}
278272
};
279273
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
280-
EventBus::getInstance().emplaceListener<ServerStartedEvent>(
281-
[name, desc, permission, flag, alias, newCommandFunc](ServerStartedEvent&) {
282-
newCommandFunc(name, desc, permission, flag, alias);
283-
}
284-
);
274+
ll::coro::keepThis([name, desc, permission, flag, alias, newCommandFunc]() -> ll::coro::CoroTask<> {
275+
newCommandFunc(name, desc, permission, flag, alias);
276+
co_return;
277+
}).launch(ll::thread::ServerThreadExecutor::getDefault());
285278
} else {
286279
newCommandFunc(name, desc, permission, flag, alias);
287280
}
@@ -314,10 +307,10 @@ Local<Value> CommandClass::setAlias(const Arguments& args) {
314307
try {
315308
std::string alias = args[0].asString().toString();
316309
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
317-
EventBus::getInstance().emplaceListener<ServerStartedEvent>([commandName(commandName),
318-
alias](ServerStartedEvent&) {
310+
ll::coro::keepThis([commandName(commandName), alias]() -> ll::coro::CoroTask<> {
319311
ll::command::CommandRegistrar::getInstance().getOrCreateCommand(commandName).alias(alias);
320-
});
312+
co_return;
313+
}).launch(ll::thread::ServerThreadExecutor::getDefault());
321314
return Boolean::newBoolean(true);
322315
} else {
323316
get().alias(alias);
@@ -341,9 +334,10 @@ Local<Value> CommandClass::setEnum(const Arguments& args) {
341334
enumValues.push_back({enumArr.get(i).asString().toString(), i});
342335
}
343336
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
344-
EventBus::getInstance().emplaceListener<ServerStartedEvent>([enumName, enumValues](ServerStartedEvent&) {
337+
ll::coro::keepThis([enumName, enumValues]() -> ll::coro::CoroTask<> {
345338
CommandRegistrar::getInstance().tryRegisterRuntimeEnum(enumName, std::move(enumValues));
346-
});
339+
co_return;
340+
}).launch(ll::thread::ServerThreadExecutor::getDefault());
347341
return String::newString(enumName);
348342
} else {
349343
if (CommandRegistrar::getInstance().tryRegisterRuntimeEnum(enumName, std::move(enumValues))) {
@@ -516,31 +510,33 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
516510
}
517511
};
518512
auto delayRegFunc = [this, &overloadFunc](std::vector<std::string>& paramNames) {
519-
EventBus::getInstance().emplaceListener<ServerStartedEvent>([paramNames,
520-
commandName(commandName),
521-
overloadFunc,
522-
e(EngineScope::currentEngine()
523-
)](ServerStartedEvent&) {
524-
auto cmd = ll::command::CommandRegistrar::getInstance()
525-
.getOrCreateCommand(commandName)
526-
.runtimeOverload(getEngineData(e)->plugin);
527-
for (auto& paramName : paramNames) {
528-
overloadFunc(cmd, commandName, paramName);
513+
ll::coro::keepThis(
514+
[paramNames, commandName(commandName), overloadFunc, e(EngineScope::currentEngine())](
515+
) -> ll::coro::CoroTask<> {
516+
auto cmd = ll::command::CommandRegistrar::getInstance()
517+
.getOrCreateCommand(commandName)
518+
.runtimeOverload(getEngineData(e)->plugin);
519+
for (auto& paramName : paramNames) {
520+
overloadFunc(cmd, commandName, paramName);
521+
}
522+
cmd.execute(onExecute);
523+
co_return;
529524
}
530-
cmd.execute(onExecute);
531-
});
525+
).launch(ll::thread::ServerThreadExecutor::getDefault());
532526
};
533527
if (args.size() == 0) {
534528
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
535-
EventBus::getInstance().emplaceListener<ServerStartedEvent>(
536-
[commandName(commandName), e(EngineScope::currentEngine())](ServerStartedEvent&) {
529+
ll::coro::keepThis(
530+
[commandName(commandName), e(EngineScope::currentEngine())]() -> ll::coro::CoroTask<> {
537531
getEngineData(e)->plugin->registeredCommands[commandName].push_back({});
538532
auto cmd = ll::command::CommandRegistrar::getInstance()
539533
.getOrCreateCommand(commandName)
540534
.runtimeOverload(getEngineData(e)->plugin);
541535
cmd.execute(onExecute);
536+
co_return;
542537
}
543-
);
538+
).launch(ll::thread::ServerThreadExecutor::getDefault());
539+
544540
} else {
545541
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({});
546542
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
@@ -588,15 +584,16 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
588584
auto arr = args[0].asArray();
589585
if (arr.size() == 0) {
590586
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
591-
EventBus::getInstance().emplaceListener<ServerStartedEvent>(
592-
[commandName(commandName), e(EngineScope::currentEngine())](ServerStartedEvent&) {
587+
ll::coro::keepThis(
588+
[commandName(commandName), e(EngineScope::currentEngine())]() -> ll::coro::CoroTask<> {
593589
getEngineData(e)->plugin->registeredCommands[commandName].push_back({});
594590
auto cmd = ll::command::CommandRegistrar::getInstance()
595591
.getOrCreateCommand(commandName)
596592
.runtimeOverload(getEngineData(e)->plugin);
597593
cmd.execute(onExecute);
594+
co_return;
598595
}
599-
);
596+
).launch(ll::thread::ServerThreadExecutor::getDefault());
600597
} else {
601598
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({});
602599
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
@@ -689,9 +686,10 @@ Local<Value> CommandClass::setSoftEnum(const Arguments& args) {
689686
auto name = args[0].asString().toString();
690687
auto enums = parseStringList(args[1].asArray());
691688
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
692-
EventBus::getInstance().emplaceListener<ServerStartedEvent>([name, enums](ServerStartedEvent&) {
689+
ll::coro::keepThis([name, enums]() -> ll::coro::CoroTask<> {
693690
CommandRegistrar::getInstance().tryRegisterSoftEnum(name, std::move(enums));
694-
});
691+
co_return;
692+
}).launch(ll::thread::ServerThreadExecutor::getDefault());
695693
} else {
696694
CommandRegistrar::getInstance().tryRegisterSoftEnum(name, std::move(enums));
697695
}
@@ -708,9 +706,10 @@ Local<Value> CommandClass::addSoftEnumValues(const Arguments& args) {
708706
auto name = args[0].asString().toString();
709707
auto enums = parseStringList(args[1].asArray());
710708
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
711-
EventBus::getInstance().emplaceListener<ServerStartedEvent>([name, enums](ServerStartedEvent&) {
709+
ll::coro::keepThis([name, enums]() -> ll::coro::CoroTask<> {
712710
CommandRegistrar::getInstance().addSoftEnumValues(name, std::move(enums));
713-
});
711+
co_return;
712+
}).launch(ll::thread::ServerThreadExecutor::getDefault());
714713
} else {
715714
CommandRegistrar::getInstance().addSoftEnumValues(name, std::move(enums));
716715
}
@@ -727,9 +726,10 @@ Local<Value> CommandClass::removeSoftEnumValues(const Arguments& args) {
727726
auto name = args[0].asString().toString();
728727
auto enums = parseStringList(args[1].asArray());
729728
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
730-
EventBus::getInstance().emplaceListener<ServerStartedEvent>([name, enums](ServerStartedEvent&) {
729+
ll::coro::keepThis([name, enums]() -> ll::coro::CoroTask<> {
731730
CommandRegistrar::getInstance().removeSoftEnumValues(name, std::move(enums));
732-
});
731+
co_return;
732+
}).launch(ll::thread::ServerThreadExecutor::getDefault());
733733
} else {
734734
CommandRegistrar::getInstance().removeSoftEnumValues(name, std::move(enums));
735735
}

0 commit comments

Comments
 (0)