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.
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.
on join:
send "Nyawamu: %player's health%" to player
send "Kamu join di dunia %player's world%" to playerTidak 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 {}.
command /poin:
trigger:
set {poin} to 10
add 5 to {poin}
send "Poin sekarang: %{poin}%" to playerset 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.
Contoh variabel lokal untuk hitungan sesaat dalam satu command:
command /hadiah:
trigger:
set {_jumlah} to random integer between 1 and 5
give {_jumlah} of diamond to player
send "Kamu dapat %{_jumlah}% diamond!" to playerContoh variabel global yang harus diingat antar sesi, misalnya menghitung berapa kali seorang pemain login:
on join:
add 1 to {login::%player's uuid%}
send "Ini login ke-%{login::%player's uuid%}% kamu." to playerAturan 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).
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.
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 %...%.
on join:
send "Halo %player%, sekarang ada %number of all players% orang online." to playerUntuk warna dan format, Skript modern memakai tag mirip HTML, dan kode warna lama & tetap dikenali:
on join:
send "<green>Selamat datang!</green> <gray>Selamat bermain.</gray>" to player
send "&aBaris ini juga hijau." to playerSatu 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.
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 playerPerhatikan 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.
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 playerUntuk memproses seluruh isi sebuah list, loop {kill::*}:
command /topkill:
trigger:
loop {kill::*}:
send "%loop-index% punya %loop-value% kill" to playerHati-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.
- Belum baca pengenalannya? Mulai dari apa itu Skript.
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.