Skip to content

Commit

Permalink
feat: replace quickjs engine with quickjs-ng
Browse files Browse the repository at this point in the history
feat: update lua engine to 5.4.7
feat: add some test scripts
fix: fix a bug in command overload
  • Loading branch information
ShrBox committed Jan 3, 2025
1 parent 2e4d108 commit 067ab5c
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 43 deletions.
2 changes: 1 addition & 1 deletion docs/apis/ScriptAPI/ScriptHelp.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ This is an upgraded version of the above function; it supports color output.

#### Show results:

![ColorLogExample](../../../img/ColorLog.png)
![ColorLogExample](/img/ColorLog.png)

### Asynchronous Output

Expand Down
2 changes: 1 addition & 1 deletion docs/apis/ScriptAPI/ScriptHelp.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

#### 效果展示:

![ColorLogExample](../../../img/ColorLog.png)
![ColorLogExample](/img/ColorLog.png)

### 异步输出

Expand Down
38 changes: 19 additions & 19 deletions src/legacy/api/CommandAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ Local<Value> CommandClass::newParameter(const Arguments& args) {
option = (CommandParameterOption)args[index++].asNumber().toInt32();
if (index != args.size()) throw std::runtime_error("Error Argument in newParameter");

getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, optional, enumName}
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, optional, enumName, option}
); // Stores the parameter name for onExecute use

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

getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, false, enumName}
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, false, enumName, option}
); // Stores the parameter name for onExecute use

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

getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, true, enumName}
getEngineOwnData()->plugin->registeredCommands[commandName].push_back({name, type, true, enumName, option}
); // Stores the parameter name for onExecute use

return Boolean::newBoolean(true);
Expand Down Expand Up @@ -495,16 +495,16 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
}
}
};
auto delayRegFunc = [this, &overloadFunc](std::vector<std::string>& enumValues) {
EventBus::getInstance().emplaceListener<ServerStartedEvent>([enumValues,
auto delayRegFunc = [this, &overloadFunc](std::vector<std::string>& paramNames) {
EventBus::getInstance().emplaceListener<ServerStartedEvent>([paramNames,
commandName(commandName),
overloadFunc,
e(EngineScope::currentEngine()
)](ServerStartedEvent&) {
auto cmd = ll::command::CommandRegistrar::getInstance()
.getOrCreateCommand(commandName)
.runtimeOverload(getEngineData(e)->plugin);
for (auto& paramName : enumValues) {
for (auto& paramName : paramNames) {
overloadFunc(cmd, commandName, paramName);
}
cmd.execute(onExecute);
Expand All @@ -513,12 +513,12 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {

if (args[0].isNumber()) {
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
std::vector<std::string> enumValues;
std::vector<std::string> paramNames;
for (int i = 0; i < args.size(); ++i) {
CHECK_ARG_TYPE(args[i], ValueKind::kNumber);
enumValues.push_back(std::to_string(args[i].asNumber().toInt32()));
paramNames.push_back(std::to_string(args[i].asNumber().toInt32()));
}
delayRegFunc(enumValues);
delayRegFunc(paramNames);
} else {
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
for (int i = 0; i < args.size(); ++i) {
Expand All @@ -531,17 +531,17 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
return Boolean::newBoolean(true);
} else if (args[0].isString()) {
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
std::vector<std::string> enumValues;
std::vector<std::string> paramNames;
for (int i = 0; i < args.size(); ++i) {
CHECK_ARG_TYPE(args[i], ValueKind::kString);
enumValues.push_back(args[0].asString().toString());
paramNames.push_back(args[i].asString().toString());
}
delayRegFunc(enumValues);
delayRegFunc(paramNames);
} else {
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
for (int i = 0; i < args.size(); ++i) {
CHECK_ARG_TYPE(args[i], ValueKind::kString);
std::string paramName = args[0].asString().toString();
std::string paramName = args[i].asString().toString();
overloadFunc(cmd, commandName, paramName);
}
cmd.execute(onExecute);
Expand Down Expand Up @@ -569,12 +569,12 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
}
if (arr.get(0).isNumber()) {
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
std::vector<std::string> enumValues;
std::vector<std::string> paramNames;
for (int i = 0; i < arr.size(); ++i) {
CHECK_ARG_TYPE(arr.get(i), ValueKind::kNumber);
enumValues.push_back(std::to_string(arr.get(i).asNumber().toInt32()));
paramNames.push_back(std::to_string(arr.get(i).asNumber().toInt32()));
}
delayRegFunc(enumValues);
delayRegFunc(paramNames);
} else {
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
for (int i = 0; i < arr.size(); ++i) {
Expand All @@ -587,12 +587,12 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
return Boolean::newBoolean(true);
} else if (arr.get(0).isString()) {
if (ll::getGamingStatus() == ll::GamingStatus::Starting) {
std::vector<std::string> enumValues;
std::vector<std::string> paramNames;
for (int i = 0; i < arr.size(); ++i) {
CHECK_ARG_TYPE(arr.get(i), ValueKind::kString);
enumValues.push_back(arr.get(i).asString().toString());
paramNames.push_back(arr.get(i).asString().toString());
}
delayRegFunc(enumValues);
delayRegFunc(paramNames);
} else {
auto cmd = get().runtimeOverload(getEngineOwnData()->plugin);
for (int i = 0; i < arr.size(); ++i) {
Expand Down
2 changes: 1 addition & 1 deletion src/legacy/api/CommandAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ enum class OldCommandPermissionLevel : schar {
Internal = 0x5,
};

enum class OldParameterType {
enum class OldParameterType : size_t {
Int,
Bool,
Float,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const events = [
export const events = [
"onPreJoin",
"onJoin",
"onLeft",
Expand Down Expand Up @@ -78,23 +78,17 @@ const events = [
"onMobSpawned"
];

const triggeredEvents = new Set();
export const triggeredEvents = new Set();

events.forEach(event => {
mc.listen(event, () => {
if (triggeredEvents.has(event)) {
return;
}
logger.info(`Event ${event} triggered`);
triggeredEvents.add(event);
logger.info(`${triggeredEvents.size}/${events.length} events called`);
export function RegisterEvents() {
events.forEach(event => {
mc.listen(event, () => {
if (triggeredEvents.has(event)) {
return;
}
logger.info(`Event ${event} triggered`);
triggeredEvents.add(event);
logger.info(`${triggeredEvents.size}/${events.length} events called`);
});
});
});

// Output which events have not been triggered
let cmd = mc.newCommand('lsetests', "LegacyScriptEngine tests", PermType.Console)
cmd.overload([])
cmd.setCallback((cmd, origin, output, results) => {
const notTriggeredEvents = events.filter(event => !triggeredEvents.has(event));
logger.info(`Events not triggered: ${notTriggeredEvents.join(', ')}`);
})
}
12 changes: 12 additions & 0 deletions src/tests/LSETests/ScriptTests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export function loggerTest(player) {
if (player) {
logger.setPlayer(player)
}
logger.setFile("logs/LegacyScriptEngine/ScriptTests.log");
logger.log("This is a log message");
logger.warn("This is a warning message");
logger.error("This is an error message");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.fatal("This is a fetal message");
}
29 changes: 29 additions & 0 deletions src/tests/LSETests/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import {RegisterEvents, events, triggeredEvents} from './plugins/LSETests/EventTests.js';
import {loggerTest} from './plugins/LSETests/ScriptTests.js';

RegisterEvents();

mc.listen('onServerStarted', () => {
let cmd = mc.newCommand('lsetests', "LegacyScriptEngine tests", PermType.Console);
cmd.setEnum('testOption', ['logger', 'events']);
cmd.mandatory('testOption', ParamType.Enum, 'testOption');
cmd.optional('player', ParamType.Player);
cmd.overload('testOption', 'player');
cmd.setCallback((cmd, origin, output, results) => {
switch (results.testOption) {
case 'logger':
loggerTest(results.player);
break;
case 'events':
const
notTriggeredEvents = events.filter(event => !triggeredEvents.has(event));
logger.info(`Events not triggered: ${notTriggeredEvents.join(', ')}`);
break;
default:
logger.error(`Invalid test option ${results.testOption}`);
break;
}
});
})


Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"entry": "EventTests.js",
"name": "EventTests",
"entry": "main.js",
"name": "LSETests",
"type": "lse-quickjs",
"author": "LiteLDev",
"version": "1.0.0",
Expand Down

0 comments on commit 067ab5c

Please sign in to comment.