// what worldgen scripts get, see "World generation" in MODS.md. runs in chunk workers and must be deterministic import type { Id } from "./shared.ts"; export type { Id } from "./shared.ts"; export interface WorldgenContext { register_terrain(id: Id, generate: (chunk: TerrainChunk) => void): void; register_feature(id: Id, generate: (chunk: FeatureChunk) => void): void; } export interface FeatureChunk { // chunk coordinates readonly x: number; readonly z: number; readonly seed: string; // seeded from the seed, chunk and feature id readonly rng: { next(): number }; // create_noise_2d(new Alea(seed + "_" + name)), cached per seed and name noise_2d(name: string): (x: number, z: number) => number; noise_3d(name: string): (x: number, y: number, z: number) => number; // surface height and biome, inside this chunk only height_at(x: number, z: number): number; biome_at(x: number, z: number): Id; get_block(x: number, y: number, z: number): Id | undefined; // inside this chunk only set_block(x: number, y: number, z: number, id: Id): void; // up to one chunk away, like trees } export interface TerrainChunk extends FeatureChunk { set_height(x: number, z: number, height: number): void; set_biome(x: number, z: number, biome: Id): void; }