Spravochnik za API na servera Hytale: Sabitiya, Saobshteniya i Rakovodstvo za Razrabotka na Plagini

By HytaleCharts Team Category: technical 6 min read

Ovladeyte razrabotkata na serveri Hytale s nashiya izcherpaten API spravochnik. Nauchetе za PlayerConnectEvent, PlayerDisconnectEvent, klasa Message za formatirane na chat, registratsiya na komandi i sazdavane na parvia vi plagin s izpolzvane na Java arhitekturata na Legacy Engine.

Razbirane na arhitekturata na servera Hytale API-to na servera Hytale e izgradeno varhu stabilna arhitektura, bazirana na Java, koyato shte bade poznata na vseki, koito e rabotil s plagini za serveri na Minecraft. S zavrashtaneto kam Legacy Engine, razrabotchitsite vече imat dostap do zryal, dobre testvan kod, koito dava predimstvo na dostapnostta na modiraneto pred slozhnostta na mezhduplatformennite resheniya. V sartseto na servera se namira com.hypixel.hytale.server.core paketut, koito osiguryava osnovata za vsichki serverski operatsii. Tova vklyuchva upravlenie na igrachite, obrabotka na svetovete, izprashchane na sabitiya i obrabotka na komandi. Sabitiya za svarzane na igrachi: Obrabotka na vhod i izhod Edno ot nay-chesтite iziskvaniya za vseki serverski plagin e reagiraneto na igrachi, koito se prisaedinyavat ili napuskat. API na Hytale predostavya dve osnovni sabitiya za tazi tsel. PlayerConnectEvent Aktivira se kogato igrach uspeshno se svarzhe sam servera, tova sabitie vi dava dostap do referentsiyata na igracha predi da se poyavi napalno v sveta. Klyuchovite svoystva vklyuchvat: playerRef - Instanitsiya na PlayerRef, sadarzhashta UUID, potrebitelsko ime i mrezhova informatsiya player - Sashchnostta Player, koyato shte gi predstavlyava v sveta world - Instanitsiyata na World, kam koyato se prisaedinyavat holder - Darzhatel na hranilishteto za sashchnosti za dostap do komponentite Za razlika ot nyakoi drugi sabitiya, PlayerConnectEvent e ne mozhe da se otmeni. Ako tryabva da predarzhite igrach da se prisaedini, tryabva da se spravite s tova na nivoto na avtentikatsiya. 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 kogato igrach napusne servera, tova sabitie vklyuchva vazhen kontekst za prichinata za prekasvaneto na vrazskata: playerRef - Referentsiyata na napuskashchiya igrach disconnectReason - Enum, posochvashch timeout, kick, izhod ili spirane na servera Tova sabitie sashtо ne mozhe da se otmeni, тъй kato prekasvaneto na vrazskata veche se e sluchilo na mrezhovo nivo. Klasat Message: Formatirane na bogat tekst Sobstvenitsite na serveri, koito iskat da sazdadat isgladeno chat izzhivyavane, shte prekarат znachitelno vreme s klasa Message. Namirasht se v yadroto na paketa za saobshteniya, toy predostavya fluent API za izgraзhdane na formatiran tekst. Osnovno sazdavane na saobshteniya // 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) Zamyastane na parametri Za dinamichno sadarzhanie izpolzvayts rezervirati mеsta za parametri: val welcome = Message.raw("Welcome, {name}! You have {coins} coins.") .param("name", player.username) .param("coins", playerData.coinBalance.toString()) Klikvaemi vrаzki Saobshteniyata mogat da vklyuchvat klikvaemi hipervrazki: val linked = Message.raw("Click here to visit our website") .link("https://example.com") Modeli za registratsiya na sabitiya Sistemata za sabitiya na Hytale poddarzha kаkto sinkhronno, taka i asinkhronno obrabotzvane na sabitiya, davayki na razrabotchitsite gibkavost spored iziskvaniyata im za proizvoditelnost. Sinkhronana registratsiya Za sabitiya, koito se nuzhdayat ot nezabavna obrabotka v nitkata na servera: eventRegistry.register(PlayerInteractEvent::class.java) { event -> if (event.actionType == ActionType.RIGHT_CLICK) { // Process the interaction event.setCancelled(true) } } Asinkhronana registratsiya Za sabitiya, koito mogat da badat obraboteni izvan osnovnata nitka (kato moderatsiya na chat): eventRegistry.registerAsync(PlayerChatEvent::class.java) { future -> future.thenApply { event -> // Perform async chat filtering if (containsBannedWords(event.content)) { event.setCancelled(true) } event } } Referentna tablitsa za chesti sabitiya Eto barz pregled na nay-chesto izpolzvanite sabitiya pri razrabotka na serveri: Ime na sabitietoOtmenimoKlyuchovi svoystva 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 Sazdavane na personalizirani komandi Sistemata za komandi vi pozvolyava da registrirate slash komandi, koito igrachite mogat da izpalnyavat v chata. Osnovna implementatsiya na komanda 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()) Izpolzvane na CommandManager Sashtо mozhete programno da izpalnyavate komandi: val commandManager = CommandManager.get() commandManager.handleCommand(sender, "time day") Zhiznenen tsikal i struktura na plagina Vseki serverski plagin na Hytale razshiryava bazoviya klas JavaPlugin, koito predostavya osnovni registri i hooks za zhizneniya tsikal. Fazi na zhizneniya tsikal na plagina Construction - Sazdavane na instanitsiya na klasa na plagina PreLoad - Asinkhronana initsiализatsiya predi startiraнe na servera Setup - Registratsiya na komponenti, sabitiya i komandi Start - Serverut e gotov da priema igrachi Shutdown - Pochistvane predi spirane na servera Klyuchovi svoystva na plagina // 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 Pomоshtnik za konfiguratsiya Plaginite mogat lesno da zarеzhdаt JSON konfiguratsiоnni faylove: // Using default config.json val config: Config<MyConfigClass> = withConfig(MyConfigClass.CODEC) // Using custom filename val config: Config<MyConfigClass> = withConfig("custom-name.json", MyConfigClass.CODEC) Rabota s igrachi Klasat PlayerRef e vashiyat osnoven interfeys za vzaimodeystvie sas svarzanite igrachi. Identichnost i mestopolozhenie na igracha 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 Dostap do sashchnostta na igracha Za po-dalboko vzaimodeystvie kato upravlenie na inventara, dostapete do sashchnostta Player: 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") Upravlenie na svetove i vselena Singleton Universe predostavya dostap do vsichki svetove i svarzani igrachi. 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") Preduprezhdenie za bezopasnost na nitki Dostapat do komponentite tryabva da se osashchestvyava v nitkata na sveta. Vinagi obgivayts operatsiite v bloka execute: world.execute { // Safe component access here val entities = world.getEntities() } Sledvashchi stapki za razrabotchitsi na serveri S tazi API referentsiya kato osnova, vie ste gotovi da zachnete da stroite plagini za servera Hytale. Klyuchovi resursi za izsledvane: Entity Component System (ECS) za naprednalo upravlenie na sashchnosti Vgradeni moduli kato NPC, Portali i sistemi za Questove Vizualnata sistema za skriptirane za povedenie v igrata Mrezhov protokol za obrabotka na personalizirani paketi Pomнete, che dokato Hytale napredva prez ranniya dostap, API mozhe da se razviva. Ostavayts svarzani sas obshchnostta i oficialната dokumentatsiya.