World Levels

Work together to level up your Minecraft worlds to unlock features and rewards!

268

Quick challenge

How far can you run before the mobs catch you?

World Levels

Work together to level up your multiplayer Minecraft server to unlock features and rewards!

Features

- Level up your multiplayer server by gaining XP through normal gameplay - full integration with your permission and economy plugin for leveling up the world with: - Items - Increasing the world border - Permissions, groups, and currency (requires [Vault][vault]) - full integration with your permission and economy plugin based on World Level: - Building Nether or The End portals - Mining blocks - Placing blocks - Crafting items - full integration with your permission and economy plugin upon world level up - Highly [full integration with your permission and economy plugin][config] with a full config [schema][schema] - Add custom XP sources globally or at a per-level basis - Scale leveling exactly to your liking - Specify groups of levels per-world or groups of worlds - Exclude certain worlds from the plugin - Support for infinite level scaling and rewards - Optionally reward offline or new players for level gains - full integration with your permission and economy plugin, with [MiniMessage][minimessage] formatting support - Optionally add [Vault]() for full integration with your permission and economy plugin of choice

Usage GIF

*GIF showing leveling up, Nether access, and world border increases*

Customizable Server XP Bar

Server XP bar

Level Up Alerts

Level up alerts

Configuration

This plugin likely requires configuration before it can be useful to you. The default configuration file will be created for you, but it can also be found [here][config]. If your text editor supports This plugin likely requires configuration before it can be useful to you., you will also get configuration autocomplete suggestions and linting.

You can find a more detailed example config here.

Config Examples

*These are partial configurations for the `levels` section specifically.*

How level ranges and XP requirements work

```yaml levels: '1':

level 1 should always require 0 XP

xp: 0.0 '2':

level 2 requires 100 XP to get to

xp: 100.0 '3': xpStep:

level 3 adds 50 to the previous requirement, making it 150 XP to get to

add: 50.0 '4': xpStep:

level 4 multiplies the previous requirement by 2, making it 300 XP to get to

mult: 2.0 '5-10': xpStep:

levels 5-10 adds 50 to the previous requirement, making the following for each:

level 5 requires 350

level 6 requires 400

level 7 requires 450

level 8 requires 500

level 9 requires 550

level 10 requires 600

add: 50.0 '11-':

Level 11 and beyond (scales infinitely) requires 1000 XP to get to

xp: 1000.0 ```

Lock the Nether and The End at the start, and unlock them when the server reaches level 2 and 3, respectively

```yaml levels: '1': xp: 0.0

Prevent Nether and End portals from being used initially

allowEnd: false allowNether: false '2': xp: 2000.0

Unlock Nether portals at level 2

allowNether: true titles: - title: <red>Nether</red> <green>unlocked!</green> '3': xp: 4000.0

Unlock End portals at level 3

allowEnd: true titles: - title: <light_purple>The End</light_purple> <green>unlocked!</green> '4-': xp: 8000.0 ```

Award players with different items, and unlock crafting and mining

```yaml levels: '1': xp: 0.0 items: IRON_INGOT: 1 levels: crafting: DIAMOND_HELMET: false DIAMOND_CHESTPLATE: false DIAMOND_LEGGINGS: false DIAMOND_BOOTS: false mining: DIAMOND_ORE: false placing: DIAMOND_ORE: false '2': xp: 2000.0 items: COPPER_INGOT: 1

crafting: is omitted here because by default all crafting is allowed

so, at level 2, players can craft diamond armor

mining: and placing: are omitted for the same reason

'3-4': xp: 4000.0 items:

Since '3-4' is a range, this awards a diamond for both levels 3 and 4

DIAMOND: 1 '5-': xp: 8000.0 items:

Since '5-' scales infinitely, this awards a netherite ingot every single

level from 5 onwards

NETHERITE_INGOT: 1 ```

How you can manipulate the world border for each level.

```yaml levels: '1': xp: 0.0

Sets the initial world border to have a radius of 128, centered at 0,0

worldBorder: radius: 128 center: x: 0 z: 0 '2': xp: 2000.0

Sets the radius of the world border for achieving level 2 at 256

worldBorder: radius: 256 '3': xp: 4000.0

Adds the radius of the world border for achieving level 3 to the previous

radius, making it 512

worldBorder: radiusStep: add: 256 '4-': xp: 8000.0

Multiplies the radius of the world border for achieving level 4 and onward

to the previous radius, making it 768, 1152, 1728, and so on

worldBorder: radiusStep: mult: 1.5 ```

Award permissions, groups, and currency for certain levels (requires Vault)

```yaml levels: '1': xp: 0.0 '2': xp: 2000.0

Assigns 'mypermission.one' to all players

permissions: - "mypermission.one"

Gives all players 50.0 currency

currency: add: 50.0 '3': xp: 4000.0

Assigns 'mypermission.two' to all players

permissions: - "mypermission.two"

Multiply all player's current currency by 2

currency: mult: 2.0 '4': xp: 8000.0

Adds all players to the 'mygroup' group

groups: - "mygroup" ```

Run commands on level up

```yaml levels: '1': xp: 0.0 '2': xp: 2000.0

Runs the 'time set day' command via the server console

commands: - "time set day" '3': xp: 4000.0

Runs the 'say You leveled up!' command via the server console

commands: - "say You leveled up!" ```

Require the server's players to collectively mine a certain amount of different tiers of ore to get to the next level.

```yaml levels: '1': xp: 0.0 xpWeights:

This makes it so no vanilla XP sources contribute world level XP

DEFAULT: 0.0 customXPSources: mineIgnoresSilkTouch: true # set this to prevent XP gains for mining with silk touch playerMine: COAL_ORE: 1 # Awards 1 XP for each coal ore mined '2': xp: 100.0 # requires 100 coal ore mined (defined in level 1) to get this level xpWeights: DEFAULT: 0.0 customXPSources: mineIgnoresSilkTouch: true playerMine: COPPER_ORE: 1 '3': xp: 200.0 # requires 200 copper ore mined (defined in level 2) to get this level xpWeights: DEFAULT: 0.0 customXPSources: mineIgnoresSilkTouch: true playerMine: IRON_ORE: 1 '4': xp: 300.0 # requires 300 iron ore mined (defined in level 3) to get this level xpWeights: DEFAULT: 0.0 customXPSources: mineIgnoresSilkTouch: true playerMine: DIAMOND_ORE: 1 '5': xp: 400.0 # requires 400 diamond ore mined (defined in level 4) to get this level ```

Specify levels based on world and share rewards

```yaml groups: WorldGroup: name: The Overworld

This group only applies to the world named "world"

worlds: - world

When this group levels up, it will share items and permission rewards to players in

the groups listed

rewardOtherGroups: - NetherGroup - EndGroup

Rewards players past rewards when they join the group for the first time

rewardNewPlayers: true

Rewards players past rewards when they join the group after being offline

rewardOffline: true levels: "1-": xp: 0.0 xpStep: add: 100.0

Every level, this will reward every player in any of the groups a

gold ingot, due to rewardOtherGroups

items: GOLD_INGOT: 1 NetherGroup: name: The Nether worlds: - world_nether rewardOtherGroups: - WorldGroup - EndGroup levels: "1-": xp: 0.0 xpStep: add: 100.0 EndGroup: name: The End worlds: - world_the_end rewardOtherGroups: - NetherGroup - WorldGroup levels: "1-": xp: 0.0 xpStep: add: 100.0 ```

Messages

The default messages file will be created for you, but it can also be found [here][messages]. If your text editor supports JSON/YAML schemas, you will also get configuration autocomplete suggestions and linting.

Messages support [MiniMessage][minimessage], and have the following custom replacements available:

| Replacement | Description | |-------------------------------------|-----------------------------------------------------------------| | `<level>` | Current world level | | `<relative_xp>` | Amount of current XP relative to the current level requirements | | `<level_xp>` | XP requirement to reach the next level | | `<total_xp>` | Absolute total current XP | | `<group_name>` | Name of the level group | | `<version>` | Plugin version | | `<modrinth>` | Plugin Modrinth URL | | `<click-modrinth></click-modrinth>` | Makes inner text clickable for the Modrinth URL |

Permissions

| Permission | Description | |-----------------------------|------------------------------------------------------------------------------------| | `worldlevels.earn.exempt` | Prohibit the player from gaining World Levels XP (by default, all players earn XP) | | `worldlevels.help` | Access to the `worldlevels help` command | | `worldlevels.reload` | Access to the `worldlevels reload` command | | `worldlevels.reset.all` | Access to the `worldlevels reset all` command | | `worldlevels.reset.rewards` | Access to the `worldlevels reset rewards` command | | `worldlevels.update` | Access to the `worldlevels update` command | | `worldlevels.version` | Access to the `worldlevels version` command | | `worldlevels.xp.add` | Access to the `worldlevels xp add` command | | `worldlevels.xp.get` | Access to the `worldlevels xp` command | | `worldlevels.xp.set` | Access to the `worldlevels xp set` command |

Commands

All the following are prefixed with `worldlevels`. For example, `worldlevels help`.

*Arguments in `<>` are required, arguments in `[]` are optional.*

| Command | Description | |--------------------------|-------------------------------------------------------------------------------------------------------| | `help` | Shows a list of commands | | `reload` | Reload the plugin configuration and save from file | | `xp` | Gets the current XP total and level | | `xp add <xp>` | Add the given amount of XP to the total, supports negatives | | `xp set <xp>` | Sets the total XP to the given amount | | `update` | Checks for plugin updates | | `version` | Prints the plugin version | | `reset all` | Resets total XP back to 0 and allows all players to regain rewards | | `reset rewards [player]` | Resets rewards for the given player (or all players), allowing them to regain rewards for past levels |

Metrics

Usage statistics

This plugin collects anonymized usage statistics via [bStats][bstats]. bStats is used by many plugins and provides useful statistics for development, but it can be disabled in the bStats `config.yml` for your server.

In addition to the default stats collected, World Levels also counts a few stats to better gauge how the plugin is used. These are:

- The number of level groups your server uses - The average number of worlds in each level group - The average number of levels in each level group

[config]: https://gitlab.com/ASTRELION/worldlevels/-/blob/main/src/main/resources/config.yml

[messages]: https://gitlab.com/ASTRELION/worldlevels/-/blob/main/src/main/resources/messages.yml

[minimessage]: https://docs.papermc.io/adventure/minimessage/

[schema]: https://gitlab.com/ASTRELION/worldlevels/-/raw/main/src/main/resources/config-schema.json

[vault]: https://github.com/milkbowl/Vault

[bstats]: https://bstats.org/

ADS