# Worlds: more worlds, portals and resets

> Extra dimensions from templates (an ore world, a mining Nether, a void), reset on a plan with the spawn kept exactly, portals between worlds and rules per world. New in 0.3, off by default.

Source: https://stygion.eu/docs/keystone/worlds
Updated: 2026-10-25

New in 0.3, module `worlds`, off by default; with nothing in `worlds` it touches nothing. Keep the main world beautiful and do the digging somewhere else.

## Adding a world

One line per world in `worlds.worlds`, parts `key=value` separated by ` | `:

```
id=myserver:mining | name=Mining world | template=amplified | seed=random | reset=first monday 05:00 | homes=false | warp=mine
```

- **template**: `normal`, `amplified`, `large-biomes`, `floating-islands`, `caves`, `ore-world`, `flat`, `void`, `arena`, `nether`, `end`, or `existing` (only rules, for the overworld, the Nether or a mod's world).
- **seed**: `same-as-main`, `random` (new at every reset) or `fixed:<number>`.
- **reset**: `off`, `first monday 05:00`, `monthly 1 05:00`, `weekly sunday 04:00`, `every 14d`; read in `time-zone`.
- **Spawn**: `spawn=x,y,z`, `spawn-radius` (6), `spawn-depth` (12), `spawn-height` (8); `platform=true` builds a platform safe from lava in a roofed world, with the signs in `platform-signs`.
- **Rules**: `homes`, `claims`, `force-load` (true/false), `pvp=default|off`, `keep-inventory=default|true`, `banned-blocks=a:b,c:d` (placing refused), `border=<blocks>`.
- **More**: `ores=off|normal|dense|rich|<veins>` (extra veins from every ore the pack tags, weighted by `ore-weights`, mods' ores included), `warn=7d,1d,1h,10m`, `welcome=<text>`, `warp=<name>` (a warp to the spawn, made once), `replaces=<datapack folder>` (take over a world an older datapack made).

A world is a dimension file in Keystone's own datapack (`<world>/datapacks/keystone-worlds`); **the game reads it at its next start, so a new world needs one restart** and then lives on. Removing Keystone leaves the worlds as they are.

## Resets

A reset happens **while the server is down**: when it stops on or after the planned moment (up to ten minutes early still counts, so a daily restart at that hour does it), the spawn area is saved; the next start wipes the world before the game opens it, pastes the spawn back exactly, releases claims and force-loads in it and forgets homes there. Nobody is ever inside, and nothing is half-saved. Players are warned at `warn` times in game and, with `discord-channel`, on Discord. A player who comes back from before a reset is taken to the spawn.

`/keystone worlds reset <world>` then `confirm` (or `cancel`) asks for a reset at the next stop (`keystone.worlds.reset`); `POST /v1/worlds/reset` (scope `operations.run`) does the same. `/keystone worlds spawn <world>` takes you there.

## Portals

`worlds.portals`, a line each: `name=mine | world=minecraft:overworld | from=10,64,10 | to=12,67,10 | target=myserver:mining`. Step into the box, arrive in the target world (its spawn, or `world@x,y,z[,yaw]`); `permission=<node>` limits who may use it. Build the frame yourself; `/keystone worlds portal <name> corner` and `… to <target>` write the line from where you stand, `… remove` takes it away (`keystone.worlds.portal`).

`GET /v1/worlds` (scope `status.read`) lists the worlds, their next reset and their rules.
