快速入门
本指南将帮助你开始使用 Zig 语言编写 Pumpkin 服务器插件。
针对 Pumpkin 的 Zig 语言插件通过官方提供的 pumpkin-api-zig 绑定编译为 WebAssembly(Wasm)组件。
前置要求
在构建 Zig 语言插件之前,请确保已安装以下工具:
- Zig:0.16.0 或更高版本。
wasm-tools:确保已存在于系统的PATH环境变量中(构建脚本使用它来嵌入 WIT 元数据并生成 WebAssembly 组件)。
1. 初始化项目
为你的插件项目创建一个新目录:
bash
mkdir my-zig-plugin
cd my-zig-plugin获取并添加 pumpkin-api-zig 依赖:
bash
zig fetch --save git+https://github.com/Pumpkin-MC/pumpkin-api-zig在项目根目录下创建 build.zig:
zig
const std = @import("std");
const pumpkin_api = @import("pumpkin_api_zig");
pub fn build(b: *std.Build) void {
_ = pumpkin_api.addPlugin(b, b.dependency("pumpkin_api_zig", .{}), .{
.name = "my-zig-plugin",
.root_source_file = b.path("src/main.zig"),
});
}2. 编写插件代码
创建 src 目录并在 src/main.zig 中添加代码:
zig
const std = @import("std");
const pumpkin = @import("pumpkin");
pub const std_options: std.Options = .{ .logFn = pumpkin.logFn };
const MyPlugin = struct {
pub const metadata: pumpkin.Metadata = .{
.name = "my-zig-plugin",
.version = "0.1.0",
.authors = &.{"你的名字"},
.description = "Zig 语言编写的示例插件。",
};
pub const events = .{
.player_join_event = onJoin,
};
pub fn onLoad(_: pumpkin.Context) !void {
std.log.info("来自 Zig 插件的问候!", .{});
}
fn onJoin(_: pumpkin.Server, ev: *pumpkin.EventData(.player_join_event)) void {
std.log.info("{s} 加入了游戏", .{ev.player.getName()});
}
};
comptime {
pumpkin.register(MyPlugin);
}关键要素:
std_options:通过pumpkin.logFn将标准 Zig 日志(std.log)重定向到 Pumpkin 的日志系统。pub const metadata:定义组件加载时 Pumpkin 所需的插件元数据(名称、版本、作者、描述)。pub const events:定义插件注册的事件处理函数(例如.player_join_event)。pub fn onLoad:Pumpkin 初始化插件时调用的入口点。pumpkin.register(MyPlugin):在编译期生成所需的 WebAssembly 组件导出项与入口点。
NOTE
API 返回的所有对象(包括句柄)仅在当前回调执行期间有效。若需保留句柄,请调用 keep(),并在使用完毕后通过 deinit() 释放。
3. 构建插件
将插件编译为 WebAssembly 组件:
bash
zig build编译完成后,会在项目根目录生成 zig-out/my-zig-plugin.wasm 文件。
4. 运行插件
- 将生成的
.wasm文件复制到 Pumpkin 服务器的plugins/目录中:bashcp zig-out/my-zig-plugin.wasm /path/to/pumpkin/plugins/ - 启动或重启 Pumpkin 服务器:bash
./pumpkin - 查看控制台日志确认插件已成功加载:text
[INFO] 来自 Zig 插件的问候!