Server Hytale API Referinţă: Evenimente, Mesaje, şi Ghidul de dezvoltare a modulului

După: nume Categorie: : nume : minute min citește

Master Hytale server de dezvoltare cu noastre de referință API cuprinzătoare. Aflaţi mai multe despre PlayerConnect Eveniment, PlayerDeconectează Evenimentul, clasa de mesaje pentru formatarea chat-ului, înregistrarea comenzii și construirea primului dvs. plugin folosind arhitectura Java bazată pe Legacy Engine.

Înţelegerea arhitecturii serverului Hytale Serverul Hytale API este construit pe o arhitectură robustă bazată pe Java, care se va simți familiar oricui a lucrat cu plugin-uri de server Minecraft. Odată cu revenirea la Motorul Legacy, dezvoltatorii au acum acces la o bază de coduri matură, bine testată, care prioritizează accesibilitatea moddding peste complexitatea trans-platformă. În centrul serverului se află pachetul com.hypixel.hytale.server.core, care oferă fundația pentru toate operațiunile de server-side. Aceasta include managementul jucătorilor, manipularea la nivel mondial, expedierea evenimentelor și procesarea comenzilor. Player Connection Events: Handling Join and Leave Una dintre cele mai frecvente cerințe pentru orice modul server este răspunsul la jucătorii care se alătură sau pleacă. Hytale API oferă două evenimente esențiale în acest scop. PlayerConnectEveniment Fired atunci când un jucător se conectează cu succes la server, acest eveniment vă oferă acces la referinţa jucătorului înainte ca acesta să se nască complet în lume. Proprietățile principale includ: playerRef - The PlayerRef instance contine UUID, username, and network info player - entitatea jucător care le va reprezenta în lume world - The World instance they are joining holder - The entity store holder for component access Spre deosebire de alte evenimente, PlayerConnect Evenimentul nu este posibil . Dacă aveți nevoie pentru a preveni un jucător de la aderarea, ar trebui să se ocupe de acest lucru la stratul de autentificare în schimb. eventRegistry.registru(PlayerConnectEveniment::class.java) {eveniment - > val player = eveniment.playerRef logger.info("Player conectat: ${player.ussername}") - Nu. Trimite mesaj de bun venit player.sendMessage(Message.raw("Bun venit la server!")) } PlayerDisconnectEvent Declanşat atunci când un jucător părăseşte serverul, acest eveniment include un context important despre why au fost deconectate: playerRef - Referinţa jucătorului care pleacă deconectare - Enum indicand timeout, kick, quick, or server shutdown Acest eveniment este, de asemenea, necancelabil, deoarece deconectarea a avut loc deja la nivelul rețelei. The Message Class: Rich Text Formatting Proprietarii de server care doresc să creeze experiențe de chat lustruite vor petrece timp semnificativ cu clasa Mesaj. Situat în pachetul de mesaje de bază, acesta oferă un API fluent pentru construirea textului formatat. Traducerea şi adaptarea: // Mesaj text simplu Val msg = Mesaj.raw ("Bună ziua, lume!") - Nu. Cu formatare color Val styled = Message.raw ("Important!") .color("rosu") .bold (adevărat) .italic (fals) .monospaţiu (true) Substituția parametrului Pentru conţinutul dinamic, utilizaţi deţinătorii parametrului: Traducerea şi adaptarea: Aveţi monede.") .param("name," player.username) .param("monede," playerData.coinBalance.toString() ] Linkuri clickable Mesajele pot include hiperlinkuri clickable: val linked = Message.raw ("Click aici pentru a vizita site-ul nostru") .link("https://exemplu.com") Modele de înregistrare a evenimentelor Sistemul de evenimente Hytale sprijină atât manipularea sincronă, cât și manipularea evenimentelor asincrone, oferind dezvoltatorilor flexibilitate pe baza cerințelor lor de performanță. Synchronous Înregistrare Pentru evenimente care necesită prelucrare imediată pe firul serverului: eventRegistry.registru(PlayerInteractEveniment::class.java) {eveniment - > dacă (eveniment. acţiune Tip = = ActionType.RIGHT_CLICK) { - Nu. Procesează interacţiunea Eveniment. setAnulat (adevărat) } } Asincronie Înregistrare Pentru evenimente care pot fi prelucrate de pe firul principal (cum ar fi moderația chat-ului): eventRegistry.registerAsync(PlayerChatEveniment::class.java) {viitor - > viitor. apoi Aplicaţi { eveniment - > - Nu. Efectuați filtrarea asinc chat în cazul în care (conține Cuvinte Banned (conţinutul evenimentului))) { Eveniment. setAnulat (adevărat) } eveniment } } Comun Tabelul de referință al evenimentului Iată o referință rapidă pentru evenimentele cele mai frecvent utilizate în dezvoltarea serverului: Event NameCancelable Proprietăți cheie PlayerConnectEveniment Nr. playerRef, player, world, holder PlayerDisconnectEvent Nr. playerRef, deconectationReason PlayerChatEveniment Da (Async) Sender, ținte, conținut, pentru orice PlayerInteractEvent Da player, acţiune Tip, elementInHand, tintaBlock, tintaEntity PlayerDeathEvent Nr. player PlayerResamonEveniment Nr. player BreakBlockEvent Da InHand, tinta Block, blockType PlaceBlockEveniment DaitemInHand, țintăBlock, rotație DamageBlockEventDa item InHand, tinta Block, curentDamage, daune DropItemEveniment DaWet, location CraftRecipieEveniment Da craftedRecipe, quantity Construirea comenzilor personalizate Sistemul de comandă vă permite să înregistraţi comenzi slash pe care jucătorii le pot executa în chat. Implementare de comandă de bază class Comanda { suprascrie distracție getName (): String = "my command" { sender.sendMessage(Message.raw("Salut de la comanda mea personalizată!")) } } // Înregistrați-vă în faza de configurare a modulului CommandRegistry.RegistryCommand [MyCommand() ] Folosind comandaManager De asemenea, puteți executa comenzi programatic: val commandManager = CommandManager.get() CommandManager.handleCommand(sender, "time day") Plugin Lifecycle and Structure Name Faze de ciclu de viață delugin Construction - instanțiere clasa modul PreLoad - Async iniţializarea înainte de pornirea serverului Setup - Înregistrează componente, evenimente și comenzi Start - Server este gata să accepte jucători Shutdown - Curățare înainte de oprirea serverului Proprietăți modul cheie // Disponibil în clasa de modul HytaleLogger Capacitatea de autentificare manifest: ModulManifest? - Nu. Metadate modul din fișier manifest EventRegistry: EventRegistry Înregistrează ascultătorii evenimentului ComandăRegistry: CommandRegistry Comenzi de înregistrare date Director: Calea Locație de stocare modul TaskRegistry: TaskRegistry // Programed task management Ajutor pentru configurare Plugins poate încărca cu ușurință fișiere de configurare JSON: // Folosind default config.json Val Config: Config < MyConfigClass > = cu Config (MyConfigClass.CODEC) // Folosind numele de fișier personalizat Val Config: Config < MyConfigClass> = cuConfig("custom-name.json," MyConfigClass.CODEC) Lucrarea cu jucători Clasa PlayerRef este interfaţa principală pentru interacţionarea cu jucătorii conectaţi. Identitatea și localizarea straturilor val player: PlayerRef = event.playerRef Identitate Val uuid: UUID = player.uuid Nume val: String = player.username Val language: String = player.language // Poziţia Val transforma: Transformare = player.transform Val worldUuid: UUID = player.worldUuid Val headRotation: Vector3f = player.headRotation Player Enentity Access Pentru interacţiuni mai profunde, cum ar fi managementul inventarului, accesaţi entitatea Player: val playerEntity: Player = player.entitate // Operaţiuni de inventar inventar val: Inventar = playerEntity.inventar playerEntity.sendInventar () // Administratori UI Val hotbar = playerEntity.hotbarManager Val windows = playerEntity.windowManager pagini val = playerEntity.pageManager Val hud = playerEntity.hudManager // Permisiuni Val canBuild: Boolean = playerEntity.hasPermission("server.build") Managementul lumii și al universului Universul Singleton oferă acces la toate lumile și jucătorii conectați. val univers = Universe.get() - Da. Acces jucător Val allPlayers: List = universe.players valplayer Număr: Int = univers.playerCount Val specificPlayer: PlayerRef? = univers.getPlayer (uuid) // Acces mondial Val worlds: Map < String, World> = univers.worlds implicit val Lume: Lume? = univers. ImplicitWorld specific val Lume: lume? = univers.getWorld("my-world") Managementul mondial Val newWorld: CompletableFuture = univers.addWorld("New-world") Val încărcat: Completabil Viitorul = univers.loadWorld("lumea existentă") Thread Safety Avertisment Accesul complementar trebuie să aibă loc pe firul mondial. Înfășurați întotdeauna operațiunile în blocul de execuție: lume.execute { - Nu. Accesul în siguranță al componentelor Val Entities = world.getEntties() } Următoarele etape pentru dezvoltatorii de servere Cu această referință API ca fundație, sunteți gata pentru a începe construirea plugin-uri Hytale server. Resurse-cheie pentru a explora următorul: Sistemul componentelor entității (ECS) pentru manipularea entității avansate Built-in module precum NPC-uri, portaluri și sisteme de Quest Sistemul de scripting vizual pentru comportamente de joc Protocol de lucru net pentru manipularea pachetelor personalizate Amintiți-vă că, pe măsură ce Hytale trece prin Acces timpuriu, API poate evolua. Rămâi conectat cu comunitatea și documentația oficială pe măsură ce se dezvoltă.