Hytale Server API Referenca: Dogadjaji, Poruke i Vodic za Razvoj Pluginova

By HytaleCharts Team Category: technical 6 min read

Savladajte razvoj Hytale servera sa nasom sveobuhvatnom API referencom. Naucite o PlayerConnectEvent, PlayerDisconnectEvent, klasi Message za formatiranje ceta, registraciji komandi i izgradnji vaseg prvog plugina koristeci Java arhitekturu Legacy Engine-a.

Razumevanje arhitekture Hytale servera API Hytale servera je izgraden na robusnoj arhitekturi zasnovanoj na Javi koja ce biti poznata svakome ko je radio sa pluginovima za Minecraft servere. Povratkom na Legacy Engine, programeri sada imaju pristup zreloj, dobro testiranoj bazi koda koja daje prioritet pristupacnosti modovanja nad meduplatformskom slozenoscu. U srcu servera nalazi se com.hypixel.hytale.server.core paket koji pruza temelj za sve operacije na strani servera. Ovo ukljucuje upravljanje igracima, obradu svetova, slanje dogadjaja i obradu komandi. Dogadjaji povezivanja igraca: Obrada ulaska i izlaska Jedan od najcescih zahteva za bilo koji serverski plugin je reagovanje na igrade koji se pridruzuju ili napustaju. Hytale API pruza dva sustinska dogadjaja za ovu svrhu. PlayerConnectEvent Aktivira se kada se igrac uspesno poveze sa serverom, ovaj dogadjaj vam daje pristup referenci igraca pre nego sto se u potpunosti pojavi u svetu. Kljucna svojstva ukljucuju: playerRef - PlayerRef instanca koja sadrzi UUID, korisnicko ime i mrezne informacije player - Player entitet koji ce ih predstavljati u svetu world - World instanca kojoj se pridruzuju holder - Drzac skladista entiteta za pristup komponentama Za razliku od nekih drugih dogadjaja, PlayerConnectEvent je ne moze se otkazati. Ako trebate spreciti igraca da se pridruzi, trebalo bi to da resavate na nivou autentifikacije. eventRegistry.register(PlayerConnectEvent::class.java) { event -> val player = event.playerRef logger.info("Player connected: ${player.username}") // Send welcome message player.sendMessage(Message.raw("Welcome to the server!")) } PlayerDisconnectEvent Aktivira se kada igrac napusti server, ovaj dogadjaj ukljucuje vazan kontekst o razlogu prekida veze: playerRef - Referenca igraca koji odlazi disconnectReason - Enum koji oznacava istek vremena, izbacivanje, izlazak ili gasenje servera Ovaj dogadjaj takodje ne moze biti otkazan jer se prekid veze vec desio na mreznom nivou. Message klasa: Formatiranje obogacenog teksta Vlasnici servera koji zele da kreiraju dotjerane iskustva ceta ce provesti znacajno vreme sa Message klasom. Smestena u jezgru paketa za poruke, pruza fluentni API za izgradnju formatiranog teksta. Osnovno kreiranje poruka // Simple text message val msg = Message.raw("Hello, world!") // With color formatting val styled = Message.raw("Important!") .color("red") .bold(true) .italic(false) .monospace(true) Zamena parametara Za dinamicki sadrzaj, koristite rezervisana mesta za parametre: val welcome = Message.raw("Welcome, {name}! You have {coins} coins.") .param("name", player.username) .param("coins", playerData.coinBalance.toString()) Klikabilni linkovi Poruke mogu sadrzati klikabilne hiperveze: val linked = Message.raw("Click here to visit our website") .link("https://example.com") Obrasci registracije dogadjaja Sistem dogadjaja Hytale podrzava i sinhronu i asinhronu obradu dogadjaja, dajuci programerima fleksibilnost na osnovu njihovih zahteva za performansama. Sinhrona registracija Za dogadjaje kojima je potrebna trenutna obrada na niti servera: eventRegistry.register(PlayerInteractEvent::class.java) { event -> if (event.actionType == ActionType.RIGHT_CLICK) { // Process the interaction event.setCancelled(true) } } Asinhrona registracija Za dogadjaje koji mogu biti obradjeni van glavne niti (poput moderacije ceta): eventRegistry.registerAsync(PlayerChatEvent::class.java) { future -> future.thenApply { event -> // Perform async chat filtering if (containsBannedWords(event.content)) { event.setCancelled(true) } event } } Referentna tabela uobicajenih dogadjaja Evo brzog pregleda najcesce koriscenih dogadjaja u razvoju servera: Naziv dogadjajaMoze se otkazatiKljucna svojstva PlayerConnectEventNeplayerRef, player, world, holder PlayerDisconnectEventNeplayerRef, disconnectReason PlayerChatEventDa (Async)sender, targets, content, formatter PlayerInteractEventDaplayer, actionType, itemInHand, targetBlock, targetEntity PlayerDeathEventNeplayer PlayerRespawnEventNeplayer BreakBlockEventDaitemInHand, targetBlock, blockType PlaceBlockEventDaitemInHand, targetBlock, rotation DamageBlockEventDaitemInHand, targetBlock, currentDamage, damage DropItemEventDaitem, location CraftRecipeEventDacraftedRecipe, quantity Izgradnja prilagodjenih komandi Sistem komandi vam omogucava da registrujete slash komande koje igraci mogu izvrsiti u cetu. Osnovna implementacija komande class MyCommand : Command { override fun getName(): String = "mycommand" override fun execute(sender: CommandSender, args: Array<String>) { sender.sendMessage(Message.raw("Hello from my custom command!")) } } // Register in your plugin's setup phase commandRegistry.registerCommand(MyCommand()) Koriscenje CommandManager-a Takodje mozete programski izvrsavati komande: val commandManager = CommandManager.get() commandManager.handleCommand(sender, "time day") Zivotni ciklus i struktura plugina Svaki Hytale serverski plugin prosiruje baznu klasu JavaPlugin, koja pruza osnovne registre i hook-ove zivotnog ciklusa. Faze zivotnog ciklusa plugina Construction - Instanciranje klase plugina PreLoad - Asinhrona inicijalizacija pre pokretanja servera Setup - Registracija komponenata, dogadjaja i komandi Start - Server je spreman da prihvata igrace Shutdown - Ciscenje pre zaustavljanja servera Kljucna svojstva plugina // Available in your plugin class logger: HytaleLogger // Logging capability manifest: PluginManifest? // Plugin metadata from manifest file eventRegistry: EventRegistry // Register event listeners commandRegistry: CommandRegistry // Register commands dataDirectory: Path // Plugin storage location taskRegistry: TaskRegistry // Scheduled task management Pomocnik za konfiguraciju Plugini mogu lako ucitati JSON konfiguracione fajlove: // Using default config.json val config: Config<MyConfigClass> = withConfig(MyConfigClass.CODEC) // Using custom filename val config: Config<MyConfigClass> = withConfig("custom-name.json", MyConfigClass.CODEC) Rad sa igracima PlayerRef klasa je vas primarni interfejs za interakciju sa povezanim igracima. Identitet i lokacija igraca val player: PlayerRef = event.playerRef // Identity val uuid: UUID = player.uuid val name: String = player.username val language: String = player.language // Position val transform: Transform = player.transform val worldUuid: UUID = player.worldUuid val headRotation: Vector3f = player.headRotation Pristup entitetu igraca Za dublje interakcije poput upravljanja inventarom, pristupite Player entitetu: val playerEntity: Player = player.entity // Inventory operations val inventory: Inventory = playerEntity.inventory playerEntity.sendInventory() // UI managers val hotbar = playerEntity.hotbarManager val windows = playerEntity.windowManager val pages = playerEntity.pageManager val hud = playerEntity.hudManager // Permissions val canBuild: Boolean = playerEntity.hasPermission("server.build") Upravljanje svetovima i univerzumom Universe singleton pruza pristup svim svetovima i povezanim igracima. val universe = Universe.get() // Player access val allPlayers: List<PlayerRef> = universe.players val playerCount: Int = universe.playerCount val specificPlayer: PlayerRef? = universe.getPlayer(uuid) // World access val worlds: Map<String, World> = universe.worlds val defaultWorld: World? = universe.defaultWorld val specificWorld: World? = universe.getWorld("my-world") // World management val newWorld: CompletableFuture<World> = universe.addWorld("new-world") val loaded: CompletableFuture<World> = universe.loadWorld("existing-world") Upozorenje o bezbednosti niti Pristup komponentama mora se desiti na niti sveta. Uvek obmotajte operacije u execute blok: world.execute { // Safe component access here val entities = world.getEntities() } Sledeci koraci za programere servera Sa ovom API referencom kao temeljem, spremni ste da pocnete sa izgradnjom pluginova za Hytale server. Kljucni resursi za istrazivanje: Entity Component System (ECS) za naprednu manipulaciju entitetima Ugradeni moduli poput NPC-ova, portala i sistema questova Sistem vizuelnog skriptovanja za ponasanja u igri Mrezni protokol za obradu prilagodjenih paketa Imajte na umu da se API moze razvijati dok Hytale napreduje kroz rani pristup. Ostanite povezani sa zajednicom i pratite zvanicnu dokumentaciju kako se razvija.