Repository navigation
Projections and Scale
lat/lon --[projection]--> plane metres --[scale + origin]--> Minecraft X/Z
Two separate concerns:
- Projection turns degrees into metres on a plane. It knows nothing about blocks.
- Origin + scale turns plane metres into blocks.
Standard parallel = earth.origin.latitude.
- north-south distance: exact everywhere
- east-west distance: exact on the standard parallel, off by
cos(parallel)/cos(lat)elsewhere - covers the poles
- best choice for a regional world; at ±5° from the standard parallel the east-west error is ≈1%
- conformal: local shapes (coastlines, mountain ranges) are correct
- distances stretched by
1/cos(lat)— ×1.56 at 50°N, ×2.9 at 70°N - undefined beyond ±85.05°: the poles cannot be generated
- matches the tiling of most raster datasets
Equirectangular with the standard parallel at the equator. Simple, heavily distorted in Europe. Useful for whole-planet worlds where a familiar world-map shape matters more than accuracy.
scale.blocks-per-km — how many blocks one kilometre of ground occupies.
| Value | One block | Central Europe test region | Whole Earth (equator) |
|---|---|---|---|
| 0.5 | 2 km | ~370 × 470 blocks | ~20,000 × 10,000 blocks |
| 1.0 | 1 km | ~740 × 950 blocks | ~40,000 × 20,000 blocks |
| 2.0 | 500 m | ~1,470 × 1,890 blocks | ~80,000 × 40,000 blocks |
| 5.0 | 200 m | ~3,680 × 4,730 blocks | ~200,000 × 100,000 blocks |
Changing the scale changes the whole world layout — treat it as a decision made once, before the
world is generated. Run terraforge info to see the exact block extent for your configuration.
earth.origin is the geographic point that maps to Minecraft 0, 0. The default is 51°N 10°E,
the centre of the central-europe test region, so spawn lands in the middle of the prepared data.
Sign convention: +X is east, +Z is south.
y = sea-level + elevation_m × vertical-exaggeration / meters-per-block
-
vertical-exaggeration— 0.5 / 1.0 / 1.5 / 2.0 / 3.0. Makes terrain more dramatic. -
meters-per-block— vertical metres per block. Raise it to fit tall mountains into the world.
Values outside the build limits are soft-clamped: compressed into the last few blocks rather
than flattened, so Everest still ends up above Mont Blanc. The result is always strictly inside
min-y … max-y.
At 1.0 / 1.0, Everest (8,849 m) is far above max-y: 320 and lands in the compressed band. For
a world where high mountains keep their relative shape, use meters-per-block: 30 — 8,849 m then
becomes Y≈358 before clamping, so raise max-y accordingly, or accept the compression.
- Antimeridian-crossing bounding boxes are not supported; split them.
- Web Mercator cannot generate the polar caps.
- Scale and projection are baked into a generated world: changing them requires regenerating it.
See also: Configuration · Troubleshooting
TerraForge is MIT-licensed and community-maintained. Ships no geodata — see Data Sources for licensing. Found an error on this page? Suggest a fix via a pull request or open a documentation issue.
Getting started
Going deeper
Integrations
Help