插件 API AutoDoc
AutoDoc: qexed_config_to_mdx
- 提交:
c74f9372d61056392610ce80b3b5d9c8c7194fd0 - ABI:
wasm32-unknown-unknown - 编码:
postcard
运行时 ABI
插件需要导出线性内存和分配函数。除 qexed_plugin_init() 外,事件与查询函数都使用 (ptr: i32, len: i32) 读取 postcard payload;查询函数返回 i64,高 32 位是响应指针,低 32 位是响应长度。
qexed_plugin_sdk::qexed_plugin_memory!();
#[unsafe(no_mangle)]
pub extern "C" fn qexed_plugin_priority() -> i32 { 100 }
memory: WASM 线性内存导出。qexed_plugin_alloc(len: i32) -> i32: 必需,宿主用它写入 payload。qexed_plugin_dealloc(ptr: i32, len: i32): 可选,用于释放宿主写入或插件返回的缓冲区。qexed_plugin_priority() -> i32: 可选,数值越大越先执行。
事件与查询
宿主导入 API
这些函数由服务端注册在 qexed import module 中;优先通过 qexed_plugin_sdk 包装函数调用。
Payload 类型
PlayerPayload
玩家事件 payload。
PlayerPayloadOwned
拥有所有字段的玩家 payload,用于需要嵌套保存的查询结构。
ChunkPayload
区块加载/卸载事件 payload。
ConfigReloadPayload
配置重载事件 payload。
LanguagePayload
语言变化事件 payload。
ItemEnchantment
原版附魔条目。
PluginEnchantment
插件自定义附魔条目。
MiningSpeedQuery
挖掘速度查询。
MiningSpeedResponse
挖掘速度响应。
BlockDropPosition
方块坐标。
BlockDropQuery
方块掉落查询。
BlockDropResponse
方块掉落响应。
BlockDropItem
掉落物条目。
BlockStepPosition
玩家踩踏方块坐标。
PlayerPositionPayload
玩家或实体位置。
BlockStepPayload
玩家踩踏方块查询。
PlayerMovePayload
玩家移动查询。
PlayerInputState
玩家输入状态。
PlayerInputPayload
玩家输入查询。
ClickDetectedPayload
连点检测事件 payload。
PathfindingQuery
寻路查询。
PathfindingResponse
寻路响应。
PluginCommandDefinition
插件命令定义。
PluginCommandQuery
插件命令执行查询。
PluginCommandResponse
插件动作响应。
ProxyConnectResultPayload
跨服连接结果事件 payload。
PlaceholderQuery
占位符解析查询。
PlaceholderContext
占位符上下文键值对。
PlaceholderResponse
占位符响应。
PlaceholderReplacement
占位符替换项。
NpcInteractPayload
NPC 交互 payload。
NpcEntityPayload
NPC 实体 payload。
NpcMutationQuery
NPC 变更查询。
NpcMutationResponse
NPC 变更响应。
NpcMutationOp
NPC 变更操作枚举:Upsert 或 Remove。
NpcUpsert
NPC 新增/更新数据。
CustomEntityDefinition
插件自定义实体定义。
CustomEntityRegistryResponse
自定义实体注册响应。
EntityAiTickQuery
实体 AI tick 查询。
EntityAiEntityPayload
AI tick 中的实体信息。
EntityAiPlayerPayload
AI tick 附近玩家信息。
EntityAiTickResponse
实体 AI tick 响应。
EntityAiOperation
实体 AI 操作枚举:MoveDelta、LookAt 或 Remove。
PlayerAction
服务端对玩家执行的动作枚举。
最小示例
use qexed_plugin_sdk::{PlayerPayload, decode_payload};
qexed_plugin_sdk::qexed_plugin_memory!();
#[unsafe(no_mangle)]
pub extern "C" fn qexed_plugin_player_join(ptr: i32, len: i32) {
let Some(player) = (unsafe { decode_payload::<PlayerPayload>(ptr, len) }) else {
qexed_plugin_sdk::log("player_join decode failed");
return;
};
qexed_plugin_sdk::log(&format!("{} joined", player.username));
}
更多完整示例见 plugins/examples,其中 command_npc_demo 覆盖命令、NPC、占位符、自定义实体和插件 AI。