Skip to content

Migration von Bukkit / Spigot / Paper zu Pumpkin ​

Dieser Leitfaden beschreibt die architektonischen und konfigurationsbezogenen Unterschiede beim Wechsel eines Servers von Bukkit, Spigot oder Paper zu Pumpkin.


1. Architektonische Unterschiede ​

AspektBukkit / Spigot / PaperPumpkin
LaufzeitumgebungJava Virtual Machine (erfordert Java 17/21+)Native Binärdatei (kompiliertes Rust, kein Java erforderlich)
Startbefehljava [flags] -jar server.jar./pumpkin
Tick-LoopSingle-Thread-Tick-Loop mit asynchroner AufgabenverteilungMultithreaded Tick-Ausführung über mehrere CPU-Kerne
Plugin-FormatJava-Bytecode (.jar) für die Bukkit-APIWebAssembly (.wasm) oder .jar via PatchBukkit
Plugin-SprachenJava, Kotlin, ScalaRust, Python, Kotlin, C#, Go, C
Konfigurationserver.properties, paper.yml, spigot.ymlpumpkin.toml (TOML-Format)
SpeicherverwaltungJVM Garbage CollectionNative OS-Speicherallokation

2. Plugins & Erweiterungen ​

WebAssembly-Plugins ​

Pumpkins primäres Plugin-Format ist WebAssembly (.wasm):

  • Isolation: Plugins laufen in einer isolierten WebAssembly-Laufzeitumgebung (Sandbox).
  • Sprachunterstützung: Plugins können aus Rust, Python, Go, C#, C oder Kotlin zu WASM kompiliert werden.
  • Eigene Plugins: Hinweise zur Portierung eigener Bukkit-Plugins findest du im Entwickler-Migrationsleitfaden.

Bukkit-Plugin-Kompatibilität: PatchBukkit ​

Für Server, die auf bestehende Bukkit-/Spigot-.jar-Plugins angewiesen sind, bietet das Projekt PatchBukkit eine Kompatibilitätsschicht:

  • Architektur: PatchBukkit bettet eine JVM in Pumpkin ein, implementiert Teile der Bukkit-API nach und vermittelt Aufrufe über JNI und FFI an Pumpkin.
  • Plugin-Verzeichnis: Kompatible .jar-Plugins werden im Verzeichnis patchbukkit/patchbukkit-plugins/ abgelegt.
  • Status & Einschränkungen: PatchBukkit befindet sich in aktiver Entwicklung. Standardaufrufe der Bukkit-API werden unterstützt; Plugins, die stark auf NMS-Interna (net.minecraft.server), CraftBukkit-Reflexion oder Bytecode-Manipulation angewiesen sind, funktionieren möglicherweise noch nicht wie erwartet.
  • Java-Voraussetzung: Die Nutzung von PatchBukkit setzt eine installierte Java-Laufzeitumgebung (JRE/JDK) auf dem Hostsystem voraus, um die eingebettete JVM auszuführen.

3. Konfiguration & Eigenschaften ​

Pumpkin verwendet TOML-Konfigurationsdateien anstelle von server.properties und 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. Welt- & Datenspeicherung ​

  • Formatkompatibilität: Pumpkin liest das standardmäßige Anvil-Chunk-Format (.mca-Dateien).
  • Verzeichnisstruktur: Achte beim Kopieren von Welten aus bestehenden Paper-/Spigot-Installationen darauf, dass die Dimensionsverzeichnisse (world, world_nether, world_the_end) der erwarteten Pumpkin-Struktur entsprechen.
  • Aktuellstes Welt- & Datapack-Format erforderlich: Zumindest derzeit unterstützt Pumpkin nur das jeweils aktuellste Weltformat und Datapack-Format der unterstützten Minecraft-Version. Ältere Weltformate oder veraltete Datapack-Versionen werden zur Laufzeit nicht automatisch konvertiert.
    • Welten im Client aktualisieren: Wenn du eine ältere Welt migrierst, aktualisiere sie vor dem Laden in Pumpkin. Du kannst eine bestehende Welt direkt im offiziellen Minecraft-Client upgraden: Öffne den Client in der passenden aktuellen Version, gehe auf Einzelspieler, wähle die Welt aus, klicke auf Bearbeiten und wähle Welt optimieren. Alternativ kannst du die Welt einmalig auf einem Vanilla-Server der aktuellen Version starten und speichern.
    • Datapacks: Stelle sicher, dass alle Datapacks unter world/datapacks auf das von der Zielversion erwartete Format aktualisiert wurden.

5. Serverstart & JVM-Flags ​

Keine Java-Installation erforderlich ​

Ein reiner Pumpkin-Server ist eine eigenständige native Binärdatei. Du benötigst keine Java-Laufzeitumgebung (JRE/JDK) auf deinem System oder im Container, um den Server auszuführen.

Startbefehle ​

Paper- und Spigot-Server nutzen üblicherweise JVM-Startskripte mit Heap-Allokation und Flags zur Steuerung der Garbage Collection (wie z. B. Aikars Flags):

bash
# Typischer Paper-Startbefehl mit Aikars 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

Unterschiede im Speichermodell ​

  • Keine Garbage Collection: Pumpkin ist in Rust geschrieben und nutzt deterministisches Speichermanagement zur Kompilierzeit (RAII). Es gibt keinen Laufzeit-Garbage-Collector und keine GC-Pausenoptimierung.
  • Keine feste Heap-Reservierung: Flags wie -Xms und -Xmx existieren bei nativen Binärdateien nicht. Speicher wird bei Bedarf dynamisch vom Betriebssystem angefordert und beim Entladen von Chunks und Entities wieder freigegeben.
  • JVM-Flags nicht anwendbar: Flags zur Steuerung der Garbage Collection, Generationsgrößen oder JVM-Interna sind nicht erforderlich und können dem Programm nicht übergeben werden.

Admin-Checkliste ​

Veröffentlicht unter der MIT-Lizenz.