diff --git a/lib/FormAPI-JS.js b/lib/FormAPI-JS.js index d51bfbe..0b8b9d4 100644 --- a/lib/FormAPI-JS.js +++ b/lib/FormAPI-JS.js @@ -1,4 +1,4 @@ -const getNextCallbackId = ll.import("GMLIB_FormAPI", "getNextFormCallbackId"); +// const getNextCallbackId = ll.import("GMLIB_FormAPI", "getNextFormCallbackId"); class ServerSettingForm { static getDefaultPriority() { diff --git a/lib/GMLIB_API-JS.d.ts b/lib/GMLIB_API-JS.d.ts index 305cd76..eece4f8 100644 --- a/lib/GMLIB_API-JS.d.ts +++ b/lib/GMLIB_API-JS.d.ts @@ -1364,7 +1364,7 @@ interface Player { /** (GMLIB)获取玩家的rumtimeId */ getRuntimeId(): number; - /** (GMLIB)获取玩家饱食度 */ + /** (GMLIB)获取玩家饥饿值 */ getHungry(): number; /** (GMLIB)获取玩家盔甲覆盖百分比 */ diff --git a/lib/GMLIB_API-JS.js b/lib/GMLIB_API-JS.js index 46a5d05..1a34e4c 100644 --- a/lib/GMLIB_API-JS.js +++ b/lib/GMLIB_API-JS.js @@ -316,7 +316,7 @@ const GMLIB_API = { getItemCanPlaceOn: ll.import("GMLIB_API", "getItemCanPlaceOn"), /** 设置物品冒险模式下能放置在什么方块上 @type {function(Item,Array.):void} */ setItemCanPlaceOn: ll.import("GMLIB_API", "setItemCanPlaceOn"), - /** 获取玩家饱食度 @type {function(Player):number} */ + /** 获取玩家饥饿值 @type {function(Player):number} */ getPlayerHungry: ll.import("GMLIB_API", "getPlayerHungry"), /** 获取玩家盔甲覆盖百分比 @type {function(Player):number} */ getPlayerArmorCoverPercentage: ll.import("GMLIB_API", "getPlayerArmorCoverPercentage"), @@ -2938,7 +2938,7 @@ LLSE_Item.prototype.setCanPlaceOn = LLSE_Player.prototype.getHungry = /** - * 获取玩家饱食度 + * 获取玩家饥饿值 * @returns {number} */ function () { diff --git a/src/BinaryStreamApi.cpp b/src/BinaryStreamApi.cpp index 7eb6e95..5309fed 100644 --- a/src/BinaryStreamApi.cpp +++ b/src/BinaryStreamApi.cpp @@ -4,16 +4,16 @@ using namespace ll::hash_utils; class LegacyScriptBinaryStreamManager { private: int64 mNextBinaryStreamId = 0; - std::unordered_map> mBinaryStream; + std::unordered_map> mBinaryStream; public: uint getNextId() { return mNextBinaryStreamId++; } - void cretateBinaryStream(uint id) { mBinaryStream[id] = std::make_shared(); } + void cretateBinaryStream(uint id) { mBinaryStream[id] = std::make_shared(); } void removeBinaryStream(uint64 id) { mBinaryStream.erase(id); } - std::shared_ptr getBinaryStream(uint64 id) { + std::shared_ptr getBinaryStream(uint64 id) { return mBinaryStream.contains(id) ? mBinaryStream.at(id) : nullptr; } @@ -38,7 +38,7 @@ template struct Info { using ArgT = A; }; -#define EXPORTAPI2(T) EXPORTAPI(#T, Info::ArgT, bs->T(value)) +#define EXPORTAPI2(T) EXPORTAPI(#T, Info::ArgT, bs->T(value)) void Export_BinaryStream_API() { RemoteCall::exportAs("GMLIB_BinaryStream_API", "create", []() -> uint64 { diff --git a/src/CompatibilityApi.cpp b/src/CompatibilityApi.cpp index 39058cf..ebf5bdf 100644 --- a/src/CompatibilityApi.cpp +++ b/src/CompatibilityApi.cpp @@ -7,80 +7,69 @@ bool isInteger(const std::string& str) { } ActorUniqueID parseScriptUniqueID(std::string const& uniqueId) { - if (!isInteger(uniqueId)) { - return ActorUniqueID::INVALID_ID; - } - return ActorUniqueID(std::stoll(uniqueId)); + return isInteger(uniqueId) ? ActorUniqueID(std::stoll(uniqueId)) : ActorUniqueID::INVALID_ID; } void Export_Compatibility_API() { RemoteCall::exportAs("GMLIB_API", "unregisterRecipe", [](std::string const& id) -> bool { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return false; - } - return CustomRecipe::unregisterRecipe(id); + return gmlib::world::Level::getInstance().has_value() ? gmlib::mod::recipe::RecipeRegistry::unregisterRecipe(id) : false; }); RemoteCall::exportAs("GMLIB_API", "setCustomPackPath", [](std::string const& path) -> void { - CustomPacks::addCustomPackPath(path); + gmlib::tools::AddonsLoader::addCustomPackPath(path); }); - RemoteCall::exportAs("GMLIB_API", "getServerMspt", []() -> float { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return 0.0f; - } - return level->getServerMspt(); + RemoteCall::exportAs("GMLIB_API", "getServerMspt", []() -> double { + return gmlib::world::Level::getInstance() + .transform([](gmlib::world::Level& level) -> double { return level.getServerMspt(); }) + .value_or(0.0); }); RemoteCall::exportAs("GMLIB_API", "getServerCurrentTps", []() -> float { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return 0.0f; - } - return level->getServerCurrentTps(); + return gmlib::world::Level::getInstance() + .transform([](gmlib::world::Level& level) -> float { return level.getServerCurrentTps(); }) + .value_or(0.0); }); - RemoteCall::exportAs("GMLIB_API", "getServerAverageTps", []() -> float { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return 0.0f; - } - return level->getServerAverageTps(); + RemoteCall::exportAs("GMLIB_API", "getServerAverageTps", []() -> double { + return gmlib::world::Level::getInstance() + .transform([](gmlib::world::Level& level) -> double { return level.getServerAverageTps(); }) + .value_or(0.0); }); RemoteCall::exportAs("GMLIB_API", "getAllPlayerUuids", []() -> std::vector { std::vector result; - std::vector uuids = GMLIB_Player::getAllUuids(); - for (auto& uuid : uuids) { + for (auto& uuid : gmlib::world::Player::getAllUuids()) { result.push_back(uuid.asString()); } return result; }); RemoteCall::exportAs("GMLIB_API", "getPlayerNbt", [](std::string const& uuid) -> std::unique_ptr { - auto uid = mce::UUID::fromString(uuid); - return std::move(GMLIB_Player::getPlayerNbt(uid)); + return std::move(gmlib::world::Player::getPlayerNbt(mce::UUID::fromString(uuid))); }); RemoteCall::exportAs( "GMLIB_API", "setPlayerNbt", [](std::string const& uuid, CompoundTag* nbt, bool forceCreate) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::setPlayerNbt(uid, *nbt, forceCreate); + return gmlib::world::Player::setPlayerNbt( + mce::UUID::fromString(uuid), + (gmlib::world::CompoundTag&)*nbt, + forceCreate + ); } ); RemoteCall::exportAs( "GMLIB_API", "setPlayerNbtTags", [](std::string const& uuid, CompoundTag* nbt, std::vector tags) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::setPlayerNbtTags(uid, *nbt, tags); + return gmlib::world::Player::setPlayerNbtTags( + mce::UUID::fromString(uuid), + (gmlib::world::CompoundTag&)*nbt, + tags + ); } ); RemoteCall::exportAs("GMLIB_API", "deletePlayerNbt", [](std::string const& uuid) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::deletePlayerNbt(uid); + return gmlib::world::Player::deletePlayerNbt(mce::UUID::fromString(uuid)); }); RemoteCall::exportAs("GMLIB_API", "getAllExperiments", []() -> std::vector { - auto list = GMLIB_Level::getAllExperiments(); std::vector result; - for (auto& key : list) { + for (auto& key : gmlib::world::Level::getAllExperiments()) { result.push_back((int)key); } return result; @@ -96,104 +85,113 @@ void Export_Compatibility_API() { "GMLIB_API", "createFloatingText", [](std::pair pos, std::string const& text, bool papi) -> int { - auto& manager = FloatingTextManager::getInstance(); - auto ft = manager.createStatic(text, pos.first, pos.second, papi); - manager.add(ft); + auto ft = gmlib::tools::FloatingTextManager::createStatic(text, pos.first, pos.second, papi); + gmlib::tools::FloatingTextManager::getInstance().add(ft); return ft->getRuntimeID(); } ); RemoteCall::exportAs("GMLIB_API", "setFloatingTextData", [](int id, std::string const& text) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->setText(text); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([&text](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.setText(text); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "deleteFloatingText", [](int id) -> bool { - return FloatingTextManager::getInstance().remove(id); + return gmlib::tools::FloatingTextManager::getInstance().remove(id); }); RemoteCall::exportAs("GMLIB_API", "sendFloatingTextToPlayer", [](int id, Player* pl) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->sendTo(*pl); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([&pl](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.sendTo(*pl); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "sendFloatingText", [](int id) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->sendToClients(); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.sendToClients(); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "removeFloatingTextFromPlayer", [](int id, Player* pl) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->removeFrom(*pl); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([&pl](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.removeFrom(*pl); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "removeFloatingText", [](int id) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->removeFromClients(); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.removeFromClients(); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "updateClientFloatingTextData", [](int id, Player* pl) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->update(*pl); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([&pl](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.update(*pl); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "updateAllClientsFloatingTextData", [](int id) -> bool { - if (auto ft = FloatingTextManager::getInstance().getFloatingText(id)) { - ft->updateClients(); - return true; - } - return false; + return gmlib::tools::FloatingTextManager::getInstance() + .getFloatingText(id) + .transform([](gmlib::tools::FloatingTextBase& ft) -> bool { + ft.updateClients(); + return true; + }) + .has_value(); }); RemoteCall::exportAs("GMLIB_API", "isVersionMatched", [](int a, int b, int c) -> bool { - auto version = Version(a, b, c, "", ""); - return LIB_VERSION >= version; + return LIB_VERSION >= gmlib::Version(a, b, c, "", ""); }); RemoteCall::exportAs("GMLIB_API", "getVersion_LRCA", []() -> std::string { return LIB_VERSION.asString(); }); RemoteCall::exportAs("GMLIB_API", "getVersion_GMLIB", []() -> std::string { - return Version::getLibVersionString(); + return gmlib::Version::getLibVersionString(); }); RemoteCall::exportAs( "GMLIB_API", "resourcePackDefaultTranslate", - [](std::string const& key, std::vector params) -> std::string { return I18nAPI::get(key, params); } + [](std::string const& key, std::vector params) -> std::string { + return gmlib::world::I18nAPI::get(key, params); + } ); RemoteCall::exportAs( "GMLIB_API", "resourcePackTranslate", [](std::string const& key, std::vector params, std::string const& code) -> std::string { - return I18nAPI::get(key, params, code); + return gmlib::world::I18nAPI::get(key, params, code); } ); RemoteCall::exportAs("GMLIB_API", "chooseResourcePackI18nLanguage", [](std::string const& code) -> void { - if (GMLIB_Level::getInstance()) { - I18nAPI::chooseLanguage(code); + if (gmlib::world::Level::getInstance()) { + gmlib::world::I18nAPI::chooseLanguage(code); } }); RemoteCall::exportAs("GMLIB_API", "getResourcePackI18nLanguage", []() -> std::string { - if (GMLIB_Level::getInstance()) { - return I18nAPI::getCurrentLanguageCode(); - } - return "unknown"; + return gmlib::world::Level::getInstance().has_value() ? gmlib::world::I18nAPI::getCurrentLanguageCode() : "unknown"; }); RemoteCall::exportAs("GMLIB_API", "getSupportedLanguages", []() -> std::vector { - if (GMLIB_Level::getInstance()) { - return I18nAPI::getSupportedLanguageCodes(); - } - return {}; + return gmlib::world::Level::getInstance() ? gmlib::world::I18nAPI::getSupportedLanguageCodes() + : std::vector(); }); RemoteCall::exportAs("GMLIB_API", "loadLanguage", [](std::string const& code, std::string const& lang) -> void { - if (GMLIB_Level::getInstance()) { - I18nAPI::loadLanguage(code, lang); + if (gmlib::world::Level::getInstance()) { + gmlib::world::I18nAPI::loadLanguage(code, lang); } }); RemoteCall::exportAs( @@ -201,281 +199,211 @@ void Export_Compatibility_API() { "updateOrCreateLanguageFile", [](std::string const& code, std::unordered_map lang, std::string const& path ) -> void { - if (GMLIB_Level::getInstance()) { - I18nAPI::updateOrCreateLanguageFile(path, code, lang); + if (gmlib::world::Level::getInstance()) { + gmlib::world::I18nAPI::updateOrCreateLanguageFile(path, code, lang); } } ); RemoteCall::exportAs("GMLIB_API", "loadLanguagePath", [](std::string const& path) -> void { - if (GMLIB_Level::getInstance()) { - I18nAPI::loadLanguagesFromDirectory(path); + if (gmlib::world::Level::getInstance()) { + gmlib::world::I18nAPI::loadLanguagesFromDirectory(path); } }); RemoteCall::exportAs("GMLIB_API", "getPlayerPosition", [](std::string const& uuid) -> std::pair { - auto uid = mce::UUID::fromString(uuid); - auto pos = GMLIB_Player::getPlayerPosition(uid); - if (pos.has_value()) { - return pos.value(); - } - return { - {0, 0, 0}, - -1 - }; + return gmlib::world::Player::getPlayerPosition(mce::UUID::fromString(uuid)) + .value_or(std::pair({0, 0, 0}, -1)); }); RemoteCall::exportAs( "GMLIB_API", "setPlayerPosition", [](std::string const& uuid, std::pair pos) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::setPlayerPosition(uid, pos.first, pos.second); + return gmlib::world::Player::setPlayerPosition(mce::UUID::fromString(uuid), pos.first, pos.second); } ); RemoteCall::exportAs("GMLIB_API", "playerHasScore", [](std::string const& uuid, std::string const& obj) -> bool { - auto uid = mce::UUID::fromString(uuid); - if (auto result = GMLIB_Player::getPlayerScore(uid, obj)) { - return true; - } - return false; + return gmlib::world::Player::getPlayerScore(mce::UUID::fromString(uuid), obj).has_value(); }); RemoteCall::exportAs("GMLIB_API", "getPlayerScore", [](std::string const& uuid, std::string const& obj) -> int { - auto uid = mce::UUID::fromString(uuid); - if (auto result = GMLIB_Player::getPlayerScore(uid, obj)) { - return result.value(); - } - return 0; + return gmlib::world::Player::getPlayerScore(mce::UUID::fromString(uuid), obj).value_or(0); }); RemoteCall::exportAs( "GMLIB_API", "addPlayerScore", [](std::string const& uuid, std::string const& obj, int value) -> bool { - auto uid = mce::UUID::fromString(uuid); - if (auto res = GMLIB_Player::setPlayerScore(uid, obj, value, PlayerScoreSetFunction::Add)) { - return true; - } - return false; + return gmlib::world::Player::setPlayerScore( + mce::UUID::fromString(uuid), + obj, + value, + PlayerScoreSetFunction::Add + ) + .has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "reducePlayerScore", [](std::string const& uuid, std::string const& obj, int value) -> bool { - auto uid = mce::UUID::fromString(uuid); - if (auto res = GMLIB_Player::setPlayerScore(uid, obj, value, PlayerScoreSetFunction::Subtract)) { - return true; - } - return false; + return gmlib::world::Player::setPlayerScore(mce::UUID::fromString(uuid), obj, value, PlayerScoreSetFunction::Subtract).has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "setPlayerScore", [](std::string const& uuid, std::string const& obj, int value) -> bool { - auto uid = mce::UUID::fromString(uuid); - if (auto res = GMLIB_Player::setPlayerScore(uid, obj, value)) { - return true; - } - return false; + return gmlib::world::Player::setPlayerScore(mce::UUID::fromString(uuid), obj, value).has_value(); } ); RemoteCall::exportAs("GMLIB_API", "resetPlayerScore", [](std::string const& uuid, std::string const& obj) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::resetPlayerScore(uid, obj); + return gmlib::world::Player::resetPlayerScore(mce::UUID::fromString(uuid), obj); }); RemoteCall::exportAs("GMLIB_API", "resetPlayerScores", [](std::string const& uuid) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::resetPlayerScore(uid); + return gmlib::world::Player::resetPlayerScore(mce::UUID::fromString(uuid)); }); RemoteCall::exportAs( "GMLIB_API", "entityHasScore", [](std::string const& uniqueId, std::string const& obj) -> bool { - auto auid = parseScriptUniqueID(uniqueId); - if (auto result = GMLIB_Scoreboard::getInstance()->getScore(obj, auid)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->getScore(obj, parseScriptUniqueID(uniqueId)).has_value(); } ); RemoteCall::exportAs("GMLIB_API", "getEntityScore", [](std::string const& uniqueId, std::string const& obj) -> int { - auto auid = parseScriptUniqueID(uniqueId); - if (auto result = GMLIB_Scoreboard::getInstance()->getScore(obj, auid)) { - return result.value(); - } - return 0; + return gmlib::world::Scoreboard::getInstance()->getScore(obj, parseScriptUniqueID(uniqueId)).value_or(0); }); RemoteCall::exportAs( "GMLIB_API", "addEntityScore", [](std::string const& uniqueId, std::string const& obj, int value) -> bool { - auto auid = parseScriptUniqueID(uniqueId); - if (auto res = GMLIB_Scoreboard::getInstance()->setScore(obj, auid, value, PlayerScoreSetFunction::Add)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance() + ->setScore(obj, parseScriptUniqueID(uniqueId), value, PlayerScoreSetFunction::Add) + .has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "reduceEntityScore", [](std::string const& uniqueId, std::string const& obj, int value) -> bool { - auto auid = parseScriptUniqueID(uniqueId); - if (auto res = - GMLIB_Scoreboard::getInstance()->setScore(obj, auid, value, PlayerScoreSetFunction::Subtract)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance() + ->setScore(obj, parseScriptUniqueID(uniqueId), value, PlayerScoreSetFunction::Subtract) + .has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "setEntityScore", [](std::string const& uniqueId, std::string const& obj, int value) -> bool { - auto auid = parseScriptUniqueID(uniqueId); - if (auto res = GMLIB_Scoreboard::getInstance()->setScore(obj, auid, value)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->setScore(obj, parseScriptUniqueID(uniqueId), value).has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "resetEntityScore", [](std::string const& uniqueId, std::string const& obj) -> bool { - auto auid = parseScriptUniqueID(uniqueId); - return GMLIB_Scoreboard::getInstance()->resetScore(obj, auid); + return gmlib::world::Scoreboard::getInstance()->resetScore(obj, parseScriptUniqueID(uniqueId)); } ); RemoteCall::exportAs("GMLIB_API", "resetEntityScores", [](std::string const& uniqueId) -> bool { - auto auid = parseScriptUniqueID(uniqueId); - return GMLIB_Scoreboard::getInstance()->resetScore(auid); + return gmlib::world::Scoreboard::getInstance()->resetScore(parseScriptUniqueID(uniqueId)); }); RemoteCall::exportAs( "GMLIB_API", "fakePlayerHasScore", [](std::string const& name, std::string const& obj) -> bool { - if (auto result = GMLIB_Scoreboard::getInstance()->getScore(obj, name)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->getScore(obj, name).has_value(); } ); RemoteCall::exportAs("GMLIB_API", "getFakePlayerScore", [](std::string const& name, std::string const& obj) -> int { - if (auto result = GMLIB_Scoreboard::getInstance()->getScore(obj, name)) { - return result.value(); - } - return 0; + return gmlib::world::Scoreboard::getInstance()->getScore(obj, name).value_or(0); }); RemoteCall::exportAs( "GMLIB_API", "addFakePlayerScore", [](std::string const& name, std::string const& obj, int value) -> bool { - if (auto res = GMLIB_Scoreboard::getInstance()->setScore(obj, name, value, PlayerScoreSetFunction::Add)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->setScore(obj, name, value, PlayerScoreSetFunction::Add).has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "reduceFakePlayerScore", [](std::string const& name, std::string const& obj, int value) -> bool { - if (auto res = - GMLIB_Scoreboard::getInstance()->setScore(obj, name, value, PlayerScoreSetFunction::Subtract)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance() + ->setScore(obj, name, value, PlayerScoreSetFunction::Subtract) + .has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "setFakePlayerScore", [](std::string const& name, std::string const& obj, int value) -> bool { - if (auto res = GMLIB_Scoreboard::getInstance()->setScore(obj, name, value)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->setScore(obj, name, value).has_value(); } ); RemoteCall::exportAs( "GMLIB_API", "resetFakePlayerScore", [](std::string const& name, std::string const& obj) -> bool { - return GMLIB_Scoreboard::getInstance()->resetScore(obj, name); + return gmlib::world::Scoreboard::getInstance()->resetScore(obj, name); } ); RemoteCall::exportAs("GMLIB_API", "resetFakePlayerScores", [](std::string const& name) -> bool { - return GMLIB_Scoreboard::getInstance()->resetScore(name); + return gmlib::world::Scoreboard::getInstance()->resetScore(name); }); RemoteCall::exportAs("GMLIB_API", "addObjective", [](std::string const& obj) -> bool { - if (auto res = GMLIB_Scoreboard::getInstance()->addObjective(obj)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->addObjective(obj).has_value(); }); RemoteCall::exportAs( "GMLIB_API", "addObjectiveWithDisplayName", [](std::string const& obj, std::string const& displayName) -> bool { - if (auto res = GMLIB_Scoreboard::getInstance()->addObjective(obj, displayName)) { - return true; - } - return false; + return gmlib::world::Scoreboard::getInstance()->addObjective(obj, displayName).has_value(); } ); RemoteCall::exportAs("GMLIB_API", "getDisplayName", [](std::string const& obj) -> std::string { - if (auto result = GMLIB_Scoreboard::getInstance()->getObjectiveDisplayName(obj)) { - return result.value(); - } - return ""; + return gmlib::world::Scoreboard::getInstance()->getObjectiveDisplayName(obj).value_or(""); }); RemoteCall::exportAs( "GMLIB_API", "setDisplayName", [](std::string const& obj, std::string const& displayName) -> bool { - return GMLIB_Scoreboard::getInstance()->setObjectiveDisplayName(obj, displayName); + return gmlib::world::Scoreboard::getInstance()->setObjectiveDisplayName(obj, displayName); } ); RemoteCall::exportAs("GMLIB_API", "removeObjective", [](std::string const& obj) -> bool { - return GMLIB_Scoreboard::getInstance()->removeObjective(obj); + return gmlib::world::Scoreboard::getInstance()->removeObjective(obj); }); RemoteCall::exportAs( "GMLIB_API", "setDisplayObjective", [](std::string const& obj, std::string const& slot, int order) -> void { - return GMLIB_Scoreboard::getInstance()->setObjectiveDisplay(obj, slot, (ObjectiveSortOrder)order); + return gmlib::world::Scoreboard::getInstance()->setObjectiveDisplay(obj, slot, (ObjectiveSortOrder)order); } ); RemoteCall::exportAs("GMLIB_API", "clearDisplayObjective", [](std::string const& slot) -> void { - return GMLIB_Scoreboard::getInstance()->clearObjectiveDisplay(slot); + return gmlib::world::Scoreboard::getInstance()->clearObjectiveDisplay(slot); }); RemoteCall::exportAs("GMLIB_API", "getAllObjectives", []() -> std::vector { - auto objs = GMLIB_Scoreboard::getInstance()->getObjectives(); std::vector result; - for (auto& obj : objs) { + for (auto& obj : gmlib::world::Scoreboard::getInstance()->getObjectives()) { result.push_back(obj->getName()); } return result; }); RemoteCall::exportAs("GMLIB_API", "getAllScoreboardPlayers", []() -> std::vector { - auto uuids = GMLIB_Scoreboard::getInstance()->getAllPlayerUuids(); std::vector result; - for (auto& uuid : uuids) { + for (auto& uuid : gmlib::world::Scoreboard::getInstance()->getAllPlayerUuids()) { result.push_back(uuid.asString()); } return result; }); RemoteCall::exportAs("GMLIB_API", "getAllScoreboardFakePlayers", []() -> std::vector { - auto names = GMLIB_Scoreboard::getInstance()->getAllFakePlayers(); std::vector result; - for (auto& name : names) { + for (auto& name : gmlib::world::Scoreboard::getInstance()->getAllFakePlayers()) { result.push_back(name); } return result; }); RemoteCall::exportAs("GMLIB_API", "getAllScoreboardEntities", []() -> std::vector { - auto uniqueIds = GMLIB_Scoreboard::getInstance()->getAllEntities(); std::vector result; - for (auto& uniqueId : uniqueIds) { + for (auto& uniqueId : gmlib::world::Scoreboard::getInstance()->getAllEntities()) { result.push_back(std::to_string(uniqueId.id)); } return result; @@ -485,26 +413,23 @@ void Export_Compatibility_API() { "getAllTrackedTargets", []() -> std::vector> { std::vector> result; - auto uuids = GMLIB_Scoreboard::getInstance()->getAllPlayerUuids(); - for (auto& uuid : uuids) { - std::unordered_map data; - data["Type"] = "Player"; - data["Uuid"] = uuid.asString(); - result.push_back(data); + for (auto& uuid : gmlib::world::Scoreboard::getInstance()->getAllPlayerUuids()) { + result.push_back({ + {"Type", "Player" }, + {"Uuid", uuid.asString()} + }); } - auto names = GMLIB_Scoreboard::getInstance()->getAllFakePlayers(); - for (auto& name : names) { - std::unordered_map data; - data["Type"] = "FakePlayer"; - data["Name"] = name; - result.push_back(data); + for (auto& name : gmlib::world::Scoreboard::getInstance()->getAllFakePlayers()) { + result.push_back({ + {"Type", "FakePlayer"}, + {"Name", name } + }); } - auto uniqueIds = GMLIB_Scoreboard::getInstance()->getAllEntities(); - for (auto& uniqueId : uniqueIds) { - std::unordered_map data; - data["Type"] = "Entity"; - data["UniqueId"] = std::to_string(uniqueId.id); - result.push_back(data); + for (auto& uniqueId : gmlib::world::Scoreboard::getInstance()->getAllEntities()) { + result.push_back({ + {"Type", "Entity" }, + {"UniqueId", std::to_string(uniqueId.id)} + }); } return result; } @@ -513,35 +438,28 @@ void Export_Compatibility_API() { return ll::service::getLevel()->getPlayer(mce::UUID::fromString(uuid)); }); RemoteCall::exportAs("GMLIB_API", "getPlayerFromUniqueId", [](std::string const& uniqueId) -> Actor* { - auto auid = parseScriptUniqueID(uniqueId); - return ll::service::getLevel()->getPlayer(auid); + return ll::service::getLevel()->getPlayer(parseScriptUniqueID(uniqueId)); }); RemoteCall::exportAs("GMLIB_API", "getEntityFromUniqueId", [](std::string const& uniqueId) -> Actor* { - auto auid = parseScriptUniqueID(uniqueId); - return ll::service::getLevel()->fetchEntity(auid); + return ll::service::getLevel()->fetchEntity(parseScriptUniqueID(uniqueId)); }); RemoteCall::exportAs("GMLIB_API", "getWorldSpawn", []() -> std::pair { - return {GMLIB_Level::getInstance()->getWorldSpawn(), 0}; + return {gmlib::world::Level::getInstance()->getWorldSpawn(), 0}; }); RemoteCall::exportAs("GMLIB_API", "setWorldSpawn", [](std::pair pos) -> bool { - if (pos.second != 0) { - return false; - } - GMLIB_Level::getInstance()->setWorldSpawn(pos.first); + if (pos.second != 0) return false; + gmlib::world::Level::getInstance()->setWorldSpawn(pos.first); return true; }); RemoteCall::exportAs("GMLIB_API", "getPlayerSpawnPoint", [](Player* pl) -> std::pair { - auto player = (GMLIB_Player*)pl; - auto res = player->getSpawnPoint(); + auto res = ((gmlib::world::Player*)pl)->getSpawnPoint(); return {res.first, res.second}; }); RemoteCall::exportAs("GMLIB_API", "setPlayerSpawnPoint", [](Player* pl, std::pair pos) -> void { - auto player = (GMLIB_Player*)pl; - player->setSpawnPoint(pos.first, pos.second); + ((gmlib::world::Player*)pl)->setSpawnPoint(pos.first, pos.second); }); RemoteCall::exportAs("GMLIB_API", "clearPlayerSpawnPoint", [](Player* pl) -> void { - auto player = (GMLIB_Player*)pl; - player->clearSpawnPoint(); + ((gmlib::world::Player*)pl)->clearSpawnPoint(); }); RemoteCall::exportAs( "GMLIB_API", @@ -554,55 +472,46 @@ void Export_Compatibility_API() { } ); RemoteCall::exportAs("GMLIB_API", "getXuidByUuid", [](std::string const& uuid) -> std::string { - auto uid = mce::UUID::fromString(uuid); - auto result = UserCache::getXuidByUuid(uid); - return result ? result.value() : ""; - }); - RemoteCall::exportAs("GMLIB_API", "getNameByUuid", [](std::string const& uuid) -> std::string { - auto uid = mce::UUID::fromString(uuid); - auto result = UserCache::getNameByUuid(uid); - return result ? result.value() : ""; - }); - RemoteCall::exportAs("GMLIB_API", "getUuidByXuid", [](std::string const& xuid) -> std::string { - auto result = UserCache::getUuidByXuid(xuid); - return result ? result.value().asString() : ""; - }); - RemoteCall::exportAs("GMLIB_API", "getNameByXuid", [](std::string const& xuid) -> std::string { - auto result = UserCache::getNameByXuid(xuid); - return result ? result.value() : ""; + return gmlib::tools::UserCache::getXuidByUuid(mce::UUID::fromString(uuid)).value_or(""); }); RemoteCall::exportAs("GMLIB_API", "getXuidByName", [](std::string const& name) -> std::string { - auto result = UserCache::getXuidByName(name); - return result ? result.value() : ""; + return gmlib::tools::UserCache::getXuidByName(name).value_or(""); + }); + RemoteCall::exportAs("GMLIB_API", "getNameByUuid", [](std::string const& uuid) -> std::string { + return gmlib::tools::UserCache::getNameByUuid(mce::UUID::fromString(uuid)).value_or(""); + }); + RemoteCall::exportAs("GMLIB_API", "getNameByXuid", [](std::string const& xuid) -> std::string { + return gmlib::tools::UserCache::getNameByXuid(xuid).value_or(""); + }); + RemoteCall::exportAs("GMLIB_API", "getUuidByXuid", [](std::string const& xuid) -> std::string { + return gmlib::tools::UserCache::getUuidByXuid(xuid) + .transform([](mce::UUID&& uuid) -> std::string { return uuid.asString(); }) + .value_or(""); }); RemoteCall::exportAs("GMLIB_API", "getUuidByName", [](std::string const& name) -> std::string { - auto result = UserCache::getUuidByName(name); - return result ? result.value().asString() : ""; - }); - RemoteCall::exportAs("GMLIB_API", "getUuidByName", [](std::string const& name) -> std::string { - auto result = UserCache::getUuidByName(name); - return result ? result.value().asString() : ""; + return gmlib::tools::UserCache::getUuidByName(name) + .transform([](mce::UUID&& uuid) -> std::string { return uuid.asString(); }) + .value_or(""); }); RemoteCall::exportAs( "GMLIB_API", "getAllPlayerInfo", []() -> std::vector> { std::vector> result; - UserCache::forEach([&result](const UserCache::UserCacheEntry& entry) { - std::unordered_map info; - info["Name"] = entry.mName; - info["Xuid"] = entry.mXuid; - info["Uuid"] = entry.mUuid.asString(); - result.push_back(info); + gmlib::tools::UserCache::forEach([&result](const gmlib::tools::UserCache::UserCacheEntry& entry) -> void { + result.push_back({ + {"Name", entry.mName }, + {"Xuid", entry.mXuid }, + {"Uuid", entry.mUuid.asString()} + }); }); return result; } ); RemoteCall::exportAs("GMLIB_API", "getBlockRuntimeId", [](std::string const& blockName, short legacyData) -> uint { - if (auto block = Block::tryGetFromRegistry(blockName, legacyData)) { - return block->getRuntimeId(); - } - return 0; + return Block::tryGetFromRegistry(blockName, legacyData) + .transform([](const Block& block) -> uint { return block.getRuntimeId(); }) + .value_or(0); }); RemoteCall::exportAs("GMLIB_API", "getBlockTranslateKey", [](Block const* block) -> std::string { return block->buildDescriptionId(); @@ -617,7 +526,7 @@ void Export_Compatibility_API() { "GMLIB_API", "readNbtFromFile", [](std::string const& path, bool isBinary) -> std::unique_ptr { - if (auto nbt = GMLIB_CompoundTag::readFromFile(path, isBinary)) { + if (auto nbt = gmlib::world::CompoundTag::readFromFile(path, isBinary)) { return std::make_unique(nbt.value()); } return nullptr; @@ -627,7 +536,7 @@ void Export_Compatibility_API() { "GMLIB_API", "saveNbtToFile", [](std::string const& path, CompoundTag* nbt, bool isBinary) -> bool { - return GMLIB_CompoundTag::saveToFile(path, *nbt, isBinary); + return gmlib::world::CompoundTag::saveToFile(path, *nbt, isBinary); } ); RemoteCall::exportAs("GMLIB_API", "getBlockDestroySpeed", [](Block const* block) -> float { @@ -675,55 +584,57 @@ void Export_Compatibility_API() { return player->pullInEntity(*entity); }); RemoteCall::exportAs("GMLIB_API", "getBlockTranslateKeyFromName", [](std::string const& blockName) -> std::string { - if (auto block = Block::tryGetFromRegistry(blockName)) { - return block->buildDescriptionId(); - } - return "tile.unknown.name"; + return Block::tryGetFromRegistry(blockName) + .transform([](const Block& block) -> std::string { return block.buildDescriptionId(); }) + .value_or("tile.unknown.name"); }); RemoteCall::exportAs( "GMLIB_API", "getBlockLightEmission", [](std::string const& blockName, short legacyData) -> char { - if (auto block = Block::tryGetFromRegistry(blockName, legacyData)) { - return (char)block->getLightEmission().value; - } - return -1; + return Block::tryGetFromRegistry(blockName) + .transform([](const Block& block) -> char { return (char)block.getLightEmission().value; }) + .value_or(-1); } ); RemoteCall::exportAs( "GMLIB_API", "getGameRules", []() -> std::vector> { - auto gameRules = ll::service::getLevel()->getGameRules().getRules(); std::vector> result; - for (auto& gameRule : gameRules) { - std::unordered_map data; - data["Name"] = gameRule.getName(); + for (auto& gameRule : ll::service::getLevel()->getGameRules().getRules()) { switch (gameRule.getType()) { case GameRule::Type::Bool: - data["Type"] = "Bool"; - data["Value"] = std::to_string(gameRule.getBool()); + result.push_back({ + {"Name", gameRule.getName() }, + {"Type", "Bool" }, + {"Value", std::to_string(gameRule.getBool())} + }); break; case GameRule::Type::Float: - data["Type"] = "Float"; - data["Value"] = std::to_string(gameRule.getFloat()); + result.push_back({ + {"Name", gameRule.getName() }, + {"Type", "Float" }, + {"Value", std::to_string(gameRule.getFloat())} + }); break; case GameRule::Type::Int: - data["Type"] = "Int"; - data["Value"] = std::to_string(gameRule.getInt()); + result.push_back({ + {"Name", gameRule.getName() }, + {"Type", "Int" }, + {"Value", std::to_string(gameRule.getInt())} + }); break; case GameRule::Type::Invalid: break; } - result.push_back(data); } return result; } ); RemoteCall::exportAs("GMLIB_API", "getLegalEnchants", [](ItemStack const* item) -> std::vector { - std::vector enchants = EnchantUtils::getLegalEnchants(item->getItem()); std::vector result; - for (auto& enchant : enchants) { + for (auto& enchant : EnchantUtils::getLegalEnchants(item->getItem())) { result.push_back(Enchant::getEnchant((Enchant::Type)enchant)->getStringId()); } return result; @@ -737,29 +648,23 @@ void Export_Compatibility_API() { RemoteCall::exportAs( "GMLIB_API", "applyEnchant", - [](ItemStack const* item, std::string const& typeName, int level, bool allowNonVanilla) -> bool { + [](ItemStack* item, std::string const& typeName, int level, bool allowNonVanilla) -> bool { return EnchantUtils::applyEnchant( - *(const_cast(item)), + *item, Enchant::getEnchantTypeFromName(HashedString(typeName)), level, allowNonVanilla ); } ); - RemoteCall::exportAs("GMLIB_API", "removeEnchants", [](ItemStack const* item) -> void { - EnchantUtils::removeEnchants((ItemStack&)*item); + RemoteCall::exportAs("GMLIB_API", "removeEnchants", [](ItemStack* item) -> void { + EnchantUtils::removeEnchants(*item); }); - RemoteCall::exportAs("GMLIB_API", "hasEnchant", [](ItemStack const* item, std::string const& typeName) -> bool { - return EnchantUtils::hasEnchant( - Enchant::getEnchantTypeFromName(HashedString(typeName)), - *(const_cast(item)) - ); + RemoteCall::exportAs("GMLIB_API", "hasEnchant", [](ItemStack* item, std::string const& typeName) -> bool { + return EnchantUtils::hasEnchant(Enchant::getEnchantTypeFromName(HashedString(typeName)), *item); }); - RemoteCall::exportAs("GMLIB_API", "getEnchantLevel", [](ItemStack const* item, std::string const& typeName) -> int { - return EnchantUtils::getEnchantLevel( - Enchant::getEnchantTypeFromName(HashedString(typeName)), - *(const_cast(item)) - ); + RemoteCall::exportAs("GMLIB_API", "getEnchantLevel", [](ItemStack* item, std::string const& typeName) -> int { + return EnchantUtils::getEnchantLevel(Enchant::getEnchantTypeFromName(HashedString(typeName)), *item); }); RemoteCall::exportAs( "GMLIB_API", @@ -783,32 +688,32 @@ void Export_Compatibility_API() { return entity->getNameTag(); }); RemoteCall::exportAs("GMLIB_API", "ItemisUnbreakable", [](ItemStack const* item) -> bool { - return ((GMLIB_ItemStack*)item)->isUnbreakable(); + return ((gmlib::world::ItemStack*)item)->isUnbreakable(); }); RemoteCall::exportAs("GMLIB_API", "setItemUnbreakable", [](ItemStack const* item, bool value) -> void { - ((GMLIB_ItemStack*)item)->setUnbreakable(value); + ((gmlib::world::ItemStack*)item)->setUnbreakable(value); }); RemoteCall::exportAs("GMLIB_API", "getItemShouldKeepOnDeath", [](ItemStack const* item) -> bool { - return ((GMLIB_ItemStack*)item)->getShouldKeepOnDeath(); + return ((gmlib::world::ItemStack*)item)->getShouldKeepOnDeath(); }); RemoteCall::exportAs("GMLIB_API", "setItemShouldKeepOnDeath", [](ItemStack const* item, bool value) -> void { - ((GMLIB_ItemStack*)item)->setShouldKeepOnDeath(value); + ((gmlib::world::ItemStack*)item)->setShouldKeepOnDeath(value); }); RemoteCall::exportAs("GMLIB_API", "getItemLockMode", [](ItemStack const* item) -> int { - return (int)((GMLIB_ItemStack*)item)->getItemLockMode(); + return (int)((gmlib::world::ItemStack*)item)->getItemLockMode(); }); RemoteCall::exportAs("GMLIB_API", "setItemLockMode", [](ItemStack const* item, int value) -> void { - ((GMLIB_ItemStack*)item)->setItemLockMode((ItemLockMode)value); + ((gmlib::world::ItemStack*)item)->setItemLockMode((ItemLockMode)value); }); RemoteCall::exportAs("GMLIB_API", "getItemRepairCost", [](ItemStack const* item) -> int { return item->getBaseRepairCost(); }); - RemoteCall::exportAs("GMLIB_API", "setItemRepairCost", [](ItemStack const* item, int cost) -> void { - (*(const_cast(item))).setRepairCost(cost); + RemoteCall::exportAs("GMLIB_API", "setItemRepairCost", [](ItemStack* item, int cost) -> void { + (*item).setRepairCost(cost); }); RemoteCall::exportAs("GMLIB_API", "getItemCanDestroy", [](ItemStack const* item) -> std::vector { std::vector result = {}; - for (auto& block : ((GMLIB_ItemStack*)item)->getCanDestroy()) { + for (auto& block : ((gmlib::world::ItemStack*)item)->getCanDestroy()) { result.push_back(block->getTypeName()); } return result; @@ -817,12 +722,12 @@ void Export_Compatibility_API() { "GMLIB_API", "setItemCanDestroy", [](ItemStack const* item, std::vector blocks) -> void { - ((GMLIB_ItemStack*)item)->setCanDestroy(blocks); + ((gmlib::world::ItemStack*)item)->setCanDestroy(blocks); } ); RemoteCall::exportAs("GMLIB_API", "getItemCanPlaceOn", [](ItemStack const* item) -> std::vector { std::vector result = {}; - for (auto& block : ((GMLIB_ItemStack*)item)->getCanPlaceOn()) { + for (auto& block : ((gmlib::world::ItemStack*)item)->getCanPlaceOn()) { result.push_back(block->getTypeName()); } return result; @@ -831,7 +736,7 @@ void Export_Compatibility_API() { "GMLIB_API", "setItemCanPlaceOn", [](ItemStack const* item, std::vector blocks) -> void { - ((GMLIB_ItemStack*)item)->setCanPlaceOn(blocks); + ((gmlib::world::ItemStack*)item)->setCanPlaceOn(blocks); } ); RemoteCall::exportAs("GMLIB_API", "getPlayerHungry", [](Player* player) -> float { @@ -878,8 +783,7 @@ void Export_Compatibility_API() { return magic_enum::enum_name(container->getContainerType()).data(); }); RemoteCall::exportAs("GMLIB_API", "hasPlayerNbt", [](std::string const& uuid) -> bool { - auto uid = mce::UUID::fromString(uuid); - return GMLIB_Player::getPlayerNbt(uid) ? true : false; + return gmlib::world::Player::getPlayerNbt(mce::UUID::fromString(uuid)) != nullptr; }); RemoteCall::exportAs("GMLIB_API", "getItemMaxCount", [](ItemStack const* item) -> int { return item->getMaxStackSize(); @@ -936,10 +840,9 @@ void Export_Compatibility_API() { return entity->hasEffect(*MobEffect::getById(effectId)); }); RemoteCall::exportAs("GMLIB_API", "getGameDifficulty", []() -> int { - if (auto level = ll::service::getLevel()) { - return (int)level->getDifficulty(); - } - return -1; + return ll::service::getLevel().transform( + [](Level& level) -> int { return (int)level.getDifficulty(); } + ).value_or(-1); }); RemoteCall::exportAs("GMLIB_API", "setGameDifficulty", [](int difficulty) -> void { if (auto level = ll::service::getLevel()) { @@ -947,10 +850,7 @@ void Export_Compatibility_API() { } }); RemoteCall::exportAs("GMLIB_API", "getDefaultGameMode", []() -> int { - if (auto level = ll::service::getLevel()) { - return (int)level->getDefaultGameType(); - } - return -1; + return ll::service::getLevel().transform([](Level& level) -> int { return (int)level.getDefaultGameType(); }).value_or(-1); }); RemoteCall::exportAs("GMLIB_API", "setDefaultGameMode", [](int gameMode) -> void { if (auto level = ll::service::getLevel()) { @@ -961,18 +861,13 @@ void Export_Compatibility_API() { "GMLIB_API", "registerCustomShapelessRecipe", [](std::string const& recipe_id, std::vector ingredients, ItemStack* result) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } + if (!gmlib::world::Level::getInstance().has_value()) return; std::vector types; char rt = 'A'; for (auto& ing : ingredients) { - auto key = Recipes::Type(ing, rt, 1, 0); - types.push_back(key); - rt++; + types.emplace_back(ing, rt++, 1, 0); } - CustomRecipe::registerShapelessCraftingTableRecipe(recipe_id, types, *result); + gmlib::mod::recipe::RecipeRegistry::registerShapelessCraftingTableRecipe(recipe_id, types, *result); } ); RemoteCall::exportAs( @@ -982,18 +877,13 @@ void Export_Compatibility_API() { std::vector shape, std::vector ingredients, ItemStack* result) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } + if (!gmlib::world::Level::getInstance().has_value()) return; std::vector types; char rt = 'A'; for (auto& ing : ingredients) { - auto key = Recipes::Type(ing, rt, 1, 0); - types.push_back(key); - rt++; + types.emplace_back(ing, rt++, 1, 0); } - CustomRecipe::registerShapedCraftingTableRecipe(recipe_id, shape, types, *result); + gmlib::mod::recipe::RecipeRegistry::registerShapedCraftingTableRecipe(recipe_id, shape, types, *result); } ); } \ No newline at end of file diff --git a/src/Entry.cpp b/src/Entry.cpp index c997918..3fa4628 100644 --- a/src/Entry.cpp +++ b/src/Entry.cpp @@ -21,7 +21,7 @@ bool LegacyRemoteCallApi::load() { logger.info("GMLIB-LegacyRemoteCallApi Loaded!"); logger.info( "Loaded Version: {} with {}", - fmt::format(fg(fmt::color::pink), "GMLIB-" + Version::getLibVersionString()), + fmt::format(fg(fmt::color::pink), "GMLIB-" + gmlib::Version::getLibVersionString()), fmt::format(fg(fmt::color::light_green), "GMLIB-LegacyRemoteCallApi-" + LIB_VERSION.asString()) ); logger.info("Author: GroupMountain"); @@ -35,4 +35,4 @@ bool LegacyRemoteCallApi::disable() { return true; } } // namespace GMLIB -LL_REGISTER_MOD(LegacyRemoteCallApi, LegacyRemoteCallApi::getInstance()); +LL_REGISTER_MOD(GMLIB::LegacyRemoteCallApi, GMLIB::LegacyRemoteCallApi::getInstance()); diff --git a/src/EventAPI.cpp b/src/EventAPI.cpp index 2a57bf1..50cbb4b 100644 --- a/src/EventAPI.cpp +++ b/src/EventAPI.cpp @@ -63,7 +63,7 @@ void Export_Event_API() { switch (doHash(eventName)) { case doHash("onClientLogin"): { REGISTER_EVENT_LISTEN( - Event::PacketEvent::ClientLoginAfterEvent, + gmlib::event::packet::ClientLoginAfterEvent, (std::string const& realName, std::string const& uuid, std::string const& serverXuid, @@ -74,7 +74,7 @@ void Export_Event_API() { } case doHash("onWeatherChange"): { REGISTER_EVENT_LISTEN( - Event::LevelEvent::WeatherUpdateBeforeEvent, + gmlib::event::level::WeatherUpdateBeforeEvent, (int lightningLevel, int rainLevel, int lightningLast, int rainLast), (ev.getLightningLevel(), ev.getRainLevel(), ev.getLightningLastTick(), ev.getRainingLastTick()), ev.cancel(), @@ -82,7 +82,7 @@ void Export_Event_API() { } case doHash("onMobPick"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::MobPickupItemBeforeEvent, + gmlib::event::entity::MobPickupItemBeforeEvent, (Actor * mob, Actor * item), (&ev.self(), (Actor*)&ev.getItemActor()), ev.cancel(), @@ -90,7 +90,7 @@ void Export_Event_API() { } case doHash("onItemTrySpawn"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::ItemActorSpawnBeforeEvent, + gmlib::event::entity::ItemActorSpawnBeforeEvent, (const ItemStack* item, std::pair position, int64 spawnerUniqueId), (&ev.getItem(), {ev.getPosition(), ev.getBlockSource().getDimensionId().id}, @@ -100,7 +100,7 @@ void Export_Event_API() { } case doHash("onItemSpawned"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::ItemActorSpawnAfterEvent, + gmlib::event::entity::ItemActorSpawnAfterEvent, (const ItemStack* item, Actor* itemActor, std::pair position, int64 spawnerUniqueId), (&ev.getItem(), (Actor*)&ev.getItemActor(), @@ -111,7 +111,7 @@ void Export_Event_API() { } case doHash("onEntityTryChangeDim"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::ActorChangeDimensionBeforeEvent, + gmlib::event::entity::ActorChangeDimensionBeforeEvent, (Actor * entity, int toDimId), (&ev.self(), ev.getToDimensionId()), ev.cancel(), @@ -119,7 +119,7 @@ void Export_Event_API() { } case doHash("onLeaveBed"): { REGISTER_EVENT_LISTEN( - Event::PlayerEvent::PlayerStopSleepBeforeEvent, + gmlib::event::player::PlayerStopSleepBeforeEvent, (Player * pl), (&ev.self()), ev.cancel(), @@ -127,7 +127,7 @@ void Export_Event_API() { } case doHash("onDeathMessage"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::DeathMessageAfterEvent, + gmlib::event::entity::DeathMessageAfterEvent, (std::string const& message, std::vector, Actor* dead), (ev.getDeathMessage().first, ev.getDeathMessage().second, &ev.self()), logger.error("Event \"onDeathMessage\" cannot be intercepted"), @@ -135,7 +135,7 @@ void Export_Event_API() { } case doHash("onMobHurted"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::MobHurtAfterEvent, + gmlib::event::entity::MobHurtAfterEvent, (Actor * mob, Actor * source, float damage, int cause), (&ev.self(), source, ev.getDamage(), (int)damageSource.getCause()), logger.error("Event \"onMobHurted\" cannot be intercepted"), @@ -150,7 +150,7 @@ void Export_Event_API() { } case doHash("onEndermanTake"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::EndermanTakeBlockBeforeEvent, + gmlib::event::entity::EndermanTakeBlockBeforeEvent, (Actor * mob), (&ev.self()), ev.cancel(), @@ -158,7 +158,7 @@ void Export_Event_API() { } case doHash("onEntityChangeDim"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::ActorChangeDimensionAfterEvent, + gmlib::event::entity::ActorChangeDimensionAfterEvent, (Actor * mob, int fromDimId), (&ev.self(), ev.getFromDimensionId()), logger.error("Event \"onEntityChangeDim\" cannot be intercepted"), @@ -166,7 +166,7 @@ void Export_Event_API() { } case doHash("onDragonRespawn"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::DragonRespawnBeforeEvent, + gmlib::event::entity::DragonRespawnBeforeEvent, (int64 enderDragonUniqueID), (ev.getEnderDragon().id), ev.cancel(), @@ -174,7 +174,7 @@ void Export_Event_API() { } case doHash("onProjectileTryCreate"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::ProjectileCreateBeforeEvent, + gmlib::event::entity::ProjectileCreateBeforeEvent, (Actor * mob, int64 uniqueId), (&ev.self(), ev.getShooter() ? ev.getShooter()->getOrCreateUniqueID().id : -1), ev.cancel(), @@ -182,7 +182,7 @@ void Export_Event_API() { } case doHash("onProjectileCreate"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::ProjectileCreateAfterEvent, + gmlib::event::entity::ProjectileCreateAfterEvent, (Actor * mob, int64 uniqueId), (&ev.self(), ev.getShooter() ? ev.getShooter()->getOrCreateUniqueID().id : -1), logger.error("Event \"onProjectileCreate\" cannot be intercepted"), @@ -190,7 +190,7 @@ void Export_Event_API() { } case doHash("onSpawnWanderingTrader"): { REGISTER_EVENT_LISTEN( - Event::EntityEvent::SpawnWanderingTraderBeforeEvent, + gmlib::event::entity::SpawnWanderingTraderBeforeEvent, (std::pair pos), ({ev.getPos(), ev.getRegion().getDimensionId()}), ev.cancel(), @@ -199,7 +199,7 @@ void Export_Event_API() { case doHash("onHandleRequestAction"): { // clang-format off REGISTER_EVENT_LISTEN( - Event::PlayerEvent::HandleRequestActionBeforeEvent, + gmlib::event::player::HandleRequestActionBeforeEvent, ( Player * player, std::string const& actionType, @@ -225,7 +225,7 @@ void Export_Event_API() { } case doHash("onSendContainerClosePacket"): { REGISTER_EVENT_LISTEN( - Event::PacketEvent::ContainerClosePacketSendAfterEvent, + gmlib::event::packet::ContainerClosePacketSendAfterEvent, (Player * player, int ContainerNetId), (ev.getServerNetworkHandler() .getServerPlayer(ev.getNetworkIdentifier(), ev.getPacket().mClientSubId), diff --git a/src/FormAPI.cpp b/src/FormAPI.cpp index 90da1c3..08012b9 100644 --- a/src/FormAPI.cpp +++ b/src/FormAPI.cpp @@ -1,28 +1,23 @@ #include "Global.h" -using namespace GMLIB::Server::Form; using namespace ll::hash_utils; -class LegacyScriptFormManager { -private: - int64 mNextFormCallbackId = 0; - // std::unordered_map mEventListeners; +// class LegacyScriptFormManager { +// private: +// int64 mNextFormCallbackId = 0; -public: - std::string getNextFormCallbackId() { - mNextFormCallbackId++; - return "GMLIB_EVENT_" + std::to_string(mNextFormCallbackId); - } +// public: +// std::string getNextFormCallbackId() { +// return "GMLIB_FormApi_" + std::to_string(mNextFormCallbackId++); +// } -public: - static LegacyScriptFormManager& getInstance() { - static std::unique_ptr instance; - if (!instance) { - instance = std::make_unique(); - } - return *instance; - } -}; +// public: +// static LegacyScriptFormManager& getInstance() { +// static std::unique_ptr instance; +// if (!instance) instance = std::make_unique(); +// return *instance; +// } +// }; #define PLAYER_DETECROR \ [detectorId, result](Player& pl) -> bool { \ @@ -31,107 +26,64 @@ public: auto const& detector = RemoteCall::importAs("GMLIB_FORM_CALLBACK", detectorId); \ return detector(&pl); \ } else { \ - ServerSettingForm::removeElement(result); \ + gmlib::form::ServerSettingForm::removeElement(result); \ } \ } catch (...) {} \ return false; \ } -#define CALLBACK_TYPE_STRING \ - [callbackId, result](Player& pl, std::string const& data) { \ +#define CALLBACK_TYPE(type) \ + [callbackId, result](Player& pl, type data) { \ try { \ if (RemoteCall::hasFunc("GMLIB_FORM_CALLBACK", callbackId)) { \ - auto const& callback = \ - RemoteCall::importAs("GMLIB_FORM_CALLBACK", callbackId); \ + auto const& callback = RemoteCall::importAs("GMLIB_FORM_CALLBACK", callbackId); \ callback(&pl, data); \ } else { \ - ServerSettingForm::removeElement(result); \ + gmlib::form::ServerSettingForm::removeElement(result); \ } \ } catch (...) {} \ } -#define CALLBACK_TYPE_BOOL \ - [callbackId, result](Player& pl, bool data) { \ - try { \ - if (RemoteCall::hasFunc("GMLIB_FORM_CALLBACK", callbackId)) { \ - auto const& callback = RemoteCall::importAs("GMLIB_FORM_CALLBACK", callbackId); \ - callback(&pl, data); \ - } else { \ - ServerSettingForm::removeElement(result); \ - } \ - } catch (...) {} \ - } - -#define CALLBACK_TYPE_DOUBLE \ - [callbackId, result](Player& pl, double data) { \ - try { \ - if (RemoteCall::hasFunc("GMLIB_FORM_CALLBACK", callbackId)) { \ - auto const& callback = RemoteCall::importAs("GMLIB_FORM_CALLBACK", callbackId); \ - callback(&pl, data); \ - } else { \ - ServerSettingForm::removeElement(result); \ - } \ - } catch (...) {} \ - } - - -#define CALLBACK_TYPE_LONG \ - [callbackId, result](Player& pl, int64 data) { \ - try { \ - if (RemoteCall::hasFunc("GMLIB_FORM_CALLBACK", callbackId)) { \ - auto const& callback = RemoteCall::importAs("GMLIB_FORM_CALLBACK", callbackId); \ - callback(&pl, data); \ - } else { \ - ServerSettingForm::removeElement(result); \ - } \ - } catch (...) {} \ - } - - void Export_Form_API() { - RemoteCall::exportAs("GMLIB_ServerSettingForm", "getDefaultPriority", []() -> int { - return ServerSettingForm::getDefaultPriority(); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "getDefaultPriority", []() -> int { + return gmlib::form::ServerSettingForm::getDefaultPriority(); }); - RemoteCall::exportAs("GMLIB_FormAPI", "getNextFormCallbackId", []() -> std::string { - return LegacyScriptFormManager::getInstance().getNextFormCallbackId(); + // RemoteCall::exportAs("GMLIB_FormAPI", "getNextFormCallbackId", []() -> std::string { + // return LegacyScriptFormManager::getInstance().getNextFormCallbackId(); + // }); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "hasTitle", []() -> bool { return gmlib::form::ServerSettingForm::hasTitle(); }); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "getTitle", []() -> std::string { + return gmlib::form::ServerSettingForm::getTitle(); }); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "hasTitle", []() -> bool { return ServerSettingForm::hasTitle(); }); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "getTitle", []() -> std::string { - return ServerSettingForm::getTitle(); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "setTitle", [](std::string const& title, bool forceModify) -> bool { + return gmlib::form::ServerSettingForm::setTitle(title, forceModify); }); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "setTitle", [](std::string const& title, bool forceModify) -> bool { - return ServerSettingForm::setTitle(title, forceModify); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "hasIcon", []() -> bool { return gmlib::form::ServerSettingForm::hasIcon(); }); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "getIconData", []() -> std::string { + return gmlib::form::ServerSettingForm::getIconData().value_or(""); }); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "hasIcon", []() -> bool { return ServerSettingForm::hasIcon(); }); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "getIconData", []() -> std::string { - if (auto data = ServerSettingForm::getIconData()) { - return data.value(); - } - return ""; - }); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "getIconType", []() -> int { - if (auto type = ServerSettingForm::getIconType()) { - return (int)type.value(); - } - return -1; + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "getIconType", []() -> int { + return gmlib::form::ServerSettingForm::getIconType() + .transform([](gmlib::form::IconType&& type) -> int { return (int)type; }) + .value_or(-1); }); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "setIcon", [](std::string const& title, uchar type, bool forceModify) -> bool { - return ServerSettingForm::setIcon(title, IconType(type), forceModify); + return gmlib::form::ServerSettingForm::setIcon(title, gmlib::form::IconType(type), forceModify); } ); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "addLabel", [](std::string const& text, std::string const& detectorId, int priority) -> uint { - uint result = ServerSettingForm::addLabel(text, PLAYER_DETECROR, priority); + uint result = gmlib::form::ServerSettingForm::addLabel(text, PLAYER_DETECROR, priority); return result; } ); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "addInput", [](std::string const& text, std::string const& placeholder, @@ -139,11 +91,11 @@ void Export_Form_API() { std::string const& callbackId, std::string const& detectorId, int priority) -> uint { - uint result = ServerSettingForm::addInput( + uint result = gmlib::form::ServerSettingForm::addInput( text, placeholder, defaultVal, - CALLBACK_TYPE_STRING, + CALLBACK_TYPE(std::string const&), PLAYER_DETECROR, priority ); @@ -151,19 +103,19 @@ void Export_Form_API() { } ); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "addToggle", [](std::string const& text, bool defaultVal, std::string const& callbackId, std::string const& detectorId, int priority) -> uint { - uint result = ServerSettingForm::addToggle(text, defaultVal, CALLBACK_TYPE_BOOL, PLAYER_DETECROR, priority); + uint result = gmlib::form::ServerSettingForm::addToggle(text, defaultVal, CALLBACK_TYPE(bool), PLAYER_DETECROR, priority); return result; } ); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "addDropdown", [](std::string const& text, std::vector options, @@ -171,11 +123,11 @@ void Export_Form_API() { std::string const& callbackId, std::string const& detectorId, int priority) -> uint { - uint result = ServerSettingForm::addDropdown( + uint result = gmlib::form::ServerSettingForm::addDropdown( text, options, defaultVal, - CALLBACK_TYPE_LONG, + CALLBACK_TYPE(int64), PLAYER_DETECROR, priority ); @@ -183,7 +135,7 @@ void Export_Form_API() { } ); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "addSlider", [](std::string const& text, double min, @@ -193,13 +145,13 @@ void Export_Form_API() { std::string const& callbackId, std::string const& detectorId, int priority) -> uint { - uint result = ServerSettingForm::addSlider( + uint result = gmlib::form::ServerSettingForm::addSlider( text, min, max, step, defaultVal, - CALLBACK_TYPE_DOUBLE, + CALLBACK_TYPE(double), PLAYER_DETECROR, priority ); @@ -207,7 +159,7 @@ void Export_Form_API() { } ); RemoteCall::exportAs( - "GMLIB_ServerSettingForm", + "GMLIB_gmlib::form::ServerSettingForm", "addStepSlider", [](std::string const& text, std::vector steps, @@ -215,18 +167,18 @@ void Export_Form_API() { std::string const& callbackId, std::string const& detectorId, int priority) -> uint { - uint result = ServerSettingForm::addStepSlider( + uint result = gmlib::form::ServerSettingForm::addStepSlider( text, steps, defaultVal, - CALLBACK_TYPE_LONG, + CALLBACK_TYPE(int64), PLAYER_DETECROR, priority ); return result; } ); - RemoteCall::exportAs("GMLIB_ServerSettingForm", "removeElement", [](uint id) -> bool { - return ServerSettingForm::removeElement(id); + RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "removeElement", [](uint id) -> bool { + return gmlib::form::ServerSettingForm::removeElement(id); }); } \ No newline at end of file diff --git a/src/Global.h b/src/Global.h index 60a2bd8..c522f31 100644 --- a/src/Global.h +++ b/src/Global.h @@ -1,19 +1,15 @@ #pragma once -#include +#include #include -using namespace GMLIB; -using namespace Server; -using namespace Mod; - #define PLUGIN_NAME fmt::format(fg(fmt::color::light_green), "GMLIB-LRCA") #define LIB_VERSION_MAJOR 0 #define LIB_VERSION_MINOR 13 #define LIB_VERSION_PATCH 3 -#define LIB_VERSION Version(LIB_VERSION_MAJOR, LIB_VERSION_MINOR, LIB_VERSION_PATCH) +#define LIB_VERSION gmlib::Version(LIB_VERSION_MAJOR, LIB_VERSION_MINOR, LIB_VERSION_PATCH) extern ll::Logger logger; diff --git a/src/LegacyModApi.cpp b/src/LegacyModApi.cpp index dc36bee..7c6dbba 100644 --- a/src/LegacyModApi.cpp +++ b/src/LegacyModApi.cpp @@ -3,13 +3,8 @@ std::unordered_set HardCodedKeys = {"AlwaysUnlocked", "PlayerHasManyItems", "PlayerInWater", "None"}; std::variant> makeRecipeUnlockingKey(std::string const& key) { - if (HardCodedKeys.count(key)) { - return key; - } - std::vector result; - auto item = RecipeIngredient(key, 0, 1); - result.emplace_back(item); - return result; + if (HardCodedKeys.count(key)) return key; + return std::vector({RecipeIngredient(key, 0, 1)}); } void Export_Legacy_GMLib_ModAPI() { @@ -22,18 +17,17 @@ void Export_Legacy_GMLib_ModAPI() { std::string const& result, int count, std::string const& unlock) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } + if (!gmlib::world::Level::getInstance().has_value()) return; std::vector types; for (auto ing : ingredients) { - auto key = RecipeIngredient(ing, 0, 1); - types.push_back(key); + types.emplace_back(ing, 0, 1); } - auto res = RecipeIngredient(result, 0, count); - auto unl = makeRecipeUnlockingKey(unlock); - JsonRecipe::registerShapelessCraftingTableRecipe(recipe_id, types, res, unl); + gmlib::mod::recipe::JsonRecipeRegistry::registerShapelessCraftingTableRecipe( + recipe_id, + types, + RecipeIngredient(result, 0, count), + makeRecipeUnlockingKey(unlock) + ); } ); RemoteCall::exportAs( @@ -45,18 +39,18 @@ void Export_Legacy_GMLib_ModAPI() { std::string const& result, int count, std::string const& unlock) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } + if (!gmlib::world::Level::getInstance().has_value()) return; std::vector types; for (auto ing : ingredients) { - auto key = RecipeIngredient(ing, 0, 1); - types.push_back(key); + types.push_back(RecipeIngredient(ing, 0, 1)); } - auto res = RecipeIngredient(result, 0, count); - auto unl = makeRecipeUnlockingKey(unlock); - JsonRecipe::registerShapedCraftingTableRecipe(recipe_id, shape, types, res, unl); + gmlib::mod::recipe::JsonRecipeRegistry::registerShapedCraftingTableRecipe( + recipe_id, + shape, + types, + RecipeIngredient(result, 0, count), + makeRecipeUnlockingKey(unlock) + ); } ); RemoteCall::exportAs( @@ -66,13 +60,13 @@ void Export_Legacy_GMLib_ModAPI() { std::string const& input, std::string const& output, std::vector tags) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } - auto inp = RecipeIngredient(input, 0, 1); - auto outp = RecipeIngredient(output, 0, 1); - JsonRecipe::registerFurnaceRecipe(recipe_id, inp, outp, tags); + if (!gmlib::world::Level::getInstance().has_value()) return; + gmlib::mod::recipe::JsonRecipeRegistry::registerFurnaceRecipe( + recipe_id, + RecipeIngredient(input, 0, 1), + RecipeIngredient(output, 0, 1), + tags + ); } ); RemoteCall::exportAs( @@ -80,12 +74,13 @@ void Export_Legacy_GMLib_ModAPI() { "registerBrewingMixRecipe", [](std::string const& recipe_id, std::string const& input, std::string const& output, std::string const& reagent ) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } - auto rea = RecipeIngredient(reagent, 0, 1); - JsonRecipe::registerBrewingMixRecipe(recipe_id, input, output, rea); + if (!gmlib::world::Level::getInstance().has_value()) return; + gmlib::mod::recipe::JsonRecipeRegistry::registerBrewingMixRecipe( + recipe_id, + input, + output, + RecipeIngredient(reagent, 0, 1) + ); } ); RemoteCall::exportAs( @@ -93,14 +88,13 @@ void Export_Legacy_GMLib_ModAPI() { "registerBrewingContainerRecipe", [](std::string const& recipe_id, std::string const& input, std::string const& output, std::string const& reagent ) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } - auto inp = RecipeIngredient(input, 0, 1); - auto outp = RecipeIngredient(output, 0, 1); - auto rea = RecipeIngredient(reagent, 0, 1); - JsonRecipe::registerBrewingContainerRecipe(recipe_id, inp, outp, rea); + if (!gmlib::world::Level::getInstance().has_value()) return; + gmlib::mod::recipe::JsonRecipeRegistry::registerBrewingContainerRecipe( + recipe_id, + RecipeIngredient(input, 0, 1), + RecipeIngredient(output, 0, 1), + RecipeIngredient(reagent, 0, 1) + ); } ); RemoteCall::exportAs( @@ -111,11 +105,14 @@ void Export_Legacy_GMLib_ModAPI() { std::string const& base, std::string const& addition, std::string const& result) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } - JsonRecipe::registerSmithingTransformRecipe(recipe_id, smithing_template, base, addition, result); + if (!gmlib::world::Level::getInstance().has_value()) return; + gmlib::mod::recipe::JsonRecipeRegistry::registerSmithingTransformRecipe( + recipe_id, + smithing_template, + base, + addition, + result + ); } ); RemoteCall::exportAs( @@ -125,11 +122,13 @@ void Export_Legacy_GMLib_ModAPI() { std::string const& smithing_template, std::string const& base, std::string const& addition) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } - JsonRecipe::registerSmithingTrimRecipe(recipe_id, smithing_template, base, addition); + if (!gmlib::world::Level::getInstance().has_value()) return; + gmlib::mod::recipe::JsonRecipeRegistry::registerSmithingTrimRecipe( + recipe_id, + smithing_template, + base, + addition + ); } ); RemoteCall::exportAs( @@ -141,50 +140,49 @@ void Export_Legacy_GMLib_ModAPI() { std::string const& output, int output_data, int output_count) -> void { - auto level = GMLIB_Level::getInstance(); - if (!level) { - return; - } - auto inp = RecipeIngredient(input, 0, 1); - auto outp = RecipeIngredient(output, 0, 1); - JsonRecipe::registerStoneCutterRecipe(recipe_id, inp, outp); + if (!gmlib::world::Level::getInstance().has_value()) return; + gmlib::mod::recipe::JsonRecipeRegistry::registerStoneCutterRecipe( + recipe_id, + RecipeIngredient(input, 0, 1), + RecipeIngredient(output, 0, 1) + ); } ); // 错误方块清理 RemoteCall::exportAs("GMLib_ModAPI", "setUnknownBlockCleaner", []() -> void { - VanillaFix::setAutoCleanUnknownBlockEnabled(); + gmlib::tools::VanillaFix::setAutoCleanUnknownBlockEnabled(); }); // 实验性 RemoteCall::exportAs("GMLib_ModAPI", "registerExperimentsRequire", [](int experiment_id) -> void { - auto list = GMLIB_Level::getAllExperiments(); + auto list = gmlib::world::Level::getAllExperiments(); std::unordered_set set(list.begin(), list.end()); if (set.contains((AllExperiments)experiment_id)) { - GMLIB_Level::addExperimentsRequire((AllExperiments)experiment_id); + gmlib::world::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 { - if (GMLIB_Level::getInstance()) { - auto list = GMLIB_Level::getAllExperiments(); + if (gmlib::world::Level::getInstance()) { + auto list = gmlib::world::Level::getAllExperiments(); std::unordered_set set(list.begin(), list.end()); if (set.contains((AllExperiments)experiment_id)) { - GMLIB_Level::getInstance()->setExperimentEnabled(((AllExperiments)experiment_id), value); + gmlib::world::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 { - if (GMLIB_Level::getInstance()) { - auto list = GMLIB_Level::getAllExperiments(); + if (gmlib::world::Level::getInstance()) { + auto list = gmlib::world::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 gmlib::world::Level::getInstance()->getExperimentEnabled(((AllExperiments)experiment_id)); } + ll::Logger("Server").error("Experiment ID '{}' does not exist!", experiment_id); } return false; }); - RemoteCall::exportAs("GMLib_ModAPI", "setFixI18nEnabled", []() -> void { VanillaFix::setFixI18nEnabled(); }); + RemoteCall::exportAs("GMLib_ModAPI", "setFixI18nEnabled", []() -> void { + gmlib::tools::VanillaFix::setFixI18nEnabled(); + }); } \ No newline at end of file diff --git a/src/LegacyServerApi.cpp b/src/LegacyServerApi.cpp index 2218d7e..c6ee4e6 100644 --- a/src/LegacyServerApi.cpp +++ b/src/LegacyServerApi.cpp @@ -2,50 +2,50 @@ void Export_Legacy_GMLib_ServerAPI() { RemoteCall::exportAs("GMLib_ServerAPI", "setEducationFeatureEnabled", []() -> void { - GMLIB_Level::tryEnableEducationEdition(); + gmlib::world::Level::tryEnableEducationEdition(); }); RemoteCall::exportAs("GMLib_ServerAPI", "registerAbilityCommand", []() -> void { - GMLIB_Level::tryRegisterAbilityCommand(); + gmlib::world::Level::tryRegisterAbilityCommand(); }); RemoteCall::exportAs("GMLib_ServerAPI", "setEnableAchievement", []() -> void { - GMLIB_Level::setForceAchievementsEnabled(); + gmlib::world::Level::setForceAchievementsEnabled(); + }); + RemoteCall::exportAs("GMLib_ServerAPI", "setForceTrustSkins", []() -> void { + gmlib::world::Level::trustAllSkins(); }); - RemoteCall::exportAs("GMLib_ServerAPI", "setForceTrustSkins", []() -> void { GMLIB_Level::trustAllSkins(); }); RemoteCall::exportAs("GMLib_ServerAPI", "enableCoResourcePack", []() -> void { - GMLIB_Level::requireServerResourcePackAndAllowClientResourcePack(); + gmlib::world::Level::requireServerResourcePackAndAllowClientResourcePack(); }); RemoteCall::exportAs("GMLib_ServerAPI", "getLevelName", []() -> std::string { - if (auto level = GMLIB_Level::getInstance()) { - return level->getLevelName(); - } - return {}; + return gmlib::world::Level::getInstance() + .transform([](gmlib::world::Level& level) -> std::string { return level.getLevelName(); }) + .value_or(""); }); RemoteCall::exportAs("GMLib_ServerAPI", "setLevelName", [](std::string const& name) -> void { - if (auto level = GMLIB_Level::getInstance()) { + if (auto level = gmlib::world::Level::getInstance()) { level->setLevelName(name); } }); RemoteCall::exportAs("GMLib_ServerAPI", "getLevelSeed", []() -> std::string { - if (auto level = GMLIB_Level::getInstance()) { - return std::to_string(level->getSeed()); - } - return {}; + return gmlib::world::Level::getInstance() + .transform([](gmlib::world::Level& level) -> std::string { return std::to_string(level.getSeed()); }) + .value_or(""); }); RemoteCall::exportAs("GMLib_ServerAPI", "setFakeSeed", [](int64_t seed) -> void { - return GMLIB_Level::setFakeSeed(seed); + return gmlib::world::Level::setFakeSeed(seed); }); RemoteCall::exportAs( "GMLib_ServerAPI", "spawnEntity", [](std::pair pos, std::string const& name) -> Actor* { - return GMLIB_Spawner::spawnEntity(pos.first, pos.second, name).as_ptr(); + return gmlib::world::Spawner::spawnEntity(pos.first, pos.second, name).as_ptr(); } ); RemoteCall::exportAs( "GMLib_ServerAPI", "shootProjectile", [](Actor* owner, std::string const& name, float speed, float offset) -> Actor* { - auto ac = (GMLIB_Actor*)owner; + auto ac = (gmlib::world::Actor*)owner; return ac->shootProjectile(name, speed, offset).as_ptr(); } ); @@ -53,7 +53,7 @@ void Export_Legacy_GMLib_ServerAPI() { "GMLib_ServerAPI", "throwEntity", [](Actor* owner, Actor* actor, float speed, float offset) -> bool { - auto ac = (GMLIB_Actor*)owner; + auto ac = (gmlib::world::Actor*)owner; return ac->throwEntity(*actor, speed, offset); } ); @@ -62,19 +62,18 @@ void Export_Legacy_GMLib_ServerAPI() { "GMLib_ServerAPI", "addFakeList", [](const std::string& name, const std::string& xuid) -> bool { - return FakeList::addFakeList(name, xuid, ActorUniqueID(-1)); + return gmlib::tools::FakeList::addFakeList(name, xuid, ActorUniqueID(-1)); } ); RemoteCall::exportAs("GMLib_ServerAPI", "removeFakeList", [](const std::string& nameOrXuid) -> bool { - return FakeList::removeFakeList(nameOrXuid); + return gmlib::tools::FakeList::removeFakeList(nameOrXuid); }); RemoteCall::exportAs("GMLib_ServerAPI", "removeAllFakeList", []() -> void { - return FakeList::removeAllFakeLists(); + return gmlib::tools::FakeList::removeAllFakeLists(); }); RemoteCall::exportAs("GMLib_ServerAPI", "getMaxPlayers", []() -> int { - if (auto level = GMLIB_Level::getInstance()) { - return level->getMaxPlayerCount(); - } - return {}; + return gmlib::world::Level::getInstance() + .transform([](gmlib::world::Level& level) -> int { return level.getMaxPlayerCount(); }) + .value_or(0); }); } diff --git a/src/PlaceholderApi.cpp b/src/PlaceholderApi.cpp index a7ca003..6aeab2f 100644 --- a/src/PlaceholderApi.cpp +++ b/src/PlaceholderApi.cpp @@ -13,9 +13,11 @@ bool isParameters(std::string const& str) { return std::regex_search(removeBrackets(str), reg); } -std::string GetValue(std::string const& from) { return PlaceholderAPI::getValue(from); } +std::string GetValue(std::string const& from) { return gmlib::tools::PlaceholderAPI::getValue(from); } -std::string GetValueWithPlayer(std::string const& key, Player* player) { return PlaceholderAPI::getValue(key, player); } +std::string GetValueWithPlayer(std::string const& key, Player* player) { + return gmlib::tools::PlaceholderAPI::getValue(key, player); +} bool registerPlayerPlaceholder( std::string const& PluginName, @@ -23,20 +25,24 @@ bool registerPlayerPlaceholder( std::string const& PAPIName ) { if (RemoteCall::hasFunc(PluginName, FuncName)) { - PlaceholderAPI::unregisterPlaceholder(PAPIName); + gmlib::tools::PlaceholderAPI::unregisterPlaceholder(PAPIName); if (isParameters(PAPIName)) { auto Call = RemoteCall::importAs)>( PluginName, FuncName ); - PlaceholderAPI::registerPlayerPlaceholder( + gmlib::tools::PlaceholderAPI::registerPlayerPlaceholder( PAPIName, [Call](Player* sp, std::unordered_map map) { return Call(sp, map); }, PluginName ); } else { auto Call = RemoteCall::importAs(PluginName, FuncName); - PlaceholderAPI::registerPlayerPlaceholder(PAPIName, [Call](Player* sp) { return Call(sp); }, PluginName); + gmlib::tools::PlaceholderAPI::registerPlayerPlaceholder( + PAPIName, + [Call](Player* sp) { return Call(sp); }, + PluginName + ); } return true; } @@ -49,18 +55,18 @@ bool registerServerPlaceholder( std::string const& PAPIName ) { if (RemoteCall::hasFunc(PluginName, FuncName)) { - PlaceholderAPI::unregisterPlaceholder(PAPIName); + gmlib::tools::PlaceholderAPI::unregisterPlaceholder(PAPIName); if (isParameters(PAPIName)) { auto Call = RemoteCall::importAs)>(PluginName, FuncName); - PlaceholderAPI::registerServerPlaceholder( + gmlib::tools::PlaceholderAPI::registerServerPlaceholder( PAPIName, [Call](std::unordered_map map) { return Call(map); }, PluginName ); } else { auto Call = RemoteCall::importAs(PluginName, FuncName); - PlaceholderAPI::registerServerPlaceholder(PAPIName, [Call]() { return Call(); }, PluginName); + gmlib::tools::PlaceholderAPI::registerServerPlaceholder(PAPIName, [Call]() { return Call(); }, PluginName); } return true; } @@ -74,13 +80,22 @@ bool registerStaticPlaceholder( int num ) { if (RemoteCall::hasFunc(PluginName, FuncName)) { - PlaceholderAPI::unregisterPlaceholder(PAPIName); + gmlib::tools::PlaceholderAPI::unregisterPlaceholder(PAPIName); if (isParameters(PAPIName)) { auto Call = RemoteCall::importAs(PluginName, FuncName); if (num == -1) { - PlaceholderAPI::registerStaticPlaceholder(PAPIName, [Call] { return Call(); }, PluginName); + gmlib::tools::PlaceholderAPI::registerStaticPlaceholder( + PAPIName, + [Call] { return Call(); }, + PluginName + ); } else { - PlaceholderAPI::registerStaticPlaceholder(PAPIName, num, [Call] { return Call(); }, PluginName); + gmlib::tools::PlaceholderAPI::registerStaticPlaceholder( + PAPIName, + num, + [Call] { return Call(); }, + PluginName + ); } } return true; @@ -89,14 +104,14 @@ bool registerStaticPlaceholder( } std::string translateStringWithPlayer(std::string const& str, Player* pl) { - return PlaceholderAPI::translateString(str, pl); + return gmlib::tools::PlaceholderAPI::translateString(str, pl); } -std::string translateString(std::string const& str) { return PlaceholderAPI::translateString(str); } +std::string translateString(std::string const& str) { return gmlib::tools::PlaceholderAPI::translateString(str); } -bool unRegisterPlaceholder(std::string const& str) { return PlaceholderAPI::unregisterPlaceholder(str); } +bool unRegisterPlaceholder(std::string const& str) { return gmlib::tools::PlaceholderAPI::unregisterPlaceholder(str); } -std::vector getAllPAPI() { return PlaceholderAPI::getAllPAPI(); } +std::vector getAllPAPI() { return gmlib::tools::PlaceholderAPI::getAllPAPI(); } } // namespace PAPIRemoteCall