Skip to content

Configuration

  • Directorylogs all logs for the server
    • latest.log the most recent log
    • old logs are compressed into .gz files
  • Directoryconfig
  • Directoryplugins you can place your plugin JARs here
    • Directory.paper-remapped used to store remapped plugin JARs, learn more here
    • Directoryspark used to store configuration for the bundled spark profiler, learn more here
  • Directory<world>
  • banned-ips.json stores IP addresses banned from the server
  • banned-players.json stores information about players banned from the server
  • bukkit.yml
  • commands.yml
  • eula.txt stores the EULA consent status
  • help.yml stores configuration for the /help command
  • ops.json stores information about players with operator status
  • permissions.yml stores permission configuration
  • server.properties
  • spigot.yml
  • usercache.json caches players’ Mojang API data, e.g. their head textures
  • whitelist.json stores whitelist configuration

Per-world configuration

One of the most powerful yet least understood features of the Paper configuration is setting configuration options per world. While you can not override every config option per world, everything stored within paper-world-defaults.yml can be.

Default values

Paper sets no per-world overrides out of the box, storing all default values in config/paper-world-defaults.yml. Everything in this file can be overridden per world but isn’t by default. Changing something in paper-world-defaults.yml will change the value for all worlds where you have not manually overridden it.

Per-world values

To set a value for a specific world, edit paper-world.yml within the world folder. For example, if you wanted to enable lootables.auto-replenish for a world named resource, you would edit paper-world.yml within the resource folder like so:

resource/paper-world.yml
_version: 28
lootables:
auto-replenish: true

Nothing but _version is set in paper-world.yml configuration files by default. In order to override the default for an option, you must manually add it by copying from paper-world-defaults.yml.

Inheritance

All configuration not explicitly defined for a world is inherited from paper-world-defaults.yml. This means that there is no need to repeat yourself between the paper-world-defaults.yml and each individual paper-world.yml. You do not need to and should not copy the entire paper-world-default.yml file into each paper-world.yml file you want to modify. Only copy the exact value you want to change.

For a more complex real-world example: setting both different spawn-limits and auto-replenish in two worlds.

paper-world-defaults.yml
lootables:
auto-replenish: true
entities:
spawning:
spawn-limits:
ambient: 70
axolotls: 10
creature: 15
monster: 5
underground_water_creature: 5
water_ambient: 5
water_creature: 20
world_nether/paper-world.yml
entities:
spawning:
spawn-limits:
monster: 90
resource_world/paper-world.yml
lootables:
auto-replenish: false
entities:
spawning:
spawn-limits:
axolotls: 8
creature: 15
monster: 2

This example demonstrates the concept of inheritance. For each world, this is the effective configuration which will be applied:

Configuration Keyworldworld_netherworld_the_endresource_world
lootables.auto-replenishtruetruetruefalse
entities.spawning.spawn-limits.ambient15151515
entities.spawning.spawn-limits.axolotls5558
entities.spawning.spawn-limits.creature10101015
entities.spawning.spawn-limits.monster7090702
entities.spawning.spawn-limits.underground_water_creature5555
entities.spawning.spawn-limits.water_ambient20202020
entities.spawning.spawn-limits.water_creature5555

Notice that world_the_end/paper-world.yml was never modified. Because of this, it inherits all the configuration options from config/paper-world-defaults.yml. Additionally, auto-replenish was only disabled in resource_world/paper-world.yml because in config/paper-world-defaults.yml, auto-replenish is set to true.