Referensi Server Hytale API: Events, Message, and Plugin Development Guide

Dengan: nama Kategori:: nama : minutes min read

Master Hytale pengembangan server dengan referensi API komprehensif kami. Pelajari tentang PlayerConnection Acara, PlayerDisconnect Acara, kelas Pesan untuk format percakapan, registrasi perintah, dan membangun plugin pertama Anda menggunakan Jadaran berbasis Legacy Engine.

< h2 > Memahami Arsitektur Server Hytale < / h2 > < p > Server Hytale API dibangun di atas arsitektur berbasis Java- yang akan terasa akrab bagi siapa saja yang telah bekerja dengan plugin server Minecraft. Dengan kembalinya Legacy Engine, pengembang kini memiliki akses ke basis kode yang sudah dewasa dan teruji yang memprioritaskan aksesibilitas modding selama kompleksitas lintas platform. < / p > < p > Pada jantung server terletak < strong > com.hypixel.hytale.server.core < / strong > paket, yang menyediakan fondasi untuk semua operasi server- sisi. Ini termasuk manajemen pemain, penanganan dunia, pengiriman acara, dan pemrosesan perintah. < / p > < h2 > Acara Pemutar Koneksi: Bergabung dan Tinggalkan < / h2 > < p > Salah satu persyaratan yang paling umum untuk plugin server apapun adalah menanggapi pemain bergabung atau pergi. API Hitale menyediakan dua peristiwa penting untuk tujuan ini. < / p > < h3 > PlayerConnectEvent < / h3 > < p > Dipecat ketika seorang pemain berhasil menyambung ke server, peristiwa ini memberikan Anda akses ke referensi pemain sebelum mereka sepenuhnya bertelur ke dunia. Properti kunci termasuk: < / p > < ul > < li > < strong > playerRef < / strong > - Instansi PlayerRef berisi UUID, nama pengguna, dan info jaringan < / li > < li > < strong > pemain < / strong > - Entitas Player yang akan mewakili mereka di dunia < / li > < li > < kuat > dunia < / strong > - Contoh Dunia mereka bergabung < / li > < li > < kuat > pemegang < / strong > - pemilik toko entitas untuk akses komponen < / li > < / ul > < p > Tidak seperti beberapa peristiwa lain, PlayerConnect Event is < em > not cancellable < / em >. Jika Anda perlu mencegah pemain bergabung, Anda harus menangani ini pada lapis otentikasi. < / p > < pre > < kode > eventRegisty.register (PlayerConnectEvent:: class.java) {event - > Pemain val = event.playerRef logger.info ("Pemutar tersambung: ${player.user.user}") / / Kirim pesan selamat datang player.sendMessage (Message.raw ("Selamat datang ke server!") } < / code > < / pre > < h3 > PlayerDisconnectEvent < / h3 > < p > Triggered ketika pemain meninggalkan server, acara ini mencakup konteks penting tentang < em > mengapa < / em > mereka terputus: < / p > < ul > < li > < strong > playerRef < / strong > - Referensi pemain perpisahan < / li > < li > < strong > disconnectReason < / strong > - Enum mengindikasikan timeout, kick, quit, atau server shutdown < / li > < / ul > < p > Acara ini juga tidak dapat di-cancellable karena diskoneksi telah terjadi pada tingkat jaringan. < / p > < h2 > Kelas Pesan: Teks Kaya Memformat < / h2 > < p > Server pemilik mencari untuk membuat pengalaman obrolan dipoles akan menghabiskan waktu yang signifikan dengan kelas Pesan. Terletak dalam paket pesan inti, ia menyediakan API yang fasih untuk membuat teks yang diformat. < / p > < h3 > Pesan Dasar Penciptaan < / h3 > < pre > < kode > / / Pesan teks sederhana val msg = Message.raw ("Halo, dunia!") / / Dengan format warna val styled = Message.raw ("Penting!") .color ("red") .bold (true) .italic (false) .monospace (true) < / code > < / pre > < h3 > Substitusi Parameter < / h3 > < p > Untuk isi dinamis, gunakan parameter placeholder: < / p > < pre > < kode > val welcome = Message.raw ("Selamat datang, {name}! Anda memiliki koin. .param ("nama", nama main. Nama pengguna) .param ("koin", playerData.coinanci.toString ()) < / code > < / pre > < h3 > Mengklik Links < / h3 > < p > Pesan dapat menyertakan hyperlink yang dapat diklik: < / p > < pre > < kode > val terkait = Message.raw ("Klik di sini untuk mengunjungi situs kami") .link ("https: / / example.com") < / code > < / pre > < h2 > Pola Pendaftaran Acara < / h2 > < p > Sistem peristiwa Hytale mendukung baik penanganan peristiwa sinkron dan asinkron, memberikan fleksibilitas pengembang berdasarkan persyaratan kinerja mereka. < / p > < h3 > Sinkronisasi Pendaftaran < / h3 > < p > Untuk acara yang membutuhkan pemrosesan langsung pada thread server: < / p > < pre > < kode > eventRegisty.register (PlayerInteractEvent:: class.java) {event - > jika (event.action Tipe = = Type.RIGHT _ CLICK) { / / Proses interaksi event.setCancelled (true) ] } < / code > < / pre > < h3 > Asinkronisasi Pendaftaran < / h3 > < p > Untuk peristiwa yang dapat diproses dari thread utama (seperti moderasi obrolan): < / p > < pre > < kode > eventRegisty.registerAsync (PlayerChatch: class.java) {future - > masa depan. lalu Terapkan {event - > / / Lakukan penyaringan percakapan async jika (juvensBannedWords (event.content))) { event.setCancelled (true) ] event ] } < / code > < / pre > < h2 > Umum Tabel Referensi Peristiwa < / h2 > < p > Berikut ini adalah referensi singkat untuk peristiwa yang paling sering digunakan dalam pengembangan server: < / p > < tabel > < head > < tr > < th > Event Name < / th > < th > Cancellable < / th > < th > Properti Kunci < / th > < / tr > < / thead > < tbody > < tr > < td > PlayerConnectEvent < / td > < td > Tidak ada < / td > < td > playerRef, pemain, dunia, pemegang < / td > < / tr > < / tr > < tr > < td > PlayerDisconnectEvent < / td > < td > Tidak ada < / td > < td > playerRef, disconnectReason < / td > < / tr > < tr > < td > PlayerChattings < / td > < td > Ya (Async) < / td > < td > pengirim, target, konten, formatter < / td > < / tr > < / tr > < tr > < td > InteractEvent < / td > < td > Ya < / td > < td > pemutar, aksi Tipe, itemInHand, targetBlock, targetEntEntity < / td > < / tr > < tr > < td > PlayerDeathEvent < / td > < td > Tidak ada < / td > < td > pemutar < / td > < / tr > < tr > < td > PlayerRespawnEvent < / td > < td > Tidak ada < / td > < td > pemutar < / td > < / tr > < tr > < td > BreakBlockEvent < / td > < td > Ya < / td > < td > item InHand, targetBlock, blockType < / td > < / tr > < tr > < td > PlaceBlockEvent < / td > < td > Yes < / td > < td > itemInHand, target Blok, rotasi < / td > < / tr > < tr > < td > DamageBlockEvent < / td > < td > Ya < / td > < td > item InHand, targetBlock, e-Damage, kerusakan < / td > < / tr > < tr > < td > DropItemevent < / td > < td > Ya < / td > objek, lokasi < / td > < / tr > < / tr > < tr > < td > CraftRecipeEvent < / td > < td > Ya < / td > < td > recipe, kuantitas < / td > < / tr > < / tbody > < / tabel > < h2 > Membangun Perintah Kustom < / h2 > < p > Sistem perintah memungkinkan Anda untuk mendaftar perintah slash bahwa pemain dapat mengeksekusi dalam percakapan. < / p > < h3 > Implementasi Perintah Dasar < / h3 > < pre > < kode > class MyCommand: Perintah { override menyenangkan getName (): String = "mycommand" override eksekusi menyenangkan (pengirim: Perintah Pengirim, args: Array & lt; String & gt;) { sender.sendMessage.raw ("Hello dari perintah kustom!") ] ] / / Register dalam fase setup plugin Anda Komandan Registy.registerCommand (MyCommand () < / code > < / pre > < h3 > Menggunakan Manajer Perintah < / h3 > < p > Anda juga dapat memprogramtik perintah eksekusi: < / p > < pre > < kode > komandan Manajer val = Perintah Manager.get () Komandan Manager.handleCommand (pengirim, "time day") < / code > < / pre > < h2 > Lifecycle Plugin dan Struktur < / h2 > < p > Setiap plugin server Hytale memperluas kelas dasar JavaPlugin, yang menyediakan resimen esensial dan pengait lifecycle. < / p > < h3 > Plugin Lifecycle Phases < / h3 > < ol > < li > < strong > Konstruksi < / strong > - Kelas plugin instantiation < / li > < li > < strong > PreMuat < / strong > - Inisialisasi Async sebelum server mulai < / li > < li > < strong > Setup < / strong > - Komponen register, peristiwa, dan perintah < / li > < li > < strong > Mulai < / strong > - Server siap untuk menerima pemain < / li > < li > < strong > Shutdown < / strong > - Bersihkan sebelum server berhenti < / li > < / ol > < h3 > Properti Plugin Kunci < / h3 > < pre > < kode > / / Tersedia di kelas plugin Anda HytaleLogger / / Kemampuan log manifest: / / Metadata plugin dari berkas daftar EventRegistry: EventRegistry / / Pendengar acara pendaftaran Komandan Registry: Perintah Registry / / Perintah register data Direktori: Path / / Lokasi penyimpanan plugin taskRegistry: TaskRegistry / / Scheduled taschealding < / code > < / pre > < h3 > Pembantu Konfigurasi < / h3 > < p > Pengaya dapat dengan mudah memuat berkas konfigurasi JSON: < / p > < pre > < kode > / / Menggunakan konfigurasi baku. json Config val: Konfigurasi & lt; MyConfigClass & gt; = withConfig (MyConfigClass.CODEC) / / Menggunakan nama berkas gubahan config: Config & lt; MyConfigClass & gt; = withConfig ("gust.json", MyConfigClass.CODEC) < / code > < / pre > < h2 > Bekerja dengan Pemain < / h2 > < p > Kelas PlayerRef adalah antar muka utama Anda untuk berinteraksi dengan pemain yang terhubung. < / p > < h3 > Identitas Pemutar dan Lokasi < / h3 > < pre > < kode > pemutar val: PlayerRef = event.playerRef / / Identitas val uuid: UUID = player.uuid Nama val: String = player.username Bahasa val: String = player.language / / Posisi val transform: Transform = player.transform UUid: UUID = player.WorldUuid headRotasi val: Vector3f = player.headRotasi < / code > < / pre > < h3 > Akses Entity Pemutar < / h3 > < p > Untuk interaksi lebih dalam seperti manajemen inventaris, akses entitas Pemutar: < / p > < pre > < kode > versi playerEntity: Player = player.entitas / / Operasi inventaris Inventaris val: Inventaris = playerEntity.inventaris playerEntity.sendInventory () / / Manajer UI hotbar val = playerEntity.hotbarManager val windows = playerEntity.windowManager val pages = playerEntity.pageManager val hud = playerEntity.hudManager / / Izin val canBuild: Boolean = playerEntity.haslisense ("server.build") < / code > < / pre > < h2 > World and Universe Management < / h2 > < p > Singleton Semesta menyediakan akses ke semua dunia dan pemain yang terhubung. < / p > < pre > < kode > alam semesta val = Universe.get () / / Akses pemutar allplayer val: Daftar & lt; PlayerRef & gt; = universe.players Pemain val Cacah: Int = universe.playerCount Spesifikasi val: Player Ref? = universe.getPlayer (uuid) akses / / World Dunia val: Peta & lt; String, World & gt; = universe.worlds default val World: World? = universe.faultWorld spesifik val World: World? = universe.getWorld ("my-world") / / Manajemen Dunia val newWorld: CompletableFuture & lt; World & gt; = universe.addWorld ("new-world") val dimuat: completable Masa Depan & lt; World & gt; = universe.loadWorld ("existing-world") < / code > < / pre > < h3 > Thread Peringatan Keselamatan < / h3 > < p > Akses Komponen harus terjadi pada thread dunia. Selalu bungkus operasi di blok eksekusi: < / p > < pre > < kode > world.execute { / / Akses komponen aman di sini Entitas val = Dunia.getEntives () } < / code > < / pre > < h2 > Langkah Berikutnya bagi Pengembang Server < / h2 > < p > Dengan referensi API sebagai fondasi Anda, Anda siap untuk mulai membangun plugin server Hytale. Sumber daya kunci yang akan dijelajahi: < / p > < ul > < li > Entitas Komponen Sistem (ECS) untuk manipulasi entitas maju < / li > < li > Built-in modul seperti NPC, Portal, dan Sistem Quest < / li > < li > Sistem skrip visual untuk perilaku permainan < / li > < li > Protokol Jaringan untuk penanganan paket gubahan < / li > < / ul > < p > Ingat bahwa saat Hytale bergerak melalui Akses Awal, API mungkin berkembang. Tetap terhubung dengan komunitas dan dokumentasi resmi karena berkembang. < / p >