Hytale Modding
Informazioni consolidate

Approfondimenti del codice del Server

Slikey ha condiviso alcune informazioni sul codice del server in data 15/12/2025. Il presente documento riporta i punti chiave e le conclusioni di tale discussione.

Nota

Le seguenti informazioni si basano su informazioni condivise dal direttore tecnico Slikey il 15 dicembre 2025 sul server Hytale Discord. Fornisce una panoramica dell'architettura del codice del server e delle funzionalità dei plugin.

La maggior parte di questo documento è composto solo da citazioni di Slikey con qualche commento. È mirato a preservare le informazioni condivise piuttosto che riformularle.

Codice sorgente del server

Il codice del server verrà rilasciato come codice condiviso - avremo dunque il codice sorgente senza offuscamenti e tutti i commenti degli sviluppatori.

Licenza

La licenza consente l'utilizzo di qualsiasi cosa **correlata ad hytale **, fino a quando non si utilizza il server o il codice sorgente per creare il proprio gioco o vendere gli algoritmi.

Sistema di permessi

Dopo essere stato chiesto nel server Hytale Modding, il Lead Architect Zero ha risposto:

"È abbastanza semplice, quindi non aspettatevi grandi cose, ma sì, abbiamo un sistema di autorizzazioni integrato. Supporta anche l'implementazione del proprio backend. Es. se si volesse memorizzare in un database.

Snippet di codice dei permessi

Implementazione della generazione del mondo

Il seguente blocco di testo arriva direttamente dal Lead Architect Zero:

È possibile implementare totalmente una generazione del mondo personalizzata in un plugin super facile. Quindi, se si desidera una configurazione o una logica completamente diversa per generare il mondo, è possibile aggiungerla in un plugin e quindi configurare un mondo per usarlo, Abbiamo caricato alcuni prefab e c'è del codice esistente nel generatore del mondo attuale che potrebbero essere riutilizzati ma non c'è nessuna API specifica per i dettagli della generazione.

public interface IWorldGenProvider {
    BuilderCodecMapCodec<IWorldGenProvider> CODEC = new BuilderCodecMapCodec<>("Type", true);

    IWorldGen getGenerator() throws WorldGenLoadException;
}
public interface IWorldGen {
    @Nullable
    WorldGenTimingsCollector getTimings();

    CompletableFuture<GeneratedChunk> generate(int seed, long index, int x, int z, LongPredicate stillNeeded);

    @Deprecated
    Transform[] getSpawnPoints(int seed);

    @Nonnull
    default ISpawnProvider getDefaultSpawnProvider(int seed) {
        return new FitToHeightMapSpawnProvider(new IndividualSpawnProvider(getSpawnPoints(seed)));
    }

    default void shutdown() {}
}

Snippet Codice Server

Sono stati condivisi alcuni frammenti di codice da un plugin che hanno fatto. I seguenti frammenti sono citati direttamente dal direttore tecnico Slikey:

Plugin BlockSpawner

"Bene, qui abbiamo alcuni frammenti di codice per un semplice plugin chiamato "BlockSpawner" che si trasformerà in un blocco "casuale" quando messo nel mondo in base alle regole configurate.

Normalmente cè più codice qui, ma mostra il sistema delle risorse e il layout del plugin. Si può vedere che il sistema di asset definisce i "Codec" che vengono utilizzati per serializzare e deserializzare i dati. Utilizzando questi codec possiamo generare schemas (schemi). Diciamo che ti connetti a un server e apri l'editor degli asset: il server invierà quegli schemi - così ogni singolo tipo di asset definito lato server così che, anche tu, ora possa editare gli asset sul tuo client - non c'è bisogno di fare nient'altro, dovrete solo a godervi l'interfaccia utente per editare, modificare o creare i tuoi asset.

Block Spawner Code 1 Block Spawner Code 2 Block Spawner Code 3 Block Spawner Manifest

Immagino che questa parte mostra anche un po' come usiamo costanti per memorizzare alcune parole chiave del linguaggio - Slikey (in riferimento all'immagine sottostante)

Constants to store Language Keys

È possibile personalizzare completamente il chunk storage provider, qui ad esempio ne abbiamo fatto uno che è solo vuoto dove non carica i chunks dal disco. È possibile aggiungere un MySQLChunkStorageProvider con il quale potresteleggere i dati da un database e lo stesso vale per il generatore del mondo, puoi semplicemente implementare questa interfaccia per generare un generatore di mondo - Slikey

Chunks 1 Chunks 2 Chunks 3

Voglio dire, qui ci sono tutte le armi definite, dimmi tu, ovviamente scoprirete delle limitazioni ma penso che ci sia ampio spazio per fare cambiamenti - questa roba è comunque difficile e c'è molto lavoro sulla QoL (Quality of Life) da fare qui.

Armi 1