11#include " api/LlAPI.h"
22
33#include " api/APIHelp.h"
4+ #include " engine/EngineOwnData.h"
45#include " engine/GlobalShareData.h"
56#include " ll/api/Versions.h"
67#include " ll/api/data/Version.h"
8+ #include " ll/api/mod/Mod.h"
79#include " ll/api/mod/ModManagerRegistry.h"
810#include " ll/api/reflection/Serialization.h"
911#include " ll/api/utils/SystemUtils.h"
@@ -24,6 +26,7 @@ ClassDefine<void> LlClassBuilder = defineClass("ll")
2426 .property(" isRelease" , &LlClass::isRelease)
2527 .property(" isBeta" , &LlClass::isBeta)
2628 .property(" isDev" , &LlClass::isDev)
29+ .property(" pluginsRoot" , &LlClass::getPluginsRoot)
2730
2831 .function(" versionString" , &LlClass::versionString)
2932 .function(" requireVersion" , &LlClass::requireVersion)
@@ -36,6 +39,7 @@ ClassDefine<void> LlClassBuilder = defineClass("ll")
3639 .function(" eval" , &LlClass::eval)
3740 .function(" registerPlugin" , &LlClass::registerPlugin)
3841 .function(" getPluginInfo" , &LlClass::getPluginInfo)
42+ .function(" getCurrentPluginInfo" , &LlClass::getCurrentPluginInfo)
3943 .function(" checkVersion" , &LlClass::requireVersion)
4044 .function(" onUnload" , &LlClass::onUnload)
4145
@@ -169,6 +173,13 @@ Local<Value> LlClass::getVersionStatus() {
169173 }
170174}
171175
176+ Local<Value> LlClass::getPluginsRoot () {
177+ try {
178+ return String::newString (ll::mod::getModsRoot ().u8string ());
179+ }
180+ CATCH (" Fail in getPluginsRoot" )
181+ }
182+
172183Local<Value> LlClass::registerPlugin (const Arguments& args) {
173184 if (args.size () == 0 ) {
174185 return Boolean::newBoolean (true );
@@ -313,6 +324,41 @@ Local<Value> LlClass::getPluginInfo(const Arguments& args) {
313324 }
314325 CATCH (" Fail in getPluginInfo" );
315326}
327+
328+ Local<Value> LlClass::getCurrentPluginInfo (const Arguments& args) {
329+ try {
330+ auto plugin = getEngineOwnData ()->plugin ;
331+ if (plugin) {
332+ auto result = Object::newObject ();
333+
334+ result.set (" name" , plugin->getManifest ().name );
335+ if (plugin->getManifest ().description .has_value ()) {
336+ result.set (" desc" , plugin->getManifest ().description .value ());
337+ }
338+
339+ auto ver = Array::newArray ();
340+ ver.add (Number::newNumber (plugin->getManifest ().version ->major ));
341+ ver.add (Number::newNumber (plugin->getManifest ().version ->minor ));
342+ ver.add (Number::newNumber (plugin->getManifest ().version ->patch ));
343+
344+ result.set (" version" , ver);
345+ result.set (" versionStr" , plugin->getManifest ().version ->to_string ());
346+ result.set (" filePath" , plugin->getManifest ().entry );
347+ if (plugin->getManifest ().extraInfo .has_value ()) {
348+ auto others = Object::newObject ();
349+ for (const auto & [k, v] : plugin->getManifest ().extraInfo .value ()) {
350+ others.set (k, v);
351+ }
352+ result.set (" others" , others);
353+ }
354+
355+ return result;
356+ }
357+ return {};
358+ }
359+ CATCH (" Fail in getCurrentPluginInfo" );
360+ }
361+
316362Local<Value> LlClass::versionString (const Arguments&) {
317363 try {
318364 auto & ver = lse::LegacyScriptEngine::getInstance ().getSelf ().getManifest ().version ;
0 commit comments