Hytale Modding API: Kompletní příručka pro vývoj modulu serveru

By HytaleCharts Team Category: guides 7 min read

Vše, co potřebujete k zahájení výstavby Hytale serverových pluginů. Tato příručka se vztahuje na Java 25 nastavení, plugin životního cyklu, dual event systém (EventBus + ECS), registrace příkazů, prvky entity, manifest.json formátu, a nasazení do CurseForge.

< p > Hytale server plugin systém dává vývojářům hlubokou kontrolu nad každým aspektem hry. Pokud jste napsali Bukkit nebo Spigot pluginy pro Minecraft, přechod je přímočarý - ale Hytale architektura je zásadně odlišná způsobem, na kterém záleží. Tento průvodce vás provede vším od počátečního nastavení po nasazení výroby. < / p > < h2 > Architektura Přehled < / h2 > < p > Před zapsáním jakéhokoliv kódu, pochopit, jak Hytale modulace funguje: < / p > < ul > < li > < silné > Klient je zvěstovatel. < / silný > Hytale 's C # klient zpracovává grafiku, vstup a zvuk - ale neobsahuje žádnou logiku hry. Všechny simulace běží na serveru Java, a to i v singleplayer. < / li > < li > < silný > Vše je serverside. < / silný > Když se hráči připojí k modelovanému serveru, vlastní aktiva a chování běží automaticky. Žádné klientské módy nejsou potřeba. < / li > < li > < silné > Existují čtyři modulační kategorie: < / silné > Data Assets (JSON), Art Assets (Blockbench models), Server Plugins (Java) a Visual Scripting (coming soon). < / li > < / ul > < p > Server pluginy jsou nejvýkonnější kategorie - poskytují vám plný Java přístup k runtime serveru, včetně Související systém, plynovod událostí, řídící rámec a manipulace se světem. < / p > < h2 > Nastavení vývojového prostředí < / h2 > < h3 > Předpoklady < / h3 > < tabulka > < hlava > < tr > < th > Nástroj < / th > < th > Verze < / th > < th > Poznámky < / th > < / tr > < / thead > < tbody > < tr > < td > < silný > Java < / silný > < / td > < td > 25 + < / td > < td > Hytale využívá moderní funkce včetně virtuálních závitů (Project Loom) < / td > < / tr > < tr > < td > < silný > IntelliJ IDEA < / silný > < / td > < td > Community or Ultimate < / td > < td > Doporučené IDE - zdarma Community Edition funguje jemně < / td > < / tr > < tr > < td > < silný > Gradle < / silný > < / td > < td > 9.2.0 + < / td > < td > Build system (zahrnutý v šabloně plugin) < / td > < / tr > < tr > < td > < silný > Git < / silný > < / td > < td > Jakákoli nedávná verze < / td > < td > Pro klonování oficiální šablona < / td > < / tr > < / tbody > < / tabulka > < h3 > Klon oficiální šablony < / h3 > < p > Hypixel Studios poskytuje oficiální plugin šablonu na GitHub: < / p > < pre > < kód > git clone http: / / github.com / HytaleModding / plugin- template.git MyFirstPlugin cd MyFirstPlugin < / kód > < / pre > < p > Otevřete projekt v IntelliJ IDEA a nechte Gradle synchronizovat. Šablona obsahuje správnou strukturu adresáře, konfiguraci a závislost na serveru API. < / p > < p > Alternativně < silný > HytaleIO Project Generator < / strong > na hytaleio.com / projekt- generátor může vytvořit Plugin, Mod, nebo Full (combo) projekt lešení s web UI. < / p > < h2 > Struktura modulu < / h2 > < p > Každý modul Hytale sleduje tento rozvržení adresářů: < / p > < pre > < kód > your-plugin / Name / your plugin / YourPlugin. java # Hlavní vstupní bod Klientské služby Seznam. json # Plugin metadata (povinné) Společná / # Společná aktiva (modely, textury) Name Name Name FARMACEUTICKÉ ÚDAJE < / kód > < / pre > < h3 > manifest.json < / h3 > < p > Každý plugin vyžaduje < kód > manifest.json < / kód > u kořene sestaveného JAR. Toto je Hytler ekvivalent Bukkit < kód > plugin.yml < / kód >: < / p > < před > < kód > { "Skupina": "pojď. Tvé jméno," "Jméno": "Your PluginName", "Main": "com.your name. Your plugin.Your Plugin," "Version": "1.0.0", "Popis": "Co váš plugin dělá," "Autoři": [{"Název": "YourName"}], "ServerVersion": "*", "Závislost": "Volitelné závislosti": "LoadBefore": [], "DisabledByDefault": false, "IncludesAssetPack": false } < / kód > < / pre > < p > Identifikátor pluginu je vytvořen jako < kód > Skupina: Název < / kód > (např. < kód > com. your name: YourPluginName < / kód >). < kód > Hlavní < / kód > pole ukazuje na vaši vstupní třídu - to špatně a plugin nebude načíst. < / p > < h2 > Modul Lifecycle < / h2 > < p > Vaše hlavní třída se rozšiřuje < kód > JavaPlugin < / kód > a má čtyři fáze životního cyklu: < / p > < pre > < kód > veřejná třída Rozšíření modulu JavaPlugin { veřejné YourPlugin (@ Nonnull JavaPluginInit init) { super (init); getLogger () .info ("Modul konstruován!"); } @ Override veřejné prázdné nastavení () { / / Fáze 2: Registrovat události, příkazy, ECS systémy / / To je místo, kde většina vašeho registračního kódu jde } @ Override veřejný neplatný start () { / / Fáze 3: Server je připraven pro hráče / / Zahájit plánované úkoly, otevřená spojení } @ Override veřejné vypnutí () { / / Fáze 4: Vyčištění před zastavením serveru / / Uložit data, uzavřít připojení, zrušit úkoly } } < / kód > < / pre > < tabulka > < hlava > < tr > < th > Fáze < / th > < th > Metoda < / th > < th > Co dělat zde < / th > < / tr > < / thead > < tbody > < tr > < td > 1. Konstrukce < / td > < td > Konstruktor < / td > < td > Základní inicializace, logování < / td > < / tr > < tr > < td > 2. Nastavení < / td > < td > < kód > nastavení () < / kód > < / td > < td > Registrujte události, příkazy, ECS komponenty a systémy < / td > < / tr > < tr > < td > 3. Start < / td > < td > < kód > start () < / kód > < / td > < td > Spustit úkoly, server přijímá hráče < / td > < / tr > < tr > < td > 4. Vypnutí < / td > < td > < kód > vypnutí () < / kód > < / td > < td > Uložit data, čisticí prostředky < / td > < / tr > < / tbody > < / tabulka > < h2 > Systém Dual Event < / h2 > < p > Tohle je nejdůležitější koncept, který je třeba pochopit. Hytale má < silný > dva samostatné systémy událostí < / silný > a použití nesprávného je běžná chyba. < / p > < h3 > Událost Bus - Události globálního serveru < / h3 > < p > The < code > EventBus < / code > hands serverwide events like player connections, chat, and world loading. Registrační manipulátory přes < kód > EventRegister < / kód > poskytnuté pro váš plugin: < / p > < pre > < kód > @ Přerušit veřejné prázdné nastavení () { / / Synchronní globální událost getEventRegister () .registerGlobal ( PlayerReadyEvent.class událost - > { getLogger () .info ("Hráč připojil:" + event.getPlayer () .getUsername (); } ); / / Async event (like PlayerChatect) getEventRegister () .registerAsyncGlobal ( PlayerChatevent.class, budoucnost - > { budoucnost. Přijetí (událost - > { if (event.getMessage () .contains ("spam") { event.setCancelled (true); } }); } ); } < / kód > < / pre > < p > < silná > klíčová událost Bus events: < / strong > < / p > < ul > < li > < kód > PlayerConnectEvent < / kód > / < kód > PlayerDisconnectEvent < / kód > - životního cyklu připojení < / li > < li > < kód > PlayerReadyEvent < / kód > - hráč plně naložen a připraven < / li > < li > < code > PlayerChatect < / code > - chatovací zprávy (async, cancellable) < / li > < li > < kód > AddPlayerToWorldEvent < / kód > - hráč vstupující do světa < / li > < li > < kód > StartWorldEvent < / kód > / < kód > AddWorldEvent < / kód > / < kód > RemoveWorld Událost < / kód > - světové řízení < / li > < / ul > < p > < silný > Priority událostí: < / silné > Použít < kód > EventPriority. EARLY < / code > nejdříve spustit a upravit události, než je uvidí ostatní manipulátoři. Použít < kód > EventPriority. LATE < / kód > vidět konečný stav po zpracování všech ostatních manipulátorů. < / p > < h3 > ECS Akce - specifické akce < / h3 > < p > Události na úrovni kompletty- level, jako je blokování, umístění bloku, a poškození jsou řešeny prostřednictvím < silný > Související systém > / silný >, ne EventBus. Vytvoříte < kód > EventSystem < / kód >: < / p > < pre > < kód > veřejná třída BlockBreakBreakHandler ExtentyEventSystem & lt; CompentyStore, BreakBlock Event & gt; { @ Override veřejný dotaz getQuery () { / / Cílové subjekty se specifickými složkami return Query.builder () .build (); } @ Override veřejná třída & lt; BreakblockEvent & gt; getEventType () { návrat BreakBlockEvent.class; } @ Override veřejná neplatná rukojeť (OpertyStore Store, Commander Buffer buffer, BreakBlock Událost) { / / Zpracujte zlom bloku / / Zrušit ve fázi filtru, ne zde } } < / kód > < / pre > < p > < silné > Kritické pravidlo: < / silné > Během fáze < silných > filtrů < / silných > zrušte ECS události. Zrušení ve fázi kontroly nemá žádný účinek, protože akce již došlo. < / p > < h2 > Součást subjektu (ECS) < / h2 > < p > Hytale používá vlastní ECS architekturu. Pochopení je nezbytné pro všechny non-triviální plugin. < / p > < h3 > Core Concepts < / h3 > < ul > < li > < silný > Subjekt < / silný > - pouze unikátní ID, neobsahuje sama o sobě žádná data < / li > < li > < silný > Součást < / silný > - čistý datový kontejner připojený k subjektu < / li > < li > < silný > Systém < / silný > - logika, která zpracovává subjekty se specifickými kombinacemi komponent < / li > < li > < strong > Ref < / strong > - bezpečná rukojeť k subjektu (nikdy neukládat přímé odkazy na subjekt) < / li > < li > < strong > Store < / strong > - spravuje subjekty používající Archetypes pro efektivní rozložení paměti < / li > < / ul > < h3 > Vlastní komponenty < / h3 > < pre > < kód > skóre veřejné třídy Realizace dat Komponent & lt; ComponentyStore & gt; { veřejné int score = 0; veřejný tým String = ""; na veřejnosti dlouho spojené At = System.currentTimeMillis (); @ Override veřejný klon ScoreData () { ScoreData kopie = nový ScoreData (); copy.score = this.score; Rozumím. tým = tento tým; Rozumím. spojené At = this. Na. vrácená kopie; } } < / kód > < / pre > < p > Součásti musí implementovat < kód > klon () < / kód >. Připojit je k subjektům, aby ukládaly vlastní data - skóre, týmy, chlazení, zásoby nebo jakýkoli konkrétní stav hry. < / p > < h3 > Pochopení PlayerRef < / h3 > < p > "Player" v Hytale není speciální třída - je to entita složená ze složek. < code > PlayerRef < / code > je ve skutečnosti součástí, která ukládá uživatelské jméno hráče, UUID, jazyk a síťový ovladač. Zůstává aktivní tak dlouho, dokud je hráč připojen. < / p > < h2 > Registrace příkazu < / h2 > < p > Příkazy implementovat < kód > Příkaz < / kód > rozhraní: < / p > < pre > < kód > veřejná třída Spawn Příkaz implementuje příkaz { @ Override Public String getName () {return "spawn";} @ Override veřejná nicota execution (Odesílatel příkazů, String [] args) { if (instance odesílatele hráče) { / / Přehrávač na teleport k rozmnožování sender.sendMessage ("Teleporting to spewn..."); } } } / / Zaregistrujte se v nastavení () command Registry.registerCommand (new SpawnCommand ()); < / code > < / pre > < p > Oba < kód > Player < / code > a < code > Commander < / code > podpora < kód > hasApproval () < / code > kontroly. Built- in autorisation system podporuje uživatelské- level oprávnění, skupinové dědictví, a wildcard odpovídající. < / p > < h2 > Build and Deploy < / h2 > < h3 > Budova < / h3 > < před > < kód >. / Stavebnictví < / kód > < / pre > < p > Výstup JAR jde do < kódu > build / libs / < / code >. < / p > < h3 > Paths < / h3 > < tabulka > < hlava > < tr > < th > Platform < / th > < th > Mod Directory < / th > < / tr > < / thead > < tbody > < tr > < td > Windows (lokální) < / td > < td > < kód >% AppData% / Roaming / Hytale / UserData / Mods / < / kód > < / td > < / tr > < tr > < td > Linux server < / td > < td > < kód > / opt / hytale / Server / mods / < / code > < / td > < / tr > < / tbody > < / tabulka > < p > Načítání za tepla je částečně podporováno pro drobné změny - použijte < kód > Ctrl + F9 < / kód > v Intelli J k rekonstrukci bez úplného restartu. Velké změny vyžadují restart serveru. < kód > EventRegister < / kód > automaticky čistí manipulátory, když se modul uvolní. < / p > < h3 > Publishing to CurseForge < / h3 > < p > CurseForge rozpozná tři typy modů: < / p > < ul > < li > < silné > Balení < / silné > - balení aktiv / obsahu (JSON data, modely, textury) < / li > < li > < silné > Plugins < / silné > - Java JAR soubory pomocí serveru API < / li > < li > < silné > Early Plugins < / silné > - bootstrap pluginy pro transformace nižší třídy (pokročilé, používat šetrně) < / li > < / ul > < h2 > Zdroje Společenství < / h2 > < p > Modulační komunita vybudovala rozsáhlou dokumentaci nad rámec toho, co Hypixel Studios poskytuje: < / p > < tabulka > < hlava > < tr > < th > Resource < / th > < th > Focus < / th > < / tr > < / thead > < tbody > < tr > < td > < silný > HytaleModding.dev < / silný > < / td > < td > Průvodce, dokumenty, nástroje - 8 000 + členové Discordu < / td > < / tr > < tr > < td > < silný > Britakee Studios GitBook < / silný > < / td > < td > Komplexní testované návody pro balení a moduly < / td > < / tr > < tr > < td > < silný > HytaleDocs.com < / silný > < / td > < td > Community wiki a API reference < / td > < / tr > < tr > < td > < silný > Hytale- Toolkit (GitHub) < / silný > < / td > < td > Decompiled source, javadocs, semantic code search < / td > < / tr > < tr > < td > < silný > Patcher (GitHub) < / silný > < / td > < td > Procházet server JAR jako projekt IntelliJ < / td > < / tr > < / tbody > < / tabulka > < p > < silný > Poznámka: < / silný > Server JAR není zamlžený a lze jej volně rozložit. Hypixel Studios se zavázala uvolnit celý zdrojový kód serveru do 1-2 měsíců od spuštění EA. < / p > < h2 > Co se blíží < / h2 > < ul > < li > < silný > Vydání zdrojového kódu serveru < / silný > - očekává se do března 2026 < / li > < li > < silné > Visual Scripting < / silné > - node- based scripting for non-programmers (obdobný nereálným Blueprints) < / li > < li > < silné > Vývojové odměny < / silné > - Hypixel Studios plánují nabídnout odměny za příspěvky Společenství < / li > < li > < silné > Rozšíření oficiální dokumentace < / silné > - uznáno jako neúplné, je rozšířeno na základě komunitní zpětné vazby < / li > < / ul > < p > Připraven nasadit plugin? Zadejte svůj modelovaný server na < a href = "/" > HytaleCharts < / a >, aby hráči mohli najít vaši tvorbu. Pro minigame- specifické vývojové vzory, podívejte se na naše < a href = "/ novinky / hytale- custome- minigame- server- development- guide" > Vlastní průvodce minigames < / a >. < / p >