Hytale Modding
Informações estabelecidas

Informações do código do servidor

Slikey compartilhou algumas informações sobre o código do servidor em 15/12/2025. Este documento abrange os principais pontos e os tópicos dessa discussão.

Nota

As informações a seguir baseiam-se em observações compartilhadas pelo Diretor Técnico Slikey, em 15 de dezembro de 2025, no servidor de Discord do Hytale. Ele fornece uma visão geral da arquitetura do código do servidor e das capacidades dos plugins.

Este documento é composto principalmente por falas do próprio Slikey, com poucas observações adicionais. A ideia é manter o que foi dito em vez de mudar as palavras e o contexto.

Código-fonte do servidor

O servidor será lançado como shared source. Teremos acesso ao código-fonte sem qualquer ofuscação e com todos os seus comentários.

Licença

A licença autoriza o uso em tudo o que for ligado ao Hytale. A única restrição é não usar o servidor ou o código para fazer um jogo próprio ou comercializar os algoritmos da empresa.

Sistema de permissão

Após ser questionado no servidor Hytale Modding, o Arquiteto Chefe Zero respondeu:

É bastante básico, por isso não espere muito, mas sim, temos um sistema de permissões integrado. Também suporta a implementação do seu próprio backend. Ex. se você quisesse armazená-lo em um banco de dados.

Trecho da fonte da permissão

Implementação da geração de mundo

O seguinte bloco de texto é diretamente do Arquiteto Chefe Zero:

Você pode implementar uma geração de mundo personalizada por um plugin de maneira super fácil. Portanto, se você deseja uma configuração ou lógica totalmente diferente para gerar terrenos, pode adicioná-la a um plugin e, em seguida, configurar um mundo para usá-la. Temos alguns prefabs de carregamento e existe código nos geradores de mundos atuais que poderia ser reutilizado, mas não há APIs específicas para os detalhes da geração em si.

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() {}
}

Trechos de código do servidor

Alguns trechos de código de um plugin que eles criaram também foram compartilhados. Os trechos a seguir são citações diretas do diretor técnico Slikey:

Plugin BlockSpawner

Tudo bem, vou deixar aqui alguns trechos de código para um plugin simples chamado “BlockSpawner”, que se transformará em um bloco “aleatório” quando colocado no mundo com base nas regras configuradas.

Há mais código aqui em geral, mas ele mostra o Sistema de Ativos e o layout do plugin. Você pode ver que o sistema de ativos define “Codecs” que são usados para serializar e desserializar dados. Usando esses codecs, podemos gerar esquemas. Digamos que você se conecte a um servidor e abra o editor de ativos: o servidor enviará esses esquemas - assim, todos os tipos de ativos definidos no lado do servidor, mesmo os seus próprios, agora fazem parte do editor de ativos no cliente - não é necessário fazer nada, basta aproveitar a interface do editor para criar os ativos que você definiu.

Código 1 — Block Spawner Código 2 — Block Spawner Código 3 — Block Spawner Manifesto — Block Spawner

Acho que essa parte também mostra um pouco como usamos constantes para armazenar algumas chaves de idioma - Slikey (em referência à imagem abaixo)

Constantes para armazenar chaves de idioma

Por exemplo, criamos um que fica vazio, sem carregar nenhum bloco do disco. Você pode adicionar um MySQLChunkStorageProvider, que pode ler os dados de um banco de dados. O mesmo vale para o worldgen. Basta implementar essa interface para gerar um gerador de mundos - slikey.

Chunks 1 Chunks 2 Chunks 3

Quero dizer, aqui estão todas as armas definidas, você me diga, obviamente você descobrirá limitações, mas acho que há muito espaço para fazer mudanças — isso é realmente difícil, porém, há muito QoL para acontecer aqui.

Armas 1