Hytale Moding API: Kompletny przewodnik rozwoju serwera

Nazwa Kategoria::: nazwa : min min read

Wszystko, czego potrzebujesz, aby zacząć budować wtyczki serwera Hytale. Przewodnik ten obejmuje konfigurację Java 25, cykl życia wtyczki, podwójny system event event (EventBus + ECS), rejestrację poleceń, komponenty podmiotów, format manifest.json, a także wdrożenie do CurseForge.

< p > System plugin serwera Hytale daje deweloperom głęboką kontrolę nad każdym aspektem gry. Jeśli napisałeś wtyczki Bukkit lub Spigot dla Minecraft, przejście jest proste - ale architektura Hytale jest zasadniczo inna w sposób, który ma znaczenie. Ten przewodnik prowadzi Cię przez wszystko od wstępnej konfiguracji do wdrożenia produkcji. < / p > < h2 > Architektura Przegląd < / h2 > < p > Przed napisaniem jakiegokolwiek kodu, należy zrozumieć jak działa modylacja Hytale: < / p > < ul > < li > < silny > Klient jest renderer. < / strong > Hytale 's C # client obsługuje grafikę, wejście i audio - ale nie zawiera logiki gry. Wszystkie symulacje działają na serwerze Java, nawet w singleplayer. < / li > < li > < silny > Wszystko jest po stronie serwera. < / silny > Gdy gracze dołączają do modulowanego serwera, aktywa niestandardowe i strumień zachowań automatycznie. Mody klienta nie są potrzebne. < / li > < li > < strong > Istnieją cztery kategorie mododowania: < / strong > Aktywa danych (JSON), aktywa sztuki (modele Blockławki), wtyczki serwera (Java) i skrypty wizualne (wkrótce). < / li > < / ul > < p > Wtyczki serwera są najpotężniejszą kategorią - dają pełny dostęp Javy do czasu pracy serwera, w tym do systemu komponentu 'Entity', gazociągu zdarzeń, framework poleceń i manipulacji na świecie. < / p > < h2 > Ustawienia środowiska rozwoju < / h2 > < h3 > Warunki wstępne < / h3 > < tabela > < głowa > < tr > < th > Tool < / th > < th > Version < / th > < th > Notatki < / th > < / tr > < / głowa > < tbody > < tr > < td > < strong > Java < / strong > < / td > < td > 25 + < / td > < td > Hytale wykorzystuje nowoczesne funkcje, w tym wirtualne wątki (Pętla Projektu) < / td > < / tr > < tr > < td > < silny > IntelliJ IDEA < / silny > < / td > < td > Wspólnota lub Ultimate < / td > < td > Zalecane IDE - Free Community Edition działa dobrze < / td > < / tr > < tr > < td > < silny > Szablon uprawy < / silny > < / td > < td > 9.2.0 + < / td > < td > Build system (uwzględniony w szablonie plugin) < / td > < / tr > < tr > < td > < silny > Git < / silny > < / td > < td > Ostatnia wersja < / td > < td > Do klonowania oficjalnego szablonu < / td > < / tr > < / tbody > < / tabela > < h3 > Klon oficjalnego szablonu < / h3 > < p > Hypixel Studios zapewnia oficjalny szablon plugin na GitHub: < / p > < pre > < kod > git clone https: / / github.com / HytaleModding / plugin- template.git MyFirstPlugin cd MyFirstPlugin < / code > < / pre > < p > Otwórz projekt w IntelliJ IDEA i pozwól Gradle synchronizacji. Szablon zawiera poprawną strukturę katalogów, konfigurację i zależności API serwera. < / p > < p > Alternatywnie, < silny > HytaleIO Generator projektu < / strong > przy hytaleio.com / generator projektu może utworzyć wtyczki, Mod lub Full (combo) rusztowania projektu z Interfejsem WWW. < / p > < h2 > Struktura wtyczki < / h2 > < p > Każda wtyczka Hytale postępuje według układu katalogu: < / p > < pre > < kod > wtyczka / .html - src / main / java / com / your name / your plugin / YourPlugin. java # Główny punkt wejścia Resources / {C: $aaccff} Tłumaczenie: json # Metadane wtyczki (wymagane) Strona internetowa: Common / # Dzielone aktywa (modele, tekstury) Name Johannes- -- build.gradle.kts Johannes- -- settings.gradle.kts < / kod > < / pre > < h3 > manifest.json < / h3 > < p > Każda wtyczka wymaga < kod > manifest.json < / kod > u źródła skompilowanego JAR. Jest to odpowiednik Hytale 'a Bukkit' a < kod > plugin.yml < / kod >: < / p > < pre > < kod > { "Grupa": "Com.your name", "Nazwa": "YourPluginName", "Main": "com.yourname.yourplugin", Wersja: "1.0.0", "Opis": "Co robi plugin", "Autorzy": ServerVersion: "*", "Independences": "OptionalDependendences": "LoadBefore": [], "DisabledByDefault": false, "IncludesAssetPack": false < / kod > < / przed > < p > Identyfikator wtyczki jest tworzony jako < kod > Grupa: Nazwa < / kod > (np. < kod > com.yourname: YourPluginName < / code >). < kod > Main < / kod > pole wskazuje na klasę wejścia - źle to zbierz i wtyczka nie wczyta. < / p > < h2 > Wtyczka cyklu życia < / h2 > < p > Twoja główna klasa rozszerza się < kod > JavaPlugin < / kod > i posiada cztery fazy cyklu życia: < / p > < pre > < kod > klasa publiczna Rozszerzenia wtyczek JavaPlugin { public YourPlugin (@ Nonnull JavaPluginInit) { super (init); getLogger () .info ("Wtyczka skonstruowana!"); ¶ @ Override ustrukturyzowana pustka publiczna () { / / Etap 2: Rejestr wydarzeń, poleceń, systemów ECS / / Tu jest większość twojego kodu rejestracyjnego. ¶ @ Override start pustki publicznej () { / / Faza 3: Serwer jest gotowy dla graczy / / Rozpocznij zaplanowane zadania, otwarte połączenia ¶ @ Override publiczne zamknięcie pustki () { / / Faza 4: Oczyszczenie przed zatrzymaniem serwera / / Zapisz dane, zamknij połączenia, anuluj zadania ¶ < / kod > < / przed > < tabela > < głowa > < tr > < th > Faza < / th > < th > Metoda < / th > < th > Co robić tutaj < / th > < / tr > < / głowa > < tbody > < tr > < td > 1. Budowa < / td > < td > Konstruktor < / td > < td > Podstawowa inicjalizacja, logowanie < / td > < / tr > < tr > < td > 2. Ustawienia < / td > < td > < kod > konfiguracja () < / kod > < / td > < td > Rejestr zdarzeń, poleceń, komponentów i systemów ECS < / td > < / tr > < tr > < td > 3. Start < / td > < td > < kod > start () < / kod > < / td > < td > Rozpocznij zadania, serwer akceptuje graczy < / td > < / tr > < tr > < td > 4. Wyłączenie < / td > < td > < kod > wyłączenie () < / kod > < / td > < td > Zapisz dane, zasoby do czyszczenia < / td > < / tr > < / tbody > < / tabela > < h2 > System podwójnego zdarzenia < / h2 > < p > To najważniejsza koncepcja do zrozumienia. Hytale mają < mocne > dwa oddzielne systemy zdarzeń < / silne >, a używanie niewłaściwego jest częstym błędem. < / p > < h3 > Zdarzenie Bus - Wydarzenia globalnego serwera < / h3 > < p > The < code > EventBus < / code > Handls server- wide events like player connections, chat, and world loading. Zarejestruj opiekunów poprzez < kod > EventRegistry < / kod > dostarczone do wtyczki: < / p > < pre > < code > @ Przekroczenie ustrukturyzowana pustka publiczna () { / / Synchroniczne wydarzenie globalne getEventRegistry () .registerGlobal ( PlayerReadyEvent.class, event - > { getLogger () .info ("Gracz dołączony:" + event.getPlayer () .getusername ()); ¶ ); / / Zdarzenie Async (jak PlayerChatEvent) getEventRegistry () .registerAsyncGlobal ( PlayerChatEvent.class, future - > { Przyszłość. thenAccept (zdarzenie - > { if (event.getMessage () .contains ("spam") { event.setCancelled (true); ¶ ); ¶ ); < / kod > < / przed > < p > < silny > Zdarzenie kluczowe Zdarzenia autobusowe: < / mocne > < / p > < ul > < li > < kod > PlayerConnectEvent < / kod > / < kod > PlayerDiconnectEvent < / kod > - cykl życia połączeń < / li > < li > < kod > PlayerReadyEvent < / kod > - gracz w pełni załadowany i gotowy < / li > < li > < kod > PlayerChatEvent < / kod > - wiadomości czatu (async, cancellable) < / li > < li > < kod > AddPlayerToWorldEvent < / code > - gracz wchodzący na świat < / li > < li > < kod > StartWorldEvent < / kod > / < kod > AddWorldEvent < / kod > / < kod > RemoveWorld Zdarzenie < / kod > - zarządzanie światem < / li > < / ul > < p > < silny > Priorytety zdarzeń: < / silny > Użyj < kod > EventPriority. EARLY < / kod > uruchomić pierwszy i modyfikować zdarzenia, zanim inni opiekunowie je zobaczą. Użyj < kod > EventPriority. LATE < / kod >, aby zobaczyć stan końcowy po przetworzeniu wszystkich innych podmiotów zajmujących się obsługą. < / p > < h3 > ECS Wydarzenia - Działania specjalne < / h3 > < p > Zdarzenia na poziomie uprawnień, takie jak złamanie bloku, umieszczenie bloku i uszkodzenie, są obsługiwane przez < silny > Entity Component System < / silny >, nie EventBus. Tworzysz < kod > EntityEventSystem < / kod >: < / p > < pre > < kod > klasa publiczna BlockBreakHandler rozszerza EntityEventSystem & lt; EntityStore, BreakBlock Zdarzenie & gt; { @ Override public Query getQuery () { / / Podmioty docelowe posiadające określone komponenty zwrócić Query.builder () .build (); ¶ @ Override klasa publiczna & lt; BreakBlockEvent & gt; getEventType () { powrót BreakBlockEvent.class; ¶ @ Override uchwyt publiczny (sklep EntityStore, Bufor komendant Buffer, BreakBlock Zdarzenie) / / Przetwarzanie przerwy blokowej / / Anuluj w fazie filtra, nie tutaj ¶ < / kod > < / przed > < p > < silny > Zasada krytyczna: < / silny > Wyłączając zdarzenia ECS podczas fazy < silnej > filtra < / silnej >. Anulowanie w fazie kontroli nie ma wpływu, ponieważ działanie już się wydarzyło. < / p > < h2 > System komponentów podmiotów (ECS) < / h2 > < p > Hytale używa własnej architektury ECS. Zrozumienie tego jest niezbędne dla każdej wtyczki nietrywialnej. < / p > < h3 > Koncepty rdzenia < / h3 > < ul > < li > < strong > Entity < / strong > - tylko niepowtarzalny identyfikator, nie zawiera samych danych < / li > < li > < silny > Komponent < / silny > - czysty pojemnik danych przymocowany do jednostki < / li > < li > < silny > System < / silny > - logika, która przetwarza podmioty o specyficznych kombinacjach składników < / li > < li > < silny > Ref < / silny > - bezpieczny uchwyt dla jednostki (nigdy nie przechowuj bezpośrednich odniesień do jednostki) < / li > < li > < strong > Store < / strong > - zarządza podmiotami używającymi Archetypes dla efektywnego układu pamięci < / li > < / ul > < h3 > Niestandardowe komponenty < / h3 > < pre > < kod > klasa publiczna Narzędzia danych Składnik & lt; EntityStore & gt; { publiczny wynik punktowy = 0; public String team = ""; publiczne długo połączone W = System.currentTimeMillis (); @ Override klon wyników publicznych () { Kopia wyników = nowy wynik (); Copy.score = this. score; Przyjąłem. team = this. team; Przyjąłem. połączone At = to.joked W; kopie zwrotne; ¶ < / kod > < / przed > < p > Składniki muszą implementować < kod > klon () < / kod >. Dołącz je do podmiotów, aby przechowywać dane niestandardowe - wyniki, zespoły, ochłodzenie, inwentaryzacja lub jakikolwiek stan specyficzny dla danej gry. < / p > < h3 > Zrozumienie PlayerRef < / h3 > < p > "Gracz" w Hytale nie jest specjalną klasą - to jednostka złożona z komponentów. < code > PlayerRef < / code > jest rzeczywiście komponentem, który przechowuje nazwę użytkownika gracza, UUID, język i opiekun sieci. Pozostaje aktywny dopóki gracz jest podłączony. < / p > < h2 > Rejestracja poleceń < / h2 > < p > Polecenia implementują < kod > Polecenie < / kod > Interfejs: < / p > < pre > < kod > klasa publiczna Spawn Polecenie wdraża Polecenie { @ Override public String getName () {return "spawn";} @ Override Publiczna pustka wykonywana (nadawca komendant, String [] args) { if (nadawca instalacji gracza) { / / Teleport gracz do spawn sender.sendMessage ("Teleporting to spawn"...); ¶ ¶ ¶ / / Zarejestruj się w konfiguracji () Komendant Rejestry.registerCommand (nowy SpawnCommand ()); < / kod > < / pre > < p > Zarówno < kod > Gracz < / kod > i < kod > Komendant < / kod > Wsparcie < kod > hasPermission () < / kod > kontrole. System wbudowanych uprawnień obsługuje uprawnienia na poziomie użytkownika, dziedziczenie grupy i dopasowanie kart. < / p > < h2 > Budowanie i uruchamianie < / h2 > < h3 > Budynek < / h3 > < pre > < kod >. / gradlew build < / code > < / pre > < p > Wyjście JAR przechodzi do < code > build / libs / < / code >. < / p > < h3 > Wdrożenie Ścieżek < / h3 > < tabela > < głowa > < tr > < th > Platforma < / th > < th > Mod Directory < / th > < / tr > < / głowa > < tbody > < tr > < td > Windows (lokalny) < / td > < td > < kod >% AppData% / Roaming / Hytale / UserData / Mods / < / code > < / td > < / tr > < tr > < td > Linux server < / td > < td > < code > / opt / hytale / Server / mods / < / code > < / td > < / tr > < / tbody > < / tabela > < p > Hot reloading jest częściowo obsługiwany dla drobnych zmian - użyj < kod > Ctrl + F9 < / kod > w Intelli J odbudować bez pełnego wznowienia. Duże zmiany wymagają ponownego uruchomienia serwera. < kod > EventRegistry < / kod > automatycznie czyści obsługi, gdy wtyczka się ładuje. < / p > < h3 > Publikowanie do CurseForge < / h3 > < p > CurseForge rozpoznaje trzy typy mod: < / p > < ul > < li > < mocne > Opakowania < / mocne > - pakiety aktywów / treści (dane, modele, tekstury) < / li > < li > < strong > Wtyczki < / strong > - Pliki Java JAR przy użyciu serwera API < / li > < li > < silne > Wczesne wtyczki < / silne > - wtyczki bootstrap do transformacji klasy niskiej (zaawansowane, oszczędne) < / li > < / ul > < h2 > Zasoby Wspólnoty < / h2 > < p > Społeczność modningowa zbudowała obszerną dokumentację wykraczającą poza to, co oferuje Hypixel Studios: < / p > < tabela > < głowa > < tr > < th > Resource < / th > < th > Focus < / th > < / tr > < / głowa > < tbody > < tr > < td > < silny > HytaleModding.dev < / silny > < / td > < td > Przewodniki, doki, narzędzia - 8000 + członkowie Discord < / td > < / tr > < tr > < td > < strong > Britakee Studios GitBook < / strong > < / td > < td > Kompleksowe testowane tutoriale dla pakietów i wtyczek < / td > < / tr > < tr > < td > < strong > HytaleDocs.com < / strong > < / td > < td > Community wiki i API reference < / td > < / tr > < tr > < td > < silny > Hytale- Toolkit (GitHub) < / silny > < / td > < td > Odkurzone źródło, javadocs, semantyczne wyszukiwanie kodu < / td > < / tr > < tr > < td > < silny > Patcher (GitHub) < / silny > < / td > < td > Przeglądanie serwera JAR jako projektu IntelliJ < / td > < / tr > < / tbody > < / tabela > < p > < silny > Uwaga: < / silny > Serwer JAR nie jest obfuscated i może być swobodnie zdekompilowany. Hypixel Studios zobowiązał się do wydania pełnego kodu źródłowego serwera w ciągu 1-2 miesięcy od uruchomienia EA. < / p > < h2 > Co nadchodzi < / h2 > < ul > < li > < silny > Uwolnienie kodu źródłowego serwera < / silny > - oczekuje się do marca 2026 < / li > < li > < strong > Visual Scripting < / strong > - node-based scritting for non-programmers (like to Unreal Blueprints) < / li > < li > < strong > Development bounties < / strong > - Hypixel Studios planuje zaoferować bounties za wkład społeczności < / li > < li > < strong > Oficjalna ekspansja dokumentacji < / strong > - uznana za niekompletną, rozszerzona na podstawie opinii społeczności < / li > < / ul > < p > Gotowy do wdrożenia wtyczki? Wypisz swój modulowany serwer na < href = "/" > HytaleCharts < / a >, aby gracze mogli znaleźć Twoje stworzenie. Dla modeli rozwoju minigame- specyficznych, sprawdź nasz < a href = "/ news / hytale- customa- minigame- server- development- guide" > Niestandardowy przewodnik minigames < / a >. < / p >