Hytale Modding API: Guida completa per lo sviluppo del plugin del server

Per nome Categoria: :minuti leggere

Tutto il necessario per iniziare la costruzione di plugin server Hytale. Questa guida copre la configurazione Java 25, il ciclo di vita del plugin, il sistema dual event (EventBus + ECS), la registrazione dei comandi, componenti dell'entità, il formato manifest.json, e la distribuzione a CurseForge.

Il sistema plug-in server di Hytale offre agli sviluppatori un controllo approfondito su ogni aspetto del gioco. Se hai scritto Bukkit o Spigot plugin per Minecraft, la transizione è semplice, ma l'architettura di Hytale è fondamentalmente diversa in modi che importano. Questa guida ti passa attraverso tutto, dalla configurazione iniziale alla distribuzione di produzione. Architettura Panoramica Prima di scrivere qualsiasi codice, capire come funziona il modding di Hytale: > Traduzione: Il cliente è un renderer. Il client C# di Hytale gestisce grafica, input e audio, ma non contiene logica di gioco. Tutte le simulazioni vengono eseguite sul server Java, anche in singleplayer. > Tutto è lato server. Quando i giocatori si uniscono a un server modded, alle risorse personalizzate e al flusso di comportamento automaticamente. Nessuna modifica client necessaria. Le categorie di modding esistono: Data Assets (JSON), Art Assets (modelli Blockbench), Server Plugins (Java), e Visual Scripting (in arrivo). < > I pluginserver sono la categoria più potente — ti danno l'accesso completo a Java al runtime server, tra cui il Sistema Componente Entity, pipeline eventi, framework di comando e manipolazione del mondo. Sviluppo dell'ambiente Prerequisiti > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > < > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > < > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > < > > > < > > < > > > > > > > > > > < > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > < > > > > > > > > > > > > > > > < > > > > > > Hytale utilizza funzioni moderne, tra cui filetti virtuali (Project Loom) < > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > < > > > < > > > > > > < > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > IDE — L'edizione comunitaria libera funziona bene < > < > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > < > > > < > > > > > > > > > > < > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > Qualsiasi versione recente Per clonare il modello ufficiale > < > clonare il modello ufficiale Hypixel Studios fornisce un modello ufficiale del plugin su GitHub: =code>git clone https://github.com/HytaleModding/plugin-template.git La mia prima pagina cd MyFirstPlugin Aprire il progetto in IntelliJ IDEA e lasciare sincronizzare Gradle. Il modello include la corretta struttura della directory, la configurazione di configurazione e le dipendenze API del server. In alternativa, il HytaleIO Generatore di progetto a hytaleio.com/project-generator può creare un ponteggio di progetto Plugin, Mod o Full (combo) con un'interfaccia utente web. < h2> Struttura del prodotto Every Hytale plugin segue questo layout directory: theour-plugin/ ─ src/main/java/com/il tuo nome/yourplugin/ Il tuoPlugin. java # Punto di ingresso principale ─ src/main/resources/ Si manifesta. json # Plugin metadati (richiesto) ר ú ̄─ Common/ # Attività condivise (modelli, texture) Risorse di dati lato server ─ costruire.gradle.kts ─ impostazioni.gradle.kts ─ gradle.properties manifest.json Every plugin richiede un manifest.json alla radice del JAR compilato. Questo è l'equivalente di Hytale di Bukkit plugin.yml Traduzione: (') "Gruppo": "com.yourname", "Name": "YourPluginName", "Main": "com.yourname.yourplugin.YourPlugin", "Versione": "1.0.0", "Descrizione": "Che cosa fa il tuo plugin", "Authors": "ServerVersion": "*", Dipendenze: {}, "Dependenza Opzionale": {}, "LoadBefore": "DisabledByDefault": falso, "IncludesAssetPack": falso Traduzione: > L'identificatore del plugin è formato come Gruppo:Name (ad esempio, com.yourname:YourPluginName ). Il Main campo punti alla vostra classe di ingresso — ottenere questo sbagliato e il plugin non si carica. Plugin Lifecycle La vostra classe principale si estende JavaPlugin e ha quattro fasi del ciclo di vita: > classe pubblica Spina si estende JavaPlugin (') pubblico YourPlugin(@Nonnull JavaPluginInit init) { super(init); getLogger().info("Plugin costruito!"); # @Override installazione del vuoto pubblico() (') // Fase 2: Registrare eventi, comandi, sistemi ECS // Qui è dove la maggior parte del vostro codice di registrazione va # @Override avvio del vuoto pubblico() (') // Fase 3: Server è pronto per i giocatori // Avviare attività programmate, connessioni aperte # @Override spegnimento del vuoto pubblico() (') // Fase 4: Pulizia prima che il server si fermi // Salvare i dati, chiudere le connessioni, annullare le attività # Traduzione: > > < > > > > > > > > > > > > > Cosa fare qui < > > Costruzioni inizializzazione di base, logging 2. Configurazione Registrare eventi, comandi, componenti e sistemi ECS 3. Avviare l'indirizzo e/o l'indirizzo Avviare le attività, il server accetta i giocatori Traduzione: Salvare i dati, le risorse di pulizia > < > Il sistema dual Event > Questo è il concetto più importante da capire. Hytale ha due sistemi di eventi separati e usando quello sbagliato è un errore comune. < > Avvento Bus — Global Server Eventi The EventBus gestisce eventi a livello di server come connessioni, chat e caricamento del mondo. Registra i gestori attraverso il EventRegistry fornito al tuo plugin: Traduzione: Override installazione del vuoto pubblico() (') // Sincrono evento globale ottenereEventRegistry().registerGlobal( PlayerReadyEvent.class, > { getLogger().info("Player ha aderito: " + event.getPlayer().getUsername()); # ); // Evento asincastro (come PlayerChatEvent) ottenereEventRegistry().registerAsyncGlobal( PlayerChatEvent.class, futuro - > { futuro. poiAccetta(event) se (event.getMessage().contiene("spam"))) (') event.setCancelled(true); # }); # ); Traduzione: > > Evento chiave Eventi degli autobus: > PlayerConnectEvent — ciclo di vita di connessione > > PlayerReadyEvent — giocatore pieno caricato e pronto PlayerChatEvent — Messaggi di chat (asincrona, cancellabile) AddPlayerToWorldEvent Traduzione: Event — gestione del mondo < > Traduzione: Priorità degli eventi: Utilizzare EventPriority. EARLY per eseguire prima e modificare gli eventi prima che altri gestori li vedano. Utilizzare EventPriority. LATE per vedere lo stato finale dopo che tutti gli altri gestori hanno elaborato. < Eventi — Azioni Entity-Specific Entity-level eventi come la rottura del blocco, l'immissione del blocco e i danni vengono gestiti attraverso il Entity Component System , non il EventBus. Si crea un EntityEventSystem > classe pubblica BlockBreakHandler estende EntityEventSystem { @Override pubblico query getQuery() (') // entità target con componenti specifici restituire Query.builder().build(); # @Override pubblico Class getEventType() (') ritorno BreakBlockEvent.class; # @Override maniglia del vuoto pubblico(EntityStore store, buffer CommandBuffer, Blocco Evento evento) { // Elaborare la rottura del blocco // Cancellare nella fase filtro, non qui # Traduzione: Regola critica: Cancellare solo gli eventi ECS durante la fase filter La cancellazione nella fase di ispezione non ha effetto perché l'azione è già avvenuta. Sistema di componenti (ECS) > Hytale utilizza un'architettura ECS personalizzata. Capire questo è essenziale per qualsiasi plugin non banale. Core Concepts > Entity — solo un ID univoco, non contiene dati stessi Component — contenitore di dati puro attaccato ad un'entità Traduzione: — logica che elabora entità con specifiche combinazioni di componenti < < > Rif — Gestione sicura di un'entità (mai memorizzare riferimenti diretti dell'entità) Store — gestisce le entità che utilizzano gli archetipi per un layout efficiente della memoria < > Componenti personalizzati classe pubblica Strumenti di dati Component< EntityStore> { pubblico int punteggio = 0; public String team = ""; pubblico a lungo A = System.currentTimeMillis(); @Override pubblico ScoreData clone() (') ScoreData copia = nuovo ScoreData(); copy.score = questo.score; copia. squadra = questo.team; copia. un A = questo.joined A; copia di ritorno; # Traduzione: I componenti devono implementare clone() Attaccarli a entità per memorizzare dati personalizzati — punteggi, team, raffreddimenti, inventori, o qualsiasi stato specifico del gioco. Understanding PlayerRef A "Player" in Hytale non è una classe speciale — è un'entità composta da componenti. PlayerRef è in realtà un componente che memorizza il nome utente del giocatore, UUID, lingua e gestore di rete. Resta attivo finché il giocatore è connesso. Traduzione: I Comandi implementano l'interfaccia Command > classe pubblica Spawn Comando implementa Comando { @Override pubblico String getName() { ritorno "spawn"; } @Override pubblico vuoto eseguire(CommandSender mittente, String[] args) { se (istanza di sesso del giocatore) { // Teletrasporto giocatore di spawn sender.sendMessage("Teleporting to spawn..."); # # # // Registrarsi nella configurazione() comandoRegistry.registerCommand(new SpawnCommand()); Both Player e CommandSender Il sistema di autorizzazioni integrato supporta le autorizzazioni di livello utente, l'eredità di gruppo e l'accoppiamento di wildcard. Acquista e distribuzione Costruire ./gradlew build > L'output JAR va a build/libs/ . Percorsi di distribuzione > > < > > > > > > > > > Elenco dei modi < > > > Windows (locale) Server Linux > < > Il caricamento del sistema è parzialmente supportato per le modifiche minori — uso Ctrl+F9 J per ricostruire senza un riavvio completo. Le modifiche principali richiedono un riavvio del server. Il EventRegistry pulisce automaticamente i gestori quando un plugin scarica. Pubblicazione di CurseForge CurseForge riconosce tre tipi di mod: > ̧strong> Packs — Asset/content packs (Dati JSON, modelli, texture) Plugins — File Java JAR utilizzando l'API server ι ι ι ι ι > ι ι ι ι > ι ι ι ι ι > ι ι ι > ι ι ι ι ι ι ι > ι ι > ι ι ι ι ι > ι ι ι ι ι ι ι ι > ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι > ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι < > Risorse comunitarie > La comunità modding ha costruito una vasta documentazione oltre ciò che Hypixel Studios fornisce: > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > < > > < > > > > > > > > > > > > > > > > > < > > > > > > < > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > < > > < > > > > > > > > > > > > > > > > > > > > Guide, documenti, strumenti — 8.000+ Membri della discoteca Britakee Studios < > > > ι > > ι > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > < > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Sfoglia il server JAR come progetto IntelliJ > < > < > Nota: Il server JAR non è offuscato e può essere liberamente decompilato. Hypixel Studios si è impegnata a rilasciare il codice sorgente completo del server entro 1–2 mesi dal lancio di EA. Che cosa sta arrivando > Traduzione del codice sorgente — previsto dal marzo 2026 Пstrong> Visual Scripting — Node-based scripting per non programmatori (simile a Unreal Blueprints) < Sviluppi di sviluppo L'espansione della documentazione ufficiale < > Ready per distribuire il plugin? Elenca il tuo server modificato su HytaleCharts in modo che i giocatori possano trovare la tua creazione. Per i modelli di sviluppo specifici del minigioco, controlla il nostro Guida ai minigiochi personalizzati