Skript, Java bilmeden Minecraft sunucunuza kendi özelliklerinizi yazmanızı sağlayan bir Bukkit/Spigot/Paper eklentisidir. Bir oyuncu girdiğinde özel mesaj göstermek, /kit komutu tanımlamak, belirli bir bölgede blok kırmayı engellemek ya da her 5 dakikada bir duyuru geçmek için ayrı ayrı eklenti aramanıza gerek kalmaz; hepsini birkaç satırlık, İngilizceye çok yakın bir metin dosyasıyla halledersiniz.
Bu rehberde Skript’i sunucunuza kurmayı, ilk .sk dosyanızı yazmayı, olayları ve komutları yakalamayı, değişkenlerle kalıcı veri saklamayı ve scriptlerinizi hata ayıklamayı adım adım göreceksiniz. Anlatılanların tamamı Minecraft 26.2 “Chaos Cubed” üzerinde çalışan güncel bir Paper sunucusu içindir; kurulum adımları işletim sisteminden bağımsızdır.
Skript Nedir, Ne İşe Yarar?#
Skript teknik olarak tek bir jar dosyasıdır. Sunucunuza kurulduğunda, plugins/Skript/scripts/ klasöründeki metin dosyalarını okur ve içindeki cümleleri çalışma anında Bukkit API çağrılarına çevirir. Yani her script için ayrı bir eklenti derlenmez; Skript tek bir eklenti olarak çalışır, yazdığınız dosyalar onun içinde yorumlanır.
Pratikte şu işler için kullanılır:
- Küçük özelleştirmeler: giriş/çıkış mesajları, sohbet formatı, ölüm mesajları, tab listesi metni.
- Basit komutlar:
/spawn,/kit,/discord,/oygibi sunucuya özel komutlar. - Oyun mekaniği: madencilikten para kazanma, özel eşya tarifleri, seviyeli görev sistemi.
- Yönetim otomasyonu: otomatik yeniden başlatma duyurusu, boş sunucuda dünya kaydetme, oyuncu sayacı.
- Boşluk doldurma: hazır bir eklentinin eksik bıraktığı tek bir davranışı 10 satırla eklemek.
Skript Kurulumu: Sunucuya Ekleme#
Skript, sıradan bir eklenti gibi kurulur. Genel eklenti mantığını plugin kurulumu rehberinde ayrıntılı bulabilirsiniz; burada Skript’e özel noktalara odaklanıyoruz.
-
Skript (SkriptLang) — Modrinth deposuZorunluİndir
-
Paper 26.2 sunucu jarÖnerilenİndir
-
Eclipse Temurin JDK 25 (LTS)İndir
-
Vault — ekonomi köprüsü (isteğe bağlı)İndir
-
PlaceholderAPI (isteğe bağlı)İndir
Skript ve addon’larını yalnızca Modrinth, Hangar ve SpigotMC gibi resmî depolardan indirin. Forumlarda paylaşılan “düzeltilmiş” jar dosyaları sık sık zararlı kod içerir.
-
Sunucu yazılımını ve Java’yı doğrulayın#
Skript Bukkit tabanlı bir sunucu ister. Paper ya da Purpur kullanın; Paper sunucu kurulumu sayfası bu işi baştan sona anlatır. Minecraft 26.1 ve sonrası Java 25 gerektirir. Hangi sürümün hangi Java’yı istediğini Java sürümü tablosundan kontrol edin.
-
Jar dosyasını plugins klasörüne kopyalayın#
İndirdiğiniz
Skript.jardosyasını sunucununpluginsklasörüne atın. Panelli bir sunucuda dosya yöneticisinden yükleyebilir, kendi sunucunuzda SFTP ile aktarabilirsiniz. -
Sunucuyu yeniden başlatın#
Eklentiyi ilk kez tanıtmak için
/reloaddeğil, tam yeniden başlatma kullanın. Konsolda Skript’in yüklendiğini ve varsayılan klasörleri oluşturduğunu göreceksiniz.[Skript] Loading version ... [Skript] Loaded 0 scripts in 0.0 seconds [Skript] Skript is now enabled! -
Oluşan klasör yapısını tanıyın#
plugins/ └── Skript/ ├── config.sk → Skript ayarları ├── lang/ → dil dosyaları ├── scripts/ → BURAYA yazacaksınız │ └── -example.sk → başındaki tire: devre dışı └── variables.csv → kalıcı değişken deposu -
İlk scripti oluşturun ve yükleyin#
scriptsklasöründehosgeldin.skadında bir dosya açın, içine bir şeyler yazın ve oyun içi ya da konsoldan yükleyin:/sk reload hosgeldin /sk reload all
.sk olmalı. Windows’ta “bilinen dosya uzantılarını gizle” açıksa dosyanız aslında hosgeldin.sk.txt olabilir ve Skript onu hiç görmez.Sözdizimi Temelleri: Girinti ve Yapı#
Skript’in tek katı kuralı girintidir. Her blok iki nokta üst üste ile biter, altındaki satırlar bir seviye içeriden başlar. Python’a benzer ama daha affedicidir; yine de bir dosyada tab ve boşluğu karıştıramazsınız. Not Defteri yerine Notepad++ ya da VS Code gibi görünmez karakterleri gösteren bir editör kullanın.
# scripts/hosgeldin.sk
# Yorum satırı diyez ile başlar
on join:
set join message to "&8[&a+&8] &e%player%"
send "&aSunucumuza hoş geldin, &f%player%&a!" to player
send "&7Kurallar için &f/kurallar &7yazabilirsin." to player
play sound "entity.player.levelup" to player
on quit:
set quit message to "&8[&c-&8] &e%player%"
Buradaki üç yapıyı tanımanız yeterli: on join: bir event (olay), altındaki satırlar effect (etki), %player% ise bir expression (ifade). Yüzde işaretleri arasına yazdığınız her şey metnin içine değeriyle basılır.
Sık kullanılan ifadeler#
| İfade | Ne döner? | Örnek kullanım |
|---|---|---|
player | Olayı tetikleyen oyuncu | send "..." to player |
%player% | Oyuncunun görünen adı | "Merhaba %player%" |
uuid of player | Değişmez oyuncu kimliği | {para::%uuid of player%} |
event-block | Olaydaki blok | on break: ... event-block |
all players | Çevrimiçi oyuncu listesi | loop all players: |
location of player | Konum nesnesi | teleport player to ... |
player's tool | Eldeki eşya | if player's tool is diamond pickaxe: |
uuid of player kullanın. Oyuncu adını değiştirdiğinde ada bağlı verileri kaybedersiniz; UUID hiç değişmez. Premium olmayan (offline-mode) sunucularda ise UUID adın kendisinden üretildiği için AuthMe gibi bir giriş eklentisi ile birlikte planlama yapın.Olay (Event) Yakalama#
Skript’in gücünün büyük kısmı olaylardan gelir. Sunucuda olan bitene tepki verirsiniz: blok kırılması, hasar alma, sohbet mesajı, envanter tıklaması, sandık açma. Herhangi bir olayı cancel event ile iptal edebilirsiniz — koruma mantığının tamamı bu tek satıra dayanır.
# scripts/koruma.sk
on break of diamond ore:
if player does not have permission "sunucu.elmas":
cancel event
send "&cBu blogu kirmak icin yetkiniz yok." to player
on right click on chest:
if {kilit::%location of event-block%} is set:
if {kilit::%location of event-block%} is not uuid of player:
cancel event
send "&cBu sandik baskasina ait." to player
on damage:
if victim is a player:
if attacker is a player:
if {pvp} is false:
cancel event
send "&7PvP su anda kapali." to attacker
Yetki denetimini elle yazmak yerine gerçek bir izin sistemine bağlamak daha sağlıklıdır. LuckPerms ile yetki grupları kurup scriptlerinizde yalnızca player has permission "..." kontrolü yapın; böylece yetkiyi oyun içinden yönetirsiniz.
Komut Tanımlama#
Skript’te komut tanımlamak için ayrı bir plugin.yml düzenlemeniz gerekmez; komutun tamamı script dosyasının içinde durur. Yetki, bekleme süresi (cooldown), takma ad ve kullanım mesajı aynı blokta tanımlanır.
# scripts/komutlar.sk
command /spawn:
description: Oyuncuyu spawn noktasina isinlar
aliases: /s, /merkez
permission: sunucu.spawn
permission message: "&cBu komutu kullanma yetkiniz yok."
cooldown: 10 seconds
cooldown message: "&cTekrar denemek icin %remaining time% bekleyin."
executable by: players
trigger:
teleport player to spawn of world "world"
send "&aSpawn noktasina isinlandiniz."
command /kit <text>:
permission: sunucu.kit
usage: "&e/kit <baslangic|savasci>"
trigger:
if arg-1 is "baslangic":
give player 16 bread
give player a stone sword
send "&aBaslangic kiti verildi."
else if arg-1 is "savasci":
give player an iron sword
give player 32 golden apples
send "&aSavasci kiti verildi."
else:
send "&cBoyle bir kit yok. &e/kit baslangic"
executable by: players yazmazsanız konsolda player ifadesi boş kalır ve script hata verir. Konsol tarafındaki genel komutlar için konsol komutları listesine bakabilirsiniz.Değişkenler, Listeler ve Kalıcı Veri#
Skript’te iki tür değişken vardır. Süslü parantez içindeki normal değişkenler ({para}) kalıcıdır ve sunucu kapansa bile variables.csv dosyasında saklanır. Alt çizgiyle başlayanlar ({_gecici}) yereldir, yalnızca o kod bloğu boyunca yaşar ve çok daha hızlıdır.
İki nokta üst üste ile ayrılan isimler liste oluşturur: {para::%uuid of player%} yazdığınızda tek bir “para” listesi altında her oyuncu için ayrı bir girdi tutulur.
# scripts/ekonomi.sk
on mine of diamond ore:
add 25 to {para::%uuid of player%}
send action bar "&a+25 TL &7(Toplam: %{para::%uuid of player%}%)" to player
command /bakiye:
trigger:
if {para::%uuid of player%} is not set:
set {para::%uuid of player%} to 0
send "&eBakiyeniz: &f%{para::%uuid of player%}% TL"
command /odul:
trigger:
set {_bugun} to now
if difference between {odul::%uuid of player%} and {_bugun} is less than 1 day:
send "&cGunluk odulunuzu zaten aldiniz."
stop
set {odul::%uuid of player%} to {_bugun}
add 500 to {para::%uuid of player%}
send "&aGunluk odul: 500 TL"
variables.csv dosyası bozulursa oyuncularınızın tüm script verisi (para, kit hakkı, ev konumu) gider. Bu dosyayı da yedek planınıza dahil edin; sunucu yedekleme rehberindeki otomatik yedek düzeni tam da bunun için vardır. Yüksek trafikli sunucularda değişkenleri CSV yerine MySQL’de tutmak için config.sk içindeki veritabanı bölümünü kullanın.Koşullar, Döngüler ve Fonksiyonlar#
Aynı kodu iki yerde tekrarlamaya başladığınız an fonksiyon yazmanın vaktidir. Skript fonksiyonları parametre alır, isterse değer döndürür ve tüm scriptlerden çağrılabilir.
# scripts/fonksiyonlar.sk
function paraVer(p: player, miktar: number):
add {_miktar} to {para::%uuid of {_p}%}
send "&a%{_miktar}% TL hesabiniza eklendi." to {_p}
function seviye(p: player) :: number:
set {_puan} to {puan::%uuid of {_p}%} ? 0
return floor({_puan} / 100) + 1
on death of zombie:
if attacker is a player:
paraVer(attacker, 5)
every 5 minutes:
loop all players:
if loop-player is not op:
send "&6[Duyuru] &fOylama yaparak sunucuya destek olabilirsin: &e/oy" to loop-player
on load:
set {pvp} to true
broadcast "&7Scriptler yeniden yuklendi."
Buradaki ? 0 yazımı “değer yoksa 0 kabul et” demektir; is not set kontrollerinin çoğunu ortadan kaldırır. every 5 minutes bloğu ise sunucu açık olduğu sürece kendi kendine çalışan bir zamanlayıcıdır.
Addon’lar: Skript’i Genişletmek#
Skript çekirdeği tek başına çok iş görür ama GUI menüsü, özel NBT verisi, veritabanı sorgusu ve harici eklenti entegrasyonu için addon gerekir. Addon’lar da birer jar dosyasıdır ve normal eklenti gibi plugins klasörüne konur.
| Addon | Ne katar? | Kime gerekir? |
|---|---|---|
| SkBee | NBT, özel item, bossbar, harita, veri bileşenleri | Neredeyse herkese |
| skript-reflect | Doğrudan Java sınıflarına erişim, gelişmiş özel sözdizimi | İleri seviye |
| SkQuery | Klasik yardımcı sözdizimleri, dosya işlemleri | Eski scriptleri taşıyanlara |
| skript-placeholders | PlaceholderAPI ile iki yönlü entegrasyon | Tab/scoreboard kuranlara |
| Vault (addon değil, köprü) | Ekonomi ve izin eklentilerine erişim | Ekonomi kuranlara |
26.x Uyumluluğu ve Sürüm Tuzağı#
2026’nın en kritik konusu bu. Minecraft 26.1 “Tiny Takeover” ile Mojang obfuscated sunucu jar’ı yayımlamayı bıraktı. Bu sadece bir sürüm atlaması değil, bir ABI kırılmasıdır: NMS (net.minecraft.server) sınıflarına dokunan her eklenti ve addon yeniden derlenmeden çalışmaz. Skript ve özellikle SkBee gibi derine inen addon’lar tam olarak bu kategoridedir.
Pratik sonuçları:
- 1.21.11 döneminden kalma Skript jar’ı 26.2’de açılmaz, konsolda sınıf bulunamadı hataları basar.
- Addon’ların 26.x etiketli sürümünü ayrıca indirmeniz gerekir; eski addon tek başına tüm script klasörünü çökertir.
- Sözdizimi büyük ölçüde aynı kalır — scriptlerinizi baştan yazmanız gerekmez, yalnızca jar’ları tazelersiniz.
- Sunucu Java 25 ile çalışmalıdır. Java 21 üzerinde 26.x sunucusu hiç açılmaz.
Sürüm numaralandırmasının neden değiştiğini ve 1.21’den 26.1’e geçişin ne anlama geldiğini yeni sürüm numaralandırması sayfasında ayrıntılı anlattık.
Hata Ayıklama ve /sk Komutları#
Skript hatalarını gizlemez; hangi dosyanın hangi satırında ne beklediğini yazar. Konsolu okumayı alışkanlık haline getirin.
/sk reload all → tüm scriptleri yeniden yükler
/sk reload <dosya> → tek dosyayı yükler (üretimde bunu tercih edin)
/sk disable <dosya> → dosya adının başına tire koyar
/sk enable <dosya> → tireyi kaldırır ve yükler
/sk list → yüklü scriptleri listeler
/sk info → Skript ve addon sürümlerini gösterir
Tipik bir hata çıktısı şuna benzer:
[Skript] Line 12: (ekonomi.sk)
Can't understand this condition: 'if {para::%uuid of player%} bigger 100'
Line: if {para::%uuid of player%} bigger 100:
Buradaki hata bigger yerine is greater than yazılması gerektiğidir. En sık karşılaşılan üç sorun ve çözümü:
- Tab / boşluk karışması
- Editörde görünmez karakterleri açın, dosyayı baştan sona tek biçime çevirin.
- Eksik iki nokta
on joindeğilon join:. Blok açan her satır iki nokta ile biter.- Addon gerektiren sözdizimi
- Forumdan aldığınız script tanınmıyorsa
/sk infoile addon listenizi karşılaştırın.
/sk reload all yerine yalnızca değiştirdiğiniz dosyayı yükleyin. Tüm scriptleri birden yüklemek ana iş parçacığını kilitleyebilir ve oyunculara donma olarak yansır. Aynı sırada TPS düşüşü yaşıyorsanız “Can’t keep up” uyarısının nedenlerine göz atın.Performans: Scriptler Sunucuyu Nasıl Yorar?#
Skript kodu ana iş parçacığında (main thread) çalışır. Yani yavaş bir script doğrudan TPS’i düşürür. Tick başına maliyeti düşük tutmanın kuralları:
-
Sık tetiklenen olaylardan kaçının#
on walk,on moveveevery ticksaniyede yüzlerce kez çalışır. Aynı işievery secondile yapabiliyorsanız öyle yapın. -
Geniş blok döngüleri kurmayın#
loop blocks in radius 50 around playertek seferde yüz binlerce blok gezer ve sunucuyu saniyelerce dondurur. Yarıçapı küçültün ya da işiwait 1 tickile parçalara bölün. -
Yerel değişkeni tercih edin#
{_gecici}bellekte kalır,{kalici}ise diske yazılır. Döngü içinde kalıcı değişkene sürekli yazmak disk I/O üretir. -
Ölçün, tahmin etmeyin#
spark profiler raporunda Skript ayrı bir satır olarak görünür ve hangi scriptin yüklendiğini gösterir. Yöntemi spark ve timings analizi sayfasında anlattık.
Donanım tarafında Skript’in tek çekirdek performansına duyarlı olduğunu unutmayın: ana tick döngüsü tek çekirdekte çalıştığı için çekirdek sayısı değil saat hızı belirleyicidir. Eklentili bir Paper sunucusu için 10-12 GB RAM ve Ryzen 9 7900X sınıfı yüksek frekanslı bir işlemci, NVMe SSD ile birlikte rahat bir taban sunar. Batihost’un Minecraft sunucu paketleri bu donanım profiline göre yapılandırılmıştır.
Skript mi, Gerçek Eklenti mi?#
Skript her işin çözümü değildir. Karar verirken şu çizgiye bakın:
| Durum | Skript | Java eklentisi |
|---|---|---|
| Küçük özelleştirme, birkaç komut | Uygun | Gereksiz |
| Hızlı prototip, fikir denemesi | Uygun | Yavaş |
| Yoğun veritabanı işi, karmaşık mimari | Zorlanır | Uygun |
| Asenkron işlem, harici API çağrısı | Addon şart | Uygun |
| Birden çok sunucuya dağıtım | Dosya kopyalama | Tek jar |
Scriptleriniz binlerce satıra ulaştıysa ve performans sınırına dayandıysanız Java’ya geçiş vakti gelmiştir. O yolculuğa Java ile sıfırdan eklenti geliştirme rehberiyle başlayabilir, hazır çözümler için 2026 eklenti listesine göz atabilirsiniz.
Özetle#
Skript, Paper veya Purpur sunucunuza tek jar olarak kurulur, scriptleriniz plugins/Skript/scripts/ altında .sk dosyalarında yaşar ve /sk reload ile anında devreye girer. Girinti tutarlılığına dikkat edip olay, komut, değişken ve fonksiyon dörtlüsünü öğrendiğinizde sunucunuza özel mekaniklerin çoğunu kendiniz yazabilirsiniz.
2026’da atlanmaması gereken tek şey sürüm uyumu: 26.1’in getirdiği unobfuscation nedeniyle Skript’in ve tüm addon’ların 26.x için yayımlanmış sürümlerini kullanmak zorundasınız, sunucu da Java 25 ile çalışmalı. Scriptlerinizi yazmadan önce dünyanızın ve variables.csv dosyanızın yedeğini alın; yanlış bir cancel event ya da hatalı bir döngü, geri dönüşü olmayan hasar bırakabilir.