131 lines
3.3 KiB
Markdown
131 lines
3.3 KiB
Markdown
# Quick Start
|
|
|
|
Deze handleiding helpt je op weg met het schrijven van Pumpkin-serverplugins met de programmeertaal [D](https://dlang.org/).
|
|
|
|
D-plugins voor Pumpkin worden gecompileerd naar WebAssembly-componenten (Wasm) met behulp van de officiële [`pumpkin-api-d`](https://github.com/Pumpkin-MC/pumpkin-api-d) bindings.
|
|
|
|
---
|
|
|
|
## Vereisten
|
|
|
|
Voordat je D-plugins voor Pumpkin bouwt, zorg ervoor dat het volgende is geïnstalleerd:
|
|
|
|
- **[LDC](https://github.com/ldc-developers/ldc)**: Versie 1.43 of nieuwer (LLVM-gebaseerde D-compiler).
|
|
- **`addon-wasi`**: Het WASI-doelpakket voor LDC.
|
|
- **[DUB](https://dub.pm/)**: Het D-pakket- en buildbeheerprogramma (meestal inbegrepen bij LDC).
|
|
|
|
---
|
|
|
|
## 1. Het project opzetten
|
|
|
|
Maak een nieuwe map voor je pluginproject en voeg een `dub.json`-configuratiebestand toe:
|
|
|
|
```bash
|
|
mkdir my-d-plugin
|
|
cd my-d-plugin
|
|
```
|
|
|
|
Maak `dub.json` aan in de hoofdmap van het project:
|
|
|
|
```json [dub.json]
|
|
{
|
|
"name": "my-d-plugin",
|
|
"description": "Een minimale Pumpkin-plugin gebouwd met D.",
|
|
"license": "proprietary",
|
|
"authors": ["JouwNaam"],
|
|
"copyright": "Copyright © 2026, JouwNaam",
|
|
|
|
"dependencies": {
|
|
"pumpkin-api-d": "~>0.1.0"
|
|
},
|
|
|
|
"targetType": "executable",
|
|
"dflags": ["-Xcc=-mexec-model=reactor"],
|
|
"buildTypes": {
|
|
"debug": {
|
|
"buildOptions": ["debugMode", "debugInfo"]
|
|
},
|
|
"release": {
|
|
"buildOptions": ["optimize", "inline"],
|
|
"dflags": ["-L-S"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
> [!NOTE]
|
|
> De vlag `-Xcc=-mexec-model=reactor` is vereist door de WebAssembly-linker zodat de plugin wordt behandeld als een reactor (een component met geëxporteerde toegangspunten) in plaats van een zelfstandig programma met een afsluitpunt.
|
|
|
|
---
|
|
|
|
## 2. De plugin schrijven
|
|
|
|
Maak een map `source` aan en plaats je code in `source/app.d`:
|
|
|
|
```d [source/app.d]
|
|
module plugin;
|
|
|
|
import wit.pumpkin.plugin.plugin;
|
|
import wit.common;
|
|
import pumpkin.register;
|
|
|
|
struct MyPlugin {
|
|
@GetMetadata PluginMetadata getMetadata()
|
|
{
|
|
immutable(WitString)[$] authors = [
|
|
"JouwNaam".witList
|
|
];
|
|
|
|
return (immutable PluginMetadata(
|
|
name: "my-d-plugin".witList,
|
|
version_: "0.1.0".witList,
|
|
authors: authors.witList,
|
|
description: "Een voorbeeldplugin in D.".witList,
|
|
dependencies: WitList!WitString(),
|
|
permissions: WitList!WitString()
|
|
)).witClone;
|
|
}
|
|
|
|
@OnLoad
|
|
Result!(void, WitString) onLoad(Context ctx)
|
|
{
|
|
scope (exit)
|
|
ctx.witDrop; // Binnenkomende bronnen moeten na gebruik worden vrijgegeven
|
|
|
|
log(Level.info, "Hallo vanuit de D-plugin!".witList);
|
|
return ok!WitString;
|
|
}
|
|
}
|
|
|
|
mixin RegisterPlugin!MyPlugin;
|
|
```
|
|
|
|
---
|
|
|
|
## 3. De plugin bouwen
|
|
|
|
Compileer je plugin naar een WebAssembly-component voor `wasm32-wasip2`:
|
|
|
|
```bash
|
|
dub build -b release -a wasm32-wasip2
|
|
```
|
|
|
|
Dit genereert `my-d-plugin.wasm` in je projectmap.
|
|
|
|
---
|
|
|
|
## 4. De plugin uitvoeren
|
|
|
|
1. Kopieer het gecompileerde `.wasm`-bestand naar de map `plugins/` van je Pumpkin-server:
|
|
```bash
|
|
cp my-d-plugin.wasm /pad/naar/pumpkin/plugins/
|
|
```
|
|
2. Start of herstart Pumpkin:
|
|
```bash
|
|
./pumpkin
|
|
```
|
|
3. Controleer de serverlogs om te bevestigen dat je plugin is geladen:
|
|
```text
|
|
[INFO] Hallo vanuit de D-plugin!
|
|
```
|