Files
bworld/common/mod_api/worldgen.ts
T
2026-09-24 23:28:01 -03:00

32 lines
1.2 KiB
TypeScript

// 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;
}