Files
Documentation/content/world/worldgen/hytale-generator.en.md
2026-01-20 20:33:59 +01:00

4.9 KiB

title, type, weight
title type weight
Hytale Generator docs 7

The Hytale Generator is the default procedural world generator that creates Hytale's terrain, structures, and features.

Package: com.hypixel.hytale.builtin.hytalegenerator

Overview

The Hytale Generator combines multiple systems:

Hytale Generator
├── Density Functions (terrain shape)
├── Material Providers (block selection)
├── Prop Placement (vegetation/objects)
├── Cave Generation
├── Structure Placement
└── Biome-specific features

Generator Structure

public class HytaleGenerator implements WorldGenerator {
    private DensityFunctionRegistry densityFunctions;
    private MaterialProviderRegistry materialProviders;
    private PropPlacementRegistry propPlacement;
    private CaveGenerator caveGenerator;
    private StructureGenerator structureGenerator;

    @Override
    public void generate(GenerationContainer container, int chunkX, int chunkZ) {
        // 1. Generate base terrain
        generateTerrain(container, chunkX, chunkZ);

        // 2. Carve caves
        caveGenerator.generate(container, chunkX, chunkZ);

        // 3. Place structures
        structureGenerator.generate(container, chunkX, chunkZ);

        // 4. Place props
        propPlacement.generate(container, chunkX, chunkZ);

        // 5. Finalize
        finalize(container);
    }
}

Asset Configuration

Generator assets define generation parameters:

# hytalegenerator/world_generator.yaml
Type: HytaleGenerator
Id: default_generator
Seed: 0  # 0 = random
TerrainDensity:
  Function: terrain_combined
  Scale: 1.0
Materials:
  Provider: biome_materials
Caves:
  Enabled: true
  Frequency: 0.5
Structures:
  Enabled: true
  Spacing: 32
Props:
  Density: 1.0

Framework Components

The generator framework provides core utilities:

// Generation context
public class GenerationContext {
    private long seed;
    private int chunkX, chunkZ;
    private Biome biome;
    private Random random;

    public float noise2D(float x, float z, float scale);
    public float noise3D(float x, float y, float z, float scale);
}

// Generation phase
public enum GenerationPhase {
    TERRAIN,
    CARVING,
    STRUCTURES,
    DECORATION,
    FINALIZATION
}

Data Structures

Specialized data structures for generation:

// Height map storage
public class HeightMap2D {
    private float[] data;
    private int width, height;

    public float get(int x, int z);
    public void set(int x, int z, float value);
}

// 3D density storage
public class DensityField3D {
    private float[] data;
    private int sizeX, sizeY, sizeZ;

    public float get(int x, int y, int z);
    public float sample(float x, float y, float z);  // Interpolated
}

New System Integration

The generator integrates newer systems:

public class NewSystemIntegration {
    // Register custom density function
    public void registerDensityFunction(String id, DensityFunction function);

    // Register custom material provider
    public void registerMaterialProvider(String id, MaterialProvider provider);

    // Register custom prop placer
    public void registerPropPlacer(String id, PropPlacer placer);
}

Subpackages

Package Files Description
assets/ 232 Asset definitions for generation
density/ 76 Density function implementations
newsystem/ 29 New generation system
materialproviders/ 29 Material selection
framework/ 29 Core framework
props/ 24 Prop placement
datastructures/ 16 Data structures
positionproviders/ 14 Position calculation
patterns/ 13 Generation patterns
fields/ 8 Field generation

Custom Generator

Create a custom generator:

public class MyGenerator extends HytaleGenerator {
    @Override
    protected void generateTerrain(GenerationContainer container, int chunkX, int chunkZ) {
        // Custom terrain generation
        for (int x = 0; x < 16; x++) {
            for (int z = 0; z < 16; z++) {
                int worldX = chunkX * 16 + x;
                int worldZ = chunkZ * 16 + z;

                float density = getCustomDensity(worldX, worldZ);
                int height = (int) (density * 64) + 64;

                fillColumn(container, x, z, height);
            }
        }
    }
}

Configuration

# hytalegenerator/config.yaml
HytaleGenerator:
  WorldType: normal
  SeaLevel: 64
  TerrainAmplitude: 1.0
  CaveFrequency: 0.5
  StructureSpacing: 32
  BiomeScale: 256
  Features:
    Caves: true
    Structures: true
    Props: true
    Ores: true

Best Practices

{{< callout type="info" >}} Generator Guidelines:

  • Extend HytaleGenerator for custom worlds
  • Use the asset system for configuration
  • Register custom components in setup phase
  • Test generation across different seeds
  • Profile performance for custom functions {{< /callout >}}