Skip to content

Migreren van Bukkit / Spigot / Paper naar Pumpkin ​

Deze handleiding beschrijft de architectonische en configuratieverschillen bij het overzetten van een server van Bukkit, Spigot of Paper naar Pumpkin.


1. Architectonische verschillen ​

AspectBukkit / Spigot / PaperPumpkin
Runtime-omgevingJava Virtual Machine (vereist Java 17/21+)Native executable (gecompileerd in Rust, geen Java vereist)
Opstartopdrachtjava [flags] -jar server.jar./pumpkin
Tick-lusSingle-threaded tick-lus met asynchrone takenMultithreaded tick-uitvoering over CPU-kernen
Plugin-formaatJava-bytecode (.jar) gericht op Bukkit APIWebAssembly (.wasm), of .jar via PatchBukkit
Plugin-talenJava, Kotlin, ScalaRust, Python, Kotlin, C#, Go, C
Configuratieserver.properties, paper.yml, spigot.ymlpumpkin.toml (TOML-formaat)
GeheugenbeheerJVM Garbage CollectionNative OS-geheugenallocatie

2. Plugins & Extensies ​

WebAssembly-plugins ​

Het primaire plugin-formaat van Pumpkin is WebAssembly (.wasm):

  • Isolatie: Plugins draaien in een gesandboxte WebAssembly-runtime.
  • Taalondersteuning: Plugins kunnen naar WASM worden gecompileerd vanuit Rust, Python, Go, C#, C of Kotlin.
  • Aangepaste plugins: Zie voor het overzetten van eigen Bukkit-plugins de Migratiehandleiding voor ontwikkelaars.

Bukkit-plugincompatibiliteit: PatchBukkit ​

Voor servers die afhankelijk zijn van bestaande Bukkit-/Spigot-.jar-plugins biedt het PatchBukkit-project een compatibiliteitslaag:

  • Architectuur: PatchBukkit sluit een JVM in binnen Pumpkin en implementeert delen van de Bukkit API opnieuw, waarbij aanroepen via JNI en FFI worden overbrugd naar Pumpkin.
  • Plugin-locatie: Compatibele .jar-plugins worden in patchbukkit/patchbukkit-plugins/ geplaatst.
  • Status & Beperkingen: PatchBukkit is actief in ontwikkeling. Standaard Bukkit API-aanroepen worden ondersteund; plugins die sterk afhankelijk zijn van interne NMS-klassen (net.minecraft.server), CraftBukkit-reflectie of bytecode-manipulatie werken mogelijk nog niet volledig.
  • Java-vereiste: Het gebruik van PatchBukkit vereist een geïnstalleerde Java-runtime (JRE/JDK) op het hostsysteem om de ingesloten JVM uit te voeren.

3. Configuratie & Eigenschappen ​

Pumpkin gebruikt TOML-configuratiebestanden in plaats van server.properties en YAML:

Paper / Spigot (server.properties)Pumpkin (pumpkin.toml)
server-port=25565server_address = "0.0.0.0:25565"
motd=...motd = "A Pumpkin Server"
max-players=20max_players = 20
online-mode=trueonline_mode = true
view-distance=10view_distance = 10
simulation-distance=8simulation_distance = 8

4. Wereld- & Gegevensopslag ​

  • Formaatcompatibiliteit: Pumpkin leest het standaard Anvil-chunkformaat (.mca-bestanden).
  • Mapindeling: Zorg ervoor dat dimensiemappen (world, world_nether, world_the_end) overeenkomen met de verwachte structuur van Pumpkin bij het kopiëren van werelden vanuit bestaande Paper-/Spigot-installaties.
  • Nieuwste wereld- & datapack-formaat vereist: Vooralsnog ondersteunt Pumpkin alleen het nieuwste wereldformaat en datapack-formaat voor de ondersteunde Minecraft-versie. Oudere wereldformaten of verouderde datapack-versies worden tijdens runtime niet automatisch geconverteerd.
    • Werelden bijwerken in de client: Als je een oudere wereld migreert, werk deze dan eerst bij voordat je deze in Pumpkin laadt. Je kunt een bestaande wereld direct in de officiële Minecraft-client upgraden: open de client in de overeenkomende nieuwste versie, ga naar Singleplayer, selecteer de wereld, klik op Edit en kies Optimize World. Als alternatief kun je de wereld eenmalig laden en opslaan op een vanilla-server van de nieuwste versie.
    • Datapacks: Zorg ervoor dat alle datapacks in world/datapacks zijn bijgewerkt naar het formaat dat door de doelversie wordt verwacht.

5. Opstarten & JVM-flags ​

Geen Java-installatie nodig ​

Pure Pumpkin is een zelfstandige native executable. Je hebt geen Java-runtime (JRE/JDK) nodig op je systeem of in je container om de server uit te voeren.

Opstartopdrachten ​

Paper- en Spigot-servers gebruiken vaak JVM-opstartscripts met heap-allocatie en garbage collection-flags (zoals Aikar's Flags):

bash
# Typische Paper-opstartopdracht met Aikar's Flags:
java -Xms10G -Xmx10G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:+AlwaysPreTouch \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -XX:G1HeapWastePercent=5 \
  -XX:G1MixedGCCountTarget=4 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -XX:G1MixedGCLiveThresholdPercent=90 \
  -XX:G1RSetUpdatingPauseTimePercent=5 \
  -XX:SurvivorRatio=32 \
  -XX:+PerfDisableSharedMem \
  -XX:MaxTenuringThreshold=1 \
  -Dusing.aikars.flags=https://mcflags.emc.gs \
  -Daikars.new.flags=true \
  -jar paper.jar --nogui
bash
# Linux / macOS:
./pumpkin

# Windows:
./pumpkin.exe

# Docker:
docker run -p 25565:25565 -v ./data:/data pumpkinmc/pumpkin:latest

Geheugenverschillen ​

  • Geen Garbage Collector: Pumpkin is geschreven in Rust en gebruikt deterministisch geheugenbeheer tijdens het compileren (RAII). Er is geen runtime garbage collector of GC-pauze-afstemming.
  • Geen vaste heap-reservering: Vlaggen zoals -Xms en -Xmx bestaan niet bij native binaries. Geheugen wordt dynamisch aangevraagd bij het besturingssysteem wanneer chunks en entiteiten laden, en weer vrijgegeven bij het ontladen.
  • JVM-flags zijn niet van toepassing: Vlaggen voor het afstemmen van garbage collection, generatiegroottes of JVM-interne instellingen zijn niet nodig en kunnen niet worden doorgegeven.

Beheerderschecklist ​

Uitgebracht onder de MIT-licentie.