Pumpkin-Docs/docs/nl/plugin-dev/d/quick-start.md
Alexander Medvedev 5c23b676ed feat: d binding
2026-09-17 09:23:24 +02:00

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!
```