Configuration
BlockProt Reloaded keeps its configuration in the plugin data folder:
| File |
Contents |
config.yml |
Main settings: language, locking behavior, entities, expiry, notifications, maintenance |
integrations.yml |
Centralized third-party integration settings with a master toggle per plugin |
blocks.yml |
Lockable block lists (empty by default; configure through the /bp lockables GUI or edit directly) |
worlds.yml |
Per-world block lists, active when per_worlds_config: true |
mysql/mysql.yml |
Optional MySQL/MariaDB index settings |
admins.yml |
Staff tier assignments (created when tiers are assigned) |
lang/ |
lang.yml plus 25 bundled translations |
All lockable lists default to empty; /bp recommended blocks applies a ready-made
starting selection. Most changes apply with /bp reload (which creates a safety backup
first) or automatically when files are edited externally.
config.yml
Language
| Key |
Default |
Notes |
language_file |
translations_en.yml |
Active language file |
fallback_string |
Unknown translation |
Text shown when a translation key is missing |
replace_translations |
true |
Automatically add missing keys to translation files on update |
Worlds
| Key |
Default |
Notes |
excluded_worlds |
[] |
Worlds where the plugin is entirely disabled |
per_worlds_config |
false |
Read separate per-world block configuration from worlds.yml |
Players and friends
| Key |
Default |
Notes |
bedrock_username_prefixes |
[".", "*", "_"] |
Prefixes used to detect Bedrock players through Geyser/Floodgate |
lock_on_place_by_default |
true |
Lock blocks automatically when a player places them |
public_is_friend_by_default |
false |
Treat public blocks as friends by default |
player_max_locked_block_count |
-1 |
Cap on locked blocks per player; -1 is unlimited |
lock_hint_cooldown_in_seconds |
10 |
Cooldown between lock hint messages |
friend_search_similarity |
0.5 |
Similarity threshold when searching friends by name (0.0 to 1.0) |
disable_friend_functionality |
false |
Globally disable the friends system |
Blocks and locking behavior
| Key |
Default |
Notes |
modern_family_blocks |
false |
Output format of blocks.yml when modified through /bp lockables (false flat names, true family expressions). Never reads or modifies the file on startup; auto-disables when all lockable lists are empty |
redstone_disallowed_by_default |
false |
Disallow redstone interaction with locked blocks by default |
simplified_hopper_logic |
false |
Simpler hopper checks, trading precision for performance |
protect_locked_blocks_from_explosions |
true |
Locked blocks survive explosions |
block_protected_block_piston_movement |
true |
Pistons cannot move locked blocks |
clear_protection_on_shulker_break |
false |
Clear a shulker box's protection when it is broken |
allow_break_protected_blocks |
false |
Allow breaking protected blocks you do not own (protection data stays) |
respect_spawn_protection |
true |
Respect vanilla spawn protection |
block_lock_effects |
true |
Particle effects when interacting with locked blocks |
block_lock_sounds |
true |
Sounds when interacting with locked blocks |
use_menus |
false |
Consolidate menus into /bp user and /bp admin; when false, each feature keeps its own subcommand |
use_dialogs |
false |
Native Paper Dialogs instead of inventories, anvils, and chat. Requires Paper 1.21.7 or later; auto-disabled with a warning when the dialog API is unavailable |
timed_access_max_duration_days |
90 |
Maximum duration of a timed access grant |
Entity protection
| Key |
Default |
Notes |
entity_protection.enabled |
false |
Protect animals, villagers, and other entities |
entity_protection.auto_protect_on_tame |
true |
Protect entities automatically when tamed |
entity_protection.menu_item |
STICK |
Item used to open the entity protection menu |
entity_protection.villager_locate_seconds |
6 |
Seconds of the villager locate indicator |
villager_workstation_protection.enabled |
true |
Protect workstations belonging to protected villagers |
villager_workstation_protection.radius |
2 |
Horizontal radius around the workstation |
villager_workstation_protection.vertical_radius |
1 |
Vertical radius around the workstation |
Expiry
Per-block manual expiry (setting an expiration time on one specific block) is planned
for a future release and is not available yet; world-level default expiry is configured
below.
| Key |
Default |
Notes |
world_expiry.enabled |
false |
Global expiry of inactive block protections |
world_expiry.check_interval_minutes |
10 |
Interval between expiration checks |
world_expiry.worlds |
{} |
World-specific expiry times |
Raid detection
| Key |
Default |
Notes |
raid_detection.enabled |
false |
Protect locked blocks and entities from raids |
Notifications
| Key |
Default |
Notes |
notify_op_of_updates |
false |
Notify operators when an update is available |
owner_notifications.enabled |
true |
Allow owners to receive notifications about their blocks |
owner_notifications.notify_on_open |
true |
Notify when someone opens the owner's block |
owner_notifications.notify_on_take |
true |
Notify when someone takes items from the owner's block |
owner_notifications.notify_on_place |
true |
Notify when someone places items in the owner's block |
Maintenance
| Key |
Default |
Notes |
inactivity_cleanup_days |
-1 |
Days of inactivity before a player's protections are removed; -1 disables it |
auto_reload_configs |
true |
Reload configuration when files change externally |
auto_reload_delay_seconds |
2 |
Quiet period (0 to 5) batching rapid saves into a single reload |
enable_session_log |
true |
Session logging |
enable_backups |
true |
Automatic database backups |
admin_tiers.enabled |
false |
When false, blockprot.user.admin grants all admin capabilities; when true, permissions split into t1, t2, t3, owner, and custom tiers |
Action bar
| Key |
Default |
Notes |
action_bar.duration_seconds |
6 |
Duration of temporary action bar alerts |
integrations.yml
All external integrations are configured from this single file; the old per-integration
files are no longer read and can be removed safely. Each integration has a master
enabled toggle.
| Key |
Default |
Notes |
worldguard.enabled |
true |
WorldGuard integration |
worldguard.enable_flag_functionality |
true |
Enables the allow-blockprot region flag; when off, WorldGuard is detected but never consulted |
lands.enabled |
true |
Lands integration |
lands.allow_protecting_containers_in_wilderness |
true |
Allow protecting containers in unclaimed wilderness |
lands.require_protect_for_friends_flag |
false |
Register the "Require 'Protect containers' for friends" role flag |
towny.enabled |
true |
Towny integration |
towny.cleanup_plots_after_unclaim |
true |
Clean protections when a plot is cleared, unclaimed, or ruined |
towny.restrict_access_to_residents |
false |
Restrict block access to town residents only |
towny.allow_mayor_to_see_block_info |
false |
Allow mayors to use the block info view |
towny.bypass_protection_in_ruined_towns |
true |
Allow bypassing protections in ruined towns |
claimchunk.enabled |
true |
ClaimChunk integration |
claimchunk.restrict_access_to_chunk_owner |
false |
Fully restrict access to the chunk owner (otherwise only locking is restricted) |
worldedit.enabled |
true |
WorldEdit integration |
worldedit.paste_autolock.enabled |
false |
Auto-lock protectable blocks after a //paste |
worldedit.paste_autolock.radius |
24 |
Radius around the paste origin to scan |
worldedit.paste_autolock.max_blocks_per_paste |
5000 |
Safety limit per paste |
worldedit.paste_autolock.delay_ticks |
20 |
Delay before the scan starts |
placeholderapi.enabled |
true |
PlaceholderAPI integration |
viaversion.enabled |
true |
ViaVersion client version detection |
residence.enabled |
true |
Residence integration |
residence.restrict_access_to_residence_owner |
false |
Fully restrict access to the residence owner |
griefprevention.enabled |
true |
GriefPrevention integration |
griefprevention.restrict_access_to_claim_owner |
false |
Fully restrict access to the claim owner |
geyser.enabled |
true |
Geyser integration: Bedrock player detection and Bedrock forms |
floodgate.enabled |
true |
Floodgate integration |
floodgate.auto_detect_prefix |
true |
Detect the Bedrock username prefix from Floodgate automatically |
blocks.yml
Lockable lists are empty by default. Entries accept flat material names (CHEST) or
family expressions such as [*-CHEST] (all chest variants), [*-FURNACE *-CHEST]
(combined families), or [*]. The file is never modified on startup or reload; only
GUI toggles write to it.
| Key |
Default |
Notes |
lockable_tile_entities |
[] |
Containers and workstations |
lockable_shulker_boxes |
[] |
Shulker box variants |
lockable_blocks |
[] |
General lockable blocks |
lockable_doors |
[] |
Doors and trapdoors |
lockable_entities |
[] |
Lockable entities |
protectable_entities |
[VILLAGER] |
Entities eligible for entity protection |
auto_drop_to_inventory.enabled |
true |
Return blocks to the inventory when unprotecting |
auto_drop_to_inventory.blocks |
[] |
Blocks affected by the auto-drop behavior |
worlds.yml
Active when config.yml has per_worlds_config: true. Each listed world takes
absolute, self-contained control of its lists: blocks.yml is never consulted for that
world once it has an entry, even for a category the entry leaves empty. Lists here always
use the compact family-expression syntax regardless of modern_family_blocks. A world
with enabled: false cannot have any locked blocks. Worlds auto-populate with empty
lists on first scan, and the per-world editor is reachable from /bp lockables (map
button) when the option is on.
mysql/mysql.yml
Protection data always lives in NBT/PDC on the blocks themselves; MySQL is an optional
index that mirrors block locations and trust lists into a shared database for searching
and auditing on large servers. Changes apply with /bp reload.
| Key |
Default |
Notes |
mysql.enabled |
false |
Mirror protection data into the MySQL index |
mysql.host |
127.0.0.1 |
Database host |
mysql.port |
3306 |
Database port |
mysql.database |
blockprot |
Database name |
mysql.username |
blockprot |
Database user |
mysql.password |
(empty) |
Database password |
mysql.jdbc_url |
(empty) |
Full JDBC URL; when set, host, port, and database are ignored |
mysql.pool.maximum_pool_size |
10 |
Maximum HikariCP connections |
mysql.pool.minimum_idle |
2 |
Minimum idle connections kept alive |
mysql.pool.connection_timeout_ms |
10000 |
Connection attempt timeout |
Language files
The lang/ folder ships lang.yml plus 25 translations: Arabic, Czech, German,
English, Spanish, Finnish, French, Hebrew, Hungarian, Indonesian, Italian, Japanese,
Korean, Dutch, Polish, Brazilian Portuguese, Romanian, Russian, Slovak, Swedish, Thai,
Turkish, Ukrainian, Simplified Chinese, and Traditional Chinese. English and Spanish are
the reference files; missing keys fall back to English, and replace_translations: true
keeps translated texts while adding new keys.