Per World Configuration
One of the most powerful yet least understood features of the Paper configuration is setting
configuration options per world. While not every config option can be set per world, everything
under world-settings
in either paper.yml
or spigot.yml
can be configured differently on a per
world basis.
Default Values
The only world generated out of the box is default
. Any configuration option set here will apply
to all loaded worlds, unless explicitly overridden. Any configuration change that does not need
to be separated by world should be made in this section.
The default
section also serves as the place to configure per world settings for the main world
(level-name
in server.properties). An additional section created for the main world will not
supersede default
.
Per World Values
A new section must be manually added to the bottom of the configuration file for each world which requires a unique configuration. This section will not be automatically generated; it must be added. Remember! YAML (the configuration format used by Paper) cares about spaces. When adding a new world, ensure there are two spaces behind it.
For example, to disable loading the spawn chunks in world_nether
and world_the_end
,
configuration would be added like this:
world-settings:
default:
keep-spawn-loaded: true
world_nether:
keep-spawn-loaded: false
world_the_end:
keep-spawn-loaded: false
This is a very stripped-down example. In reality, the default
section will be much more extensive
as it contains all possible configuration options. This may look overwhelming at first, but always
remember to put new worlds at the very bottom of the configuration file.
Inheritance
All configuration not explicitly defined for a world is inherited from the default
section. This
means there is no need to repeat configuration options with the same value between sections, so
there is no need to copy and paste the entire default
section into each new world created.
For a more complex real-world example: setting both different spawn-limits
and keep-spawn-loaded
in two worlds.
world-settings:
default:
spawn-limits:
monster: 70
creature: 10
ambient: 15
axolotls: 5
underground_water_creature: 5
water_creature: 5
water_ambient: 20
keep-spawn-loaded: true
world_nether:
spawn-limits:
monster: 90
resource_world:
spawn-limits:
monster: 2
creature: 15
axolotls: 8
keep-spawn-loaded: false
This example demonstrates the concept of inheritance. For each world, this is the effective configuration which will be applied:
Configuration Key | world | world_nether | world_the_end | resource_world |
---|---|---|---|---|
spawn-limits.monster | 70 | 90 | 70 | 2 |
spawn-limits.creature | 10 | 10 | 10 | 15 |
spawn-limits.ambient | 15 | 15 | 15 | 15 |
spawn-limits.axolotls | 5 | 5 | 5 | 8 |
spawn-limits.underground_water_creature | 5 | 5 | 5 | 5 |
spawn-limits.water_creature | 5 | 5 | 5 | 5 |
spawn-limits.water_ambient | 20 | 20 | 20 | 20 |
keep-spawn-loaded | true | true | true | false |
Notice that world_the_end
was never specified in this configuration. Because of this, it inherits
all the configuration options from the default
section. Additionally, keep-spawn-loaded
was only
disabled in resource_world
because in the default
section, keep-spawn-loaded
is set to true
.