feat: adapt to GMLIB v1.0.2

This commit is contained in:
KobeBryant114514
2025-05-07 21:22:34 +08:00
Unverified
parent 8aefbf335b
commit 9a31f363f8
5 changed files with 53 additions and 15 deletions
+3
View File
@@ -1556,6 +1556,9 @@ interface Player {
slot: number slot: number
): Item; ): Item;
/** (GMLIB & Glacie)获取客户端版本协议*/
getNetworkProtocolVersion(): number
/** (GMLIB)发送更新更新物品数据包 */ /** (GMLIB)发送更新更新物品数据包 */
sendInventorySlotPacket( sendInventorySlotPacket(
/** 容器ID */ /** 容器ID */
+11
View File
@@ -376,6 +376,8 @@ const GMLIB_API = {
entityHasType: ll.import("GMLIB_API", "entityHasType"), entityHasType: ll.import("GMLIB_API", "entityHasType"),
/** 获取实体类型ID @type {function(Entity):number} */ /** 获取实体类型ID @type {function(Entity):number} */
getEntityTypeId: ll.import("GMLIB_API", "getEntityTypeId"), getEntityTypeId: ll.import("GMLIB_API", "getEntityTypeId"),
/** 获取实体类型ID @type {function(Entity):number} */
getPlayerProtocolVersion: ll.import("GMLIB_API", "getPlayerProtocolVersion"),
}; };
/** LRCA的二进制流数据包导出接口 */ /** LRCA的二进制流数据包导出接口 */
@@ -3034,6 +3036,15 @@ LLSE_Player.prototype.sendInventorySlotPacket =
GMLIB_API.sendInventorySlotPacket(this, containerId, slot, item); GMLIB_API.sendInventorySlotPacket(this, containerId, slot, item);
}; };
LLSE_Player.prototype.getNetworkProtocolVersion =
/**
* 获取客户端版本协议
* @returns {number}
*/
function (containerId, slot, item) {
GMLIB_API.getPlayerProtocolVersion(this);
};
LLSE_Container.prototype.getContainerType = LLSE_Container.prototype.getContainerType =
/** /**
* 获取容器类型 * 获取容器类型
+5 -1
View File
@@ -152,7 +152,8 @@ void Export_Compatibility_API() {
); );
RemoteCall::exportAs("GMLIB_API", "getVersion_LRCA", []() -> std::string { return LIB_VERSION.to_string(); }); RemoteCall::exportAs("GMLIB_API", "getVersion_LRCA", []() -> std::string { return LIB_VERSION.to_string(); });
RemoteCall::exportAs("GMLIB_API", "getVersion_GMLIB", []() -> std::string { RemoteCall::exportAs("GMLIB_API", "getVersion_GMLIB", []() -> std::string {
return GMLIB_VERSION_TO_STRING(GMLIB_VERSION_MAJOR) "." GMLIB_VERSION_TO_STRING(GMLIB_VERSION_MINOR return GMLIB_VERSION_TO_STRING(GMLIB_VERSION_MAJOR) "." GMLIB_VERSION_TO_STRING(
GMLIB_VERSION_MINOR
) "." GMLIB_VERSION_TO_STRING(GMLIB_VERSION_PATCH); ) "." GMLIB_VERSION_TO_STRING(GMLIB_VERSION_PATCH);
}); });
RemoteCall::exportAs( RemoteCall::exportAs(
@@ -951,4 +952,7 @@ void Export_Compatibility_API() {
RemoteCall::exportAs("GMLIB_API", "getEntityTypeId", [](Actor* entity) -> int { RemoteCall::exportAs("GMLIB_API", "getEntityTypeId", [](Actor* entity) -> int {
return (int)entity->getEntityTypeId(); return (int)entity->getEntityTypeId();
}); });
RemoteCall::exportAs("GMLIB_API", "getPlayerProtocolVersion", [](Player* player) -> int {
return ((GMPlayer*)player)->getNetworkProtocolVersion();
});
} }
+32 -12
View File
@@ -23,10 +23,14 @@ void registerPlayerPlaceholder(
[Call = RemoteCall::importAs<std::string(Player * pl, std::unordered_map<std::string, std::string>)>( [Call = RemoteCall::importAs<std::string(Player * pl, std::unordered_map<std::string, std::string>)>(
PluginName, PluginName,
FuncName FuncName
)](optional_ref<GMActor> actor, std::unordered_map<std::string, std::string> const& params, auto&&... )](optional_ref<Actor> actor, ll::StringMap<std::string> const& params, auto&&...
) -> std::optional<std::string> { ) -> std::optional<std::string> {
if (actor.has_value() && ((Actor*)actor.as_ptr())->isPlayer()) { if (actor.has_value() && ((Actor*)actor.as_ptr())->isPlayer()) {
return Call((Player*)actor.as_ptr(), params); std::unordered_map<std::string, std::string> paramMap;
for (auto& [key, val] : params) {
paramMap[key] = val;
}
return Call((Player*)actor.as_ptr(), paramMap);
} }
return std::nullopt; return std::nullopt;
}, },
@@ -55,8 +59,13 @@ void registerServerPlaceholder(
[Call = RemoteCall::importAs<std::string(std::unordered_map<std::string, std::string>)>( [Call = RemoteCall::importAs<std::string(std::unordered_map<std::string, std::string>)>(
PluginName, PluginName,
FuncName FuncName
)](auto, std::unordered_map<std::string, std::string> const& params, auto&&... )](auto, ll::StringMap<std::string> const& params, auto&&...) -> std::optional<std::string> {
) -> std::optional<std::string> { return Call(params); }, std::unordered_map<std::string, std::string> paramMap;
for (auto& [key, val] : params) {
paramMap[key] = val;
}
return Call(paramMap);
},
mod mod
); );
}; };
@@ -80,8 +89,8 @@ void registerStaticPlaceholder(
if (mod.expired()) return; if (mod.expired()) return;
PlaceholderAPI::registerPlaceholder( PlaceholderAPI::registerPlaceholder(
PAPIName, PAPIName,
[Call = RemoteCall::importAs<std::string()>(PluginName, FuncName)](auto&&... [Call = RemoteCall::importAs<std::string()>(PluginName, FuncName)](auto&&...)
) -> std::optional<std::string> { return Call(); }, -> std::optional<std::string> { return Call(); },
mod mod
); );
}; };
@@ -128,10 +137,13 @@ void registerPlaceholder(std::string const& placeholder, std::string const& func
std::string(Actor*, std::unordered_map<std::string, std::string>, std::string)>( std::string(Actor*, std::unordered_map<std::string, std::string>, std::string)>(
pluginName, pluginName,
funcName funcName
)](optional_ref<GMActor> actor, )](optional_ref<Actor> actor, ll::StringMap<std::string> const& params, std::string const& language
std::unordered_map<std::string, std::string> const& params, ) -> std::optional<std::string> {
std::string const& language) -> std::optional<std::string> { std::unordered_map<std::string, std::string> paramMap;
auto result = Call((Actor*)actor.as_ptr(), params, language); for (auto& [key, val] : params) {
paramMap[key] = val;
}
auto result = Call((Actor*)actor.as_ptr(), paramMap, language);
return result == "<std::nullopt>" ? std::nullopt : std::optional(result); return result == "<std::nullopt>" ? std::nullopt : std::optional(result);
}, },
mod mod
@@ -157,7 +169,11 @@ std::string getValue(
std::unordered_map<std::string, std::string> params, std::unordered_map<std::string, std::string> params,
std::string const& language std::string const& language
) { ) {
return PlaceholderAPI::getValue(placeholder, std::nullopt, params, language).value_or("<std::nullopt>"); ll::StringMap<std::string> paramMap;
for (auto& [key, val] : params) {
paramMap[key] = val;
}
return PlaceholderAPI::getValue(placeholder, std::nullopt, paramMap, language).value_or("<std::nullopt>");
} }
std::string getValueFromActor( std::string getValueFromActor(
std::string const& placeholder, std::string const& placeholder,
@@ -165,7 +181,11 @@ std::string getValueFromActor(
std::unordered_map<std::string, std::string> params, std::unordered_map<std::string, std::string> params,
std::string const& language std::string const& language
) { ) {
return PlaceholderAPI::getValue(placeholder, (GMActor*)actor, params, language).value_or("<std::nullopt>"); ll::StringMap<std::string> paramMap;
for (auto& [key, val] : params) {
paramMap[key] = val;
}
return PlaceholderAPI::getValue(placeholder, (GMActor*)actor, paramMap, language).value_or("<std::nullopt>");
} }
} // namespace NewPapiRemoteCall } // namespace NewPapiRemoteCall
+1 -1
View File
@@ -8,7 +8,7 @@ if not has_config("vs_runtime") then
set_runtimes("MD") set_runtimes("MD")
end end
add_requires("levilamina", {configs = {target_type = "server"}}) add_requires("levilamina 1.1.1", {configs = {target_type = "server"}})
add_requires("legacyremotecall") add_requires("legacyremotecall")
add_requires("levibuildscript") add_requires("levibuildscript")
add_requires("ilistenattentively") add_requires("ilistenattentively")