Init
This commit is contained in:
212
content/world/worldgen/hytale-generator.en.md
Normal file
212
content/world/worldgen/hytale-generator.en.md
Normal file
@@ -0,0 +1,212 @@
|
||||
---
|
||||
title: Hytale Generator
|
||||
type: docs
|
||||
weight: 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
|
||||
|
||||
```java
|
||||
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:
|
||||
|
||||
```yaml
|
||||
# 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:
|
||||
|
||||
```java
|
||||
// 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:
|
||||
|
||||
```java
|
||||
// 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:
|
||||
|
||||
```java
|
||||
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:
|
||||
|
||||
```java
|
||||
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
|
||||
|
||||
```yaml
|
||||
# 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 >}}
|
||||
Reference in New Issue
Block a user