Hytale Server API Referentie: Evenementen, Berichten en Plugin Ontwikkelingsgids

Op:naam Categorie: naam :minuten min lezen

Master Hytale server ontwikkeling met onze uitgebreide API referentie. Meer informatie over PlayerConnect Evenement, PlayerDisconnect Gebeurtenis, de Bericht klasse voor het formatteren van chat, commando registratie, en het bouwen van uw eerste plugin met behulp van de Java-gebaseerde architectuur van de Legacy Engine.

Begrijpen van de Hytale Server Architectuur De Hytale server API is gebouwd op een robuuste Java-gebaseerde architectuur die vertrouwd zal voelen voor iedereen die heeft gewerkt met Minecraft server plugins. Met de terugkeer naar de Legacy Engine, hebben ontwikkelaars nu toegang tot een volwassen, goed geteste codebase die modding toegankelijkheid voorrang geeft boven cross-platform complexiteit. In het hart van de server zit het com.hypixel.hytale.server.core pakket, dat de basis biedt voor alle server-side operaties. Dit omvat spelerbeheer, wereldafhandeling, verzending van evenementen en commandoverwerking. Playerverbindingsgebeurtenissen: Handling Join and Leave Een van de meest voorkomende eisen voor een serverplugin reageert op spelers die meedoen of vertrekken. De Hytale API biedt hiervoor twee essentiële gebeurtenissen. PlayerConnectEvent Gereed wanneer een speler met succes verbinding maakt met de server, geeft deze gebeurtenis u toegang tot de spelerreferentie voordat ze volledig in de wereld spawn. De belangrijkste eigenschappen zijn: playerRef - De PlayerRef instantie met UUID, gebruikersnaam en netwerkinformatie player - De speler-entiteit die hen in de wereld zal vertegenwoordigen world - The World instance they are joining holder - De entiteitsopslaghouder voor componenttoegang In tegenstelling tot sommige andere gebeurtenissen, SpelerConnect Gebeurtenis is niet kan worden geannuleerd. Als je wilt voorkomen dat een speler zich aansluit, moet je dit in de authenticatielaag afhandelen. eventRegistry.register(PlayerConnectEvent::class.java) {gebeurtenis -> val player = event.playerRef logger.info("Player aangesloten: ${player.username}") / / Welkomstbericht versturen player.sendMessage(Message.raw("Welkom op de server!")) } PlayerDisconnectEvent Getriggerd wanneer een speler de server verlaat, bevat deze gebeurtenis belangrijke context over waarom ze hebben de verbinding verbroken: playerRef - referentie van de vertrekkende speler verbinding verbrekenReason - Enum wat aangeeft timeout, kick, stop, of server shutdown Deze gebeurtenis is ook niet-annuleerbaar aangezien de ontkoppeling al heeft plaatsgevonden op netwerkniveau. De berichtenklasse: Rijke tekstopmaak Server-eigenaren die gepolijste chat-ervaringen willen creëren, zullen veel tijd doorbrengen met de Berichtklasse. Gelegen in de kern messaging pakket, het biedt een vloeiend API voor het bouwen van geformatteerde tekst. Basisberichtcreatie // Eenvoudig tekstbericht Val msg = Message.raw("Hallo, wereld!") / / Met kleuropmaak val styled = Message.raw("Important!") .color("red") .bold(true) .italic(false) .monospace(true) Parametersubstitution Gebruik voor dynamische inhoud parameterplaatshouders: val welcome = Message.raw("Welkom, {name}! Je hebt munten. .param("naam," speler.gebruikersnaam) .param("coins," playerData.coinBalance.toString()) Klikbare links Berichten kunnen klikbare hyperlinks bevatten: val gelinkt = Message.raw("Klik hier om onze website te bezoeken") .link("https://example.com") Eventregistratiepatronen Het Hytale event systeem ondersteunt zowel synchrone als asynchrone event handling, wat ontwikkelaars flexibiliteit geeft op basis van hun prestatie-eisen. synchroon Registratie Voor gebeurtenissen die direct verwerkt moeten worden op de serverthread: eventRegistry.register(PlayerInteractEvent::class.java) {gebeurtenis -> indien (event.action) Type == ActionType.RIGHT_CLICK) { / / De interactie verwerken event.setGeannuleerd(true) } } Asynchroon Registratie Voor gebeurtenissen die van de hoofdthread kunnen worden verwerkt (zoals chat moderation): eventRegistry.registerAsync(PlayerChatEvent::class.java) {future -> toekomst. vervolgens toepassen { gebeurtenis -> / / Async-chatfiltering uitvoeren indien (bevat BannedWords(event.content)) { event.setGeannuleerd(true) } afspraak } } Vaak Referentietabel voor gebeurtenissen Hier is een snelle referentie voor de meest gebruikte gebeurtenissen in serverontwikkeling: EventnaamAnnuleerbaar Sleuteleigenschappen PlayerConnectEvent NoplayerRef, speler, wereld, houder PlayerDisconnectEvent NoplayerRef, deconnectReason PlayerChatEventYes (Async)send, targets, content, formatter PlayerInteractEventYesplayer, action Type, itemInHand, targetBlock, targetEntity PlayerDeathEvent Noplayer PlayerRespawnEvent Noplayer BreakBlockEventJaitem InHand, targetBlock, blockType PlaceBlockEventYesitemInHand, targetBlock, rotation DamageBlockEventYesitem InHand, targetBlock, currentDamage, damage DropItemEventYesitem, location CraftReceptEvent YescraftedRecept, quantity Aangepaste commando's bouwen Met het commandosysteem kunt u slash commando's registreren die spelers kunnen uitvoeren in chat. Basisopdrachtimplementatie klasse MyCommand : Commando { override fun getName(): String = "mycommand" override fun execute(sender: CommandSender, args: Array) { sender.sendMessage(Message.raw("Hallo van mijn aangepaste commando!")) } } // Registreer in de installatiefase van uw plugin commandoRegistry.registerCommand(MyCommand()) De commandomanager gebruiken U kunt ook programmatisch commando's uitvoeren: val commandManager = CommandManager.get() commandoManager.handleCommand(sender, "time day") Plugin levenscyclus en structuur Elke Hytale serverplugin breidt de JavaPlugin basisklasse uit, die essentiële registers en lifecycle haken levert. Plugin Levenscyclusfasen Construction - Plugin klasse instantiation PreLoad - Async initialisatie vóór serverstart Setup - Registreer componenten, gebeurtenissen en commando's Start - Server is klaar om spelers te accepteren Shutdown - Opruimen voordat de server stopt Kenmerkplugineigenschappen // Beschikbaar in uw plugin klasse logger: HytaleLogger // Logmogelijkheden manifest: Plugin Manifest? / / Plugin-metadata uit manifestbestand eventRegistry: EventRegistry // Registreer event luisteraars commandoRegistratie: CommandoRegistratie // Registreer commando's gegevens Map: Pad // Plugin-opslaglocatie taskRegistry: TaskRegistry // Gepland taakbeheer Configuratiehelper Plugins kunnen gemakkelijk JSON configuratiebestanden laden: // Standaard config.json gebruiken val config: Config = withConfig(MyConfigClass.CODEC) // Aangepaste bestandsnaam gebruiken val config: Config = withConfig("custom-name.json," MyConfigClass.CODEC) Werken met spelers De PlayerRef klasse is uw primaire interface voor interactie met verbonden spelers. Playeridentiteit en locatie valspeler: SpelerRef = event.playerRef // Identiteit val uuid: UUID = player.uuid val naam: String = player.username val taal: String = player.language // Positie val transform: Transform = player.transform val worldUuid: UUID = player.worldUuid Val headRotation: Vector3f = player.headRotation Player Entity Access Voor diepere interacties zoals inventarisbeheer, toegang tot de speler entiteit: valspelerEntity: Speler = speler.identiteit // Inventarisatie Val inventaris: Inventaris = spelerEntity.inventory playerEntity.sendInventory() // UI managers val hotbar = spelerEntity.hotbarManager val vensters = spelerEntity.windowManager val pagina's = playerEntity.pageManager val hud = spelerEntity.hudManager // Rechten val canBuild: Boolean = playerEntity.hasPermission("server.build") World and Universe Management Het Universum singleton biedt toegang tot alle werelden en verbonden spelers. val universum = Universe.get() / / Spelertoegang val alle spelers: List = universe.players val player Telling: Int = universum.playerCount val specificPlayer: PlayerRef? = universe.getPlayer(uuid) // Wereldwijde toegang Val werelden: Kaart = universe.worlds val default Wereld: Wereld? = universum.defaultWorld val specifiek Wereld: Wereld? = universum.getWorld("mijn wereld") // Wereldbeheer Val newWorld: CompletableFuture = universum.addWorld("new-world") val geladen: voltooibaar Future = universe.loadWorld("exist-world") Thread Safety Warning Component toegang moet plaatsvinden op de wereld draad. Altijd inpakken in het uitvoerblok: world.execute { / / Veilige toegang tot onderdelen hier val entiteiten = world.getEntities() } Volgende stappen voor serverontwikkelaars Met deze API referentie als uw stichting, bent u klaar om te beginnen met het bouwen van Hytale server plugins. Belangrijke bronnen om volgende te verkennen: Het entiteitscomponentsysteem (ECS) voor geavanceerde entiteitsmanipulatie Ingebouwde modules zoals NPC's, Portals en Quest-systemen Het visuele scriptsysteem voor spelgedrag Netwerkprotocol voor aangepaste pakketbehandeling Als Hytale door Early Access beweegt, kan de API evolueren. Blijf verbonden met de gemeenschap en de officiële documentatie als deze zich ontwikkelt.