Minecraft minigame sunucusu kurmak, tek bir sunucu jar’ı çalıştırmaktan çok bir mimari tasarlamaktır: önde oyuncuları karşılayan bir Velocity proxy, arkada lobi ve oyun sunucuları, hepsinin ortak kullandığı bir veritabanı. Bedwars, SkyWars veya Practice fark etmeksizin bu iskelet aynıdır; değişen sadece oyun eklentisi ve arena tasarımıdır.
Bu rehberde mimariyi kurmaktan arena hazırlamaya, harita sıfırlama stratejilerinden proxy güvenliğine kadar tüm adımları anlatıyoruz. Kurulum işletim sisteminden bağımsızdır; komutların hem Windows hem Linux karşılığı verilmiştir.
Mimari: Tek Sunucu mu, Ağ mı?#
Kaç oyuncu beklediğinize göre iki yol var.
Tek sunucu (başlangıç)#
Bir Paper sunucusu, içinde lobi dünyası ve 3-6 arena dünyası. Kurulumu basittir, proxy yönetmezsiniz. Sakıncası: tüm arenalar aynı tick döngüsünü paylaşır. Bir maçtaki TNT patlaması diğer maçtaki oyuncunun ping’ini hissettirir. 40-50 eşzamanlı oyuncuya kadar iş görür.
Proxy ağı (ölçekli)#
Velocity önde, arkada bağımsız Paper süreçleri: lobi, bedwars-1, bedwars-2, skywars. Her sunucu kendi heap’inde çalışır; biri çökse ağ ayakta kalır. Toplam RAM ihtiyacı artar ama gerçek ölçeklenme budur.
[ Velocity proxy : 25565 ]
|
+-- [ lobi : 25566 ] 8 GB -> hafif, çok oyunculu
+-- [ bedwars-1 : 25567 ] 12 GB -> 4-6 arena
+-- [ bedwars-2 : 25568 ] 12 GB -> 4-6 arena
+-- [ skywars : 25569 ] 10 GB -> hızlı döngü
|
+-- [ MySQL / MariaDB ] -> istatistik, LuckPerms, ekonomi
Proxy kurulumu, oyuncu yönlendirme ve komut yapılandırması için BungeeCord ve Velocity ile sunucu ağı kurulumu sayfası ana kaynağınız olsun. Aşağıda minigame’e özgü kısımlara odaklanıyoruz.
Adım 1: Temel Kurulum#
Her arka uç sunucu Paper 26.2 üzerinde, Java 25 ile çalışacak. Minecraft 26.2 “Chaos Cubed” protokol 776 kullanır ve Java 25 zorunludur.
-
Eclipse Temurin JDK 25LTS — zorunluİndir
-
Paper 26.2 — arka uç sunucularÖnerilenİndir
-
Velocity proxyKararlı hat: 4.0.0İndir
-
LuckPerms (Paper + Velocity yapıları)İndir
-
WorldEdit — arena hazırlığıİndir
-
ViaVersion ailesi — çoklu istemci desteğiİndir
Velocity indirme sayfası en üstte bir SNAPSHOT sürüm gösterebilir; üretim ağlarında kararlı hattı kullanın. Oyun eklentilerini Hangar, Modrinth veya SpigotMC üzerinden edinin.
Adım 2: Proxy Yapılandırması ve Güvenlik#
Velocity’nin velocity.toml dosyasında minigame ağı için kritik olan bölümler:
bind = "0.0.0.0:25565"
motd = "<green>Minigame Ağı <gray>| Bedwars & SkyWars"
show-max-players = 500
online-mode = true
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"
[servers]
lobi = "127.0.0.1:25566"
bedwars1 = "127.0.0.1:25567"
bedwars2 = "127.0.0.1:25568"
skywars = "127.0.0.1:25569"
try = ["lobi"]
[forced-hosts]
[advanced]
compression-threshold = 256
login-ratelimit = 3000
connection-timeout = 5000
Arka uç sunucularda karşılığını yapmayı unutmayın. Paper tarafında config/paper-global.yml:
proxies:
velocity:
enabled: true
online-mode: true
secret: "forwarding.secret icindeki deger"
bungee-cord:
online-mode: false
Ve server.properties içinde:
online-mode=false
server-ip=127.0.0.1
server-port=25567
prevent-proxy-connections=false
enable-command-block=false
online-mode=false yalnızca sunucu proxy’nin arkasında ve dışarıya kapalı olduğunda güvenlidir. Arka uç portlarını (25566-25569) güvenlik duvarında internete kapatın; yalnızca 127.0.0.1 veya proxy makinesinin IP’sine izin verin. Aksi halde herkes istediği isimle doğrudan bağlanabilir.# Linux — arka uç portlarını dışarıya kapat
sudo ufw allow 25565/tcp
sudo ufw deny 25566:25569/tcp
sudo ufw status numbered
# Windows Server — sadece proxy portu açık kalsın
New-NetFirewallRule -DisplayName "MC-Proxy" -Direction Inbound -LocalPort 25565 -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "MC-Backend-Kapat" -Direction Inbound -LocalPort 25566-25569 -Protocol TCP -Action Block
Güvenlik duvarı kurallarının tamamı için firewall yapılandırma rehberine bakın.
Adım 3: Lobi Sunucusu#
Lobi, oyuncuların ilk gördüğü yerdir ve en çok eşzamanlı oyuncuyu barındırır. Yükü hafif tutmak için tüm oyun mekaniklerini kapatın.
gamemode=adventure
force-gamemode=true
difficulty=peaceful
pvp=false
spawn-monsters=false
spawn-animals=false
spawn-npcs=false
allow-nether=false
generate-structures=false
level-type=minecraft:flat
view-distance=6
simulation-distance=4
max-players=500
online-mode=false
server-port=25566
# bukkit.yml — lobide mob doğmasın
spawn-limits:
monsters: 0
animals: 0
water-animals: 0
ambient: 0
ticks-per:
autosave: 0
# paper-world-defaults.yml
entities:
spawning:
per-player-mob-spawns: true
chunks:
auto-save-interval: -1
Lobide otomatik kaydı kapatmak (autosave: 0) mantıklıdır: lobi dünyası değişmez, her kayıt boşuna disk yazması demektir. Ancak bunu yalnızca lobide yapın, oyun sunucularında asla.
Adım 4: Arena Hazırlama#
Arena, minigame sunucusunun ürünüdür. Kötü bir arena, mükemmel bir eklentiyle bile oyuncu tutamaz. Hazırlarken izlenecek yol:
-
Haritayı ayrı bir dünyada inşa edin#
Arenaları ana dünyada yan yana dizmek yerine her arena için ayrı bir dünya klasörü kullanın. Böylece sıfırlama tek klasör kopyalamaya iner ve bir arenadaki sorun diğerini etkilemez.
-
Simetriyi WorldEdit ile sağlayın#
Takım adalarını elle çizmek yerine bir adayı yapıp kopyalayın ve döndürün. Bedwars’ta takımlar arası simetri denge açısından zorunludur.
//wand //copy //rotate 90 //paste -a //schem save bedwars_ada_sablonu -
Yapıyı şematik olarak kaydedin#
Her arena şablonunu
plugins/WorldEdit/schematics/altında saklayın. Bir arena bozulduğunda tek komutla geri yüklersiniz. -
Oyun noktalarını tanımlayın#
Takım spawn noktaları, yatak konumları, kaynak jeneratörleri, mağaza NPC’leri ve seyirci alanı. Bu tanımları eklentinin kendi kurulum sihirbazıyla yapın ve mutlaka test maçı oynayın.
-
Sınır koyun#
Arena dışına çıkan oyuncu boşluğa düşmemeli, barrier bloklarla ya da eklentinin sınır ayarıyla durdurulmalı. Aksi halde her maçta bir oyuncu haritadan çıkıp maçı kilitler.
Adım 5: Harita Sıfırlama Stratejisi#
Minigame sunucusunun teknik kalbi budur. Maç bitince harita eski haline dönmeli, üstelik bir sonraki maç hemen başlayabilmeli.
| Yöntem | Nasıl çalışır | Hız | Disk yükü |
|---|---|---|---|
| Dosya kopyalama | Şablon dünya klasörü maç sonunda geri kopyalanır | Yavaş (saniyeler) | Yüksek |
| Değişiklik geri alma | Maç boyunca değişen bloklar bellekte tutulup geri alınır | Hızlı (ms) | Düşük |
| Şematik geri yükleme | Kaydedilmiş şematik arenaya yeniden yapıştırılır | Orta | Orta |
| Bellek diski (tmpfs) | Arena dünyaları RAM üzerinde tutulur | Çok hızlı | Yok (RAM tüketir) |
En iyi sonuç için değişiklik geri alma yöntemini destekleyen bir eklenti seçin. Bu mümkün değilse ve Linux kullanıyorsanız arena dünyalarını bellek diskine taşımak dramatik bir fark yaratır:
# Arena dünyaları için 4 GB'lık bellek diski
sudo mkdir -p /mnt/arenalar
sudo mount -t tmpfs -o size=4G tmpfs /mnt/arenalar
# Şablonları oraya kopyala
sudo cp -a /opt/minecraft/bedwars1/arenalar/* /mnt/arenalar/
# Kalıcı olması için /etc/fstab
# tmpfs /mnt/arenalar tmpfs size=4G,mode=0755 0 0
Adım 6: Ortak Veritabanı ve İstatistikler#
Ağdaki her sunucu aynı veritabanına yazmalıdır. Aksi halde oyuncunun bedwars-1’de kazandığı puan bedwars-2’de görünmez, lobideki sıralama tablosu yanlış olur.
CREATE DATABASE mcnetwork CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mcuser'@'localhost' IDENTIFIED BY 'guclu-bir-parola';
GRANT ALL PRIVILEGES ON mcnetwork.* TO 'mcuser'@'localhost';
FLUSH PRIVILEGES;
LuckPerms’i de aynı veritabanına bağlayın; böylece bir sunucuda verilen rank tüm ağda geçerli olur:
# plugins/LuckPerms/config.yml
storage-method: mysql
data:
address: 127.0.0.1:3306
database: mcnetwork
username: mcuser
password: 'guclu-bir-parola'
table-prefix: 'luckperms_'
# Sunucular arası anlık senkronizasyon
messaging-service: sql
sync-minutes: 3
Yetki gruplarını kurmak için LuckPerms rehberimize bakın. Proxy tarafındaki LuckPerms yapısının Velocity sürümü olduğundan emin olun; Paper jar’ı Velocity’de çalışmaz.
Adım 7: Performans Ayarları#
Minigame sunucularının yük profili survival’dan tamamen farklıdır: dünya küçük, oyuncu yoğun, blok değişimi hızlı ve dünya yükleme/boşaltma sürekli.
# paper-world-defaults.yml — oyun sunucuları için
chunks:
max-auto-save-chunks-per-tick: 4
auto-save-interval: 12000
prevent-moving-into-unloaded-chunks: true
entities:
spawning:
per-player-mob-spawns: true
despawn-ranges:
monster:
hard: 64
soft: 28
environment:
optimize-explosions: true
collisions:
max-entity-collisions: 2
misc:
update-pathfinding-on-block-update: false
# spigot.yml
entity-activation-range:
animals: 8
monsters: 16
misc: 4
water: 8
entity-tracking-range:
players: 64
misc: 24
merge-radius:
item: 4.0
exp: 6.0
mob-spawn-range: 4
Dikkat: entity-tracking-range.players değerini minigame’de fazla düşürmeyin. Bedwars’ta 60 blok öteden köprü kuran rakibi görememek oyunu bozar. Diğer aralıkları kısın, oyuncu izlemeyi geniş tutun.
Yavaşlama yaşadığınızda ölçün: /spark profiler start --timeout 120 komutu iki dakikalık bir rapor üretir. Rapor okuma için spark ve timings analizi, genel iyileştirme için optimizasyon rehberi sayfalarımıza bakın.
Donanım: Minigame Ağı İçin Planlama#
Minecraft’ın ana tick döngüsü tek çekirdekte çalışır; minigame’de bu döngü sürekli blok değişikliği ve dünya yükleme işler. Belirleyici olan saat hızıdır, çekirdek sayısı değil. Ancak proxy ağında birden çok Java süreci çalıştığı için toplam çekirdek sayısı da önem kazanır.
| Kurulum | RAM | İşlemci | Disk |
|---|---|---|---|
| Tek sunucu, 2-10 oyuncu test kurulumu | 8 GB | Ryzen 9 3900X ve üzeri | 50 GB NVMe SSD |
| Tek sunucu, 10-30 oyuncu, 3-4 arena | 10-12 GB | Ryzen 9 7900X | 100 GB NVMe SSD |
| 30-60 oyuncu, çok arenalı minigame | 16 GB | Ryzen 9 7900X / 7950X | 100 GB+ NVMe SSD |
| 60+ oyuncu, proxy + lobi + 2-3 oyun sunucusu | 32 GB ve üzeri | Ryzen 9 7950X | 200 GB+ NVMe SSD |
Heap dağıtımı örneği (32 GB paket, proxy ağı):
Velocity proxy’si dünya tutmadığı ve oyun mantığı işlemediği için arka uç sunuculara kıyasla çok az bellek ister; toplam bütçenizin küçük bir dilimini ona ayırıp kalan belleğin tamamını oyun sunucularına dağıtın. Asıl heap yatırımı arka uçtaki Paper süreçlerine yapılır.
# Lobi sunucusu
java -Xms6G -Xmx6G -XX:+UseG1GC -jar paper.jar nogui
# Bedwars sunucusu
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 -XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 \
-jar paper.jar nogui
Java 25’te G1 hâlâ JVM varsayılanıdır ve Aikar’s Flags 26.x sunucularında geçerliliğini korur; minigame gibi kısa duraklamaların kritik olduğu yerlerde G1 + MaxGCPauseMillis=200 iyi bir tercihtir. Ayrıntı için RAM ayarları ve JVM flag’leri sayfasına bakın.
Ağ tarafında düşük ping PvP odaklı modlarda doğrudan oyun kalitesidir. Türkiye lokasyonlu, yüksek frekanslı Ryzen tabanlı seçenekler için Minecraft sunucu paketleri ya da tam kontrol isteyenler için yüksek frekanslı VDS sayfalarına bakabilirsiniz.
Çoklu İstemci Desteği ve PvP Sürümü#
Practice ve PvP sunucularında 1.8 vuruş mekaniği hâlâ talep görür. İki yaklaşım var:
- Modern sunucu + ViaVersion: Arka uç 26.2’de kalır, eski istemciler ViaBackwards ve ViaRewind ile bağlanır. Vuruş mekaniği yeni sürüme aittir; 1.8 hissini vermez.
- 1.8.9 arka uç sunucusu: Ayrı bir Paper 1.8.9 sunucusu çalıştırıp proxy’ye bağlarsınız. Vuruş mekaniği gerçekten 1.8’dir. Kurulum için 1.8.9 sunucu kurulumu sayfasına bakın; bu sürüm Java 8 ister.
ViaVersion 5.11.0 Paper 1.8–26.2 aralığını, ViaBackwards 1.10–26.2 aralığını, ViaRewind ise 1.7/1.8 istemcilerini kapsar. Üçü birlikte kurulduğunda ağınıza çok geniş bir istemci yelpazesi bağlanabilir.
Açılış Öncesi Kontrol Listesi#
-
Tam bir maç oynayın#
Başlangıçtan bitişe kadar test maçı yapın. Yatak kırma, jeneratör yükseltme, mağaza alışverişi, oyuncu elenmesi ve maç sonu ödülü çalışıyor mu?
-
Sıfırlamayı üç kez üst üste test edin#
Tek sıfırlama çalışabilir; üçüncüde artık bloklar veya kayan item’lar kalıyorsa sıfırlama eksiktir. Bu, minigame sunucularının bir numaralı hatasıdır.
-
Proxy geçişlerini doğrulayın#
Lobiden oyun sunucusuna, oradan lobiye dönüşü test edin. Oyuncu adı, rank ve istatistikleri her geçişte doğru taşınıyor mu?
-
Arka uç portlarının kapalı olduğunu kanıtlayın#
# Dışarıdan bir makineden dene nc -zv sunucu-ip 25567 # "Connection refused" veya zaman aşımı almalısınız -
Anticheat’i her oyun sunucusuna ayrı kurun#
Anticheat proxy’ye kurulmaz. Her arka uç sunucuya, o sunucunun mekaniğine uygun profille kurun. Muafiyetler için anticheat rehberine bakın.
-
Yedek ve izleme kurun#
Arena şablonları, eklenti yapılandırmaları ve veritabanı yedeklenmeli. Kurulum: yedekleme rehberi ve sunucu izleme.
Sık Yapılan Hatalar#
Arka uç portlarını açık bırakmak#
online-mode=false ile çalışan bir sunucunun portu internete açıksa herkes istediği isimle girebilir. Bu, proxy ağlarının en yaygın ve en ağır güvenlik hatasıdır.
Tüm modları tek sunucuda çalıştırmak#
Bedwars, SkyWars ve Practice’i aynı Java sürecinde çalıştırmak kısa vadede tasarruf gibi görünür; ilk yoğun akşamda hepsi birden takılır.
Harita sayısını çoğaltıp kaliteyi düşürmek#
Yirmi ortalama harita yerine altı iyi harita yapın. Oyuncular haritayı öğrenip ustalaşmayı sever.
İstatistikleri yerel dosyada tutmak#
Ağ büyüdüğünde her sunucu kendi dosyasına yazar ve veriler dağılır. Baştan MySQL kurun; sonradan taşımak zahmetlidir.
Lobide autosave’i kapatmayı unutmak#
Değişmeyen bir lobi dünyasını her beş dakikada bir diske yazmak boşuna I/O harcar. Kapatın.
Özetle#
Minigame sunucusu kurmanın iskeleti şudur: Velocity proxy önde, Paper 26.2 arka uç sunucular arkada, ortak bir MySQL veritabanı hepsinin altında. Lobi hafif tutulur, oyun sunucuları kendi heap’lerinde çalışır, arka uç portları internete kapatılır.
Teknik başarının anahtarı arena sıfırlamadır: değişiklik geri alma yöntemini destekleyen bir eklenti seçin, mümkünse arena dünyalarını bellek diskinden çalıştırın ve sıfırlamayı üç kez üst üste test etmeden açılış yapmayın.
Donanım tarafında 30-60 oyunculu bir kurulum 16 GB, proxy’li tam bir ağ 32 GB ve üzeri ister; disk her koşulda NVMe SSD, işlemci yüksek saat hızlı Ryzen 9 olmalıdır.
Proxy ayrıntıları için Velocity kurulumu, mod seçimi için sunucu türleri ve oyuncu kazanmak için tanıtım rehberimize bakın.