From fab1ec31fc6d50ac2c1e18b98fb7fda4f6d816d1 Mon Sep 17 00:00:00 2001 From: Tsubasa6848 Date: Sun, 3 Mar 2024 02:52:16 +0800 Subject: [PATCH] fix: fix PlaceholderAPI --- lib/BEPlaceholderAPI-JS.js | 48 ++++++++------ src/PlaceholderApi.cpp | 130 ++++++++++++++----------------------- 2 files changed, 75 insertions(+), 103 deletions(-) diff --git a/lib/BEPlaceholderAPI-JS.js b/lib/BEPlaceholderAPI-JS.js index 91814db..45284e6 100644 --- a/lib/BEPlaceholderAPI-JS.js +++ b/lib/BEPlaceholderAPI-JS.js @@ -1,11 +1,14 @@ -const PAPIgetValueAPI = ll.import("BEPlaceholderAPI", "GetValue") -const PAPIgetValueByPlayerAPI = ll.import("BEPlaceholderAPI", "GetValueWithPlayer") -const PAPIregisterPlayerPlaceholderAPI = ll.import("BEPlaceholderAPI", "registerPlayerPlaceholder") -const PAPIregisterServerPlaceholderAPI = ll.import("BEPlaceholderAPI", "registerServerPlaceholder") -const PAPIregisterStaticPlaceholderAPI = ll.import("BEPlaceholderAPI", "registerStaticPlaceholder") -const PAPItranslateStringAPI = ll.import("BEPlaceholderAPI", "translateString") -const PAPIunRegisterPlaceholderAPI = ll.import("BEPlaceholderAPI", "unRegisterPlaceholder") -const PAPIgetAllPAPI = ll.import("BEPlaceholderAPI", "getAllPAPI") +const PlaceholderAPI = { + getValueAPI: ll.import("BEPlaceholderAPI", "GetValue"), + getValueByPlayerAPI: ll.import("BEPlaceholderAPI", "GetValueWithPlayer"), + registerPlayerPlaceholderAPI: ll.import("BEPlaceholderAPI", "registerPlayerPlaceholder"), + registerServerPlaceholderAPI: ll.import("BEPlaceholderAPI", "registerServerPlaceholder"), + registerStaticPlaceholderAPI: ll.import("BEPlaceholderAPI", "registerStaticPlaceholder"), + translateStringAPI: ll.import("BEPlaceholderAPI", "translateString"), + translateStringWithPlayerAPI: ll.import("BEPlaceholderAPI", "translateStringWithPlayer"), + unRegisterPlaceholderAPI: ll.import("BEPlaceholderAPI", "unRegisterPlaceholder"), + getAllPAPI: ll.import("BEPlaceholderAPI", "getAllPAPI") +} Function.prototype.getName = function () { return this.name || this.toString().match(/function\s*([^(]*)\(/)[1] @@ -17,38 +20,41 @@ class PAPI { } static registerPlayerPlaceholder(func, PluginName, PAPIName) { - ll.export(func, PluginName, func.getName()) - PAPIregisterPlayerPlaceholderAPI(PluginName, func.getName(), PAPIName) + ll.export(func, PluginName, func.getName()); + PlaceholderAPI.registerPlayerPlaceholderAPI(PluginName, func.getName(), PAPIName); } static registerServerPlaceholder(func, PluginName, PAPIName) { - ll.export(func, PluginName, func.getName()) - PAPIregisterServerPlaceholderAPI(PluginName, func.getName(), PAPIName) + ll.export(func, PluginName, func.getName()); + PlaceholderAPI.registerServerPlaceholderAPI(PluginName, func.getName(), PAPIName); } static registerStaticPlaceholder(func, PluginName, PAPIName, UpdateInterval = 50) { - ll.export(func, PluginName, func.getName()) - PAPIregisterStaticPlaceholderAPI(PluginName, func.getName(), PAPIName, UpdateInterval) + ll.export(func, PluginName, func.getName()); + PlaceholderAPI.registerStaticPlaceholderAPI(PluginName, func.getName(), PAPIName, UpdateInterval); } static getValue(key) { - return PAPIgetValueAPI(key) + return PlaceholderAPI.getValueAPI(key); } - static getValueByPlayer(key, xuid) { - return PAPIgetValueByPlayerAPI(key, xuid) + static getValueByPlayer(key, pl) { + return PlaceholderAPI.getValueByPlayerAPI(key, pl); } - static translateString(str, xuid = "") { - return PAPItranslateStringAPI(str, xuid) + static translateString(str, pl = null) { + if (pl) { + return PlaceholderAPI.translateStringWithPlayerAPI(str, pl); + } + return PlaceholderAPI.translateStringAPI(str); } static unRegisterPlaceholder(str) { - return PAPIunRegisterPlaceholderAPI(str) + return PlaceholderAPI.unRegisterPlaceholderAPI(str); } static getAllPAPI() { - return PAPIgetAllPAPI(); + return PlaceholderAPI.getAllPAPI(); } } diff --git a/src/PlaceholderApi.cpp b/src/PlaceholderApi.cpp index 6e8a3a7..79b418a 100644 --- a/src/PlaceholderApi.cpp +++ b/src/PlaceholderApi.cpp @@ -3,114 +3,79 @@ namespace PAPIRemoteCall { -std::string removeBrackets(std::string a1) { - a1.erase(a1.find_last_not_of("%") + 1); - return a1; -} - -bool isParameters(std::string str) { - std::regex reg("[<]([^<>]+)[>]"); - return std::regex_search(removeBrackets(str), reg); -} - std::string GetValue(std::string const& from) { return GMLIB::Server::PlaceholderAPI::getValue(from); } std::string GetValueWithPlayer(std::string const& a1, std::string const& a2) { return GMLIB::Server::PlaceholderAPI::getValue(a1, ll::service::bedrock::getLevel()->getPlayer(a2)); } -std::string -registerPlayerPlaceholder(std::string const& PluginName, std::string const& FuncName, std::string const& PAPIName) { +bool registerPlayerPlaceholder( + std::string const& PluginName, + std::string const& FuncName, + std::string const& PAPIName +) { if (RemoteCall::hasFunc(PluginName, FuncName)) { - if (isParameters(PAPIName)) { - auto Call = - RemoteCall::importAs)>( - PluginName, - FuncName - ); - GMLIB::Server::PlaceholderAPI::registerPlayerPlaceholder( - PAPIName, - [Call](Player* sp, std::unordered_map map) { - return Call(sp->getXuid(), map); - }, - PluginName - ); - } else { - auto Call = RemoteCall::importAs(PluginName, FuncName); - GMLIB::Server::PlaceholderAPI::registerPlayerPlaceholder( - PAPIName, - [Call](Player* sp) { return Call(sp->getXuid()); }, - PluginName - ); - } - } else { - // logger.error("Function no find({}:{})", PluginName, FuncName); - return "Function no find"; + auto Call = RemoteCall::importAs(PluginName, FuncName); + GMLIB::Server::PlaceholderAPI::registerPlayerPlaceholder( + PAPIName, + [Call](Player* sp) { return Call(sp); }, + PluginName + ); + return true; } - return "Register Success"; + return false; } -std::string -registerServerPlaceholder(std::string const& PluginName, std::string const& FuncName, std::string const& PAPIName) { +bool registerServerPlaceholder( + std::string const& PluginName, + std::string const& FuncName, + std::string const& PAPIName +) { if (RemoteCall::hasFunc(PluginName, FuncName)) { - if (isParameters(PAPIName)) { - auto Call = - RemoteCall::importAs)>(PluginName, FuncName); - GMLIB::Server::PlaceholderAPI::registerServerPlaceholder( - PAPIName, - [Call](std::unordered_map map) { return Call(map); }, - PluginName - ); - } else { - auto Call = RemoteCall::importAs(PluginName, FuncName); - GMLIB::Server::PlaceholderAPI::registerServerPlaceholder( - PAPIName, - [Call]() { return Call(); }, - PluginName - ); - } - } else { - // logger.error("Function no find({}:{})", PluginName, FuncName); - return "Function no find"; + auto Call = RemoteCall::importAs(PluginName, FuncName); + GMLIB::Server::PlaceholderAPI::registerServerPlaceholder( + PAPIName, + [Call]() { return Call(); }, + PluginName + ); + return true; } - return "Register Success"; + return false; } -std::string registerStaticPlaceholder( +bool registerStaticPlaceholder( std::string const& PluginName, std::string const& FuncName, std::string const& PAPIName, int num ) { if (RemoteCall::hasFunc(PluginName, FuncName)) { - if (isParameters(PAPIName)) { - auto Call = RemoteCall::importAs(PluginName, FuncName); - if (num == -1) { - GMLIB::Server::PlaceholderAPI::registerStaticPlaceholder( - PAPIName, - [Call] { return Call(); }, - PluginName - ); - } else { - GMLIB::Server::PlaceholderAPI::registerStaticPlaceholder( - PAPIName, - num, - [Call] { return Call(); }, - PluginName - ); - } + auto Call = RemoteCall::importAs(PluginName, FuncName); + if (num == -1) { + GMLIB::Server::PlaceholderAPI::registerStaticPlaceholder( + PAPIName, + [Call] { return Call(); }, + PluginName + ); + } else { + GMLIB::Server::PlaceholderAPI::registerStaticPlaceholder( + PAPIName, + num, + [Call] { return Call(); }, + PluginName + ); } - } else { - // logger.error("Function no find({}:{})", PluginName, FuncName); - return "Function no find"; + return true; } - return "Register Success"; + return false; } -std::string translateString(std::string const& str, std::string const& xuid) { - return GMLIB::Server::PlaceholderAPI::translateString(str, ll::service::bedrock::getLevel()->getPlayerByXuid(xuid)); +std::string translateStringWithPlayer(std::string const& str, Player* pl) { + return GMLIB::Server::PlaceholderAPI::translateString(str, pl); } +std::string translateString(std::string const& str) { return GMLIB::Server::PlaceholderAPI::translateString(str); } + bool unRegisterPlaceholder(std::string const& str) { return GMLIB::Server::PlaceholderAPI::unRegisterPlaceholder(str); } std::vector getAllPAPI() { return GMLIB::Server::PlaceholderAPI::getAllPAPI(); } @@ -127,6 +92,7 @@ void ExportPAPI() { EXPORTAPI(PAPIRemoteCall::GetValue); EXPORTAPI(PAPIRemoteCall::GetValueWithPlayer); EXPORTAPI(PAPIRemoteCall::translateString); + EXPORTAPI(PAPIRemoteCall::translateStringWithPlayer); EXPORTAPI(PAPIRemoteCall::unRegisterPlaceholder); EXPORTAPI(PAPIRemoteCall::getAllPAPI); } \ No newline at end of file