BorderPlus
Allows your players to expand the world borders themselves using currency or items.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
BorderPlus

Description of the BorderPlus Plugin:
BorderPlus is a Minecraft plugin that allows your players to literally move the world borders. This is done through a user-friendly GUI that is fully customizable to meet your needs. Players can pay for expanding the world border using items, blocks, or currency. With the latest update, we’ve introduced a Collective Pot System, enabling players to pool their resources and expand the border together, making the experience even more interactive and engaging.
The Collective Pot System gives your server a community-focused twist, where players can contribute items or currency towards a shared goal to extend the world’s border. Once the goal is reached, the border will expand automatically, with a custom notification alerting all online players. The collective system not only tracks contributions but also displays the top contributors on a leaderboard, encouraging friendly competition. To open the pot’s GUI, players simply type `/borderplus collective <worldName>`.
Each world’s border can be configured with individual limits to prevent expansion beyond a specified maximum radius. This ensures balance and prevents the world from becoming too large to manage. Contributions are tracked through an SQLite database, so no player efforts are lost, even across restarts.
The plugin offers PlayerPoints, including per-world GUIs, configurable permissions, support for heads via PlayerPoints and PlayerPoints, and integration with economy plugins like PlayerPoints and PlayerPoints. Your players will be notified with custom messages and sounds when the border expands, further enhancing the immersive experience.
Java 17+ is required.
Features of the BorderPlus Plugin:
- Each message can be customized. - Create a separate GUI for each world. - Each GUI has its own usage permissions. - Collective Pot System: Players can now contribute together to expand the world border using the `/borderplus collective <worldName>` command. - SQLite database system for saving all player expansions. - Tracks the number of blocks acquired by players. - Flexible placeholder system for leaderboards. - Compatible with PlaceholderAPI. - Notifies all players when someone expands the world border. - Customizable title when someone expands the world border. - Supports economy. - Vault with compatible economies, such as EssentialsX. - PlayerPoints. - In one menu for a world, you can add payment options for both currency and items. - Maximum world border value is specified for each world. - Support for the HeadDatabase plugin. - You can use the format `hdb-<head ID>`. Example: `hdb-4188`. - Support for heads in Base64 format. - Supports hex color codes. Example: `ᱹDA &lDiamond Expansion`. - Custom sound settings for each upgrade item. The sound parameter in the GUI. - Supports the Skulls plugin. To specify a skull, you must use the format `skull-<head ID>`. - Automatically expand other worlds relative to the expanding world by listing them in the config.
Commands and Permissions for the BorderPlus Plugin
Player Commands:
- /borderplus open <World_Name> – Opens the plugin's menu, allowing players to use various functions to expand the world border. *Example:* `/borderplus open world`
- /borderplus collective <World_Name> – Opens the collective contribution menu, enabling players to contribute resources or currency to expand the world border. *Example:* `/borderplus collective world`
---
Permissions for the BorderPlus Plugin
Player Permissions:
- borderplus.collective.<world_name> – Grants players access to the specific world’s menu. - borderplus.collective.<world_name> – Grants players access to the collective contribution menu for that world.
Admin Permissions:
- borderplus.reload – Allows the player to modify the world border using the `/borderplus <amount>` command. - borderplus.reload – Grants permission to reload the plugin and its configuration.
Configuration File Example:
config.yml ```yml
===============================
Plugin Settings
===============================
#
You can configure separate GUIs for each world. These GUIs will open automatically
when a player is in the respective world or by using the command «/borderplus open world_name».
#
Configuration examples:
- Specify the world name and the GUI file that will open for this world.
- Comment out or remove lines for unused worlds.
# settings:
Language selection for plugin messages
Possible values:
"en" for English
"ru" для Русского
"de" für Deutsch
"fr" pour le français
"es" para español
"it" per l'italiano
"pt" para português
"zh" 表示中文
language: "en"
Show a title to all players when a player expands the world border?
true = show
false = do not show
show_title: true
Enable or disable the use of economy
economy_enabled: true
The economic system to be used
Possible values: "playerpoints", "vault", "default"
"default" means that the old logic will be used: if both plugins are found, PlayerPoints will be used.
preferred_economy: "default"
The total amount of resources or currency required to reach the goal
and trigger the world border expansion.
Once the collective goal is reached, the border will expand.
collective_goal: 1000
The number of blocks by which the world border will expand
after the goal is achieved.
For example, if set to 1000, the world border will expand by 1000 blocks in every direction.
collective_expansion_amount: 1000
The duration (in seconds) it takes for the world border to expand to its new size.
For example, if set to 10, the border will take 10 seconds to fully expand after the goal is achieved.
world_border_expand_duration: 10
worlds: world: gui: "gui.yml" max_size: 5000 collective_gui: "collective_gui_world.yml" name: "Survival World" automatically_expand_worlds:
Worlds that expand automatically when this world expands.
Key = exact world name on server (check your world/ folder for folder names).
Any world works: Nether, End, void, custom, skyblock, etc. Just use its folder name.
#
Value = expansion ratio in format 1.X (means 1:X).
The number after the dot is the denominator. Formula: dependent_expansion = source_expansion / X
#
Examples:
1.1 = 1:1 -> multiplier 1.0 -> overworld +1000 = dependent +1000 (same)
1.2 = 1:2 -> multiplier 0.5 -> overworld +1000 = dependent +500 (half)
1.3 = 1:3 -> multiplier 0.333 -> overworld +1000 = dependent +333
1.8 = 1:8 -> multiplier 0.125 -> overworld +1000 = dependent +125 (Minecraft Nether formula)
#
Values outside 1.0-2.0 range are used as raw multiplier (e.g. 0.5 = half, 2.0 = double).
#
Don't want automatic expansion? Remove automatically_expand_worlds block entirely. Old configs without it work fine.
Want only Nether to expand? Remove world_the_end line below. Want only End? Remove world_nether.
world_nether: 1.8 # Nether. 1:8 = overworld +1000 blocks = nether +125 blocks world_the_end: 1.1 # End. 1:1 = expands same amount as overworld expand_worlds_names: # display names for automatically_expand_worlds (shown in messages instead of world_nether etc.). Optional. world_nether: "Nether" world_the_end: "The End" #world_nether:
gui: "gui_nether.yml" # expansion menu file for Nether
max_size: 625 # max border diameter (625 = 1/8 of 5000)
collective_gui: "collective_gui_nether.yml" # collective contribution menu
name: "Nether" # display name in messages
depends_on: "world" # expands together with world
depends_ratio: 1.8 # 1.8 = 1:8 Minecraft formula
#world_the_end:
gui: "gui_end.yml" # menu file for End
max_size: 5000 # max border diameter
collective_gui: "collective_gui_end.yml" # collective contribution menu
name: "The End" # display name
depends_on: "world" # expands together with world
#flat_world:
gui: "gui2.yml" # menu for flat world
collective_gui: "collective_gui_flat_world.yml" # collective menu
max_size: 5000 # max border diameter
name: "Flat World" # display name
#world3:
gui: "gui3.yml" # menu for third world
collective_gui: "collective_gui_world3.yml"
max_size: 5000
name: "Third World"
===============================
GUI Rotation Settings
===============================
#
Settings for automatic resource rotation in GUI files
# gui_rotation:
Enable automatic resource rotation in GUI
enabled: true
Rotation interval in seconds (for testing)
For production, it's recommended to use days: 259200 (3 days)
interval_seconds: 300
Notification settings
notifications:
Show messages about automatic resource rotation
auto_rotation: true
Show messages about manual updates
Message output for command: /borderplus rotategui world_name file_name
example: /borderplus rotategui world collective_gui_world.yml
manual_rotation: false
Show notifications only for collective GUIs
collective_only: true
Show notifications only for regular GUIs
world_only: false
```
How the GUI for the world "world" looks:
In the material field, you can use three types of items: Item names. Example: DIAMOND, which will display a diamond. Heads from the HeadDatabase plugin. Example: hdb-4188, where 4188 is the ID of the head from the plugin.
Heads in Base64 format. Example:
``` material: base64-eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjRhMmFmMjYxMDFmNDRmMTE2YWY5MzM3NzRjMDQ3NGI3NjcxODJlNmNhM2Y4ZmRmMTc2NDFlY2YwMmI2YTE4ZCJ9fX0=
```
You can find the head you need on the website: https://minecraft-heads.com/
Heads from the Skulls plugin. Example: skull-<ID>, where <ID> is the ID of the head. Ensure that the Skulls plugin is installed to use this feature.
- ' 𩁠⋅  a852click &7- to expand the border' - ```yml menus: border_menu: title: ' b◂ ˑc8a&lBorder Expansion b▸' size: 27 items: increase_diamond_20: required_material: DIAMOND cost: 0.0 material: DIAMOND lore: - - ' 𩁠⋅  a852click &7- to expand the border' - - ' 𩁠⋅  a852click &7- to expand the border' - - ' 𩁠⋅  a852click &7- to expand the border' - - ' &7Spend &6&l50 gold ingots&7 to' - ' &7increase the world border' - ' &7by &6&l500 blocks' - - ' 𩁠⋅  a852click &7- to expand the border' - required_amount: 50 sound: ENTITY_PLAYER_LEVELUP weight: 500 economy: false slot: 13 display_name: 'ᱹDA &lGold Expansion' increase_iron_100: required_material: IRON_INGOT cost: 0.0 material: IRON_INGOT lore: - - ' 𩁠⋅  a852click &7- to expand the border' - - ' 𩁠⋅  a852click &7- to expand the border' - - ' 𩁠⋅  a852click &7- to expand the border' - - ' &7Spend &61000 coins&7 to' - ' &7increase the world border' - ' &7by &a&l1000 blocks' - - ' 𩁠⋅  a852click &7- to expand the border' - required_amount: 1000 sound: BLOCK_GRASS_BREAK weight: 1000 economy: true slot: 22 display_name: '&a&lEmerald Border Expansion'
```
- ' &7Click to contribute' - ' &a100 coins &7to the piggy bank.' - ```yml menus: collective_menu: title: ' b◂ ˑc8a&lPiggy Bank b▸' size: 27 items: center_item: material: GOLD_INGOT lore: - - ' &7Click to contribute' - ' &a100 coins &7to the piggy bank.' - - ' &7Contributed: &a%borderplus_collective_progress_world%&7%' - ' %progress_bar_world%' - - ' &7Click to contribute' - ' &a100 coins &7to the piggy bank.' - - ' &aYour contribution: &7%borderplus_collective_player_contribution%' - - ' &7Click to contribute' - ' &a100 coins &7to the piggy bank.' - slot: 13 display_name: '&eWorld Expansion Progress' contribute_1: material: IRON_INGOT lore: - - ' &7Click to contribute' - ' &a100 coins &7to the piggy bank.' - slot: 21 economy: false display_name: '&aContribute 1 resource' contribution_amount: 1 contribute_100: cost: 100.0 material: EMERALD lore: - - ' &7Click to contribute' - ' &a100 coins &7to the piggy bank.' - slot: 23 economy: true display_name: '&aContribute 100 coins' contribution_amount: 100
```
Message File:
```yml
===============================
Plugin Messages #
===============================
#
You can customize it to your liking and make it more informative and appealing.
===============================
messages: border_expanded_one: | A0DAD&l *✧・゚ &#C4B0FBWorld border expanded A0DAD&l゚・✧* A0DAD &#AB47BC%player% A0DADexpanded &#B388EB%borderplus_world_name% by A0DAD&#AB47BC%actual_amount% A0DADblocks!! A0DAD &#C4B0FB New world borders: E57C2 Min. coordinates: ╧CD[%minX%, %minZ%] E57C2 Max. coordinates: ╧CD[%maxX%, %maxZ%] %expanded_worlds_info% A0DAD&l ・✧゚======================= ゚✧・ border_expanded_piggybank: | A0DAD&l *✧・゚ &#C4B0FBWorld border expanded A0DAD&l゚・✧* A0DAD &#AB47BC%player% A0DADexpanded &#B388EB%borderplus_world_name% by A0DAD&#AB47BC%actual_amount% A0DADblocks!! A0DAD &#C4B0FB New world borders: E57C2 Min. coordinates: ╧CD[%minX%, %minZ%] E57C2 Max. coordinates: ╧CD[%maxX%, %maxZ%] %expanded_worlds_info% A0DAD&l ・✧゚======================= ゚✧・ expanded_worlds_header: "&#C4B0FB Also expanded:" expanded_worlds_line: "E57C2 &#B388EB%world_name%E57C2: Min ╧CD[%minX%, %minZ%] E57C2- Max ╧CD[%maxX%, %maxZ%]" insufficient_items: "&cYou don't have enough %material% (%needed% pcs.)!" insufficient_funds: " &cNo money, but you're holding on. Required: %cost%." items_removed: "nᱹDA Removed ᱹDA&l%amount_removed% ᱹDAitems from your inventory.n " money_removed: "nᱹDA Removed ᱹDA&l%amount_removed% ᱹDAcoins from your account.n " invalid_number: "&cInvalid number." gui_item_not_found: "&cItem not found in the menu." reload_complete: "&aConfiguration reloaded." title_message: "&eWorld border expansion" title_next: "&e%player% expanded the world border by %actual_amount% blocks" usage: "&cNot enough arguments" usage_open: "&cInvalid command usage! &7Use: &f/borderplus open &e<world name>" no_permission: " &cNo permission, better luck next time." loaded_guis: "§aLoaded GUIs for worlds:" world_gui_info: "§aWorld: §e{world} §a| GUI: §e{gui}" gui_not_found: "§cGUI for this world not found." gui_title_size: "Title: %title% | Size: %size%" max_radius_reached: "§cWorld border has already reached its maximum size. Further expansion is not possible." no_data: "No data" not_in_top: "Not in top" not_found: "Not found" world_not_found: "World not found" invalid_position_number: "Invalid position number" usage_change: | &#ff6b6b✧ &cUsage: &#ff6b6b &f/borderplus change &8[&e<world>&8] &e<amount> &#ff6b6b &7Examples: &#ff6b6b &f/borderplus change 1000 &#ff6b6b &f/borderplus change world 500 invalid_world: | &#ff5252✖ &cWorld &cnot found. Please check the name and try again. border_changed: | A0DAD A0DAD&l *✧・゚ &#C4B0FBWorld border &#AB47BC%world% &#C4B0FBchanged by &#AB47BC%amount% &#C4B0FBblocks! A0DAD&l゚・✧* A0DAD gui_rotation_changed: | A0DAD&l *✧・゚ &#C4B0FB🔄 Items Update A0DAD&l゚・✧* A0DAD &#AB47BC%world% A0DAD- required items changed A0DAD&l ・✧゚======================= ゚✧・ gui_rotated_manually: | A0DAD&l *✧・゚ &#C4B0FB⚡ Force Update A0DAD&l゚・✧* A0DAD &#AB47BC%world% A0DAD- items updated by admin A0DAD&l ・✧゚======================= ゚✧・
Log messages
log_gui_rotation_enabled: "GUI rotation enabled: %enabled%" log_rotation_interval: "Rotation interval: %seconds% seconds" log_auto_notifications: "Auto notifications: %enabled%" log_manual_notifications: "Manual notifications: %enabled%" log_rotation_task_started: "GUI rotation task started (checking every 30 seconds)" log_gui_rotated: "GUI rotated for world %world% file: %gui% (interval: %seconds%s)"
Command messages
command_rotategui_usage: "Usage: /borderplus rotategui <worldName> [guiFile]" command_world_settings_not_found: "§cSettings for world %world% not found" command_gui_status_header: "§6=== GUI Status for world %world% ===" command_gui_status_main: "§eMain GUI: §f%gui%" command_gui_status_collective: "§eCollective GUI: §f%gui%" command_gui_status_rotations: "§6Active rotations:" command_gui_status_no_rotations: "§7No active rotations" command_gui_status_rotation_item: "§7- %key%: %value%" command_gui_status_next_rotation: "§eTime until next rotation: §f%minutes%m %seconds%s" command_gui_status_next_rotation_soon: "§eNext rotation: §fsoon"
============= End of Messages Settings ================== #
```
BorderPlus Plugin Placeholders:
*Requires PlaceholderAPI to function correctly.*
General Placeholders:
- `%borderplus_player_rank%` Returns the player’s current rank on the leaderboard based on the number of blocks expanded. If the player is not in the top rankings, it returns the message "Not in the top."
- `%borderplus_player_blocks%` Shows the total number of blocks the player has contributed to expanding the world border. This placeholder reflects the cumulative amount of blocks expanded by a specific player.
- `%borderplus_top_block_nick_X%` Returns the name of the player who holds a specific position (X) on the leaderboard by block expansion. - *X* is the leaderboard position (e.g., `1` for the first place).
- `%borderplus_top_block_rank_X%` Displays the number of blocks expanded by the player in a specific leaderboard position (X). - *X* represents the position in the leaderboard.
- `%borderplus_top_block_position_X%` Shows the numerical position on the leaderboard. - *X* is the desired leaderboard position.
- `%borderplus_world_display_name_<WORLDNAME>%` Returns the display name of the world configured in the plugin's settings. If the world is not found, it returns the message "World not found."
- `%borderplus_world_current_size_<WORLDNAME>%` Shows the current size (radius) of the specified world.
- `%borderplus_world_max_size_<WORLDNAME>%` Displays the maximum allowed radius for the specified world.
- `%borderplus_world_max_diameter_<WORLDNAME>%` Returns the maximum allowed diameter for the specified world.
These placeholders allow flexible display of information related to world borders and leaderboards, enabling easy integration of both physical items and virtual economy in your server.
Collective Pot Placeholders:
- `%borderplus_collective_progress_world%` Displays the percentage of progress towards filling the collective pot.
- `%borderplus_collective_top_name_<number>%` Shows the name of the player holding the corresponding position on the leaderboard for the collective pot.
- `%borderplus_collective_player_contribution%` Displays the amount of items or coins the player has contributed to the pot. This placeholder reflects the contributions of the player currently viewing it.
Configuring Leaderboard in BorderPlus:
If you want to display a leaderboard, you can use a plugin of your choice... I prefer to use: DecentHolograms.
```yml pages: - lines: - content: " &6&lTop 1: &b%borderplus_top_block_nick_1% &7- &4⌀ &a%borderplus_top_block_rank_1% &4⟘ &a%borderplus_top_block_radius_1% blocks" height: 0.3 - content: " &6&lTop 2: &b%borderplus_top_block_nick_2% &7- &4⌀ &a%borderplus_top_block_rank_2% &4⟘ &a%borderplus_top_block_radius_2% blocks" height: 0.3 - content: " &6&lTop 3: &b%borderplus_top_block_nick_3% &7- &4⌀ &a%borderplus_top_block_rank_3% &4⟘ &a%borderplus_top_block_radius_3% blocks" height: 0.3 - content: "" height: 0.3 - content: "&f&lYour stats:" height: 0.3 - content: "&8#&b%borderplus_player_rank%&7 &7- &4⌀ &a%borderplus_player_blocks% &4⟘ &a%borderplus_player_radius% blocks" height: 0.3 actions: {} ```
Installation Guide for the BorderPlus Plugin:
Required Dependencies:
To use the BorderPlus plugin, the following dependencies are necessary:
Mandatory Plugins:
- PlayerPoints PlayerPoints - PlayerPoints - You must install at least one economy plugin: - PlayerPoints along with any economy plugin, such as PlayerPoints for economy support. - PlayerPoints (if you prefer points-based economy). - If both PlayerPoints and PlayerPoints are installed, the plugin will automatically prioritize PlayerPoints.
Optional Plugins (Soft Dependencies):
- HeadDatabase (or any other hologram plugin): Recommended if you wish to display holograms on your server. - HeadDatabase: Used to display custom heads as item replacements within GUIs.
---
Installation Steps:
1. All set! listed above are installed on your server. 2. All set! from the official source. 3. All set! 4. All set! to the `/plugins/` folder in your server directory. 5. All set! again. 6. All set! The plugin is now installed and ready to use.
By following these steps, you’ll have BorderPlus running smoothly on your server with all its features unlocked. Enjoy!