Skip to content

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)

警告

以上内容仅供学习, 请勿开发任何违反计算机安全以及触及国家法律的不安全内容

Released under the BSD3 License