Hytale Server API Reference: Begivenheder, meddelelser og Plugin Development Guide

Efter: navn Kategori:: Navn : minutter min læs

Master Hytale server udvikling med vores omfattende API reference. Lær om PlayerConnect Begivenhed, PlayerDisconnect Event, Besked klasse for chat formatering, kommando registrering, og opbygge dit første plugin ved hjælp af Legacy Engine Java- baseret arkitektur.

< h2 > Forståelse af Hytale Server Arkitektur < / h2 > < p > Hytale server API er bygget på en robust Java- baseret arkitektur, der vil føle sig bekendt med alle, der har arbejdet med Minecraft server plugins. Med tilbagevenden til Legacy Engine, udviklere har nu adgang til en moden, veltestet codebase, der prioriterer modulering tilgængelighed over cross-platform kompleksitet. < / p > < p > I hjertet af serveren sidder < stærk > com.hypixel.hytale.server.core < / stærk > pakke, som giver grundlaget for alle server- side operationer. Dette omfatter player management, verden håndtering, begivenhed forsendelse, og kommando behandling. < / p > < h2 > Player Connection Events: Håndtering Deltag og Forlad < / h2 > < p > Et af de mest almindelige krav til enhver server plugin reagerer på spillere, der slutter sig til eller forlader. Hytale API giver to væsentlige begivenheder til dette formål. < / p > < h3 > PlayerConnectEvent < / h3 > < p > Fyret, når en spiller med succes forbinder til serveren, denne begivenhed giver dig adgang til spilleren reference, før de fuldt spyttet ind i verden. Nøgleegenskaber omfatter: < / p > < ul > < li > < stærk > playerRef < / stærk > - PlayerRef-instansen indeholder UUID, brugernavn og netværksinfo < / li > < li > < stærk > spiller < / stærk > - Spillerenheden, der vil repræsentere dem i verden < / li > < li > < stærk > verden < / stærk > - World instance de slutter sig til < / li > < li > < stærk > holder < / stærk > - Virksomheden lagerholder for komponentadgang < / li > < / ul > < p > I modsætning til nogle andre begivenheder, PlayerConnect Begivenhed er < em > ikke annullerbar < / em >. Hvis du har brug for at forhindre en spiller i at deltage, bør du håndtere dette på autentificering lag i stedet. < / p > < pre > < kode > eventRegister.register (PlayerConnectEvent:: class.java) {begivenhed - > val player = event.playerRef logger.info ("Spiller forbundet: ${player.username}") / / Send velkomstbesked player.sendMessage.raw ("Velkommen til serveren!") } < / kode > < / pre > < h3 > PlayerDisconnectEvent < / h3 > < p > Udløses, når en spiller forlader serveren, denne begivenhed indeholder vigtige kontekst om < em > hvorfor < / em > de frakoblede: < / p > < ul > < li > < stærk > playerRef < / stærk > - Afgangsspillerens reference < / li > < li > < stærk > disconnectReason < / stærk > - Enum angiver timeout, kick, quit, eller server lukning < / li > < / ul > < p > Denne begivenhed kan også ikke aflyses, da afbrydelsen allerede er sket på netværksniveau. < / p > < h2 > Meddelelsesklassen: Rich Text Formatering < / h2 > < p > Serverejere søger at skabe poleret chat oplevelser vil bruge betydelig tid med Besked klassen. Beliggende i kernen messaging pakke, det giver en flydende API til at bygge formateret tekst. < / p > < h3 > Grundlæggende meddelelsesskabelse < / h3 > < pre > < kode > / / Simpel tekstmeddelelse val msg = Message.raw ("Hej, verden!") / / Med farveformatering val stylet = Message.raw ("Vigtigt!") . farve ("rød") .fed (sand) .italic (false) .monospace (true) < / code > < / pre > < h3 > Parameter Substitution < / h3 > < p > For dynamisk indhold, brug parameter pladsholdere: < / p > < pre > < kode > val velkomst = Message.raw ("Velkommen, {navn}! Du har {mønter} mønter".) .param ("navn", player.username) .param ("mønter", playerData.coinBalance.toString ()) < / code > < / pre > < h3 > klikbare links < / h3 > < p > Beskeder kan inkludere klikbare hyperlinks: < / p > < pre > < kode > val linked = Message.raw ("Klik her for at besøge vores hjemmeside") . link ("https: / / example.com") < / kode > < / pre > < h2 > Begivenhedsregistreringsmønstre < / h2 > < p > Hytalebegivenhedssystemet understøtter både synkron og asynkron hændelseshåndtering, hvilket giver udviklerne fleksibilitet baseret på deres præstationskrav. < / p > < h3 > Synkron Registrering < / h3 > < p > For begivenheder der kræver øjeblikkelig behandling på servertråden: < / p > < pre > < kode > eventRegistry.register (PlayerInteractEvent:: class.java) {begivenhed - > hvis (eventuel handling. Type = = ActionType.Right _ CLICK) { / / Behandl interaktionen event.setCancelled (true) } } < / kode > < / pre > < h3 > Asynkron Registrering < / h3 > < p > For begivenheder, der kan behandles ud af hovedtråden (som chat mådehold): < / p > < pre > < kode > eventRegister.RegisterAsync (PlayerChatEvent:: class.java) {fremtid - > Fremtid. derefter Anvend {begivenhed - > / / Udfør async chat filtrering hvis (containsBannedWords (eventu.content)) [ event.setCancelled (true) } begivenhed } } < / kode > < / pre > < h2 > Almindelig Begivenhedsreferencetabel < / h2 > < p > Her er en hurtig reference for de hyppigst anvendte begivenheder i serverudvikling: < / p > < tabel > < tead > < st > < th > Begivenhedsnavn < / th > < th > Annullerbar < / th > < th > Nøgleegenskaber < / th > < / tr > < / thead > < tbody > < tr > < td > PlayerConnectEvent < / td > < td > No < / td > < td > playerRef, player, world, holder < / td > < / tr > < tr > < td > PlayerDisconnectEvent < / td > < td > No < / td > < td > playerRef, dissointReason < / td > < / tr > < tr > < td > PlayerChatEvent < / td > < td > Ja (Async) < / td > < td > afsender, mål, indhold, format < / td > < / tr > < tr > < td > PlayerInteractEvent < / td > < td > Ja < / td > < td > spiller, handling Type, itemInHand, targetBlock, targetEntity < / td > < / tr > < tr > < td > PlayerDeathEvent < / td > < td > No < / td > < td > player < / td > < / tr > < tr > < td > PlayerRespawnEvent < / td > < td > No < / td > < td > player < / td > < / tr > < tr > < td > BreakBlockEvent < / td > < td > Ja < / td > < td > element InHand, targetBlock, blockType < / td > < / tr > < tr > < td > PlaceBlockEvent < / td > < td > Ja < / td > < td > itemInHand, targetBlock, rotation < / td > < / tr > < tr > < td > DamageBlockEvent < / td > < td > Ja < / td > < td > element InHand, targetBlock, strømskader, skader < / td > < / tr > < tr > < td > DropItemEvent < / td > < td > Ja < / td > < td > element, placering < / td > < / tr > < tr > < td > CraftRecevent < / td > < td > Ja < / td > < td > craftedOpskrift, mængde < / td > < / tr > < / tbody > < / tabel > < h2 > Bygning brugerdefinerede kommandoer < / h2 > < p > Kommandosystemet giver dig mulighed for at registrere skråkommandoer som spillerne kan udføre i chat. < / p > < h3 > Basic Command Implementation < / h3 > < pre > < kode > klasse MyCommand: Kommando { override fun getName (): String = "mycommand" override fun execution (afsender: CommandSender, Args: Array & lt; String & gt;) { sender.sendMessage.raw ("Hej fra min brugerdefinerede kommando!") } } / / Registrer dig i din plugins opsætningsfase KommandoregisterCommand (MyCommand ()) < / kode > < / pre > < h3 > Brug af CommandManager < / h3 > < p > Du kan også programmæssigt udføre kommandoer: < / p > < pre > < kode > val Commander Manager = CommandManager.get () commander Manager.handleCommand (afsender, "time day") < / code > < / pre > < h2 > Plugin livscyklus og struktur < / h2 > < p > Hver Hytale server plugin udvider JavaPlugin basisklasse, som giver væsentlige registre og livscyklus kroge. < / p > < h3 > Plugin livscyklusfaser < / h3 > < ol > < li > < stærk > Byggeri < / stærk > - Påvisning af plugin- klasse < / li > < li > < stærk > Preload < / stærk > - Async initialisering før server start < / li > < li > < stærk > Opsætning < / stærk > - Registrer komponenter, begivenheder og kommandoer < / li > < li > < stærk > Start < / stærk > - Server er klar til at acceptere spillere < / li > < li > < stærk > Lukning < / stærk > - Oprydning før server stopper < / li > < / ol > < h3 > Nøgleplugin- egenskaber < / h3 > < pre > < kode > / / Tilgængelig i din plugin klasse logger: HytaleLogger / / Loggeevne manifest: PluginManifest? / / Plugin- metadata fra manifest fil eventRegistry: EventRegistry / / Registrer hændelseslyttere Kommandoregister: CommandRegistry / / Registrer kommandoer data vejviser: Sti / / Placering af plugin- lager taskRegistry: TaskRegistry / / Planlagt opgavehåndtering < / kode > < / pre > < h3 > Konfiguration Hjælper < / h3 > < p > Plugins kan nemt indlæse JSON indstillingsfiler: < / p > < pre > < kode > / / Brug standard config.json val config: Config & lt; MyConfigClass & gt; = witConfig (MyConfigClass.CODEC) / / Brug brugerdefineret filnavn val config: Config & lt; MyConfigClass & gt; = witConfig ("custom-name.json", MyConfigClass.CODEC) < / code > < / pre > < h2 > Arbejde med spillere < / h2 > < p > PlayerRef klassen er din primære grænseflade til at interagere med forbundne spillere. < / p > < h3 > Spillerens identitet og placering < / h3 > < pre > < kode > val player: PlayerRef = event.playerRef / / Identitet val uuid: UUID = player.uuid val name: String = player.username val language: String = player.language / / Placering val transformere: Transform = player.transformere val worldUuid: UUID = player.worldUuid val headRotation: Vector3f = player.headRotation < / code > < / pre > < h3 > Spillerenhedens adgang < / h3 > < p > For dybere interaktioner som lagerstyring, få adgang til spillerenheden: < / p > < pre > < kode > val playerEntity: Player = player.entity / / Opgørelsesoperationer val inventar: Inventory = playerEntity.inventar playerEntity.sendInventory () / / UI-ledere val hotbar = playerEntity.hotbarManager val windows = playerEntity.windowManager val sider = playerEntity.pageManager val hud = playerEntity.hudManager / / Tilladelser val canBuild: Boolean = playerEntity.hasPermission ("server.build") < / code > < / pre > < h2 > World and Universe Management < / h2 > < p > Universe singleton giver adgang til alle verdener og forbundne spillere. < / p > < pre > < kode > val univers = Universise.get () / / Spillerens adgang val allPlayers: List & lt; PlayerRef & gt; = universe.players val-afspiller Tælling: Int = universe.playerCount val specificiPlayer: PlayerRef? = universe.getPlayer (uuid) / / Adgang til verden Vale verdener: Kort & lt; String, World & gt; = universe.worlds val- standard Verden: Verden? = universe.defaultWorld val specifik Verden: Verden? = universe.getWorld ("min verden") / / Verdensforvaltning val newWorld: CompletableFuture & lt; World & gt; = universe.addWorld ("new- world") val indlæst: Komplekst Fremtid & lt; World & gt; = universe.loadWorld ("eksisterende-verden") < / code > < / pre > < h3 > Tråd sikkerhedsadvarsel < / h3 > < p > Komponent adgang skal forekomme på verdens tråd. Altid wrap operationer i udførelse blok: < / p > < pre > < kode > world.execute [ / / Sikker komponentadgang her val entities = world.getEntities () } < / kode > < / pre > < h2 > Næste trin for serverudviklere < / h2 > < p > Med denne API reference som din fond, er du klar til at begynde at opbygge Hytale server plugins. Nøgleressourcer til at udforske næste: < / p > < ul > < li > Entity Component System (ECS) for avanceret virksomhedsmanipulation < / li > < li > Bygge- i moduler som NPC 'er, Portaler og Quest systemer < / li > < li > Det visuelle scriptsystem for spiladfærd < / li > < li > Netværksprotokol til brugerdefineret pakkehåndtering < / li > < / ul > < p > Husk, at som Hytale bevæger sig gennem tidlig adgang, API kan udvikle sig. Ophold forbundet med fællesskabet og officiel dokumentation som det udvikler. < / p >