127 lines
7.0 KiB
Markdown
127 lines
7.0 KiB
Markdown
# Bukkit / Spigot / Paper'dan Pumpkin'a Geçiş
|
||
|
||
Bu kılavuz, bir sunucuyu Bukkit, Spigot veya Paper'dan Pumpkin'a taşırken dikkate alınması gereken mimari ve yapılandırma farklılıklarını kapsar.
|
||
|
||
---
|
||
|
||
## 1. Mimari Farklılıklar
|
||
|
||
| Boyut | Bukkit / Spigot / Paper | Pumpkin |
|
||
| :--- | :--- | :--- |
|
||
| **Çalışma Zamanı Ortamı** | Java Sanal Makinesi (Java 17/21+ gerektirir) | Yerel yürütülebilir dosya (derlenmiş Rust, Java gerektirmez) |
|
||
| **Başlatma Komutu** | `java [flags] -jar server.jar` | `./pumpkin` |
|
||
| **Tick Döngüsü** | Asenkron iş parçacığı aktarımıyla tek iş parçacıklı tick döngüsü | CPU çekirdekleri arasında çok iş parçacıklı tick yürütümü |
|
||
| **Eklenti Biçimi** | Bukkit API hedefli Java bayt kodu (`.jar`) | WebAssembly (`.wasm`) veya PatchBukkit ile `.jar` |
|
||
| **Eklenti Dilleri** | Java, Kotlin, Scala | Rust, Python, Kotlin, C#, Go, C |
|
||
| **Yapılandırma** | `server.properties`, `paper.yml`, `spigot.yml` | `pumpkin.toml` (TOML biçimi) |
|
||
| **Bellek Yönetimi** | JVM Çöp Toplama (Garbage Collection) | Yerel işletim sistemi bellek tahsisi |
|
||
|
||
---
|
||
|
||
## 2. Eklentiler ve Uzantılar
|
||
|
||
### WebAssembly Eklentileri
|
||
Pumpkin'ın birincil eklenti biçimi WebAssembly (`.wasm`)'dir:
|
||
- **Yalıtım**: Eklentiler yalıtılmış bir WebAssembly çalışma zamanında çalışır.
|
||
- **Dil Desteği**: Eklentiler Rust, Python, Go, C#, C veya Kotlin dillerinden WASM'a derlenebilir.
|
||
- **Özel Eklentiler**: Özel Bukkit eklentilerinizi uyarlamak için [Geliştirici Geçiş Kılavuzu](../plugin-dev/migrating-from-bukkit/index) belgesine bakın.
|
||
|
||
### Bukkit Eklenti Uyumluluğu: PatchBukkit
|
||
Mevcut Bukkit/Spigot `.jar` eklentilerine ihtiyaç duyan sunucular için **PatchBukkit** projesi bir uyumluluk katmanı sağlar:
|
||
- **Mimari**: PatchBukkit, Pumpkin içine bir JVM gömer, Bukkit API'sinin parçalarını yeniden uygular ve çağrıları JNI ve FFI aracılığıyla Pumpkin'a iletir.
|
||
- **Eklenti Konumu**: Uyumlu `.jar` eklentileri `patchbukkit/patchbukkit-plugins/` dizinine yerleştirilir.
|
||
- **Durum ve Kısıtlamalar**: PatchBukkit aktif geliştirme aşamasındadır. Standart Bukkit API çağrıları desteklenir; dahili NMS (`net.minecraft.server`) sınıflarına, CraftBukkit dahili bileşenlerine veya bayt kodu manipülasyonuna dayanan eklentiler düzgün çalışmayabilir.
|
||
- **Java Gereksinimi**: PatchBukkit çalıştırmak, gömülü JVM'yi yürütmek için ana sistemde bir Java çalışma zamanı (JRE/JDK) bulunmasını gerektirir.
|
||
|
||
---
|
||
|
||
## 3. Yapılandırma ve Özellikler
|
||
|
||
Pumpkin, `server.properties` ve YAML dosyaları yerine TOML yapılandırma dosyalarını kullanır:
|
||
|
||
| 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. Dünya ve Veri Depolama
|
||
|
||
- **Biçim Uyumluluğu**: Pumpkin, standart Anvil chunk biçimini (`.mca` dosyaları) okur.
|
||
- **Dizin Düzeni**: Mevcut Paper/Spigot kurulumlarından dünyaları kopyalarken boyut dizinlerinin (`world`, `world_nether`, `world_the_end`) Pumpkin'ın beklediği düzenle eşleştiğinden emin olun.
|
||
- **En Son Dünya ve Datapack Biçimi Zorunluluğu**: En azından şimdilik Pumpkin, yalnızca desteklenen Minecraft sürümünün en son dünya ve datapack biçimini destekler. Eski dünya biçimleri veya eski datapack sürümleri çalışma zamanında otomatik olarak dönüştürülmez.
|
||
- **Dünyaları İstemcide Güncelleme**: Eski bir dünyayı taşıyorsanız Pumpkin'a yüklemeden önce güncelleyin. Mevcut bir dünyayı doğrudan resmi Minecraft istemcisinde güncelleyebilirsiniz: İstemciyi eşleşen en son sürümde açın, **Tek Oyunculu** menüsüne gidin, dünyayı seçin, **Düzenle**'ye tıklayın ve **Dünyayı İyileştir** (Optimize World) seçeneğini seçin. Alternatif olarak dünyayı en son sürümdeki bir vanilla sunucusunda bir kez açıp kaydedebilirsiniz.
|
||
- **Datapack'ler**: `world/datapacks` içinde bulunan tüm datapack'lerin hedef sürümün beklediği biçime güncellendiğinden emin olun.
|
||
|
||
---
|
||
|
||
## 5. Başlatma ve JVM Bayrakları
|
||
|
||
### Java Kurulumu Gerekmez
|
||
Saf Pumpkin bağımsız bir yerel ikili dosyadır. Sunucuyu çalıştırmak için işletim sisteminizde veya konteynerinizde Java çalışma zamanına (JRE/JDK) ihtiyacınız yoktur.
|
||
|
||
### Başlatma Komutları
|
||
Paper ve Spigot sunucuları genellikle bellek tahsisi ve çöp toplama ayarlarına yönelik başlatma komut dosyaları (Aikar's Flags gibi) kullanır:
|
||
|
||
:::code-group
|
||
|
||
```bash [Paper (JVM)]
|
||
# Aikar's Flags içeren tipik Paper başlatma komutu:
|
||
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 (Yerel)]
|
||
# Linux / macOS:
|
||
./pumpkin
|
||
|
||
# Windows:
|
||
./pumpkin.exe
|
||
|
||
# Docker:
|
||
docker run -p 25565:25565 -v ./data:/data pumpkinmc/pumpkin:latest
|
||
```
|
||
|
||
:::
|
||
|
||
### Bellek Farklılıkları
|
||
- **Çöp Toplayıcı Yoktur**: Pumpkin Rust dilinde yazılmıştır ve derleme zamanında deterministik bellek yönetimi (RAII) kullanır. Çalışma zamanı çöp toplayıcısı veya GC duraklama optimizasyonu bulunmaz.
|
||
- **Sabit Yığın Tahsisi Yoktur**: `-Xms` ve `-Xmx` gibi bayraklar yerel ikili dosyalarda bulunmaz. Bellek, chunk'lar ve varlıklar yüklendikçe işletim sisteminden dinamik olarak ayrılır ve kaldırıldıklarında iade edilir.
|
||
- **JVM Bayrakları Geçerli Değildir**: Çöp toplama stratejilerini, nesil boyutlandırmalarını veya JVM iç mekanizmalarını ayarlayan bayraklara gerek yoktur ve bunlar programa iletilemez.
|
||
|
||
---
|
||
|
||
## Yönetici Kontrol Listesi
|
||
|
||
1. [ ] Mevcut sunucu verilerinizi ve dünya dosyalarınızı yedekleyin, dünyanın ve datapack'lerin en son biçime güncellendiğinden emin olun (örn. istemcide "Optimize World" kullanarak).
|
||
2. [ ] `server.properties` ayarlarını `pumpkin.toml` dosyasına aktarın.
|
||
3. [ ] Gerekli eklentileri belirleyin ve WebAssembly (`.wasm`) karşılıklarını arayın veya [PatchBukkit](#bukkit-eklenti-uyumlulugu-patchbukkit) ile test edin.
|
||
4. [ ] Bir ağ kullanıyorsanız `pumpkin.toml` dosyasında proxy ayarlarını (`Velocity` / `BungeeCord`) yapılandırın.
|
||
5. [ ] Başlatma betiklerinizi JVM argümanları olmadan doğrudan `./pumpkin` çalıştıracak şekilde güncelleyin.
|
||
6. [ ] Sunucuyu başlatın, bağlantıları ve günlükleri kontrol edin.
|