RE:NODE

Minecraft11 min read

Minecraft custom world generation and seeds

Custom terrain on a Minecraft server: worldgen datapacks like Terralith and Tectonic, seeds and level-type, plugin generators, and what pre-generation costs.

0 readers

Custom world generation on a Minecraft server is mostly datapacks: Terralith for new biomes, Tectonic for bigger terrain, and packs like Incendium and Nullscape for the Nether and the End. They go in world/datapacks/ before the world is first generated, they use only vanilla blocks so players need nothing installed, and they work on Paper, Fabric and vanilla alike. Two facts shape everything else. World generation runs once per chunk, so a pack added to an existing world only affects terrain nobody has visited yet. And custom terrain is more expensive to generate than vanilla, so pre-generating the playable area before launch is not optional on a shared CPU. This post covers seeds and level-type, installing worldgen packs on a server, plugin generators on Paper, and the real cost in hours and gigabytes.

How world generation works, and when it runs#

Minecraft generates terrain the first time a chunk is needed - when a player walks near it, when a pre-generation tool asks for it, or when something else forces it to load. The result is written to the world's region files and never generated again. From then on that chunk is data, not a formula.

The terrain a chunk gets depends on three inputs:

  1. The seed, a 64-bit number stored in level.dat.
  2. The game version, because Mojang changes the generator - 1.18 changed terrain completely, and smaller changes arrive with most major updates.
  3. The worldgen data: the built-in generator settings, plus any datapacks or mods that override them.

Change any of those three and new chunks come out differently, while old chunks stay as they were. That is how you end up with a seam: a cliff edge where Terralith terrain meets vanilla terrain, or where 1.20 hills meet 1.21 mountains. The only way to avoid seams is to decide on all three before generating anything you intend to keep.

Seeds, level-type and generator-settings#

Four keys in server.properties control a new world's generation. They only take effect when the world is created; changing them later does nothing to an existing world.

server.properties
level-name=worldlevel-seed=level-type=minecraft\:normalgenerate-structures=truegenerator-settings={}
KeyDefaultWhat it does
level-seedempty (random)The seed; a number, or text that is hashed into one
level-typeminecraft:normalThe world preset
generate-structurestrueVillages, strongholds, temples and the rest
generator-settings{}JSON options, used by the flat preset

The colon in level-type is escaped as \: in the file because server.properties is a Java properties file; the server writes it that way itself. The presets are:

  • `minecraft:normal` - standard terrain.
  • `minecraft:large_biomes` - the same generator with biomes several times larger. Good for big servers where players want room; it makes some biomes very hard to find.
  • `minecraft:amplified` - extreme vertical terrain. Spectacular, slow to generate, and hard to walk on.
  • `minecraft:flat` - a superflat world, shaped by generator-settings.
  • `minecraft:single_biome_surface` - one biome everywhere.

A flat world for creative building, as one line in server.properties:

server.properties
level-type=minecraft\:flatgenerator-settings={"layers":[{"block":"minecraft:bedrock","height":1},{"block":"minecraft:dirt","height":2},{"block":"minecraft:grass_block","height":1}],"biome":"minecraft:plains"}

Seeds are worth choosing deliberately for a server that will last. A seed map tool such as Chunkbase lets you look at a seed's biomes and structures for your version before you commit, so you can pick one with a good spawn and a village nearby. Remember the version: a seed you liked in 1.20 generates different terrain on 1.21 wherever the generator changed. Once the server is running, seed in the console prints the current one.

Text seeds are hashed into a number, so level-seed=autumn-smp is perfectly valid. A seed from a vanilla world is only a starting point if you add worldgen datapacks: the same seed with Terralith produces a completely different map.

Worldgen datapacks: what they change#

A worldgen datapack overrides or adds JSON files under data/<namespace>/worldgen/ - biomes, noise settings, density functions, features, structures - and sometimes data/minecraft/dimension/ to replace a whole dimension's generator. Because everything is data, a worldgen datapack needs no code and no client mod, as long as it only uses vanilla blocks.

The established packs:

PackWhat it changesNotes
TerralithOverworld biomes: many new ones, using vanilla blocksThe most widely used worldgen pack
TectonicOverworld terrain shape: taller mountains, reshaped continentsBuilt to work alongside Terralith
IncendiumThe Nether: new biomes and structuresFrom the same team as Terralith
NullscapeThe End: reshaped outer islandsSame team
StructoryExtra structures across dimensionsLightweight, same team

Most of these are published both as datapacks and as mods for Fabric and NeoForge. On Paper or vanilla use the datapack; on a modded server either works, and the mod version is sometimes preferred because it loads before the world. Some versions of the mod builds depend on a small library mod; the mod page lists it.

Combining packs is common - Terralith, Tectonic, Incendium and Nullscape are a popular set - but combinations are where problems appear. Packs that override the same files conflict, and the last one in the load order wins. Packs designed together, like the ones above, document their compatibility; packs from different authors may not. Generate a test world locally with your exact combination before you commit a server to it.

Installing worldgen packs on a server#

A dedicated server has no world-creation screen, so the order of operations matters:

  1. Stop the server. If a world already exists, decide what happens to it: back it up, rename it, or delete it.
  2. Create the world folder and its datapacks folder before the world exists: world/datapacks/.
  3. Upload the packs into it as zips. Each zip must have pack.mcmeta at its top level. Do not unpack them into loose files.
  4. Set `level-seed` and `level-type` if you want something other than a random normal world.
  5. Start the server. It finds the packs, enables them, and generates the new world with them.
  6. Check the log for datapack errors, then run datapack list in the console to confirm every pack is enabled.

If a pack is built for a different game version, the server may warn and load it, or may refuse to load the world at all with a datapack error. Worldgen packs are tied closely to the game version; always download the build for exactly the version you run. The datapacks guide covers pack.mcmeta, pack_format and load order in detail.

On RE:NODE, Minecraft servers come with a world already generated, so installing worldgen packs means stopping the server, deleting or renaming the generated world folders in the file manager, creating world/datapacks/, uploading the zips and starting again. On Paper, delete world_nether and world_the_end too, or the Nether and End keep their vanilla terrain while the Overworld changes.

Plugin generators on Paper#

Paper also accepts world generators from plugins, which can do things datapacks cannot, such as generating with code at runtime. The two best known are Terra, an open-source generator with configurable packs that runs on Paper and Fabric, and Iris, a commercial generator with its own pack system.

A plugin generator is attached to a world in bukkit.yml, before that world is generated:

bukkit.yml
worlds:  world:    generator: Terra:OVERWORLD

The value after generator: is the plugin's name and a generator ID; Terra's documentation uses this form, and other plugins document their own IDs. As with datapacks, the generator only affects chunks generated after it is set.

Plugin generators trade portability for power. A world generated by a plugin is only regenerated identically by that plugin at that version, so a server built on one is committed to it for as long as new terrain is generated. They can also be expensive: generating terrain in plugin code competes for the same CPU as the game. Test generation speed before you choose one.

For extra worlds beside the main one - a resource world, a creative world, a separate amplified world - Multiverse-Core can create a world with any installed generator. Running multiple worlds with Multiverse covers that, including what each extra world costs.

What pre-generation costs#

Custom terrain makes the most expensive thing a server does more expensive still. Large biome packs add more varied features per chunk, Tectonic's terrain is taller, and amplified is famously slow. If players generate this terrain by exploring, the server pays for it in lag spikes during play. Pre-generating the area inside a world border moves the cost to a quiet time and makes it predictable.

The arithmetic for a square area pre-generated with Chunky, whose default radius means half the side of a square:

Chunky radiusAreaChunksRegion files
2,000 blocks4,000 x 4,00062,500about 61
5,000 blocks10,000 x 10,000390,625about 381
10,000 blocks20,000 x 20,0001,562,500about 1,526

Time depends on chunks per second, which depends on the CPU allocation, the worldgen packs and the server software. At 100 chunks a second, a 5,000-block radius takes about 65 minutes; at 30 chunks a second, about three and a half hours. Measure your own rate in the first few minutes of the run, then do the division. Each dimension is a separate run, and the Nether and End are usually smaller.

Disk use varies too much to state a figure - it depends on terrain, structures and compression - so pre-generate a small radius first, check the size of the region folder, and scale up. A large pre-generated world can take several gigabytes, which matters on a plan with a fixed disk. On RE:NODE, Minecraft plans have between 15 and 100 GB of disk depending on the tier, and the disk graph next to the console shows usage climbing during a run.

The CPU side is simpler to reason about. Pre-generation will hold the server at 100% of its CPU allocation for the whole run. On RE:NODE that is a hard throttle to the share you bought, never grounds for suspension, and the run simply takes as long as your share allows. Run it overnight from a schedule, keep an eye on memory, and read world borders and pre-generation for the Chunky commands and how to pause and resume a run.

Changing worldgen on an existing world#

Sometimes the decision comes late: the server launched on vanilla terrain and now everyone wants Terralith. The options, from cleanest to messiest:

  1. A new world, with the old one kept. Start a new season on the new generator. Offer the old world as a download.
  2. A new world beside the old one. Create a second world with the new terrain and connect them with Multiverse or a proxy. Bases stay where they are; new exploration happens on the new terrain.
  3. Regenerate unvisited areas. Use MCA Selector on a copy of the world to delete chunks with very low inhabited time - chunks people passed through but never lived in - and let the new generator fill them. The seams move outward to the edges of people's bases. This is a real technique, but it is fiddly and you should do it on a copy.
  4. Accept the seam. Set a world border that includes the old area plus a ring of new terrain, pre-generate the ring, and let the seam be a feature of the map.

Updating a worldgen pack to a new version on an existing world is a smaller version of the same problem: the new version may generate different terrain, so new chunks may not line up with old ones. Read the pack's changelog before updating, and treat a major version of a worldgen pack like a game version change. Minecraft version upgrades has the general discipline.

Troubleshooting#

The world generated as vanilla. The packs were not in world/datapacks/ when the world was created, or they were nested one folder too deep. Stop, fix the folder, delete the generated world, start again.

The Overworld changed but the Nether did not. On Paper the Nether and End are separate world folders; if they already existed, they kept their vanilla terrain. Delete them too before regenerating, after backing up anything you need.

The server will not start after adding a pack. The pack is for a different game version, or two packs conflict. The log names the pack and usually the file. Remove packs one at a time to find the culprit.

Lag spikes whenever someone explores. Expected with custom terrain. Pre-generate and set a world border; the spikes stop once there is nothing left to generate.

Players see odd biome names. Custom biomes have their own IDs, which the client shows in the debug screen. Nothing is wrong.

FAQ#

Do players need to install Terralith to join?

No. The datapack version of Terralith uses only vanilla blocks, so the server sends the terrain to unmodified clients. The same is true of Tectonic, Incendium, Nullscape and Structory as datapacks.

Can I add Terralith to an existing world?

You can, but only chunks generated after you add it get Terralith terrain. Explored areas stay as they were, with a visible seam where the generators meet. Most servers start a new world or add a second world instead.

How do I set the seed on a Minecraft server?

Put it in level-seed in server.properties before the world is generated. It can be a number or text. Changing it later has no effect on an existing world; you must generate a new world for a new seed.

Does custom terrain use more RAM?

Somewhat more during generation, mostly because generation is busier. The bigger costs are CPU while generating and disk afterwards. Pre-generating inside a border turns both into one predictable job before launch.

Can I use different terrain in different worlds on one server?

Yes. On Paper, Multiverse-Core can create extra worlds with a plugin generator, and each world has its own settings. On Paper, datapacks are loaded from the main world's folder only and apply server-wide, so a Terralith install also shapes any new normal world Multiverse creates. Plan which terrain belongs where before you generate.


Comments

Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.

0/2000