From 35fc8a7a4fcccc91f47589118398ccab10e12c40 Mon Sep 17 00:00:00 2001 From: Tsubasa6848 Date: Sat, 23 Mar 2024 19:42:59 +0800 Subject: [PATCH] feat: world spawn api --- lib/GMLIB_API-JS.js | 31 ++++++++++++++++++++++++++++--- manifest.json | 1 + src/CompatibilityApi.cpp | 27 +++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/lib/GMLIB_API-JS.js b/lib/GMLIB_API-JS.js index f475aae..90e4da1 100644 --- a/lib/GMLIB_API-JS.js +++ b/lib/GMLIB_API-JS.js @@ -82,7 +82,12 @@ const GMLIB_API = { getAllScoreboardEntities: ll.import("GMLIB_API", "getAllScoreboardEntities"), getPlayerFromUuid: ll.import("GMLIB_API", "getPlayerFromUuid"), getPlayerFromUniqueId: ll.import("GMLIB_API", "getPlayerFromUniqueId"), - getEntityFromUniqueId: ll.import("GMLIB_API", "getEntityFromUniqueId") + getEntityFromUniqueId: ll.import("GMLIB_API", "getEntityFromUniqueId"), + getWorldSpawn: ll.import("GMLIB_API", "getWorldSpawn"), + setWorldSpawn: ll.import("GMLIB_API", "setWorldSpawn"), + getPlayerSpawnPoint: ll.import("GMLIB_API", "getPlayerSpawnPoint"), + setPlayerSpawnPoint: ll.import("GMLIB_API", "setPlayerSpawnPoint"), + clearPlayerSpawnPoint: ll.import("GMLIB_API", "clearPlayerSpawnPoint") } const FloatingTextList = []; @@ -281,9 +286,9 @@ class Minecraft { return nbt; } - static setPlayerNbt(uuid, nbt) { + static setPlayerNbt(uuid, nbt, forceCreate = true) { let snbt = nbt.toSNBT(); - return GMLIB_API.setPlayerNbt(uuid, snbt); + return GMLIB_API.setPlayerNbt(uuid, snbt, forceCreate); } static setPlayerNbtTags(uuid, nbt, tags) { @@ -303,6 +308,26 @@ class Minecraft { return GMLIB_API.setPlayerPosition(uuid, pos); } + static getWorldSpawn() { + return GMLIB_API.getWorldSpawn(); + } + + static setWorldSpawn(pos) { + return GMLIB_API.setWorldSpawn(pos); + } + + static getPlayerSpawnPoint() { + return GMLIB_API.getPlayerSpawnPoint(); + } + + static setPlayerSpawnPoint(pos) { + GMLIB_API.setPlayerSpawnPoint(pos); + } + + static clearPlayerSpawnPoint() { + GMLIB_API.clearPlayerSpawnPoint(); + } + static setEducationFeatureEnabled() { return GMLIB_API.setEducationFeatureEnabled(); } diff --git a/manifest.json b/manifest.json index edd34e8..873cf5a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,7 @@ { "name": "${pluginName}", "entry": "${pluginFile}", + "version": "0.9.3", "type": "native", "dependencies": [ { diff --git a/src/CompatibilityApi.cpp b/src/CompatibilityApi.cpp index a2d142a..26e21dd 100644 --- a/src/CompatibilityApi.cpp +++ b/src/CompatibilityApi.cpp @@ -51,10 +51,10 @@ void Export_Compatibility_API() { } return "null"; }); - RemoteCall::exportAs("GMLIB_API", "setPlayerNbt", [](std::string uuid, std::string snbt) -> bool { + RemoteCall::exportAs("GMLIB_API", "setPlayerNbt", [](std::string uuid, std::string snbt, bool forceCreate) -> bool { auto uid = mce::UUID::fromString(uuid); auto nbt = CompoundTag::fromSnbt(snbt); - return GMLIB_Player::setPlayerNbt(uid, *nbt); + return GMLIB_Player::setPlayerNbt(uid, *nbt, forceCreate); }); RemoteCall::exportAs( "GMLIB_API", @@ -392,4 +392,27 @@ void Export_Compatibility_API() { auto auid = parseScriptUniqueID(uniqueId); return ll::service::getLevel()->fetchEntity(auid); }); + RemoteCall::exportAs("GMLIB_API", "getWorldSpawn", []() -> std::pair { + return {GMLIB_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); + return true; + }); + RemoteCall::exportAs("GMLIB_API", "getPlayerSpawnPoint", [](Player* pl) -> std::pair { + auto player = (GMLIB_Player*)pl; + auto res = player->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); + }); + RemoteCall::exportAs("GMLIB_API", "clearPlayerSpawnPoint", [](Player* pl) -> void { + auto player = (GMLIB_Player*)pl; + player->clearSpawnPoint(); + }); } \ No newline at end of file