Custom Command Skript: Argument, Permission, Cooldown, dan Tab-Complete
Naik level dari command sederhana ke yang rapi. Pelajari cara bikin custom command Skript: argument dan tipenya, argument opsional dan nilai default, permission, cooldown yang tahan restart, executable by dan aliases, plus tab-complete lewat SkBee. Contoh siap kamu coba.
Daftar isi
Di sintaks dasar Skript kita sudah mengintip command seperti /heal dan /skor. Tapi command sungguhan biasanya butuh lebih: menerima input dari pemain (target, jumlah, nama warp), memeriksa siapa yang boleh menjalankannya, dan membatasi biar tidak di-spam. Semua itu diatur di dalam struktur command, dan kabar baiknya, Skript membuatnya ringkas.
Artikel ini membedah command dari kerangkanya sampai bagian yang sering bikin bingung: argument opsional, nilai default, cooldown yang tetap ada setelah restart, dan tab-complete. Semua contoh bisa langsung kamu tempel ke file .sk, jalankan /sk reload, lalu coba.
Kerangka sebuah command
Setiap command punya baris pembuka (nama dan argument-nya), sederet pengaturan opsional, lalu satu blok trigger: yang berisi kode yang benar-benar dijalankan. Hanya trigger yang wajib, sisanya kamu pakai seperlunya.
Ini bentuk lengkapnya sebagai peta. Jangan hafalkan, cukup kenali polanya:
command /namacommand <argument>:
description: Penjelasan singkat command
usage: /namacommand <sesuatu>
permission: server.namacommand
permission message: Kamu tidak punya izin.
executable by: players
aliases: /nc
cooldown: 5 seconds
cooldown message: Tunggu %remaining time% lagi.
cooldown storage: {cooldown::%player's uuid%}
trigger:
# kode di siniSekarang kita bahas bagian-bagiannya satu per satu.
Argument: memberi input ke command
Argument adalah nilai yang diketik pemain setelah nama command, misalnya nama warp di /warp spawn atau target di /heal Steve. Kamu mendeklarasikannya di baris pembuka dengan kurung sudut <...>, dan menyebut tipenya supaya Skript otomatis memvalidasi.
command /heal <player>:
permission: server.heal
trigger:
set arg-1's health to 20
send "Kamu memulihkan %arg-1%." to player
send "Kamu dipulihkan oleh %player%." to arg-1Di dalam trigger, argument pertama diakses lewat arg-1 (argument kedua arg-2, dan seterusnya). Tipe yang paling sering dipakai: <player> (pemain online), <text> (teks bebas), <integer> (bilangan bulat), <number> (angka desimal). Karena <player> sudah bertipe pemain, Skript otomatis menolak input yang bukan nama pemain online, jadi kamu tidak perlu mengeceknya sendiri.
Kalau kamu punya banyak argument, memberi nama lebih enak dibaca daripada arg-1 dan arg-2. Gunakan pola <nama:tipe>, lalu panggil sebagai variabel lokal {_nama}:
command /pay <target:player> <jumlah:integer>:
trigger:
send "Kamu mengirim %{_jumlah}% ke %{_target}%." to playerArgument opsional dan nilai default
Bungkus argument dengan kurung siku [...] untuk membuatnya opsional. Kalau pemain tidak mengisinya, argument itu jadi kosong (is not set).
command /kit [<text>]:
trigger:
if arg-1 is not set:
send "Pakai: /kit <nama>" to player
stop
send "Kamu mengambil kit %arg-1%." to playerSering kali kamu ingin argument opsional punya nilai bawaan. Tulis <tipe=nilai> di dalam kurung siku. Contoh klasik: command yang menyasar diri sendiri kalau target tidak disebut.
command /feed [<player=%player%>]:
permission: server.feed
trigger:
set arg-1's food level to 10
send "%arg-1% sudah kenyang." to player/feed tanpa target akan mengenyangkan diri sendiri, sedangkan /feed Alex menyasar Alex. Satu catatan penting: nilai default %player% hanya masuk akal kalau ada pemain yang menjalankan command. Kalau command dijalankan dari konsol, player tidak ada, jadi argument itu tetap kosong. Batasi dengan executable by: players kalau memang cuma buat pemain.
Permission: siapa yang boleh
Field permission menentukan izin yang dibutuhkan. Pemain tanpa izin itu tidak bisa menjalankan command, dan mendapat permission message (kalau kamu isi).
command /umumkan <text>:
description: Kirim pengumuman ke semua pemain
permission: server.broadcast
permission message: <red>Kamu belum boleh pakai ini.
trigger:
broadcast arg-1Izin seperti server.broadcast kamu berikan ke rank tertentu lewat plugin permission. Kalau kamu belum menyetel rank dan izin, cara setup rank dan permission dengan LuckPerms menjelaskan pondasinya. Aturan praktis: beri nama izin yang konsisten (server.<fitur>), dan jangan membiarkan command berbahaya tanpa permission sama sekali.
Executable by, aliases, usage, description
Empat field kecil yang bikin command terasa rapi:
executable bymembatasi siapa yang boleh menjalankan:players,console, atauplayers and console. Command yang memakaiplayerdi dalamnya sebaiknyaplayerssaja.aliasesmemberi nama alternatif, misalnyaaliases: /wpuntuk/warp. Berguna untuk pintasan yang sudah biasa dipakai pemain.usageadalah teks yang muncul saat pemakaian salah, contohnya/warp <nama>. Isi yang jelas supaya pemain tahu format yang benar.descriptionadalah keterangan singkat yang tampil di daftar bantuan server.
Cooldown: batasi frekuensi
Cooldown mencegah command di-spam. Field cooldown menerima rentang waktu, dan selama itu pemain tidak bisa mengulanginya.
command /warp <text>:
permission: server.warp
cooldown: 5 seconds
cooldown message: <gray>Sabar, tunggu %remaining time% lagi.
cooldown bypass: server.warp.bypass
cooldown storage: {warp-cooldown::%player's uuid%}
trigger:
send "Teleport ke %arg-1%..." to playerTiga hal yang bikin cooldown ini matang:
%remaining time%di dalamcooldown messageotomatis diganti dengan sisa waktu. Ada juga%elapsed time%(waktu sejak pemakaian terakhir).cooldown bypassadalah izin yang membebaskan pemegangnya dari cooldown, cocok untuk rank VIP atau staff.cooldown storagemenyimpan status cooldown ke sebuah variabel global. Tanpa ini, cooldown akan lupa saat server restart. Karena variabelnya global (perhatikan, tanpa garis bawah), datanya bertahan, persis seperti yang kita bahas di variabel global pada sintaks dasar. Gunakanplayer's uuidsebagai kunci, bukan nama, karena nama bisa berubah.
Tab-complete: saran saat menekan Tab
Tab-complete adalah daftar saran yang muncul saat pemain menekan Tab di tengah mengetik command. Ini bikin command terasa jauh lebih halus, apalagi kalau nama warp atau kit-nya banyak.
Perlu jujur soal satu hal: Skript inti belum menyediakan tab-complete custom untuk argument command-mu. Yang paling umum dipakai adalah event on tab complete dari SkBee, addon yang di pengenalan Skript sudah kita sebut sebagai nyaris wajib. Setelah SkBee terpasang, polanya seperti ini:
on tab complete of "/warp":
set tab completions for position 1 to "spawn", "shop", "pvp"Posisi 1 adalah argument pertama. Alih-alih daftar tetap, kamu juga bisa mengisinya dari sebuah list (misalnya semua nama warp yang tersimpan) supaya sarannya selalu ikut data terbaru. Sintaks persisnya bisa sedikit berbeda antar versi SkBee, jadi cek dokumentasi SkBee untuk versimu. Kita akan membahas SkBee lebih tuntas di artikel khusus nanti.
Contoh lengkap: sistem warp mini
Mari gabungkan semuanya jadi fitur nyata. Satu command untuk staff menyimpan warp, satu command untuk pemain memakainya.
command /setwarp <text>:
description: Simpan lokasi berdiri sebagai warp
permission: server.admin
executable by: players
trigger:
set {warp::%arg-1%} to player's location
send "<green>Warp '%arg-1%' disimpan." to player
command /warp <text>:
description: Teleport ke sebuah warp
usage: /warp <nama>
permission: server.warp
executable by: players
cooldown: 5 seconds
cooldown message: <gray>Tunggu %remaining time% lagi.
cooldown storage: {warp-cooldown::%player's uuid%}
trigger:
if {warp::%arg-1%} is not set:
send "<red>Warp '%arg-1%' tidak ada." to player
stop
teleport player to {warp::%arg-1%}
send "<green>Selamat datang di %arg-1%!" to playerPerhatikan alurnya: /setwarp spawn menyimpan lokasimu ke variabel global {warp::spawn}. Karena global, warp itu tetap ada setelah restart. Lalu /warp spawn mengecek dulu apakah warp-nya ada (is not set), berhenti dengan stop kalau tidak, dan baru teleport kalau ada. Cooldown-nya tersimpan per pemain lewat UUID. Command yang matang selalu memeriksa input sebelum bertindak.
Kesalahan umum
- Lupa
stop. Setelah mengirim pesan error, hentikan trigger denganstop, kalau tidak kode di bawahnya tetap jalan. - Salah nomor argument.
arg-1adalah yang pertama, bukanarg-0. Kalau argument-nya banyak, pakai nama (<target:player>) supaya tidak tertukar. - Cooldown tanpa
cooldown storage. Tanpa itu, cooldown hilang tiap restart. Untuk cooldown yang serius, selalu simpan. - Command berat tanpa permission. Command yang mengubah dunia atau memberi item wajib dijaga permission, kalau tidak, semua orang bisa memakainya.
- Memakai
playerpadahalexecutable by: console. Kalau command bisa dari konsol, jangan berasumsi selalu adaplayer.
Langkah selanjutnya
Sekarang kamu bisa membuat command yang menerima input, menjaga izin, dan membatasi frekuensi, tulang punggung hampir semua fitur server.
- Belum kuat di variabel dan list yang dipakai di sini? Kembali ke sintaks dasar Skript.
- Baru mulai dari nol? Apa itu Skript adalah pengenalannya.
- Command-mu butuh izin per rank? Setup rank dan permission dengan LuckPerms melengkapinya.
Command tadi menyimpan warp dan cooldown sebagai variabel global. Di artikel berikutnya kita masuk ke penyimpanan data: ke mana sebenarnya variabel global itu disimpan, kapan file cukup, dan kapan kamu butuh database.
Sudah bikin command pertamamu? Pasang di servermu, lalu daftarkan dan kelola servermu di daftar server Minecraft Indonesia MSID supaya makin banyak yang datang mencobanya.