Skip to content

Configuration

  • Directorylogs/ all logs for the server
    • latest.log the most recent log
    • <yyyy-MM-dd>-<run-id>.log.gz old logs compressed with gzip
  • Directoryconfig/
  • Directoryplugins/ you can place your plugin JARs here
    • Directory.paper-remapped/ used to store remapped plugin JARs, learn more here
    • DirectorybStats/
      • config.yml stores configuration for bStats plugin metrics
    • Directoryspark/ plugin folder for the bundled spark profiler
  • Directoryworld/dimensions/<namespace>/<key>/
  • banned-ips.json stores IP addresses banned from the server
  • banned-players.json stores 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 additional permission definitions
  • server.properties
  • spigot.yml
  • usercache.json caches players’ Mojang API data, e.g. their head textures
  • whitelist.json stores information about whitelisted players

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.

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.

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 with the key custom:resource, you would edit paper-world.yml within the world/dimensions/custom/resource folder like so:

world/dimensions/custom/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.

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/dimensions/minecraft/the_nether/paper-world.yml
entities:
spawning:
spawn-limits:
monster: 90
world/dimensions/custom/resource/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 in world/dimensions, this is the effective configuration which will be applied:

Configuration Keyminecraft/overworldminecraft/the_netherminecraft/the_endcustom/resource
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/dimensions/minecraft/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 world/dimensions/custom/resource/paper-world.yml because in config/paper-world-defaults.yml, auto-replenish is set to true.