Skip to content
ShadowMC

Configuration

ShadowEdit

The world editor and the world generator in one jar: sculpt it, then generate it.

Free with Premium

Where the files are

plugins/ShadowEdit/

The plugin creates them on first start and updates them by itself on new versions, keeping your changes.

Applying changes

/shadowedit reload

Reloads the files without restarting the server.

What’s inside

88 files · 336 settings

Start with: config.yml

Settings

The files that decide how the plugin behaves. Start here.

config.yml

General settings
83 settings
plugins/ShadowEdit/config.yml
File notes

Only the server-wide settings live here. Everything else has its own file:

lang/<locale>.yml      the translations
palettes/*.yml         the material palettes
brushes/*.yml          saved brush presets
schematics/            your builds
worlds/<pack>/         the world packs

UPDATES: when a new version changes this file, a language file or one of the bundled palettes and brushes, it is moved to the new version for you. Everything you changed or added is carried over; the settings you never touched take the new defaults. Your previous file is kept in backup/<date>/, and if something could not be carried over (an option that no longer exists, a value of a different kind) you find it in PORTING-<version>.txt, with what to do. World packs are not updated: /sedit pack reset <name> brings back the bundled one.

THE ONE NUMBER THAT MATTERS

performance.tps-floor. It is the promise this plugin makes to the server: below it, everything stops and waits. Raise it to 19 and the plugin is slower and more polite; lower it to 15 and it is faster and more aggressive. There is no other place where load is tuned.

COLOURS - written the Minecraft way, with &

&0-&9 &a-&f  colours    &l bold       &o italic  &n underline
&#ff8800     an exact colour           &r  back to normal

The richer tags are still there for what & cannot do:

<gradient:#7a5cff:#39d0ff>ShadowEdit</gradient>

Full documentation: docs/

config-version1
core3 keys
server-id"creator-1"

A name for this server. Reserved for several servers sharing one database: this version does not use it yet (see STORAGE below).

language"en_US"

The language used when no better one is known.

follow-client-localetrue

Every player sees their own client language, when that file exists.

Performance - the governor

Every heavy thing this plugin does - a //set of twenty million blocks, a world being pregenerated, a schematic being pasted - asks ONE object how much time it may take this tick. That object is the governor, and these are its numbers.

Keep reading
tpsFactor   = (tps - tps-floor) / (tps-target - tps-floor)
playerScale = 1 - min(online / players-full-load, 1) * player-weight
idle        = online == 0 ? idle-boost : 1
budget      = tick-budget-ms * tpsFactor * playerScale * idle
              (never more than 45 ms, whatever the multipliers)

At tps-floor the factor is zero, and zero means the plugin does NOTHING until the server recovers: no block is written, no chunk is asked for. That, and not good intentions, is what makes the TPS promise a promise. With ShadowOptimizer installed, its emergency brake (or a POOR/CRITICAL health verdict) also stops us for a moment.

Big edits never read the world on the main thread: the chunks they need are loaded asynchronously, copied, and the edit is computed on the worker threads. Only what is small and already loaded (up to 65,536 blocks: a brush click, a room) is done on the spot.

performance8 keys
tick-budget-ms8.0

How much time per tick, at most, for EVERYTHING this plugin does.

tps-floor18.0

Below this the plugin stops completely. The promise.

tps-target19.5

Above this it uses the full budget.

players-full-load40

With this many players online the player weight is at its maximum.

player-weight0.6

How much players count. 0 = not at all, 1 = a great deal.

idle-boost4.0

Multiplier when the server is empty: pregeneration uses the machine.

worker-threads-1

The compute pool. -1 = (cores of this machine) - 1.

max-blocks-per-tick120000

A hard ceiling, even when the budget would allow more.

Editor

editor22 keys
wand"GOLDEN_AXE"

The selection wand. Left click = first point, right click = second.

navigation-wand"COMPASS"

Right click with this teleports you to where you are looking.

brush-tool"BLAZE_ROD"

The item that brushes answer to when the brush does not name one.

sculpt-tool"DIAMOND_HOE"

The item that sculpt mode answers to.

max-selection-blocks-1

The default block limit per operation, for players who have no shadowedit.limit.blocks.<n> permission. -1 = no limit. The permission wins when a player has one; //limit can only lower it.

confirm-over-blocks1000000

Above this an operation asks for confirmation first.

brush-max-blocks200000

A single brush click may not exceed this.

brush-max-radius64

And may not be larger than this. Also a permission: shadowedit.limit.radius.<n>

max-history-entries25

How many undo steps are kept per player. The free edition keeps at most 25 whatever this says; with a key, up to 200.

history-to-disk-over250000

Above this many blocks an edit goes to a compressed file in data/history/ at once. Smaller ones follow when the server stops (and ten minutes after the player leaves), so //undo works after a restart too. Chest contents, signs and spawners are kept as well.

history-retention-days14

Writes are always ordered by chunk: it is worth a factor of three on a large //set, and it is what lets the plugin load one chunk at a time, asynchronously, instead of all of them on the main thread.

relight"DEFERRED"

NONE | DEFERRED | IMMEDIATE The server relights every block it writes on its own. This only re-sends the touched chunks to the players who see them, once the operation is over, for clients that still show old shadows: DEFERRED sends eight chunks every two ticks, IMMEDIATE all at once, NONE nothing (the least bandwidth).

physics-at-endtrue

At the end of an edit, give water and lava their flow update and let sand, gravel and concrete powder fall, a few per tick (at most 20,000 blocks per edit). false = everything stays exactly as placed, the way WorldEdit leaves it.

snapshot-max-blocks40000000

The most blocks one operation may read at once (the selection plus the margin its neighbours need). Above this the command refuses and says so: split the work, or raise this if the server has the memory (about 4 bytes per block, plus 48 per changed block).

progress-after"400ms"

How long an operation must take before the boss bar appears.

selection-particlestrue

The selection outline, drawn with particles and never with blocks: a plugin that draws with blocks is the one that leaves invisible barriers on somebody's server forever.

selection-color"#39d0ff"
selection-refresh-ticks15

How often the outline is redrawn. A dust particle lives a little over a second, so redrawing twice a second only draws the same outline on top of itself - and every point is one packet.

selection-max-points240

The ceiling on points for the whole box, spread over the twelve edges in proportion to how long each one is.

Every point is one packet to one player. This used to be 600 at 10 ticks, which is 1200 packets a second for every builder holding a selection - on a build server with twenty of them, 24000 a second of nothing but outline. Raise it if your selections are huge and you have the bandwidth; the outline does not get more readable, only denser.

selection-view-range40

How far a point is still worth sending, in blocks.

The client does not draw dust past about 32 blocks, so anything beyond that is a packet sent for something nobody can see. 40 leaves a margin, because the cut is measured from the player's feet.

horizon-range300

How far a wand or a brush reaches.

fuzzy-max-blocks2000000

The ceiling for the magic (connected blocks) selection.

Commands

commands1 key
worldedit-aliases"auto"

The short WorldEdit style aliases: //set, //pos1, //brush.

auto  - register them, unless WorldEdit or FAWE is installed
force - register them anyway
false - never

"auto" is the right answer: a server that already has WorldEdit should not have its commands taken away.

Schematics

schematics3 keys
cache-size64

How many parsed schematics stay in memory. Browsing a folder of a thousand files does not fill it: this is a count, not a size.

max-volume64000000

A file larger than this is not a structure, it is a map.

allowed-entities
[item_frame, glow_item_frame, painting, armor_stand, item_display, block_display, text_display, boat, chest_boat, minecart, chest_minecart]+8

Which entities may be recreated by a paste. A .schem arrives from the internet by way of an admin who did not write it: without this list, one could make a hundred primed creepers appear.

Worlds

Free edition: up to two managed worlds, empty (void) or vanilla. With a key: any number, and worlds generated from a pack. A pack world is never opened without a key: it stays on disk, untouched, and opens again as soon as a key is active.

worlds8 keys
auto-loadtrue

Reopen the managed worlds at start-up, before anybody else opens them without a generator.

unload-empty-after"10m"

Unload a managed world with nobody in it. 0 to never.

default-border0

A border for new worlds. 0 = none.

read-only[ ]

Worlds where nothing may be edited, whatever the permissions say.

delete-retention-days7

A deleted world is renamed, not removed: this many days to change your mind before the folder really goes.

void-platformtrue

The void world: a glass platform at spawn, so nobody falls the moment they arrive.

void-platform-block"GLASS"
void-biome"the_void"

PregenerationPremium

pregen10 keys
enabledtrue
resume-on-starttrue

Pick up again where a restart left off. A paused job stays paused.

chunks-per-tick4

Chunks asked for per tick with the full budget. They are generated asynchronously by Paper, like Chunky does: the main thread only hears that they are ready. The governor scales this down as TPS drop or players join, up to 16x on an empty server, and asks for nothing at all below performance.tps-floor. At most 4x this many chunks wait at the same time.

pause-with-playersfalse

true = stop completely when somebody is online. The right answer for a server that is already open to the public.

save-every"30s"
unload-after-writetrue

No effect any more: a chunk is released as soon as it is generated, so memory stays flat over a million chunks anyway.

bossbartrue
log-every"2m"
ready-radius96

How many blocks must be ready around spawn before /sedit world tp will let you in. A handful of seconds, not the whole world.

set-borderfalse

Set the world border to the pregenerated radius when it finishes.

Packs

Looking at packs (/sedit pack list, info, problems) is free. Creating worlds from them, copying and resetting them need a key.

packs1 key
allow-commandsfalse

Whether a structure may run commands when it is generated. FALSE by default: a pack downloaded from the internet must not be able to run anything.

Spawns (Premium: they belong to pack worlds)

A pack's spawn rules may name vanilla mobs, ShadowCustomizer mobs (scus:<id>) or MythicMobs (mythic:<id>). A mob that is not installed is reported when the pack loads, with the file and the line.

spawns3 keys
tick-interval40

The loop for rules that ADD spawns. Rules that replace a vanilla spawn cost nothing and do not use this.

attempts-per-player3
radius48

Zone effects (Premium: they belong to pack worlds)

effects1 key
tick-interval20

Storage

Nothing to do: on first start a local H2 database appears in data/creator.mv.db. No user, no password, nothing to install.

Keep reading

If you have a MySQL and prefer it, set enabled: true and fill the fields. The tables create themselves on the first connection. (An external MySQL is a Premium feature; without a key the plugin stays on the local file and says so in the console, which for one server is the right choice anyway.)

Several servers on one database: not supported yet. Each server would open the other's managed worlds and resume its pregenerations. Give each server its own database (or table-prefix).

The database is still called "shadowcreator", like the tables (scr_) and the local file: it is the name of the data, which did not change when the plugin was renamed.

storage5 keys
table-prefix"scr_"
fallback-to-localtrue
storage.mysql7 keys
enabledfalse
host"127.0.0.1"
port3306
database"shadowcreator"
username"root"
password""
parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"
storage.pool5 keys
maximum-pool-size10
minimum-idle2
connection-timeout-ms10000
idle-timeout-ms600000
max-lifetime-ms1800000
storage.h21 key
auto-serverfalse

Licence

The key goes in license.yml, not here: a support request that says "send me your config" must not come with somebody's licence in it.

license2 keys
grace-days7

Days of grace before dropping to the free edition when a subscription has just run out, or when the host binding matches nothing we can see (far more often a NAT than a thief).

resolve-public-iptrue

Asks the ShadowMC licence service (/ip) which public address this server has: behind NAT it is the only way to recognise it. It answers with the address it sees, and nothing about the server is sent. Only when a licence is installed: a server without a key asks nobody. false = never ask.

UI

ui2 keys
confirm-timeout"30s"

How long the [ Confirm ] button of a huge edit stays valid.

chat-timeout"30s"

How long a menu waits for you to type an answer in chat.

Debug

debug2 keys
log-sqlfalse
profilertrue

Time every command and edit for /sedit diag. Costs almost nothing.

bStats (anonymous usage statistics, https://bStats.org)

What is sent, every 30 minutes: a random server id (serverUuid, not derived from anything), the plugin version, the Minecraft/Paper and Java versions, the operating system and core count, the online mode, how many players are online (a number only) and the licence tier (free/premium/creator). NO player data: no names, no UUIDs, no addresses, no worlds.

Keep reading

false switches off this plugin only. enabled: false in plugins/bStats/config.yml switches off every bStats plugin on the server at once.

metrics1 key
enabledtrue

Languages

The texts the plugin shows to players, one file per language.

lang/

Texts and messages
2 files
plugins/ShadowEdit/lang/

Every message the plugin shows to players, one file per language. The keys are not listed one by one: here are the files, how many texts they hold and the placeholders they use.

FileLanguageTexts
lang/en_US.yml reference English 918
lang/it_IT.yml Italiano 918

Most used placeholders

The plugin replaces them with the right value: leave them written as they are.

  • <prefix>
  • <label>
  • <world>
  • <name>
  • <count>
  • <value>
  • <blocks>
  • <pattern>
  • <pack>
  • <radius>
  • <id>
  • <size>
  • <amount>
  • <biome>

Message groups

  • prefix 1
  • command 14
  • edit 40
  • selection 46
  • pattern 17
  • mask 10
  • clipboard 7
  • schem 17
  • history 12
  • brush 83
  • palette 13
  • navigation 8
  • flora 2
  • world 49
  • pack 17
  • pregen 15
  • genesis 25
  • general 6
  • status 24
  • help 228
  • license 46
  • confirm 6
  • prompt 2
  • menu 218
  • effect 4
  • structure 8

Other

Ready-made content, examples, imports: the files you copy and edit as a model.

brushes/

Brushes
5 files
plugins/ShadowEdit/brushes/

5 files with the same structure. Below, 2 of them in full, one for each different shape; the others are listed by name.

  • cliff.yml
  • hill.yml
  • mixed-forest.yml
  • mountain.yml
  • path.yml

Example brushes/mountain.yml

File notes

The brush that raises a mountain in under a minute. Big radius, sharp falloff: the falloff is what makes the difference between a mountain and a dome.

typestamp
radius48.0
strength0.8
falloffSHARP
pattern"stone"
range300
options5 keys
stamp"mountain"
height"40"
palette"alpine"
erosion"5"
talus"44"

Example brushes/mixed-forest.yml

File notes

Mixed forest. The minimum spacing and the slope limit are what make the difference between a wood and a sprinkling of trees.

typeforest
radius16.0
strength0.5
falloffSMOOTH
pattern"oak_log"
range250
options4 keys
tree"oak"
density"0.14"
spacing"4"
max-slope"28"

palettes/

Palettes
6 files
plugins/ShadowEdit/palettes/

6 files with the same structure. Below, the most commented one in full, as a model; the others are listed by name.

  • alpine.yml
  • beach.yml
  • desert.yml
  • meadow.yml
  • nether.yml
  • rock.yml

Example palettes/alpine.yml

Alpine palette

File notes

This is the palette that explains all the others, so it is commented line by line.

Layers apply FROM THE TOP, starting at the first non-air block going down. Each one takes up its own depth; a layer that does not apply - because the height or the slope is wrong - still takes up its depth, and the next one goes underneath. Without that rule, snow that does not apply would push the grass up by one block exactly where the bare rock was supposed to be.

min-slope / max-slope are in DEGREES and they are the lines that matter: they decide where bare rock shows instead of grass, which is the difference between a mountain and a hill painted white on top.

name"Alpine"
layers
[{ blocks: snow_block, depth: 2, above-y: 165, max-slope: 38 }, { blocks: "4:stone,2:andesite,1:cobblestone,1:gravel", depth: 4, min-slope: 38 }, { blocks: grass_block, depth: 1, max-slope: 32 }, { blocks: "6:dirt,1:coa …+4
blocks

Snow, high up only and only where it is not too steep: snow does not settle on a vertical wall, and putting it there anyway makes the whole range look like plaster.

blocks

Bare rock on the crags. Four blocks, because a single one lets the dirt show through the moment anyone digs.

blocks

Grass in the hollows, and nowhere else.

blocks

The dirt under the grass.

blocks

And then stone, all the way down. -1 means "to the bottom".

worlds/

Worlds
74 files
plugins/ShadowEdit/worlds/

74 files with the same structure. Below, 4 of them in full, one for each different shape; the others are listed by name.

  • end/biomes/azure-fields.yml
  • end/biomes/chorus-forest.yml
  • end/biomes/crystal-shores.yml
  • end/biomes/deep-void.yml
  • end/biomes/end-barrens.yml
  • end/biomes/obsidian-spires.yml
  • end/biomes/shattered-isles.yml
  • end/biomes/void-gardens.yml
  • end/caves/default.yml
  • end/effects/default.yml
  • end/noise/caves.yml
  • end/noise/detail.yml
  • end/noise/terrain.yml
  • end/ores/default.yml
  • end/ores/extra.yml
  • end/pack.yml
  • end/regions/default.yml
  • end/spawns/default.yml
  • end/structures/default.yml
  • nether/biomes/ash-plains.yml
  • nether/biomes/basalt-spires.yml
  • nether/biomes/blackstone-ridges.yml
  • nether/biomes/crimson-groves.yml
  • nether/biomes/crystal-hollow.yml
  • nether/biomes/glowstone-caverns.yml
  • nether/biomes/magma-sea.yml
  • nether/biomes/soul-marsh.yml
  • nether/biomes/warped-groves.yml
  • nether/caves/default.yml
  • nether/effects/default.yml
  • nether/noise/caves.yml
  • nether/noise/detail.yml
  • nether/noise/terrain.yml
  • nether/ores/default.yml
  • nether/ores/extra.yml
  • nether/pack.yml
  • nether/regions/default.yml
  • nether/spawns/default.yml
  • nether/structures/default.yml
  • overworld/biomes/alpine-peaks.yml
  • overworld/biomes/alpine-slopes.yml
  • overworld/biomes/badlands.yml
  • overworld/biomes/birch-forest.yml
  • overworld/biomes/crystal-hollows.yml
  • overworld/biomes/dark-woods.yml
  • overworld/biomes/deep-dark-halls.yml
  • overworld/biomes/deep-ocean.yml
  • overworld/biomes/desert.yml
  • overworld/biomes/dripstone-caverns.yml
  • overworld/biomes/forest.yml
  • overworld/biomes/frozen-ocean.yml
  • overworld/biomes/fungal-depths.yml
  • overworld/biomes/lush-caverns.yml
  • overworld/biomes/magma-caves.yml
  • overworld/biomes/meadow.yml
  • overworld/biomes/ocean.yml
  • overworld/biomes/plains.yml
  • overworld/biomes/river.yml
  • overworld/biomes/snowy-taiga.yml
  • overworld/biomes/sunflower-plains.yml
  • overworld/biomes/swamp.yml
  • overworld/biomes/taiga.yml
  • overworld/caves/default.yml
  • overworld/effects/default.yml
  • overworld/noise/caves.yml
  • overworld/noise/detail.yml
  • overworld/noise/terrain.yml
  • overworld/ores/default.yml
  • overworld/ores/extra.yml
  • overworld/pack.yml
  • overworld/regions/default.yml
  • overworld/spawns/default.yml
  • overworld/structures/surface.yml
  • overworld/structures/underground.yml

Example worlds/overworld/noise/terrain.yml

The overworld terrain

File notes

This file does two things: it says WHICH noise feeds each of the six parameters, and it says how those parameters become a height.

The six parameters live in detail.yml and in this file. Three make the SHAPE (continentalness, erosion, peaks-and-valleys), three make the BIOME (temperature, humidity, weirdness). That separation is why you can change the biome map without touching the relief, and the other way round.

which noise for which parameter
continentalness"continentalness"
erosion"erosion"
peaks-valleys"peaks-valleys"
temperature"temperature"
humidity"humidity"
weirdness"weirdness"
density-3d"density"

The 3D noise, which is what allows overhangs, natural arches and caves that open on the side of a hill. Without it the terrain is a height map and there is never anything above your head.

density-scale11.0

How "steep" the change from solid to empty is. Lower = more vertical walls.

density-weight0.85

How far the 3D noise is allowed to bend the surface. Above 1.2 the world starts to look like cheese.

The splines

A spline is a sentence written as a list of points. It passes THROUGH the points (Catmull-Rom), so "at -0.15 I want height 66" really does give height 66.

height-spline
[[-1, -58], [-0.7, -42], [-0.45, -24], [-0.19, 58], [-0.15, 66], [0.05, 72], [0.3, 80], [0.55, 96], [0.8, 128], [1, 168]]+7

Continentalness sets the base height.

The two points near -0.19 and -0.15 are not a mistake: they are the CONTINENTAL SHELF. Two points at almost the same x with different heights make a step, and that step is what makes a coast a coast instead of a ramp that slides down for two hundred blocks.

erosion-spline
[[-1, 82], [-0.75, 62], [-0.5, 44], [-0.2, 26], [0.1, 14], [0.45, 7], [1, 2]]+4

Erosion sets HOW MUCH RELIEF is allowed at that point.

It is the parameter that produces plains in the middle of a continent: where erosion is high the ground is flat even though continentalness would say mountain. Raising the last point (at -1) raises the mountains without touching anything else.

peaks-spline
[[-1, -0.75], [-0.55, -0.35], [-0.15, -0.05], [0.15, 0.15], [0.5, 0.55], [0.8, 0.88], [1, 1]]+4

Peaks and valleys distributes that relief. Below zero are valleys, above are ridges; the curve is steep at the top because summits have to be few and sharp.

The rivers

A river here is not a biome: it is a SHAPE, and it has to run downhill.

max-terrain-height is the line that matters: above that height the effect switches off. Without it you find water channels at height two hundred, and that is the mistake people notice before any other.

rivers7 keys
enabledtrue
noise"river"
threshold0.855

How close to the river line you have to be. Higher = narrower and rarer rivers.

width7.0
depth5
bank-smooth9

The banks: without this blend the river is a water canyon with walls three blocks tall.

max-terrain-height105

Example worlds/overworld/structures/surface.yml

The surface structures

File notes

HOW A STRUCTURE FINDS ITS PLACE

Not "at random per chunk": on a grid with a jitter, exactly the way Minecraft does it. Three things pure randomness does not give you: the minimum distance is respected without having to search for it, the spread is genuinely even with no clumps and no deserts, and it is deterministic - the same seed puts the hamlet in the same place, which is what lets it be pregenerated and found again.

rarity: "1 / 1600" is read as a distance in BLOCKS: roughly one every 1600 blocks. It is the only number most people ever change.

HOW IT SITS IN THE GROUND

You never write a height. terrain.fit decides:

AUTO        looks at the ground and picks one of the ones below.
            Leave it on AUTO unless you have a reason.
PLATFORM    levels the footprint to the median height. For a
            building with a flat floor.
FOUNDATION  leaves the ground alone and extends the building
            downwards until it meets it. For towers and pillars.
CARVE       digs into the slope. For anything set into a hillside.
BLEND       raises and lowers the ground around the edge so that it
            joins the structure. The slowest, and the best looking.
NONE        writes it exactly where it is told and nothing else.

margin is how many blocks around the footprint get blended. Small margins leave a step; above about 8 you start to notice the ground being flattened.

LOOT is a table name, and the table is rolled when the chest is OPENED, not when it is generated: that way a chest that nobody ever finds costs nothing, and the contents follow the server's own tables.

hermit-tower8 keys
name"Hermit's Tower"
object"watchtower"
biomes
[meadow, alpine-slopes, alpine-peaks, taiga, snowy-taiga]+2
hermit-tower.placement3 keys
rarity"1 / 1400"
jitter0.65
min-distance-any220
hermit-tower.position3 keys
modeSURFACE
anchorBOTTOM_CENTER
rotationRANDOM_90
hermit-tower.terrain7 keys
fitFOUNDATION

FOUNDATION and not PLATFORM: a tower on a slope should grow a taller base on the downhill side, not flatten the slope.

max-slope34
max-height-difference14
clear-above6
margin3
palette"rock"
remove-floatingtrue
hermit-tower.contents2 keys
loot
[{ at: "marker:top", table: "minecraft:chests/stronghold_corridor", chance: 1 }, { at: CHEST, table: "minecraft:chests/simple_dungeon", chance: 0.8 }]+1
spawners[{ at: SPAWNER, mob: skeleton, delay: […], cou…]
hermit-tower.gameplay1 key
discovery-message"structure.found.hermit-tower"
3 more entries shaped like hermit-tower: ruined-tower, forest-shrine, bandit-camp
forest-ruins7 keys
name"Forest Ruins"
object"ruin-pillars"
biomes
[forest, birch-forest, dark-woods, plains, taiga, meadow]+3
forest-ruins.placement3 keys
rarity"1 / 700"
jitter0.8
max-per-chunk1
forest-ruins.position5 keys
modeSURFACE
y-offset-1

-1: the ruins sink a block into the ground. A ruin sitting exactly on the surface reads as a model placed on a table.

anchorBOTTOM_CENTER
rotationRANDOM
mirrorRANDOM
forest-ruins.terrain5 keys
fitBLEND
max-slope24
max-height-difference9
clear-above3
margin5
forest-ruins.contents1 key
loot[{ at: CHEST, table: "minecraft:chests/simple_…]
desert-ruins8 keys
name"Buried Ruins"
object"desert-ruin"
biomes[desert, badlands]
desert-ruins.placement3 keys
rarity"1 / 1500"
jitter0.6
min-distance-any260
desert-ruins.position4 keys
modeSURFACE

The visible part is four blocks of rubble; everything else hangs below it. The anchor is therefore the top, not the bottom.

anchorTOP_CENTER
y-offset-1
rotationRANDOM_90
desert-ruins.terrain6 keys
fitCARVE
max-slope20
max-height-difference10
clear-above2
margin3
palette"desert"
desert-ruins.contents2 keys
loot[{ at: CHEST, table: "minecraft:chests/desert_…]
spawners[{ at: SPAWNER, mob: husk, delay: […], count:…]
desert-ruins.gameplay1 key
discovery-message"structure.found.desert-ruins"
mountain-hamlet8 keys
name"Hamlet"
object"hamlet"
biomes
[plains, sunflower-plains, meadow, forest, alpine-slopes]+2
mountain-hamlet.placement3 keys
rarity"1 / 3200"

Rare on purpose: a hamlet every eight hundred blocks stops being a discovery and becomes scenery.

jitter0.5
min-distance-any700
mountain-hamlet.position2 keys
modeSURFACE
rotationRANDOM_90
mountain-hamlet.terrain7 keys
fitPLATFORM

A whole village has to stand on level ground: PLATFORM, a wide margin, and a slope limit low enough that it never lands on a hill.

max-slope12
max-height-difference12
clear-above8
margin8
palette"meadow"
remove-floatingtrue
mountain-hamlet.contents2 keys
loot[{ at: CHEST, table: "minecraft:chests/village…]
mobs
[{ mob: "minecraft:villager", at: "marker:spawn", count: […] }, { mob: "minecraft:iron_golem", at: "marker:spawn", count: […] }, { mob: "minecraft:cat", at: "marker:spawn", count: […] }]+2
mountain-hamlet.gameplay1 key
discovery-message"structure.found.hamlet"
mine-entrance7 keys
name"Mine Entrance"
object"mine-entrance"
biomes
[meadow, alpine-slopes, taiga, snowy-taiga, badlands, plains, forest]+4
mine-entrance.placement3 keys
rarity"1 / 1200"
jitter0.7
min-distance-any200
mine-entrance.position4 keys
modeSURFACE

The anchor is the top: the shaft below is what has to reach the caves, and the head frame is what has to sit on the ground.

anchorTOP_CENTER
y-offset-3
rotationRANDOM_90
mine-entrance.terrain5 keys
fitFOUNDATION
max-slope28
max-height-difference14
clear-above6
margin3
mine-entrance.contents2 keys
loot[{ at: CHEST, table: "minecraft:chests/abandon…]
spawners[{ at: SPAWNER, mob: cave_spider, delay: […],…]
shipwreck7 keys
name"Shipwreck"
object"shipwreck"
biomes[ocean, deep-ocean, frozen-ocean]
shipwreck.placement3 keys
rarity"1 / 1000"
jitter0.8
min-distance-any150
shipwreck.position3 keys
modeOCEAN_FLOOR
rotationRANDOM
mirrorRANDOM
shipwreck.terrain6 keys
fitFOUNDATION

On a seabed the fit has to be gentle: a platform under a wreck is visible from a long way off through the water.

max-slope30
max-height-difference8
clear-above0
margin2
remove-floatingfalse
shipwreck.contents1 key
loot
[{ at: "marker:loot", table: "minecraft:chests/shipwreck_treasure", chance: 1 }, { at: CHEST, table: "minecraft:chests/shipwreck_supply", chance: 0.9 }]+1
floating-island8 keys
name"Floating Island"
object"floating-island"
biomes[meadow, alpine-peaks, alpine-slopes, plains]
floating-island.placement3 keys
rarity"1 / 6000"

The rarest thing in the pack. Seeing one has to mean something.

jitter0.4
min-distance-any1200
floating-island.position3 keys
modeFLOATING
y-offset46

Above the terrain, not above sea level: over a mountain it stays over the mountain.

rotationRANDOM_90
floating-island.terrain4 keys
fitNONE
clear-above0
margin0
remove-floatingfalse
floating-island.contents1 key
loot[{ at: CHEST, table: "minecraft:chests/end_cit…]
floating-island.gameplay1 key
discovery-message"structure.found.floating-island"

Example worlds/overworld/noise/detail.yml

The overworld noises

File notes

Every noise has a name, and the rest of the pack calls it by name.

The two knobs that matter:

scale    SMALLER = BIGGER shapes. 0.0008 is continents, 0.05 is
         pebbles.
warp     moves the sampling point with another noise. On its own it
         is worth half the realism: without it ridges run parallel
         and you can see they were generated; with it they wander
         and fork.
the three shape parameters
continentalness7 keys

The continents. Tiny scale: a landmass has to last for thousands of blocks.

typesimplex
scale0.00075
octaves4
persistence0.5
lacunarity2.13

Not exactly 2.0: with an integer lacunarity the octave maxima always land on the same points, and on a large map that shows up as a grid.

salt11
continentalness.warp2 keys
noise"warp-large"
strength340.0
erosion7 keys

How much relief is allowed. Bigger than continentalness: an eroded region is smaller than a continent.

typesimplex
scale0.0014
octaves3
persistence0.45
lacunarity2.07
salt23
erosion.warp2 keys
noise"warp-medium"
strength160.0
peaks-valleys7 keys

The ridges. Ridged, because that is what produces edges instead of bumps: it is the difference between mountains and large hills.

typeridged
scale0.0034
octaves4
persistence0.52
lacunarity2.11
salt37
peaks-valleys.warp2 keys
noise"warp-medium"
strength90.0
the three climate parameters

Different scales from each other, and deliberately not multiples: temperature and humidity on the same scale would produce a chequerboard of biomes.

3 more entries shaped like continentalness: temperature, humidity, warp-medium
weirdness4 keys

Weirdness forks the variants: it is what decides between birches and oaks at the same climate.

typesimplex
scale0.0021
octaves2
salt89
the service noises
warp-large4 keys

The two warps. Very different scales: one moves the continents, the other ripples the edges.

typesimplex
scale0.00042
octaves2
salt101
river5 keys

The rivers. The value the terrain uses is 1 - |this|, that is, a thin line where the noise crosses zero.

typesimplex
scale0.0016
octaves2
salt107
river.warp2 keys
noise"warp-medium"
strength120.0
density6 keys

The 3D density: overhangs and arches.

typesimplex
scale0.0095
octaves3
persistence0.42
lacunarity2.09
salt109
alpine-detail5 keys

Mountain detail: gullies and scree.

typeridged
scale0.021
octaves3
persistence0.5
salt113
dune-detail4 keys

Dune detail.

typebillow
scale0.016
octaves2
salt127
mesa-detail4 keys

The terraces of the badlands.

typesimplex
scale0.011
octaves2
salt131
clumping4 keys

Tree clumping: without it they fall like salt on a table.

typesimplex
scale0.013
octaves2
salt137
surface-wobble4 keys

The ragged border between surface layers.

typesimplex
scale0.08
octaves1
salt139
region4 keys

Which climate region. There is only one here, but the noise is already in place for anyone who wants two.

typesimplex
scale0.00031
octaves1
salt149

Example worlds/overworld/pack.yml

Shadow Overworld

File notes

A realistic overworld: what a vanilla world would look like if somebody had spent a week fixing its relief.

Every file in this pack is commented. If you are reading because you want to change something, the three edits that give the most result for the time spent are, in order:

1. biomes/*.yml -> surface:     the surface palettes change how the
   world looks more than anything else does.
2. structures/*.yml -> rarity:  dropping YOUR schematics into
   objects/ and declaring them here is the step that makes the
   world yours.
3. noise/terrain.yml -> erosion-spline: raising its last point
   raises the mountains without breaking anything else.

After every edit: /sedit pack reload overworld

pack-version1
id"overworld"
name"Shadow Overworld"
author"ShadowMC"
description"Real mountains, rivers that run downhill, an underground with a plan."
dimensionOVERWORLD
min-y-64

The height limits. -64/320 are Minecraft's own since 1.18: changing them means a world that can no longer be opened with a different pack.

max-y320
sea-level63
sea-block"water"
seed2 keys
modeRANDOM
RANDOM: every world created from this pack gets its own seed.
FIXED:  every world from this pack is the SAME world.
value0
spawn3 keys
modeSEARCH

SEARCH spirals out from the origin looking for a solid column, out of the water, in one of the biomes listed. Without the list it settles for the first solid column, and that is often a cliff.

search-radius3000
require-biome[plains, meadow, forest, sunflower-plains]
vanilla4 keys

What to let Minecraft do.

Vanilla structures are off because a vanilla village inside a custom world is spotted instantly: it is the one thing that looks like it came from another game. Ours live in structures/.

structuresfalse
decorationsfalse
mobstrue

Natural mob spawning stays on: OUR rules add to it, they do not replace it.

bedrocktrue
performance2 keys
cache-columns4096
structure-search-chunks2

All the documentation