Quick Start
Deze handleiding helpt je op weg met het schrijven van Pumpkin-serverplugins met de programmeertaal Zig.
Zig-plugins voor Pumpkin worden gecompileerd naar WebAssembly-componenten (Wasm) met behulp van de officiële pumpkin-api-zig bindings.
Vereisten
Voordat je Zig-plugins voor Pumpkin bouwt, zorg ervoor dat het volgende is geïnstalleerd:
- Zig: Versie 0.16.0 of nieuwer.
wasm-tools: Beschikbaar in jePATH(gebruikt door het buildscript om WIT-metadata in te sluiten en het WebAssembly-component te genereren).
1. Het project opzetten
Maak een nieuwe map voor je pluginproject:
mkdir my-zig-plugin
cd my-zig-pluginVoeg pumpkin-api-zig toe als afhankelijkheid:
zig fetch --save git+https://github.com/Pumpkin-MC/pumpkin-api-zigMaak build.zig aan in de hoofdmap van het project:
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. De plugin schrijven
Maak een map src aan en plaats je code in src/main.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 = &.{"JouwNaam"},
.description = "Een voorbeeldplugin in Zig.",
};
pub const events = .{
.player_join_event = onJoin,
};
pub fn onLoad(_: pumpkin.Context) !void {
std.log.info("Hallo vanuit Zig!", .{});
}
fn onJoin(_: pumpkin.Server, ev: *pumpkin.EventData(.player_join_event)) void {
std.log.info("{s} is binnengekomen", .{ev.player.getName()});
}
};
comptime {
pumpkin.register(MyPlugin);
}Belangrijke onderdelen:
std_options: Stuurt standaard Zig-logging (std.log) door naar het logsysteem van Pumpkin viapumpkin.logFn.pub const metadata: Definieert plugin-metadata (naam, versie, auteurs, beschrijving) die Pumpkin nodig heeft bij het laden van het component.pub const events: Registreert gebeurtenis-handlers (zoals.player_join_event).pub fn onLoad: Het toegangspunt dat wordt aangeroepen wanneer Pumpkin de plugin initialiseert.pumpkin.register(MyPlugin): Genereert tijdens compilatietijd de benodigde WebAssembly-componentexports en toegangspunten.
NOTE
Alles wat de API retourneert (inclusief handles) is alleen geldig totdat de huidige callback retourneert. Roep keep() aan op een handle om deze te behouden, en geef deze weer vrij met deinit() als je klaar bent.
3. De plugin bouwen
Compileer je plugin naar een WebAssembly-component:
zig buildDit genereert zig-out/my-zig-plugin.wasm in je projectmap.
4. De plugin uitvoeren
- Kopieer het gecompileerde
.wasm-bestand naar de mapplugins/van je Pumpkin-server:bashcp zig-out/my-zig-plugin.wasm /pad/naar/pumpkin/plugins/ - Start of herstart Pumpkin:bash
./pumpkin - Controleer de serverlogs om te bevestigen dat je plugin is geladen:text
[INFO] Hallo vanuit Zig!