Pumpkin-Docs/docs/de/admin/migrating-from-bukkit.md
Alexander Medvedev 5c23b676ed feat: d binding
2026-09-17 09:23:24 +02:00

127 lines
6.9 KiB
Markdown

# 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
| Aspekt | Bukkit / Spigot / Paper | Pumpkin |
| :--- | :--- | :--- |
| **Laufzeitumgebung** | Java Virtual Machine (erfordert Java 17/21+) | Native Binärdatei (kompiliertes Rust, kein Java erforderlich) |
| **Startbefehl** | `java [flags] -jar server.jar` | `./pumpkin` |
| **Tick-Loop** | Single-Thread-Tick-Loop mit asynchroner Aufgabenverteilung | Multithreaded Tick-Ausführung über mehrere CPU-Kerne |
| **Plugin-Format** | Java-Bytecode (`.jar`) für die Bukkit-API | WebAssembly (`.wasm`) oder `.jar` via PatchBukkit |
| **Plugin-Sprachen** | Java, Kotlin, Scala | Rust, Python, Kotlin, C#, Go, C |
| **Konfiguration** | `server.properties`, `paper.yml`, `spigot.yml` | `pumpkin.toml` (TOML-Format) |
| **Speicherverwaltung** | JVM Garbage Collection | Native 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](../plugin-dev/migrating-from-bukkit/index).
### 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=25565` | `server_address = "0.0.0.0:25565"` |
| `motd=...` | `motd = "A Pumpkin Server"` |
| `max-players=20` | `max_players = 20` |
| `online-mode=true` | `online_mode = true` |
| `view-distance=10` | `view_distance = 10` |
| `simulation-distance=8` | `simulation_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):
:::code-group
```bash [Paper (JVM)]
# 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 [Pumpkin (Nativ)]
# 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
1. [ ] Sichere deine bestehenden Serverdaten und erstelle ein Backup, wobei Welt und Datapacks auf das aktuellste Format aktualisiert sein sollten (z. B. via „Welt optimieren“ im Client).
2. [ ] Übertrage Einstellungen aus `server.properties` in die `pumpkin.toml`.
3. [ ] Identifiziere benötigte Plugins und prüfe WebAssembly-Alternativen (`.wasm`) oder teste mit [PatchBukkit](#bukkit-plugin-kompatibilitat-patchbukkit).
4. [ ] Konfiguriere Proxy-Einstellungen (`Velocity` / `BungeeCord`) in der `pumpkin.toml`, falls ein Netzwerk betrieben wird.
5. [ ] Passe Startskripte an, um `./pumpkin` direkt ohne JVM-Argumente aufzurufen.
6. [ ] Starte den Server und überprüfe die Verbindung sowie die Protokolle.