diff --git a/SDK-GMLIB b/SDK-GMLIB index 7206bf0..710cc6e 160000 --- a/SDK-GMLIB +++ b/SDK-GMLIB @@ -1 +1 @@ -Subproject commit 7206bf0c108cb469a5239769604c385150e592e0 +Subproject commit 710cc6e4c3b0e85fd793fba807d8fffd6c4b607f diff --git a/src/CompatibilityApi.cpp b/src/CompatibilityApi.cpp index 73b5a0f..bbf8cd5 100644 --- a/src/CompatibilityApi.cpp +++ b/src/CompatibilityApi.cpp @@ -78,10 +78,10 @@ void Export_Compatibility_API() { return GMLIB_Player::deletePlayerNbt(uid); }); RemoteCall::exportAs("GMLIB_API", "getAllExperiments", []() -> std::vector { - auto map = GMLIB_Level::getAllExperiments(); + auto list = GMLIB_Level::getAllExperiments(); std::vector result; - for (auto& key : map) { - result.push_back(key.first); + for (auto& key : list) { + result.push_back((int)key); } return result; }); @@ -96,65 +96,59 @@ void Export_Compatibility_API() { "GMLIB_API", "createFloatingText", [](std::pair pos, std::string const& text, bool papi) -> int { - auto ft = new GMLIB::Server::StaticFloatingText(text, pos.first, pos.second, papi); + auto ft = std::make_shared(text, pos.first, pos.second, papi); + GMLIB::Server::FloatingTextManager::getInstance().add(ft); return ft->getRuntimeID(); } ); RemoteCall::exportAs("GMLIB_API", "setFloatingTextData", [](int id, std::string const& text) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { ft->setText(text); return true; } return false; }); RemoteCall::exportAs("GMLIB_API", "deleteFloatingText", [](int id) -> bool { - return GMLIB::Server::FloatingText::deleteFloatingText(id); + return GMLIB::Server::FloatingTextManager::getInstance().remove(id); }); RemoteCall::exportAs("GMLIB_API", "sendFloatingTextToPlayer", [](int id, Player* pl) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { - ft->sendToClient(*pl); + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { + ft->sendTo(*pl); return true; } return false; }); RemoteCall::exportAs("GMLIB_API", "sendFloatingText", [](int id) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { - ft->sendToAllClients(); + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { + ft->sendToClients(); return true; } return false; }); RemoteCall::exportAs("GMLIB_API", "removeFloatingTextFromPlayer", [](int id, Player* pl) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { - ft->removeFromClient(*pl); + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { + ft->removeFrom(*pl); return true; } return false; }); RemoteCall::exportAs("GMLIB_API", "removeFloatingText", [](int id) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { - ft->removeFromAllClients(); + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { + ft->removeFromClients(); return true; } return false; }); RemoteCall::exportAs("GMLIB_API", "updateClientFloatingTextData", [](int id, Player* pl) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { - ft->updateClient(*pl); + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { + ft->update(*pl); return true; } return false; }); RemoteCall::exportAs("GMLIB_API", "updateAllClientsFloatingTextData", [](int id) -> bool { - auto ft = GMLIB::Server::FloatingText::getFloatingText(id); - if (ft) { - ft->updateAllClients(); + if (auto ft = GMLIB::Server::FloatingTextManager::getInstance().getFloatingText(id)) { + ft->updateClients(); return true; } return false; diff --git a/src/LegacyModApi.cpp b/src/LegacyModApi.cpp index 68e5443..b9b41dd 100644 --- a/src/LegacyModApi.cpp +++ b/src/LegacyModApi.cpp @@ -162,35 +162,35 @@ void Export_Legacy_GMLib_ModAPI() { }); // 实验性 RemoteCall::exportAs("GMLib_ModAPI", "registerExperimentsRequire", [](int experiment_id) -> void { - auto map = GMLIB_Level::getAllExperiments(); - if (map.count(experiment_id)) { + auto list = GMLIB_Level::getAllExperiments(); + std::unordered_set set(list.begin(), list.end()); + if (set.contains((AllExperiments)experiment_id)) { GMLIB_Level::addExperimentsRequire((AllExperiments)experiment_id); } else { ll::Logger("Server").error("Experiment ID '{}' does not exist!", experiment_id); } }); RemoteCall::exportAs("GMLib_ModAPI", "setExperimentEnabled", [](int experiment_id, bool value) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; + if (GMLIB_Level::getInstance()) { + auto list = GMLIB_Level::getAllExperiments(); + std::unordered_set set(list.begin(), list.end()); + if (set.contains((AllExperiments)experiment_id)) { + GMLIB_Level::getInstance()->setExperimentEnabled(((AllExperiments)experiment_id), value); + } else ll::Logger("Server").error("Experiment ID '{}' does not exist!", experiment_id); } - auto map = GMLIB_Level::getAllExperiments(); - if (map.count(experiment_id)) { - GMLIB_Level::getInstance()->setExperimentEnabled(((AllExperiments)experiment_id), value); - } else ll::Logger("Server").error("Experiment ID '{}' does not exist!", experiment_id); }); RemoteCall::exportAs("GMLib_ModAPI", "getExperimentEnabled", [](int experiment_id) -> bool { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return false; - } - auto map = GMLIB_Level::getAllExperiments(); - if (map.count(experiment_id)) { - return GMLIB_Level::getInstance()->getExperimentEnabled(((AllExperiments)experiment_id)); - } else { - ll::Logger("Server").error("Experiment ID '{}' does not exist!", experiment_id); - return false; + if (GMLIB_Level::getInstance()) { + auto list = GMLIB_Level::getAllExperiments(); + std::unordered_set set(list.begin(), list.end()); + if (set.contains((AllExperiments)experiment_id)) { + return GMLIB_Level::getInstance()->getExperimentEnabled(((AllExperiments)experiment_id)); + } else { + ll::Logger("Server").error("Experiment ID '{}' does not exist!", experiment_id); + return false; + } } + return false; }); RemoteCall::exportAs("GMLib_ModAPI", "setFixI18nEnabled", []() -> void { GMLIB::Mod::VanillaFix::setFixI18nEnabled(); diff --git a/src/LegacyServerApi.cpp b/src/LegacyServerApi.cpp index e6b410e..d829004 100644 --- a/src/LegacyServerApi.cpp +++ b/src/LegacyServerApi.cpp @@ -17,18 +17,21 @@ void Export_Legacy_GMLib_ServerAPI() { GMLIB_Level::requireServerResourcePackAndAllowClientResourcePack(); }); RemoteCall::exportAs("GMLib_ServerAPI", "getLevelName", []() -> std::string { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return ""; + if (auto level = GMLIB_Level::getInstance()) { + return level->getLevelName(); } - return level->getLevelName(); + return {}; }); RemoteCall::exportAs("GMLib_ServerAPI", "setLevelName", [](std::string const& name) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; + if (auto level = GMLIB_Level::getInstance()) { + level->setLevelName(name); } - return level->setLevelName(name); + }); + RemoteCall::exportAs("GMLib_ServerAPI", "getLevelSeed", []() -> std::string { + if (auto level = GMLIB_Level::getInstance()) { + return std::to_string(level->getSeed()); + } + return {}; }); RemoteCall::exportAs("GMLib_ServerAPI", "setFakeSeed", [](int64_t seed) -> void { return GMLIB_Level::setFakeSeed(seed); @@ -53,7 +56,7 @@ void Export_Legacy_GMLib_ServerAPI() { "throwEntity", [](Actor* owner, Actor* actor, float speed, float offset) -> bool { auto ac = (GMLIB_Actor*)owner; - return ac->throwEntity(actor, speed, offset); + return ac->throwEntity(*actor, speed, offset); } ); RemoteCall::exportAs("GMLib_ServerAPI", "PlayerToEntity", [](Player* player) -> Actor* { return (Actor*)player; }); diff --git a/src/PlaceholderApi.cpp b/src/PlaceholderApi.cpp index 75be10a..52519e6 100644 --- a/src/PlaceholderApi.cpp +++ b/src/PlaceholderApi.cpp @@ -106,7 +106,7 @@ std::string translateStringWithPlayer(std::string const& str, Player* 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); } +bool unRegisterPlaceholder(std::string const& str) { return GMLIB::Server::PlaceholderAPI::unregisterPlaceholder(str); } std::vector getAllPAPI() { return GMLIB::Server::PlaceholderAPI::getAllPAPI(); }