Hibamodellezés API: A teljes szerver bővítőmodul fejlesztési útmutató

Név Kategória: név : perc min read

Minden, amire szükséged van a Hytale szerver bővítmények létrehozásához. Ez az útmutató magában foglalja a Java 25 beállítás, plugin életciklus, a kettős esemény rendszer (Equibus + ECS), parancs regisztráció, entitás komponensek, manist.json formátum, és telepítése CurseForge.

< p > A Hytale szerver plugin rendszere mély irányítást biztosít a fejlesztők számára a játék minden aspektusában. Ha már írt Bukkit vagy Spigot bővítmények Minecraft, az átmenet egyszerű - de Hytale építészeti alapvetően különböző módon, hogy számít. Ez az útmutató végigkísér mindent a kezdeti beállítástól a gyártási bevezetésig. < / p > < h2 > Építészet Áttekintés < / h2 > < p > Mielőtt bármilyen kódot írna, értse meg, hogyan működik a Hytale modulálása: < / p > < ul > < li > < erős > Az ügyfél egy rendező. < / erős > Hytale C # kliens kezeli grafika, bemenet, és audio - de nem tartalmaz játék logika. Minden szimuláció a Java szerveren fut, még egyesben is. < / li > < li > < erős > Minden szerveroldalas. < / erős > Amikor a játékosok csatlakoznak egy modulált szerverhez, a egyéni eszközök és a viselkedési folyam automatikusan. Ügyfél modokra nincs szükség. < / li > < li > < erős > Négy modulációs kategória létezik: < / erős > Adateszközök (JSON), Art Assets (Blockpad modellek), Server Plugins (Java) és Visual Scripting (hamarosan). < / li > < / ul > < p > A szerverbővítmények a leghatásosabb kategória - teljes Java hozzáférést biztosítanak a szerver futási idejéhez, beleértve az Entity Component System-et, az eseményvezetéket, a parancsnoki keretet és a világ manipulációját. < / p > < h2 > Fejlesztési környezet beállítása < / h2 > < h3 > Előfeltételek < / h3 > < táblázat > < fej > < tr > < th > Tool < / th > < th > Verzió < / th > < th > Megjegyzések < / th > < / tr > < / fej > < tbody > < tr > < td > < strong > Java < / strong > < / td > < td > 25 + < / td > A Hytale modern funkciókat használ, beleértve a virtuális szálakat (Project Loom) < / td > < / tr > < tr > < td > < strong > IntelliJ IDEA < / strong > < / td > < td > Közösség vagy Ultimate < / td > < td > Ajánlott IDE - ingyenes közösségi kiadás működik finom < / td > < / tr > < tr > < td > < strong > Gradle < / strong > < / td > < td > 9.2.0 + < / td > < td > Építőrendszer (a plugin sablonban) < / td > < / tr > < tr > < td > < strong > Git < / strong > < / td > < td > Bármilyen friss verzió < / td > < td > Klónozáshoz a hivatalos sablon < / td > < / tr > < / test > < / táblázat > < h3 > Hivatalos sablon < / h3 > < p > A Hypixel Studios egy hivatalos plugin sablon a GitHub: < / p > < pre> < kód > git klón https: / / github.com / HytaleModding / plugin- template.git MyFirstPlugin cd MyFirstPlugin < / kód > < / pre> < p > Open the project in IntelliJ IDEA and let Gradle sync. A sablon tartalmazza a megfelelő könyvtárszerkezetet, a konfigurációt és a kiszolgáló API függéseket. < / p > < p > Alternatív megoldásként, a < erős > HytaleiO Project Generator < / strong > a hytaleio.com / project- generátornál létrehozhat Plugin, Mod, vagy Full (combo) projekt állványzat webes UI. < / p > < h2 > Plugin struktúra < / h2 > < p > Minden Hytale plugin követi ezt a könyvtár elrendezését: < / p > < pre> < kód > Your- plugin / Az Európai Unió Hivatalos Lapja - Igen. java # fő belépési pont Az Európai Unió Hivatalos Lapja - Igen. json # Plugin metaadatok (szükséges) "Közös / # megosztott eszközök" (modellek, textúrák) A szolgáltatás / # szerveroldali adatátviteli eszközök Kts Az Európai Unió Hivatalos Lapja A nem kívánt rész törlendő. < h3 > manist.json < / h3 > < p > Minden pluginnak szüksége van egy < kódra > manist.json < / kód > az összeállított JAR gyökerénél. Ez Hytale Bukkit < kódja > plugin.yml < / kód >: < / p > < pre> < kód > { "Csoportos": "Com.yourname", "Név": "YourPluginName", "Main": "com.your name. your plugin. YourPlugin", Verzió: "1.0.0", "Leírás": "Mit csinál a plugin", "Authors": [{"Name": "YourName"}], "ServerVersion": "*", "Függőség": {}, "OptionalDependencies": {}, "LoadBefore": [], "DisabledByAlapértelmezett": hamis, "Idetartozik az AssetPack": hamis } < / kód > < / pre> < p > A plugin azonosítója < kód > Csoport: Név < / kód > (pl., < kód > com.yourPluginName < / kód >). < kód > Fő < / kód > mező pontok a nevezési osztály - kap ez rossz, és a plugin nem tölt. < / p > < h2 > Plugin Életciklus < / h2 > < p > A fő osztály kiterjeszti < kód > JavaPlugin < / kód > és négy életciklus fázisa van: < / p > < pre > < kód > nyilvános osztály Bővítőmodul-kiterjesztések JavaPlugin { public YourPlugin (@ Nonnull JaPluginit init) { szuper (init); getLogger () .info ("Plugin build!"); } @ Override nyilvános üresedés () { / / 2. szakasz: Rendezvények, parancsok, ECS rendszerek regisztrálása / / Ez az, ahol a legtöbb regisztrációs kód megy } @ Override nyilvános törlés () { / / 3. szakasz: A kiszolgáló készen áll a játékosokra / / Menetrend szerinti feladatok megkezdése, nyílt kapcsolatok } @ Override nyilvános érvénytelenítés () { / / 4. szakasz: Tisztítás a szerver leállása előtt / / Adatmentés, szoros kapcsolatok, feladatok törlése } } < / kód > < / pre> < táblázat > < fej > < tr > < th > Fázis < / th > < th > Módszer < / th > < th > Mi a teendő itt < / th > < / tr > < / fej > < tbody > < tr > < td > 1. Constructor < / td > < td > Alapinicializáció, naplózás < / td > < / tr > < tr > < td > 2. Rendezvények, parancsok, ECS alkatrészek és rendszerek regisztrálása < / td > < / tr > < tr > < td > 3. Kezdő feladatok, a kiszolgáló elfogadja a játékosokat < / td > < / tr > < tr > < td > 4. Az adatok mentése, a források megtisztítása < / td > < / tr > < / test > < / táblázat > < h2 > Dual Event System < / h2 > < p > Ez a legfontosabb, hogy megértsük. A Hytale < erős > két különálló esemény rendszer < / erős >, és a rossz használata gyakori hiba. < / p > < h3 > esemény Bus - Globális kiszolgáló események < / h3 > < p > A < kód > Equibus < / kód > olyan szerveres eseményeket kezel, mint a játékosok kapcsolatai, chat és a világ rakodása. Regisztráló kezelők a < kód > Regisztráló < / kód > a pluginhoz mellékelve: < / p > < pre > < kód > @ Felülvizsgálat nyilvános üresedés () { / / Szinkron globális esemény getregular () .registerGlobal ( PlayerReady.class, esemény - > { getLogger () .info ("A játékos csatlakozott:") + event.getPlayer () .getUsername ()); } ); / / Szinkron esemény (mint a PlayerChatEvent) getregular () .registerAsyncGlobal ( PlayerChatre.class, jövő - > { A jövő. then Accept (esemény - > { Ha (event.getMessage () .contains ("spam")) { Esemény.setCancelled (true); } ); } ); } < / kód > < / pre> < p > < erős > Kulcsfontosságú esemény Buszesemények: < / erős > < / p > < ul > < li > < kód > PlayerConnectEvent < / kód > / < kód > PlayerDisconnectEvent < / kód > - kapcsolat életciklusa < / li > < li > < kód > PlayerReadyEvent < / kód > - játékos teljesen betöltött és kész < / li > < li > < kód > PlayerChatEvent < / kód > - chat üzenetek (async, törölhető) < / li > < li > < kód > AddPlayerToWorldEvent < / kód > - játékos belépve a világba < / li > < li > < kód > StartWorldEvent < / kód > / < kód > AddWorldEvent < / kód > / < kód > RemoveWorld Esemény < / kód > - világvezetés < / li > < / ul > < p > < erős > A rendezvény prioritásai: < / erős > < kód > Eseményprioritás. EARLY < / code > először futtatni, és módosítani az eseményeket, mielőtt más kezelők látják őket. < kód > Eseményprioritás. LATE < / kód > a végső állapot megtekintéséhez, miután az összes többi kezelő feldolgozta. < / p > < h3 > ECS Események - Konkrét intézkedések < / h3 > < p > Environty- level events like block breaking, block placement, and war are treated through the < strong > Entity Component System < / strong >, not the Economibus. Létrehozol egy < kódot > Environmental System < / Code >: < / p > < előre > < kód > nyilvános osztály BlockBreakhandler kiterjeszti az EntityStore, BreakBlock rendszert Esemény & gt; { @ Override public query getQuery () { / / Egyedi összetevőkkel rendelkező célszervezetek visszatérés Query.builder () .build (); } @ Override public class & lt; BreakBlockEvent & gt; getregulated Type () { visszatérés BreakBlock.class; } @ Override nyilvános üres fogantyú (EnvirontyStore, CommandBuffer puffer, BreakBlock Esemény) { / / A blokktörés feldolgozása / / Törlés a szűrőfázisban, nem itt } } < / kód > < / pre> < p > < erős > kritikus szabály: < / erős > Csak a < erős > szűrő < / erős > fázis alatt törli az ECS-eseményeket. Az ellenőrző fázisban történő törlésnek nincs hatása, mert már megtörtént. < / p > < h2 > Szervezetek összetevőinek rendszere (ECS) < / h2 > < p > A Hytale egyedi ECS architektúrát használ. Ennek megértése elengedhetetlen minden nem-triviális plugin. < / p > < h3 > Core Concepts < / h3 > < ul > < li > < erős > Szervezetek < / erős > - csak egy egyedi azonosító, nem tartalmaz adatokat < / li > < li > < erős > komponens < / erős > - egy szervezethez csatlakoztatott tiszta adattároló < li > < erős > - logika, hogy feldolgozza a gazdálkodó egységek meghatározott komponens kombinációk < / li > < li > < strong > Hiv < / strong > - biztonságos fogantyú egy gazdálkodó egység számára (soha ne tárolja a közvetlen gazdálkodó egység referenciáit) < / li > < li > < erős > Store < / strong > - az Archetypes-t használó gazdálkodó egységek a hatékony memória elrendezés < / li > < / ul > < h3 > Egyedi összetevők < / h3 > < pre > < kód > nyilvános osztály pontszám Adatok végrehajtása Component & lt; EnvirontyStore & gt; { nyilvános int score = 0; Public String team = ""; hosszú távú egyesülés At = System.currentTimeMillis (); @ Override Public ScoreData klón () { ScoreData másolat = új ScoreData (); copy.score = this.score; Vettem. csapat = ez. csapat; Vettem. összekapcsolva At = ez. At; visszaküldési másolat; } } < / kód > < / pre> < p > Az alkatrészeknek < kódot kell végrehajtaniuk > klón () < / kód >. Hozzácsatolja őket az entitásokhoz, hogy egyedi adatokat tároljanak - pontszámokat, csapatokat, lehűtéseket, leltárakat vagy bármilyen játékspecifikus állapotot. < / p > < h3 > A játékosok megértése < / h3 > < p > A "Játékos" a Hytale-ben nem egy különleges osztály - ez egy olyan entitás, amely összetevőkből áll. < code > PlayerRef < / code > valójában egy olyan összetevő, amely a játékos felhasználónevét, UUID-ját, nyelvét és hálózati kezelőjét tárolja. Aktív marad, amíg a játékos csatlakozik. < / p > < h2 > Parancsbejegyzés < / h2 > < p > Parancsok a < kód > Parancs < / kód > interfész: < / p > < pre > < kód > nyilvános osztály A parancs végrehajtja A parancs { @ Override public String getName () {return "spawn";} @ Override nyilvános üresség végrehajtása (CommandSender feladó, String [] args) { Ha (a feladó a lejátszó) { / / Teleportlejátszó ivadékhoz Sender.sendMessage ("Teleporing to spawn"...); } } } / / Regisztrálva () CommandRegistr.registerCommand (new SpawnCommand ()); < / Code > < / pre> < p > Mindkét < kód > Player < / kód > és < kód > CommandSender < / kód > támogatás < kód > hasLEY () < / kód > ellenőrzések. A built- in licencek rendszere támogatja a felhasználói szintű engedélyeket, a csoportos öröklést és a vad kártya egyezést. < / p > < h2 > Építés és telepítés < / h2 > < h3 > Épület < / h3 > < pre> < kód > / gradlew build < / kód > < / pre> < p > A JAR kimenete < kód > build / libs / < / code >. < / p > < h3 > telepítési pontok < / h3 > < táblázat > < fej > < tr > < th > Platform < / th > < th > Mod Directory < / th > < / tr > < / fej > < tbody > < tr > < td > Windows (helyi) < / td > < td > < kód >% AppData% / Roaming / Hytale / UserData / Mods / < / kód > < / td > < / tr > < tr > < td > Linux szerver < / td > < code > / opt / hytale / Server / mods / < / code > < / td > < / tr > < / test > < / táblázat > < p > A forró újratöltés részben támogatott kisebb változtatások esetén - < kód > Ctrl + F9 < / kód > in Intelli J, teljes újraindítás nélkül. A nagyobb változtatásokhoz újra kell indítani a szervert. A < kód > Registration < / code > automatikusan megtisztítja a kezelőket, ha a plugin kiszáll. < / p > < h3 > Kiadás a CurseForge számára < / h3 > < p > CurseForge felismer három mod típust: < / p > < ul > < li > < erős > Csomagok < / erős > - eszközök / tartalmak (JSON adatok, modellek, textúrák) < / li > < li > < strong > Plugins < / strong > - Java JAR fájlok az API < / li > kiszolgálóval < li > < erős > Korai bővítmények < / erős > - bootpluginok alacsony fokozatú átalakulásokhoz (előrehaladott, használat kíméletesen) < / li > < / ul > < h2 > Közösségi források < / h2 > < p > A moduláló közösség a Hypixel Studios kínálatán túlmutató, kiterjedt dokumentációt épített: < / p > < táblázat > < fej > < tr > < th > Resource < / th > < th > Fókusz < / th > < / tr > < / fej > < tbody > < tr > < td > < strong > HytaleModding.dev < / strong > < / td > < td > Guides, docs, tools - 8000 + Discord member < / td > < / tr > < tr > < td > < strong > Britakee Studios GitBook < / strong > < / td > < td > Átfogó tesztoktatók csomagokhoz és bővítményekhez < / td > < / tr > < tr > < td > < strong > HytaleDocs.com < / strong > < / td > < td > közösségi wiki és API referencia < / td > < / tr > < tr > < td > < strong > Hytale- Toolkit (GitHub) < / strong > < / td > < td > Decompiled source, javadocs, szemantikai kódkeresés < / td > < / tr > < tr > < td > < erős > Patcher (GitHub) < / erős > < / td > < td > Böngészés a JAR szerveren mint IntelliJ projekt < / td > < / tr > < / test > < / táblázat > < p > < erős > Megjegyzés: < / erős > A szerver JAR nem obfuscated és szabadon lebontható. A Hypixel Studios elkötelezte magát, hogy a teljes szerver forráskódját az EA indításától számított 1-2 hónapon belül kiadja. < / p > < h2 > Mi következik < / h2 > < ul > < li > < erős > Szerver forráskódkiadás < / erős > - 2026 márciusáig várható < / li > < li > < erős > Visual Scripting < / strong > - node- based scripting for non-programders (like to Unreal Tervs) < / li > < li > < erŠs > Fejlesztési jutalékok < / erŠs > - A Hypixel Studios azt tervezi, hogy jutalmat kínál a közösségi hozzájárulásokra < / li > < li > < erős > Hivatalos dokumentációs kiterjesztés < / erős > - nem teljesnek minősítve, közösségi visszajelzések alapján kiterjesztve < / li > < / ul > < p > Készen áll a plugin telepítésére? Lista a moded server < a href = "/" > HytaleCharts < / a > így a játékosok megtalálják a teremtés. Minigám-specifikus fejlesztési minták, nézd meg a < a href = "/ Hírek / hytale- custom- minigame- server- development -guide" > Egyedi Minigames Guide < / a. < / p >