Langsung ke konten utama
pemilik-serverskriptpluginpaper

Sintaks Dasar Skript Minecraft: Variabel, List, Condition, dan Teks

Lanjutan belajar Skript: kuasai tata bahasanya. Kenalan dengan expression, variabel lokal {_x} vs global {x} yang tersimpan permanen, list, condition dan perbandingan (if/else), loop, plus cara mengatur teks dan warna. Fondasi untuk semua fitur Skript yang lebih rumit.

Tim MSID4 menit baca
Daftar isi

Di pengenalan Skript kita lihat bahwa Skript dibaca hampir seperti kalimat, dan setiap fitur adalah trigger dengan tiga bagian: event, condition, dan effect. Sekarang kita masuk ke tata bahasanya, yaitu potongan-potongan kecil yang kamu rangkai jadi fitur. Kalau kamu belum baca pengenalannya, mulai dari sana dulu supaya tidak bingung.

Semua contoh di bawah bisa langsung kamu tempel ke sebuah file .sk, lalu jalankan /sk reload, dan coba sendiri. Cara terbaik belajar Skript memang sambil mengetik.

Expression: nilai yang bisa kamu pakai

Expression adalah "sepotong nilai" yang Skript pahami. Angka 5, teks "halo", player (pemain yang memicu event), player's health, dan now (waktu sekarang) semuanya expression. Kamu memakai expression di mana pun sebuah nilai dibutuhkan.

text
on join:
    send "Nyawamu: %player's health%" to player
    send "Kamu join di dunia %player's world%" to player

Tidak perlu menghafal semuanya. Yang penting paham polanya: kamu mengambil sebuah nilai (expression), lalu melakukan sesuatu dengannya.

Variabel: menyimpan nilai

Variabel adalah wadah bernama untuk menyimpan nilai. Di Skript, variabel selalu ditulis di dalam kurung kurawal {}.

text
command /poin:
    trigger:
        set {poin} to 10
        add 5 to {poin}
        send "Poin sekarang: %{poin}%" to player

set mengisi, add menambah, remove mengurangi, dan delete menghapus. Sederhana.

Lokal {_x} vs global {x}

Ini bagian yang paling sering bikin pemula bingung, padahal bedanya cuma satu garis bawah:

  • {_nama} (pakai garis bawah) adalah variabel lokal: ia hidup hanya selama satu kali trigger berjalan, lalu langsung hilang. Cocok untuk hitungan sementara.
  • {nama} (tanpa garis bawah) adalah variabel global: ia tersimpan di penyimpanan variabel, bisa dibaca trigger mana pun, dan tetap ada setelah server restart.

Perbandingan variabel lokal dan global di Skript: variabel lokal dengan garis bawah hanya hidup selama satu kali trigger jalan lalu hilang dan privat untuk satu run, sedangkan variabel global tanpa garis bawah tersimpan di disk, dibaca semua trigger seperti on join atau command, dan tetap ada setelah server restart

Contoh variabel lokal untuk hitungan sesaat dalam satu command:

text
command /hadiah:
    trigger:
        set {_jumlah} to random integer between 1 and 5
        give {_jumlah} of diamond to player
        send "Kamu dapat %{_jumlah}% diamond!" to player

Contoh variabel global yang harus diingat antar sesi, misalnya menghitung berapa kali seorang pemain login:

text
on join:
    add 1 to {login::%player's uuid%}
    send "Ini login ke-%{login::%player's uuid%}% kamu." to player

Aturan praktisnya: pakai lokal sebisa mungkin karena lebih bersih dan tidak menumpuk di disk. Pakai global hanya untuk data yang memang harus diingat, seperti uang, statistik, atau pengaturan pemain.

List: satu nama, banyak isi

Sering kamu butuh menyimpan banyak nilai di bawah satu nama, misalnya skor semua pemain. Untuk itu ada list, yang ditandai dengan :: (dua titik dua).

text
on death of player:
    add 1 to {kill::%attacker's name%}

command /skor:
    trigger:
        send "Kill kamu: %{kill::%player's name%}%" to player

{kill::Steve} adalah satu entri. {kill::*} (dengan bintang) berarti semua entri di bawah kill.

Struktur list di Skript: induk {kill::*} di puncak berarti semua entri di bawah nama kill, lalu bercabang ke tiga entri yaitu {kill::Steve} bernilai 12, {kill::Alex} bernilai 7, dan {kill::Notch} bernilai 3

Bintang * inilah yang nanti kamu pakai bareng loop untuk memproses seluruh isi list sekaligus, yang kita bahas sebentar lagi.

Teks dan placeholder

Teks ditulis di antara tanda kutip "...". Untuk menyisipkan sebuah nilai ke dalam teks, bungkus expression-nya dengan tanda persen %...%.

text
on join:
    send "Halo %player%, sekarang ada %number of all players% orang online." to player

Untuk warna dan format, Skript modern memakai tag mirip HTML, dan kode warna lama & tetap dikenali:

text
on join:
    send "<green>Selamat datang!</green> <gray>Selamat bermain.</gray>" to player
    send "&aBaris ini juga hijau." to player

Satu jebakan umum: kalau kamu butuh nilai dari sebuah list di dalam teks, kunci list-nya yang juga pakai %...% bisa terlihat membingungkan, seperti "%{kill::%player's name%}%". Tenang, itu wajar, dan akan makin terbiasa dengan latihan.

Condition dan perbandingan

Condition adalah syarat yang bernilai benar atau salah. Skript menyediakan perbandingan yang dibaca natural: is, is not, contains, is greater than, is less than, dan seterusnya. Kamu menggabungkannya dengan if, else if, dan else.

text
command /cekkoin:
    trigger:
        if {koin::%player's uuid%} is not set:
            set {koin::%player's uuid%} to 0
        if {koin::%player's uuid%} is greater than or equal to 100:
            send "Kamu kaya!" to player
        else:
            send "Kumpulkan koin lagi." to player

Perhatikan is not set. Ini cara mengecek apakah sebuah variabel masih kosong, dan sangat penting supaya kamu tidak salah menghitung dari nilai yang belum ada.

Loop: ulangi untuk banyak hal

Loop menjalankan blok kode berkali-kali, entah untuk setiap entri list, setiap pemain, atau sejumlah angka. Di dalam loop, kamu mengakses item yang sedang diproses lewat loop-value, loop-player, dan sejenisnya.

text
command /resetkoin:
    permission: server.admin
    trigger:
        loop all players:
            set {koin::%loop-player's uuid%} to 0
        send "Koin semua pemain online sudah direset." to player

Untuk memproses seluruh isi sebuah list, loop {kill::*}:

text
command /topkill:
    trigger:
        loop {kill::*}:
            send "%loop-index% punya %loop-value% kill" to player

Hati-hati dengan loop besar yang jalan terlalu sering (apalagi tiap tick), karena itu penyebab lag paling umum di Skript. Loop seperlunya saja.

Komentar dan kebiasaan baik

  • Tulis komentar dengan #. Apa pun setelah # diabaikan Skript, jadi pakai untuk menjelaskan maksud kodemu.
  • Konsisten dengan indentasi (pakai Tab). Indentasi yang berantakan adalah sumber error nomor satu.
  • Beri nama variabel yang jelas: {koin::%player's uuid%} jauh lebih mudah dibaca daripada {k::%player%}.
  • Pakai UUID pemain (player's uuid) sebagai kunci data penting, bukan nama, karena nama bisa berubah sedangkan UUID tetap.
  • Uji sedikit demi sedikit. Tulis beberapa baris, /sk reload, cek, lanjut.

Langkah selanjutnya

Sekarang kamu sudah pegang fondasi bahasanya: expression, variabel, list, condition, dan loop. Dari sini, semua fitur Skript hanyalah kombinasi dari potongan-potongan ini.

Di artikel berikutnya kita pakai semua ini untuk membuat custom command yang rapi: argument, permission, cooldown, sampai tab-complete. Setelah itu kita masuk ke addon, dimulai dari SkBee.

Sudah pegang dasarnya? Coba bikin satu fitur kecil di servermu, lalu pamerkan di daftar server Minecraft Indonesia MSID supaya makin banyak yang main.

Baca juga