Skip to content

Commit

Permalink
feat: add load plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
futrime committed Jan 29, 2024
1 parent b221e9d commit d06401d
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 52 deletions.
24 changes: 13 additions & 11 deletions src/legacy/api/BlockAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,17 +324,19 @@ Local<Value> BlockClass::setNbt(const Arguments& args) {
}

Local<Value> BlockClass::getBlockState(const Arguments& args) {
try {
auto list = block->getSerializationId();
try {
return Tag2Value((Tag*)list.get("states"), true);
} catch (...) {
return Array::newArray();
}
} catch (const std::out_of_range& e) {
return Object::newObject();
}
CATCH("Fail in getBlockState!")
return Local<Value>();
// TODO
// try {
// auto list = block->getSerializationId();
// try {
// return Tag2Value((Tag*)list.get("states"), true);
// } catch (...) {
// return Array::newArray();
// }
// } catch (const std::out_of_range& e) {
// return Object::newObject();
// }
// CATCH("Fail in getBlockState!")
}

Local<Value> BlockClass::hasContainer(const Arguments& args) {
Expand Down
7 changes: 4 additions & 3 deletions src/legacy/api/EntityAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1358,9 +1358,10 @@ Local<Value> EntityClass::getAllTags(const Arguments& args) {
Local<Array> arr = Array::newArray();
CompoundTag tag = CompoundTag();
entity->save(tag);
tag.getList("tags")->forEachCompoundTag([&arr](const CompoundTag& tag) {
arr.add(String::newString(tag.toString()));
});
// TODO
// tag.getList("tags")->forEachCompoundTag([&arr](const CompoundTag& tag) {
// arr.add(String::newString(tag.toString()));
// });
return arr;
}
CATCH("Fail in getAllTags!");
Expand Down
16 changes: 15 additions & 1 deletion src/legacy/main/Configs.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
#pragma once

#include "lse/Macros.h"
#ifndef LEGACY_SCRIPT_ENGINE_BACKEND

#error "LEGACY_SCRIPT_ENGINE_BACKEND is not defined!"

#endif

#if LEGACY_SCRIPT_ENGINE_BACKEND == lua

#define LLSE_BACKEND_LUA

#elif LEGACY_SCRIPT_ENGINE_BACKEND == quickjs

#define LLSE_BACKEND_QUICKJS

#endif

///////////////////////// Configs /////////////////////////

Expand Down
34 changes: 14 additions & 20 deletions src/lse/Entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,34 +43,28 @@ auto loadBaseLib() -> bool;
auto load(ll::plugin::NativePlugin& self) -> bool {
auto& logger = self.getLogger();

try {
logger.info("loading...");
logger.info("loading...");

selfPluginInstance = std::make_unique<std::reference_wrapper<ll::plugin::NativePlugin>>(self);
selfPluginInstance = std::make_unique<std::reference_wrapper<ll::plugin::NativePlugin>>(self);

ll::i18n::load(self.getLangDir());
ll::i18n::load(self.getLangDir());

InitLocalShareData();
InitGlobalShareData();
InitSafeGuardRecord();
EconomySystem::init();
InitLocalShareData();
InitGlobalShareData();
InitSafeGuardRecord();
EconomySystem::init();

loadBaseLib();
loadBaseLib();

// TODO: Load main
// TODO: Load main

LoadDebugEngine();
LoadDebugEngine();

InitBasicEventListeners();
InitMessageSystem();
MoreGlobal::Init();
InitBasicEventListeners();
InitMessageSystem();
MoreGlobal::Init();

return true;

} catch (std::exception& err) {
logger.error("failed to load: {}", err.what());
return false;
}
return true;
}

auto loadBaseLib(ll::plugin::NativePlugin& self) -> bool {
Expand Down
17 changes: 0 additions & 17 deletions src/lse/Macros.h

This file was deleted.

54 changes: 54 additions & 0 deletions src/lse/PluginManager.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#include "PluginManager.h"

#include "ll/api/plugin/Plugin.h"
#include "lse/Entry.h"
#include "main/PluginManager.h"

#include <ll/api/plugin/PluginManager.h>

#if LEGACY_SCRIPT_ENGINE_BACKEND == lua

constexpr auto PluginManagerName = "lse-lua";

#elif LEGACY_SCRIPT_ENGINE_BACKEND == quickjs

constexpr auto PluginManagerName = "lse-quickjs";

#else

#error "LEGACY_SCRIPT_ENGINE_BACKEND is not defined!"

#endif

namespace lse {

PluginManager::PluginManager() : ll::plugin::PluginManager(PluginManagerName) {}

auto PluginManager::load(ll::plugin::Manifest manifest) -> bool {
auto& logger = getSelfPluginInstance().getLogger();

logger.info("loading plugin {}", manifest.name);

if (hasPlugin(manifest.name)) {
logger.error("plugin {} already loaded", manifest.name);
return false;
}

auto pluginDir = std::filesystem::canonical(ll::plugin::getPluginsRoot() / manifest.name);

auto entryPath = pluginDir / manifest.entry;

return ::PluginManager::loadPlugin(entryPath.string(), false, true);
}

auto PluginManager::unload(std::string_view name) -> bool {
auto& logger = getSelfPluginInstance().getLogger();

logger.info("unloading plugin {}", name);

// TODO: Unload plugin

return false;
}

} // namespace lse
24 changes: 24 additions & 0 deletions src/lse/PluginManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once

#include <ll/api/plugin/Manifest.h>
#include <ll/api/plugin/PluginManager.h>
#include <string_view>

namespace lse {

class PluginManager final : public ll::plugin::PluginManager {
public:
PluginManager();

PluginManager(const PluginManager&) = delete;
PluginManager(PluginManager&&) = delete;
auto operator=(const PluginManager&) -> PluginManager& = delete;
auto operator=(PluginManager&&) -> PluginManager& = delete;

~PluginManager() override = default;

auto load(ll::plugin::Manifest manifest) -> bool override;
auto unload(std::string_view name) -> bool override;
};

} // namespace lse

0 comments on commit d06401d

Please sign in to comment.