QuPresetCustomAPI 实验性
为满足复杂的项目需求 QuPresetTool 允许开发者自定义编写属于自己的API以便协助处理项目
预设工具采用动态链接库(.dll)加载的形式执行您所编写的业务逻辑。
> 预设项目结构
- behPackage (行为文件夹) - 该目录的所有文件将会在变量运算后生成到MOD行为目录中
- resPackage (资源文件夹) - 该目录的所有文件将会在变量运算后生成到MOD资源目录中
- libs (动态链接库分区) - 该目录下的.dll/.so文件将允许useApi配置文件调用执行
- dataView.json (参数视图) - 预设在加载后弹出的字面量输入视图
- manifest.json (预设清单信息) - 预设加载时预读的配置信息 如宏替换, doc描述
- useApi.json (API调用) - 预设在加载完毕后最后调用的处理 用于调用预先编写好的函数
开发语言
为确保数据兼容性 一些可能涉及到的交互性数据采用C语言结构开发 理论上您可以使用包括 不限于: C / C++ / RUST / GO 等语言开发,为提高开发效率我们默认提供一个封装好的通用C++ 头文件(QuLibsAPI.hpp),其中包括了基本对接与封装实现 (其他语言需令行实现)
编写动态库
此处以vs2022 MSVC(CPP14) 环境为例
c++
// TestLib.dll
#include "QuLibsAPI.hpp" // 引入封装好的API
// CUSTOM_API 宏 用于声明导出函数 以便调用
CUSTOM_API void testAPI(QuAPI::_CArgs* _args)
{
QuAPI::Args args{ _args }; // 解析 C语言结构体并转换到适用于C++本土化的对象
std::cout << args.size() <<"\n";
int data = args.getObject(2); // args包含了useApi中的完整数组信息 因此下标2才是传递参数的起始位置
std::cout << args << "\n";
std::cout << "当前Addon行为包是:" << QuAPI::getBehPath() << "\n";
std::cout << "当前Addon资源包是:" << QuAPI::getResPath() << "\n";
std::cout << std::endl;
}
// 编译为dll后放置到预设libs文件夹中
调用动态库
在完成动态库的编译后, 放置到libs文件夹 即可通过useApi.json参数文件调用
json
// useApi.json
[
// 内置API调用
[
"addZhLang",
"item.spawn_egg.entity.{&entityId}.name",
"{&show_text}"
],
[
"setItemTexture",
"{&fentityId}",
"{&tex}"
],
// 自定义API调用 (以custom.开头作为识别)
[
"custom.TestLib", "testAPI", 123, 456, true, null
// custom.动态库名称, 函数名称, 其余附加参数(不限数量)
]
]
// PS: 自定义API Args参数现阶段仅支持基本数据类型 JSON对象, JSON数组暂不识别 (会转换到null)
警告
以上内容仅供学习, 请勿开发任何违反计算机安全以及触及国家法律的不安全内容