BlockProt Reloaded
1.4.1-hotfix.2An advanced Bukkit protection plugin for chests, furnaces, and more, built with a modern GUI and packed with powerful features and extended functionality.
1.4.1-hotfix.2latestBlockProt Reloaded 1.4.1-hotfix.23 weeks ago BlockProt Reloaded 1.4.1-hotfix.2 Release Notes
Note: As a targeted maintenance release, this hotfix does not include a release notes banner.
1.4.1-hotfix.2 fixes locked blocks losing their protection after a server restart. No configuration or data format changes.Fixed
- Hoppers drained locked chests after a restart ([#22](https://github.com/VictorGugug/BlockProt-Reloaded/issues/… the list of protected blocks was rebuilt at startup from a background thread and only from the statistics file, so locks that were not found stayed unprotected until they were locked again. A hopper under a locked chest could then pull its items. Protection is now verified against the block itself whenever a location is not yet known. - Same cause, other protections: after a restart, locked blocks were also exposed to pistons, explosions, fire, redstone, and block breaking by other players. They all use the same check and are fixed together. - Double chests: the second half of a locked double chest was never registered as protected. It is now verified like any other block.Verification
Before publication this build was tested in GitHub Actions ([run 37131912140](https://github.com/VictorGugug/BlockProt-Reloaded/actions… Every supported Minecraft version (1.21.7 - 26.3) booted on real Paper, Folia and Purpur servers wherever that software publishes a build (a declared version without a build of its own runs on its newest hotfix), and passed the plugin console diagnostics. On every version the test client supports, a two-player protection test also passed: the owner protects and opens a chest, and a second player can neither open nor break it.1.4.0-hotfixBlockProt Reloaded 1.4.0-hotfix3 weeks ago BlockProt Reloaded 1.4.0-hotfix Release Notes
Note: As a targeted maintenance release, this hotfix does not include a release notes banner.
1.4.0-hotfix fixes the staff tier permissions of 1.4.0 and brings the documentation in line with what the plugin does. Servers that keepadmin_tiers.enabled: false, the default, see no change in who can do what.Fixed
- Admin hub checks each button: withadmin_tiers.enabled: true, any staff tier could open/bp adminand use every button in it, including the configuration editor, world protection deletion, reload, and staff role management. Each button of the hub now checks the tier of its action, in the chest menu, the Paper dialog, and the Bedrock form. - Lock menu on other players' blocks: with admin tiers enabled, the Paper dialog and the Bedrock form gave every staff tier owner-level control over other players' blocks, while the chest menu did not. All three now require Tier 2, and Tier 2 can unlock those blocks as documented. - Tier 1 works as documented: Tier 1 now opens/bp info, gets a read-only lock menu on other players' blocks with the block info and the audit log, and can teleport from admin block lists. - Startup warning: the warning shown on Spigot and CraftBukkit no longer says support ends in 1.3.6. They are not supported.Documentation
- The [README](https://github.com/VictorGugug/BlockProt-Reloaded/blob/ma… the [admin guide](https://github.com/VictorGugug/BlockProt-Reloaded/blob/ma… the [player guide](https://github.com/VictorGugug/BlockProt-Reloaded/blob/ma… and the download page descriptions now describe commands, permissions, friend levels, staff tiers, and the optional MySQL index as the plugin implements them. - Timed access and the ImageFrame integration were listed as features but never existed. They are no longer mentioned.Testing
- Minecraft 26.1 is now tested on its newest server build, 26.1.2. Earlier test runs skipped it because no server software publishes a build named 26.1.Verification
Before publication this build was tested in GitHub Actions ([run 36803357003](https://github.com/VictorGugug/BlockProt-Reloaded/actions… Every supported Minecraft version (1.21.7 - 26.3) booted on real Paper, Folia and Purpur servers wherever that software publishes a build (a declared version without a build of its own runs on its newest hotfix), and passed the plugin console diagnostics. On every version the test client supports, a two-player protection test also passed: the owner protects and opens a chest, and a second player can neither open nor break it.1.4.0BlockProt Reloaded 1.4.03 weeks ago  and [BlockProt Legacy](https://modrinth.com/plugin/blockprot-legacy). The [version guide](../READ_MEs/VERSION_GUIDE.md) explains which one to download and how to move between them. - Tested On Real Servers: every supported Minecraft version of the legacy editions is booted on a real Paper server in GitHub Actions, with Folia and Purpur on every version that has a build. Each server passes the plugin console diagnostics and a two-player protection test: the owner protects and opens a chest, and a second player can neither open nor break it. A legacy edition is only published when that run passes. - Edition In The Console: the log prefix, the first start guide,/bp debugand the debug reports now show BlockProt Reloaded, BlockProt Reloaded Legacy or BlockProt Legacy instead of always saying BlockProt Reloaded. - Version Baseline Unchanged: BlockProt Reloaded keeps supporting Minecraft 1.21.7 through 26.3. Nothing changes for servers already on 1.3.9.Changelog
Changed
- The console prefix, the first start guide title,/bp debugand the debug report header use the name of the running edition.Status
- BEDev: pre-release builds of 1.4.0 are published on GitHub for testing before the stable release. - Maintenance: the maintainer is taking a break to focus on other projects. Issues and pull requests are welcome for any change and are reviewed as time allows.Verification
Before publication this build was tested in GitHub Actions ([run 36665040826](https://github.com/VictorGugug/BlockProt-Reloaded/actions… Every supported Minecraft version (1.21.7 - 26.3) booted on real Paper, Folia and Purpur servers wherever that software publishes a build, and passed the plugin console diagnostics. On every version the test client supports, a two-player protection test also passed: the owner protects and opens a chest, and a second player can neither open nor break it.1.3.9BlockProt Reloaded 1.3.93 weeks ago .Changelog
Changed
- Raised the minimum supported Minecraft version to 1.21.7. - Compiled the Paper dialog bridge into the main plugin and removed its separate source set and reflection loading. - Moved Previous, Next, and the main action of every paged chest menu to slots 48, 50, and 49, with Back or Close in slot 53. List menus now show 45 entries per page. - Updated Caffeine to 3.3.0, Apache Commons Lang to 3.20.0, and the Floodgate API to 2.2.5. - Removed the typed inventory view fallback warning and the chest boat type fallback, which only applied to versions older than 1.21.7. - The plugin JAR name now comes from thejarBaseNamebuild property instead of the git branch name, and the Hangar platform versions are read from the# Supported online ofgradle.properties. - Particle and enchantment constants that were renamed between Minecraft releases are resolved by name again, so the same code compiles against older Paper APIs. - The unsupported Minecraft message now names the edition to download, its Minecraft range, and the download and guide links.Fixed
- Fixed transferred blocks staying in the previous owner's statistics and increasing the global protected block count on every transfer. - Fixed transfers leaving the previous owner recorded in the database block index. - Fixed the statistics list hiding the Previous button on its last page. - Fixed the entity information menu drawing friends over its navigation row when an entity had more than 36 friends. - Fixed clicks on empty bottom-row slots of list menus selecting an entry from the page. - Fixed update checks offering the release of another edition: each edition now only sees its own tagged releases.Added
- Added a console diagnostics check that verifies statistics move correctly on ownership transfers. - Added the edition model:BlockProt Reloaded,BlockProt Reloaded LegacyandBlockProt Legacy, shown in/bp about, the boot banner and/bp debug. - Added the.editionmarker in the plugin data folder. When the edition or the Minecraft version changes between starts, the plugin makes a backup named with both editions and logs it, and it warns when the change is a downgrade. - Added a console diagnostics check that verifies the edition and its marker.Editions
BlockProt Reloaded covers Minecraft 1.21.7 and newer. BlockProt Reloaded Legacy (Minecraft 1.20.5 to 1.21.6) and BlockProt Legacy (Minecraft 1.18.2 to 1.20.4) are published separately and are announced with their first release. The [version guide](../READ_MEs/VERSION_GUIDE.md) explains which one to download and how to move between them.Status
- BEDev: pre-release builds of 1.3.9 are published on GitHub for testing before the stable release.1.3.8BlockProt Reloaded 1.3.83 weeks ago . - Added a post-publication check that confirms every release is live on each platform.Changed
- Merged the CI, publish, release, and maintenance workflows into a singleblockprot.ymlworkflow with an operation selector. - Raised the minimum supported Minecraft version to 1.21.1 andapi-versionto1.21. - Convertedtranslations_en.ymlandtranslations_es.ymlto MiniMessage; hex colors now render exactly instead of being approximated. - Removed the 1.20.x particle and enchantment fallbacks and version checks. - Updated every GitHub Action used by the workflow to its current major version. - Documentation now lists Paper, Purpur, and Folia as the supported server software; standalone Spigot is no longer listed.Fixed
- Fixed MiniMessage hex color tags not being recognized by the translation loader. - Fixed the debug report headers showing outdated screen counts. - Fixed the not-Paper startup warning still referring to the 1.3.6 end of Spigot support. - Fixed the Hangar publish step skipping its JDK and Gradle setup. - Fixed commit message validation failing on every pull request because of the merge commit GitHub creates for it.Status
- Stable: 1.3.8 was first published as the pre-release build1.3.8-BEDev.1for testing, and is now released as a stable version.1.3.7BlockProt Reloaded 1.3.73 weeks ago .Highlights
- Minecraft 26.3 Support: The Poplar wood set (doors, trapdoors, fence gates, signs, hanging signs, shelf, and chest boat) and the new Straw bed are protected out of the box through the existing block families. Verified on Paper 26.3. - Console Administration:/bp debug,/bp protdel, and/bp unlocknow work from the server console. Diagnostics run their block and entity checks at the world spawn when no player is online, so the full NBT and gameplay simulation suite no longer needs someone in-game. - Complete FoliaLib Scheduling: The remaining Bukkit scheduler calls were replaced with region-aware FoliaLib scheduling. Work that touches blocks now runs on the region that owns each block, and player-facing work runs on the player's own thread. - Unified World Protection Deletion: The chest GUI, the Paper dialog, and the console now share one deletion and undo engine that processes a world chunk by chunk on its owning region, spreads the work across ticks, and keeps an undo history per administrator.Changelog
Added
- Added Minecraft 26.3 to the supported version range, coveringPOPLAR_DOOR,POPLAR_TRAPDOOR,POPLAR_FENCE_GATE,POPLAR_SIGN,POPLAR_WALL_SIGN,POPLAR_HANGING_SIGN,POPLAR_WALL_HANGING_SIGN,POPLAR_SHELF,POPLAR_CHEST_BOAT, andSTRAW_BED. - Added console execution for/bp debug(plain/bp debugnow runs the suite), running NBT, entity, sub-handler, and player simulation checks at the main world spawn when no player is online. - Added/bp protdel <world> confirmand/bp protdel undofor console use. - Added console output for/bp unlock <player>, listing every block the player has locked. - Added translation keys for the new console messages and for previously hardcoded texts in English and Spanish.Changed
-/bp info <player>now checks block ownership on each block's owning region before listing it, and reports when the player owns no blocks in both chat and dialog mode. -/bp transferallnow transfers each block on its owning region and updates statistics once all transfers complete. - World protection deletion from the GUI, dialog, and console shares a single undo history; the GUI undo button restores the most recent deletion. - World protection deletion without the database index now scans loaded chunks using the configured block families instead of a fixed material list. - Player-only commands (/bp settings,/bp disablehints,/bp lockables,/bp stats) now reply with a clear message when run from the console instead of printing the command usage. - Updated the documented support range to Paper 1.20.5 through 26.3. - Entity protection settings (tamed animals and villagers) now open as a Paper dialog whenuse_dialogsis enabled, with the same toggles as the chest menu. - Reorganized dialog layouts: Block Settings shows the three protections on one row with Enable all and Disable all below, entity friend management uses the samePrev | Search | Nextrow as block friend management, and paged admin dialogs keep their navigation on its own row.Fixed
- Fixed entity protection settings showing No damage and No leash as enabled after Disable all, and toggling an individual option on an unprotected entity having no effect. Unprotected entities now show every option off, and enabling any option turns protection on with the default damage and leash protection. - Fixed the block lock dialog offering Transfer on unprotected blocks, which have no owner to transfer from. - Fixed the lock menu closing on Minecraft 26.3 when sneak-right-clicking a container with an empty main hand and a non-block item (such as a shield) in the off-hand. Since 26.3 the same click also fires an off-hand interaction, which opened the container on top of the menu; that interaction is now denied for the block only, so raising a shield still works and off-hand block placement is unaffected. - Fixed revoked admin tiers returning to offline staff on their next join;admins.ymlis now the only source used to resolve tiers and custom flags. - Fixed world protection deletion and its undo using the Bukkit scheduler, which fails on Folia. - Fixed the dialog-based world protection deletion querying the database on the main thread. - Fixed friend search history heads being written to the inventory from an asynchronous thread. - Fixed concurrent statistics updates from different Folia regions and the periodic save racing each other; all statistics access now shares one lock, and a failed save is retried on the next cycle. - Fixed the global protected block counter drifting down on Folia when stale entries were checked from a region that does not own the block. - Fixed theSemanticVersiondiagnostic failing on BEDev and hotfix builds. - Fixed console diagnostics reporting every inventory and dialog as uncovered. - Fixed hardcoded English texts in/bp tiers <player>, the admin reload dialog, the custom flags menu, and the menu error message. - Fixed the shadow JAR build warning about duplicatekotlin_modulemetadata.Repository and Governance
- The publish workflow has a version suffix selector: development builds are numbered automatically per release (BEDev.1,BEDev.2, ...), and choosing Stable clearsversionSuffixingradle.propertiesand commits it before tagging the release. The version input is now detected fromgradle.propertieswhen left blank. - The publish workflow detects development builds (BEDev,SNAPSHOT,exp) and publishes them to GitHub Releases only, as pre-releases, skipping Modrinth, CurseForge, and Hangar. - The publish workflow summary now includes a copy-ready Discord announcement (post title, tag, GitHub link, and platform links). - The publish workflow now detects existing CurseForge uploads through the public CFWidget API, preventing duplicate CurseForge files when a publication is re-run.Credits
- Eduardo Sanches ([@edusanches](https://github.com/edusanches)): found and diagnosed the Minecraft 26.3 off-hand interaction bug that closed the lock menu, traced it to the duplicate off-handPlayerInteractEvent, and proposed the fix in [Pull Request #9](https://github.com/VictorGugug/BlockProt-Reloaded/pull/9), together with the NBT-API 2.16.1 update required for 26.3.Status
- Stable: 1.3.7 was first published as the pre-release builds1.3.7-BEDev.1and1.3.7-BEDev.2for testing, and is now released as a stable version with no further changes.1.3.6BlockProt Reloaded 1.3.64 weeks ago  plus custom actions (admin_tiers.enabled), supporting standalone staff management via/bp tiers [setrole] <player> <role>and player NBT without LuckPerms, as well as in-game Owner execution of/bp recommended. - Comprehensive Player Simulation and Headless Server Diagnostics: Expanded/bp debug runwith Domain 10 (Player Simulation & Gameplay Verification) testing 10 realistic in-game player scenarios (block lock lifecycle, stranger access denial, friend management, redstone toggles, family expressions, hazard protection, entity protection, GUI state theft prevention, permission evaluation, and player settings persistence) with zero persistent side effects. Added console headless execution (/bp debug run [player]), allowing server operators to run diagnostics without an active player and automatically targeting online players when available. - Player Persistent NBT Reorganization: Cleanly categorized player preferences, friend entries, search history, and admin data into nested PDC compounds (BukkitValues/blockprot/...), with automatic legacy flat tag migration and deletion for clean viewing in NBTExplorer. - Action Bar Notification Persistence and Raid Alert Debouncing: RefinedTemporaryActionBarfor sustained client alerts with configurable duration (action_bar.duration_seconds: 6). OptimizedRaidDetectionListenerwithProtectedBlockCacheearly exit and 5-second owner debouncing to prevent alert spam during raids. - Expanded Entity Protection: Addedprotectable_entitiesinblocks.yml, enabling protection for non-tameable entities withVILLAGERconfigured as the currently supported and compatible entity type. - Modernized GitHub Actions CI, Automated Governance, and Dependency Audit: Replaced legacy, unmaintained workflows with modern GitHub Actions pipelines. Continuous Integration now resolves and displays the current plugin version and declared Minecraft version support range, executes comprehensive Gradle builds and unit test suites on pushes tomainand Pull Requests with automated test report archiving, and uploads compiled shadow JAR artifacts. Introduced a dynamic release cycle commit aggregator generating categorized changelogs from Git history andgradle.propertiesdirectly into Job Summaries and release bodies. Introduced a chained automated dependency and plugin integration version audit comparing 24 core libraries and integrations against upstream releases in a comparative status table. Consolidated repository diagnostics and project integrity validation (verify_project_integrity.py) into the primary CI pipeline, auditing YAML syntax, translation parity (904 keys across English and Spanish), license headers, and pure Java architectural boundaries. - Multi-Platform Distribution and Release Pre-Flight Inspection: Implemented automated distribution tooling (publish.yml) supporting Modrinth, CurseForge, and PaperMC Hangar via the officialio.papermc.hangar-publish-plugin:0.1.4. Release and publication workflows feature a 3-mode execution selector (Preview,Publish,Cancel) providing complete pre-flight inspection of binary SHA-256 checksums, platform tokens, and release notes prior to upload. - Server Platform and Upstream Build Auditing: Centralized supported, legacy, and unsupported platform declarations ingradle.properties, with automated real-time build queries against PaperMC Fill v3 API, PurpurMC API v2, and Folia builds to track stable and experimental upstream versions. - JUnit 6 Test Platform Alignment and Automated Test Suite: Resolved transitive version incompatibilities between MockBukkit 4.110.0 and JUnit platform dependencies viaorg.junit:junit-bom:6.0.3, ensuring a fully green automated test suite. - Native Bedrock Forms Integration (Geyser and Floodgate): Added full native Bedrock Forms (Cumulus) GUI integration for Bedrock players connecting via Geyser and Floodgate. Bedrock players receive touch-optimized forms for menus, block locking, settings, friend management, and admin configuration, with seamless switching back to classic inventory GUIs via/bp settings. - Experimental Minecraft 1.20.5+ Compatibility: Lowered descriptorapi-versionto1.20, allowing Minecraft 1.20.5 and 1.20.6 servers to load the plugin. While all core protection logic is theoretically compatible (~95-98%), this range is marked experimental; user feedback is appreciated to ensure full stability in subsequent releases. - Hot-Path Listener Optimizations: Redstone, piston movements, block breaks, block burns, and explosion listeners now perform instant early exits viaProtectedBlockCache, avoiding expensive NBT deserialization and state snapshots for unaffected blocks. - Folia and Paper Scheduler Unification: All background tasks, search routines, world expiry scanners, and async inventory skull loaders now run exclusively through FoliaLib with thread-safe entity region dispatching. - Bounded In-Memory Caching: Bounded Caffeine caches have replaced unbounded memory structures for player skin profile lookups and offline player candidate queries, preventing memory growth on long-running servers. - Expanded Bundled Languages: Added 5 new language translations (Romanian, Arabic, Ukrainian, Hebrew, and Swedish), bringing out-of-the-box support to 25 languages. - Standalone Spigot Deprecation: Formalized the deprecation of standalone un-forked Spigot in favor of Paper, Purpur, and Folia. - Repository Governance and Standardized Commit Convention: Added formal contribution guidelines (CONTRIBUTING.md), project scope definitions (SCOPE.md), and AI agent instructions (AGENTS.md), alongside a structured commit format (BPR:<branch>(<type>): <description>) to ensure consistent repository history and issue-first workflows.Changelog
Added
- Added configurable multi-tier administrative permissions (admin_tiers.enabled) with 4 distinct tiers (blockprot.user.admin.t1,blockprot.user.admin.t2,blockprot.user.admin.t3,blockprot.user.admin.owner) andblockprot.user.admin.custom. - Added standalone staff management via/bp tiers [setrole] <player> <role>andadmins.yml, providing persistent role storage without requiring LuckPerms, decoupled from/bp admin. - Added in-game/bp recommendedcommand execution for players holding theblockprot.user.admin.ownerpermission. - Addedaction_bar.duration_secondsconfiguration setting inconfig.yml(default 6 seconds). - Addedprotectable_entitiesconfiguration list inblocks.yml, withVILLAGERconfigured as the currently supported non-tameable entity type. - Added modern GitHub Actions Continuous Integration workflow (.github/workflows/ci.yml) executing full Gradle builds and automated test suites on pushes tomainand Pull Requests. - Added automated plugin version and Minecraft support target resolution step in.github/workflows/ci.yml, displaying declared support (1.20.5 - 26.2) and Java toolchain baseline in logs and Job Summaries. - Added chaineddependency-auditjob in.github/workflows/ci.ymlbacked by.github/scripts/audit_dependencies.py, auditing 10 plugin integrations (Towny, PlaceholderAPI, WorldGuard, LandsAPI, ClaimChunk, Residence, GriefPrevention, Floodgate, Cumulus, ViaVersion), 10 core dependencies, and 41.3.5BlockProt Reloaded 1.3.5Aug 28, 2026 , so the lockables system is fully reachable from both interfaces. On the dialog side, this release is mostly internal quality-of-life:AdminConfigDialogwas split from one 826-line class into one class per category, the duplicated back-button switches in 16 dialog screens were replaced by a single unified helper, a per-player back stack makes BlockLock sub-screens return to the exact block lock screen they came from, and the category selector dialog gained a Reload button for parity with the inventory selector. The one remaining hardcoded English string in the reload flow (the failure message) was moved to a translation key. The six pastel dialog colors and the color-code stripping helper, duplicated verbatim in 18 dialog classes, were centralized into one sharedBpDialogStylesclass. The dialog and inventory editors are interchangeable: same categories, same settings, same order, same labels, same config keys, same values, same click behavior. Both write through the same save path (setAndSave, the same suppress-then-reload invariant a manual YAML edit follows), and both validate numeric input with the same in-chat error message.Inventory Config Editor
/bp admin > Confignow routes per player preference: - On a Paper 1.21.7+ server withuse_dialogs: true, the inventory closes and the native dialog editor opens (unchanged behavior). - Everywhere else, the newAdminConfigInventoryopens: a 54-slot inventory with the same 9 categories as the dialog, a Reload button, a Back button, and the same pastel color palette and stained-glass separators used across the config UIs.Category selector layout
The selector is a 9x6 grid with one category button per row (slots 9-17), the Reload button at slot 22, and the Back button at slot 49. Each category button shows its translated name with a click-to-edit tooltip. | Slot | Category | Material | |---|---|---| | 9 | Language | Writable Book | | 10 | Worlds | Grass Block | | 11 | Players and friends | Player Head | | 12 | Blocks and locking behavior | Anvil | | 13 | Entity protection | Name Tag | | 14 | Expiry | Clock | | 15 | Raid detection | Crossbow | | 16 | Notifications | Bell | | 17 | Maintenance | Damaged Anvil | | 22 | Reload | Comparator |Settings per category
Each category inventory lists every setting of its dialog counterpart, in the same order, with the same titles, descriptions, and config keys: - Language:replace_translations,fallback_string, plus two sub-screens, "Enable or Disable Languages" (per-language toggles with a global Enable All/Disable All button) and "Select Active Language" (display name, completion percentage, active marker, click to set active). - Worlds:per_worlds_config,excluded_worlds(comma-separated world list via chat input). - Players and friends:lock_on_place_by_default,public_is_friend_by_default,player_max_locked_block_count,lock_hint_cooldown_in_seconds,friend_search_similarity,disable_friend_functionality. - Blocks and locking behavior:modern_family_blocks(flips the blocks.yml storage format on toggle),redstone_disallowed_by_default,simplified_hopper_logic,protect_locked_blocks_from_explosions,block_protected_block_piston_movement,clear_protection_on_shulker_break,allow_break_protected_blocks,respect_spawn_protection,block_lock_effects,block_lock_sounds,use_menus(dialog-only, marked),use_dialogs(dialog-only, marked),timed_access_max_duration_days. - Entity protection:entity_protection.enabled,entity_protection.auto_protect_on_tame,villager_workstation_protection.enabled,villager_workstation_protection.radius,villager_workstation_protection.vertical_radius,entity_protection.villager_locate_seconds,entity_protection.menu_item(validated against real material names). - Expiry:world_expiry.enabled,world_expiry.check_interval_minutes. - Raid detection:raid_detection.enabled. - Notifications:notify_op_of_updates,owner_notifications.enabled. - Maintenance:auto_reload_configs,auto_reload_delay_seconds(clamped 0-5),inactivity_cleanup_days,enable_session_log,enable_backups.How editing works
- Boolean settings are toggle items that apply immediately on click and re-render the screen; the current state is shown in the item name (the inventory equivalent of the dialog's on/off icon), and the item glows when active. - Value settings (numbers and text) open the chat input prompt (TextInput) when clicked, the inventory-mode equivalent of the dialog's native text field. The same parse validation runs as in the dialog editor: invalid numbers show thedialogs.admin_config.invalid_numbermessage and the value is not saved; the villager menu item is checked against actual material names before saving. - Every change goes throughDefaultConfig.setAndSave()or its dedicated setter, which saves to disk, suppresses file-watcher duplicate triggers, and schedules the programmatic reload after the configuredauto_reload_delay_seconds. - All titles, lore lines, tooltips, hints, and status messages come fromTranslationKey; the editor reuses the dialog editor's key set, so both UIs stay in sync from a single translation file. - All inventory category screens (AdminConfig*Inventory),UserMenuInventory, andAdminMenuInventoryfeature a unified, framed layout: dark gray stained-glass pane background borders, centered item slots across rows, and a standardized Back/Close button at slot 49 (bottom center).Per-World Lockables in the Dialog UI
The last inventory-only lockables screen now has its dialog equivalent. From/bp lockables, a new "Configure per world" button (only shown whileper_worlds_config: true, matching the legacy inventory behavior) opens: - `WorldLockableSelectionDialog`: lists every loaded world with its protection status (enabled/disabled), its protected-block count, and a hint when the world has its own config entry. Six worlds per page; clicking a world opens its detail screen. - `WorldLockableDetailDialog`: the per-world material list for that world, sorted by name, nine materials per page. Each row toggles that material inside the world's list inworlds.yml, exactly like the inventory detail screen: worlds without a list of their own start from the global lockable/entity settings, and the first toggle for that world writes a compact family expression (never a flat wall of material names). The toggle runs through the same suppress-then-reload path, logs to the activity log, and confirms in the action bar with the world name in the feedback. - Back navigation mirrors the inventory flow: detail goes back to the world selector, which goes back to the lockables dialog. A note on scope: the dialog detail screen is the same full replication of the lockables list that the inventory detail screen already was; it is not a shortcut that reuses the global lists in place of the per-world ones.Reload Button in the Dialog Category Selector
The dialog category selector previously had no Reload button while its inventory counterpart did. TheAdminConfigDialogcategories screen now includes a Relo1.3.4-hotfixBlockProt Reloaded 1.3.4-hotfixAug 8, 2026  that prevented the plugin from enabling, the second wave of Paper-only runtime crashes that appeared once the plugin could enable, twoNoSuchMethodErrorcrashes when opening the block info panel and the sign prompt, menu buttons that printedusage: /bp <user/admin>instead of doing anything, and back buttons that closed the whole menu instead of returning to the previous window. The hotfix also improves friend search across blocks, pets, and dialogs, and removes the anvil GUI in favor of chat input everywhere.Note: This hotfix does not claim to make every feature work correctly on Spigot or any other non-Paper software. It fixes what was detected during a test run on the software this server environment targets (Paper), plus the Spigot failures that same test surfaced. That test was a one-time, spontaneous check; I normally only test on Paper, the main target. Spigot 26.2 was the only software that errored, and lower versions (26.2 down to 1.21.1) were not tested, so errors there are possible. I always recommend the latest, most up-to-date version. If you run into an error, please open a GitHub issue so I can resolve it.
Spigot Startup Crash
On Spigot 26.2 the plugin could not enable: it threwNoClassDefFoundError: net/kyori/adventure/text/Componentwith aClassNotFoundExceptionfor the same class, because Spigot and vanilla CraftBukkit do not ship Kyori Adventure and do not expose Adventure-basedsendMessage,sendActionBar, orItemMeta#displayNamemethods. Fixed with aComponentMessagesruntime wrapper that checks via reflection whether the server exposes the Adventure methods. On Paper, Folia, and Purpur it calls the native APIs; on Spigot and CraftBukkit it serializes to legacy colour-coded strings and calls the plain-string equivalents. The build also shades the required Kyori Adventure transitive dependencies so those environments can resolve the classes at runtime.Runtime Crashes Found After the Startup Fix
With the startup crash fixed, a second wave of Paper-only API calls crashed on Spigot as they were used. All of the following are now guarded with a Spigot-compatible fallback: - Block events (place, break, burn, redstone) broke because a Paper-onlyNamespacedKeyaccessor was unguarded. - Player join broke because a Paper-only profile-creation overload was unguarded. - Every inventory GUI broke because a Paper-only inventory-creation overload was unguarded. - Block locking, friend management, and renaming (chests, doors, beds, other tile-entity blocks) broke because Paper-only block-state accessors were unguarded. - Skull rendering in friends lists, block/entity info, and the audit log used a Paper-only profile type; these now use the standard Bukkit profile API. - Direct action-bar calls across dialogs, inventories, listeners, and commands crashed on Spigot; they now all go throughComponentMessages.Inventory Menus & Navigation
- Menu buttons now run their actions. Buttons that previously executed/blockprotsubcommands throughperformCommand(which printsusage: /bp <user/admin>and does nothing in menu mode) now execute their action directly: transfer (/bp transferall), About, Config, Auto Drop, and Debug. - Back buttons restore the exact window you came from. The menu system now keeps an origin stack instead of a single overwritten origin: every menu pushes its own origin before opening a child menu, andgoBackpops it, so the admin menu -> lockables -> auto drop/worlds chain, the stats/info lists, settings -> friends, and the block lock submenus all walk back level by level.Update Notifications & Version Channels
- Version ranking now distinguishes three tiers: experimental pre-releases (BEDev/snapshot), clean releases, and post-release corrections (hotfix/patch/fix). The old alpha/beta/rc/dev special-casing is gone. - Channel-aware update messages. Stable servers only see stable updates; hotfix messages name the release they fix; BEDev messages state that the build is experimental and not a stable version. - Boot banner announces which channel the server runs, and experimental builds create a safety backup on startup when backups are enabled.Server Software Detection
- On startup the plugin detects the real server software and warns when it is not Paper or a Paper fork (Spigot, CraftBukkit, hybrids, unknown). The warning is non-fatal; the plugin still loads with its fallbacks. Pure CraftBukkit remains hard-blocked. - Support for Spigot and Bukkit is planned to end with 1.3.6, when a separate BlockProt Reloaded Legacy project begins.Friend Search, Chat Input and the Discord Case
- Case-insensitive search. The fuzzy name comparison lowercases both strings, so a correctly-typed but differently-cased name is found. - Shared player pool (`PlayerLookup`). Merges every online player with the offline cache, so an online player is always found and a known offline player still is. All friend-add entry points (block search, pet/entity search, both dialog equivalents) and the transfer-target search use this same pool. - Pets/entities now get search results. They open the same search-results screen as block friends instead of silently auto-adding the best match, and search failures report a real error message instead of a misleading "player not found". - Chat input everywhere, no more anvil GUI. Every free-text prompt (friend search, transfer search, block/entity naming, admin config values, world-expiry duration) now uses chat input on Paper and Spigot alike. Block/entity renaming uses its own label (e.g. "Set block name") instead of the generic player-search wording, and the prompt no longer tells players to press Tab. - The Discord case. A case about friend search not finding anyone was reported via Discord; the issue was that user's other plugins, not this one. Improvements were applied anyway.Raid Detection Off by Default
raid_detection.enablednow defaults tofalse, matchingentity_protection.enabled. Both features remain fully working; administrators opt in explicitly inconfig.yml.Visible Download Link in Update Notifications
The update notification shown to operators now also prints the download link as visible text in chat, not only as a clickable component: the message ends with a| Download:prefix and the release URL itself, underlined in white and still clickable (hover tooltip: "Click to visit the GitHub Releases page"). This guarantees the notification always satisfies the standing requirement: it states that a new version is available, names which version, and gives the download link, no matter where the player clicks.Boot Banner Update Status
The startup checklist now ends with anUpdate Checkline that shows the real check result instead of a separate console warning: green (● Up to date (1.3.4)) when the installed version is the latest release, red/coral (● New version available: 1.3.5) with the download URL indented below when a newer version exists, and gold when the installed version is ahead of the latest public release. The line waits up to 3 seconds for the asynchronous check and, if it is still in flight, falls back to a synchronous request (with its own timeouts) so a slow GitHub API still yields a real result;Not checkedonly appears when the API is genuinely unreachable. The in-game update dialog now shows the release URL as visible text next to the underlined version (Download: v1.3.5 | https://github.com/...), still clickable. All new strings are translatable (EN/ES).Hotfix-ahead update message
- **Running a hotfix ahead of the la1.3.4BlockProt Reloaded 1.3.4Aug 3, 2026 , behavior is unchanged from previous versions: legacy inventories work on any server software. An in-game admin config editor (AdminConfigDialog) mirrorsconfig.ymlsection by section, letting admins modify settings directly. The lockables menu was reworked with a sub-dialog for individual material toggling. A new language management system adds language enable/disable vialang/lang.yml, an in-game language selector cycling through the 15 registered languages with completion percentages, and automatic translation completion tracking. Config.yml had minor cleanup (removed a deprecated leftover config block, added theuse_dialogskey), and the plugin log file now recovers automatically if it's deleted or truncated while the server is running.Note: The Residence/GriefPrevention/ClaimChunk integrations, the centralized
integrations.yml, the PaperPlayerProfileskin-resolution migration, and the per-block protection expiry removal were not part of the 1.3.4 commit range: they were already present as of 1.3.3 and are documented in the 1.3.3 release notes. They have been removed from this document to avoid re-claiming pre-existing work as new.Community Feedback Fixes
A tester gave feedback on the dialog system shortly after it landed. Three items came out of that: - `/bp user` now takes priority over `/bp admin` when/blockprotis run with no arguments, matching the convention used by other plugins. Admins still reach the admin menu explicitly via/bp admin. - The Statistics tab in `/bp user` is now Placements. It shows your locked block count against the server limit (Your Protected Blocks: 12/24, or just the count if the server has no limit set), lists your blocks grouped by material with world and coordinates, and dropped the global server-statistics toggle entirely, since that never belonged on a personal stats screen. Clicking a block opens it directly for editing instead of only offering a teleport. The admin-side Statistics screen (Admin Menu > Stats) is unchanged and still has both the player and global-server pages. - Admin config editor buttons now show a short, readable name instead of the rawconfig.ymlkey (for examplelock_hint_cooldown_in_secondsnow reads "Lock Hint Cooldown"). The longer description and the raw key are still shown in the tooltip for anyone who wants the technical detail. The sign-closing-instantly bug reported in the same feedback was already fixed earlier in this cycle by the native dialog text input described below.Follow-up bug found during that same testing pass
- (bug) Opening any container could throw `RuntimeException: Given block X is not a lockable block/tile entity` and spam the console, most visible withper_worlds_config: trueon a world whose per-world lists are still empty (the default right after/bp lockablesauto-scans a new world). Several listeners (InventoryEventListener,BlockEventListener,PistonEventListener,RedstoneEventListener) checked whether a block was lockable using the config-wide check, which ignoresper_worlds_config, whileBlockNBTHandleralways validates per-world. When the two disagreed, the handler threw. All of those checks now use the per-world-aware check so they agree withBlockNBTHandler. - The Placements block list showed a "click to teleport" hint even though clicking actually opened the block's edit dialog whenever the block was still lockable (teleport only happens as a fallback once a block drops out of the lockable list). The hint now matches whichever action a click will actually perform.Lockables toggle and auto-reload timing fixes
- (bug) Disabling specific materials inside a mostly-active lockable category could silently re-enable them.BlockFamilyParser.toFamilyExpression()could write a malformed expression like[* CHEST COPPER_CHEST ...]: a global*(meaning "everything") followed by plain material names that do nothing to exclude anything from that*. The next time that expression was parsed, every material in the family came back active. Fixed so the compact writer never mixes a global*with bare inclusion names; it always falls back to the explicit exclusion form (*-TAG -missing...) in that case. - (bug) Auto-reload after a lockables change sometimes fired much later than `auto_reload_delay_seconds`, or an extra reload showed up out of nowhere. The file watcher ignored its own writes for a fixed 3-second window regardless of the configured delay. With a higher delay, several rapid toggles, or slow OS-level file-watch delivery, that window could expire before the write's own change event arrived, so the watcher mistook its own write for an external one and queued a second reload on top of the first. The self-write suppression window is nowmax(3s, auto_reload_delay_seconds + 2s)instead of a fixed 3s. - (bug) The hover tooltip on an individual material button in the lockables dialog read "Click to enable all." / "Click to disable all.", even though the button only toggled that one material. Individual material buttons now use newdialogs.click_enable_single/dialogs.click_disable_singletranslation keys ("Click to enable." / "Click to disable."); the existingdialogs.click_enable/dialogs.click_disable("...all.") keys are unchanged and still used by the category-level and enable-all/disable-all buttons, where "all" is accurate. - The lockables category indicator (dialog) and the "select all" indicator (inventory) now share a third, orange state for a partially-active category, instead of only showing green/red (dialog) or green/red/gold (inventory). Gold was replaced by the same orange used in the dialog for consistency. Orange is now reserved for counts sitting near the midpoint (a 40-60% band, widened to 30-70% for categories of 5 or fewer materials); other partial states show the normal mint/green color instead of orange for every partial count. - `/bp recommended` is split into two independent console subcommands./bp recommended blockswrites onlyblocks.yml(lockable lists, auto-drop), while/bp recommended configwrites onlyconfig.yml(enablesmodern_family_blocks,use_menus, anduse_dialogs, the recommended settings that are not on by default)./bp recommended allapplies both halves in sequence. Each half applies only once: arecommended_blocks_appliedflag is stored insideblocks.ymland arecommended_config_appliedflag inconfig.yml; re-running an already-applied half is a no-op that logsrecommended_already_appliedinstead of silently overwriting the file again (which previously discarded any manual edits made since). Passingforceas the third argument (/bp recommended blocks force//bp recommended config force//bp recommended all force) bypasses the guard and re-applies that half. - Auto Drop to Inventory is now reachable from the Dialog UI, not just the legacy inventory.LockablesDialoggained an Auto Drop button leading toAutoDropDialog(per-family status list) andAutoDropFamilyDialog(per-material toggles within a family, 9 per page), mirroringAutoDropInventory/AutoDropFamilyInventory. Per-world lockables selection in the Dialog UI was intentionally left out of this pass (seedocs/ZYZ/FOR_LATER.md, planned for 1.3.5) since it requires porting a full per-world config screen, not a simple list.Pape
1.3.3BlockProt Reloaded 1.3.3Jul 9, 2026 . Alongside that, a community translation system is planned: a dedicated languages section on the project's Discord (https://discord.gg/RRcjuMr9Jd), where contributors can submit translation updates and corrections for review instead of relying on a single pass to keep every language current.1.3.3 is finally out
After a long development cycle, I'm officially releasing 1.3.3. This is the biggest update this fork has shipped: five new plugin integrations (WorldGuard, Lands, Towny, ClaimChunk, PlaceholderAPI), item frame and storage vehicle protection, villager workstation protection, raid detection, a rebuilt lockables GUI, and a long list of inherited and fork-specific bug fixes. Everything below this point describes what actually shipped.1.3.3
Breaking changes (0.1% of servers affected)
- All lockable lists are empty by default. On a fresh install,blocks.ymlstarts with[]for every list, includinglockable_entities. The admin configures lockable blocks via/bp lockablesin-game, by editingblocks.ymldirectly, or by running the/bp recommendedconsole command to populate a sensible default set. Existing servers upgrading are unaffected: theirblocks.ymlis never overwritten. - Bidirectional blocks.yml startup conversion re-added with guard. Themodern_family_blocksflag now auto-converts blocks.yml format on/bp reload(viaconvertBlocksFormatIfNeeded()), but only when the file format actually mismatches the flag. This conversion preserves all material selections, only the format changes. On the first reload after changing the flag, the file is converted; subsequent reloads are no-ops. Manual edits are preserved (materials are never dropped, only reformatted). The infinite-reload-loop bug is prevented bysuppressNext()before every save. - Config file writes only when dirty.cleanLegacyConfigKeys()andmergeMissingConfigKeys()now only write to disk when a change was actually made. This stops the infinite auto-reload loop caused by the plugin overwriting its own config files. - File watcher console spam reduced. The watcher logs one short line to the console ("Configuration change detected; reloading...") and one line to the session log per change. Previously it logged two console lines. World scan messages only print when worlds are actually added or patched. - Startup banner with ASCII art. BlockProt prints an ASCII "BPR" logo on startup in a light coffee color. The plugin name, version line, and boot status lines that follow print uncolored. - `/bp recommended` console command. Generates a sensible default blocks.yml. Console-only. See "First-start console guide" below for how new admins are pointed to it. - Per-world lockable GUI. Whenper_worlds_config: true, the lockables GUI shows a MAP button (slot 48) that opens a world selection inventory. Each world shows its enabled/disabled status and protected block count. Click a world to configure its individual lockable lists. - Auto-disable modern_family_blocks. When all lockable lists become empty via GUI toggling,modern_family_blocksauto-sets tofalsein config.yml. - Translation keys added:worlds.status,worlds.protected_count,worlds.no_worlds,worlds.world_config_hint,worlds.per_world_config,worlds.worlds,worlds.configured.Additions
Fixed menu layout for all block and entity types
Auto-drop to inventory configuration GUI
A new GUI to configureauto_drop_to_inventory.blocksis accessible from the/bp lockablesinventory (DROPPER item at slot 46). The page shows each family (Tile Entities, Shulker Boxes, Blocks, Doors, Entities) with a representative icon and its active/inactive/partial status. - Right-click a family toggles all its members at once (enables or disables auto-drop for the entire family). - Left-click opens a paged sub-menu listing every material in that family. Each material can be toggled individually. - The back button returns to the lockables GUI. New methods inDefaultConfig:toggleAutoDropMaterial(),toggleAutoDropFamily(),representativeMaterialForFamily(). All toggles persist toblocks.ymlon disk.Lockables GUI blocks no longer move on toggle
The active-status sort was removed. Blocks stay in their family section sorted by name only. Toggling a block on or off no longer changes its position in the inventory.Fixed crash on non-item materials in auto-drop sub-menu
Materials that cannot be held in an ItemStack (LAVA_CAULDRON, WATER_CAULDRON, POWDER_SNOW_CAULDRON, wall-mounted signs) are resolved to display equivalents before creating ItemStacks. The sub-menu no longer crashes when opening the Blocks family. The Block Lock menu previously placed its buttons using a counter that incremented for each button actually shown. When a button did not apply to the current block (for example, no Redstone button on a workstation), every button after it shifted one slot to the left. This meant the same menu looked different depending on which block type opened it, and the bottom-row buttons (Inspect, Audit Log, Paste, Copy, Info) ended up in inconsistent slots between block types. Every button now has one fixed slot, used by every block and entity type. A button that does not apply to the current type simply leaves its slot empty; the other buttons never move. Fixed slots, top row: | Slot | Item | Shown for | |---|---|---| | 0 | Block icon | Always | | 1 | Redstone | Storage and traversal blocks | | 2 | Player Head | Always, unless friend functionality is disabled | | 3 | Name Tag | Always | | 4 | Ender Pearl | Always | | 5 | Emerald | Workstation blocks only | Fixed slots, bottom row: | Slot | Item | Shown for | |---|---|---| | 9 | Spyglass | Storage blocks with an inventory, owner or admin | | 13 | Clock | Owner or admin, audit logger active | | 14 | Knowledge Book | Manager role, clipboard has data | | 15 | Paper | Manager role | | 16 | Compass | Manager role or admin | | 17 | Barrier | Always | The entity menu (fillForEntity) was fixed the same way: Name Tag stays at slot 0, Redstone and Ender Pearl only appear for storage vehicles (chest boats, storage/hopper minecarts) and always sit at slots 1 and 4, Player Head always sits at slot 2, Spyglass and Clock sit at 9 and 10 for storage vehicles, and Compass sits at 13.Entity protection rename
The protection system covering tamed animals (wolves, cats, parrots, horses, llamas) was renamed end-to-end from "pet protection" to "entity protection" across class names, package names, config keys, NBT persistent-data keys, and method names. This is purely a naming and organization change; behavior is identical to the previous pet protect1.3.2BlockProt Reloaded 1.3.2Jun 4, 2026 Added the option to remove ALL protections from a world individually1.3.1BlockProt Reloaded 1.3.1May 31, 2026 Release from 1.3.0-SNAPSHOT-2 New: /bp unlock GUI The old coordinate-based /bp unlock [world] command has been replaced with a full paginated GUI. Running /bp unlock opens a six-row inventory listing every block currently protected by the target player, using the real block icon for each entry. Left-click any block to inspect its inventory contents in read-only mode — no items can be taken or placed. Right-click any block to remove its protection entirely; an action-bar message confirms the block name, the owner it was removed from, and the coordinates. Supports pagination and works for offline players. Requires blockprot.user.admin. New: Duration Parser Timed access and protection expiry now share a single DurationParser that accepts human-readable duration strings with combined units. Accepted suffixes: s (seconds), m (minutes), h (hours), d (days), mo / mon (months), y (years). Units can be freely combined: 1d12h30m, 2mo3d, 1y6mo. All max-per-unit limits are enforced and configurable. Previously the timed-access parser was a separate inline implementation with no support for combined units. Fix: Inventory title and item name color injection All GUI menu titles and item display names are now rendered as plain text, letting Minecraft apply its default white color. Previously LegacyComponentSerializer was used to set display names, which caused section-sign color codes embedded in translation strings or hardcoded prefixes to produce colored text — most visibly the §4Admin §f prefix on the /bp unlock inventory title shown in the screenshot below. Every inventory class has been updated: BlockProtInventory now strips §x and &x codes before passing any string to Component.text(). Lore lines and chat/action-bar messages are unaffected and still support legacy color codes from translation files. Fix: InventoryConstants.singleLine duplicate removed singleLine was a duplicate constant of lineLength (both equal to 9). All seven call sites across BlockInfoInventory, FriendDetailInventory, FriendManageInventory, and UserSettingsInventory have been migrated to lineLength and the duplicate constant removed. Fix: Unused PlayerTextures import removed from BlockProtInventory Fix: Dead actionIcon() method removed from AuditInventory The method was only used to prepend colored §cX / §aO / §e- / §2+ symbols to audit entry display names. With the color injection fix, display names are now plain text and the symbol-based prefix was replaced by the already-existing actionLabel() string. The dead method has been removed. Fix: Inline color codes removed from TimedAccessInventory, AuditInventory, and AdminMenuInventory Hardcoded §a / §c / §e / §7 / §8 / §f / §6 prefixes were removed from item labels, audit entry display names, lore lines, and the integrations action-bar output. Text that had no meaningful color intent is now plain; text in lore that was intentionally styled continues to use the legacy serializer from the translation file. Documentation: Command and permission audit A full cross-reference of all command source files against plugin.yml and the README was performed. Corrections applied: /bp timed is documented as a chat-input flow rather than a tab-completable CLI subcommand (it was never registered in BlockProtCommand's CLI map); /bp friends bare invocation was undocumented and has been added; /bp reload, /bp update, and /bp integrations require op, not blockprot.user.admin — corrected in the README; /bp about and /bp help are CLI-only and are hidden in GUI mode — the incorrect "Universal Commands" section has been removed; the permissions table now distinguishes between permissions declared in plugin.yml (with defaults) and runtime-only nodes (blockprot.debug, blockprot.lockmax, blockprot.locklimit.*) that must be granted manually. Documentation: README User Menu table corrected The User Menu slot table now reflects the actual UserMenuInventory layout: four items at slots 11–14 (Settings, Friends, Statistics, About). The previous table listed six items across slots 10–16 including Transfer and Timed Access hints that are not present in the current implementation.1.3.0-SNAPSHOT-2BlockProt Reloaded 1.3.0-SNAPSHOT-2May 21, 2026 Here is the release notes for Snapshot 2. The changes were mentioned in the last version. Snapshot 3 is expected sometime this week, but it might be delayed because I have exams to get into high school, so please be patient. I appreciate your support, and if you find any bugs, please report them in this repository. Have a nice evening.1.3.0-SNAPSHOT-1BlockProt Reloaded 1.3.0-SNAPSHOT-1May 21, 2026 Snapshot Release Notes | Development Cycle Consolidation and Core Refactoring
This major snapshot release marks the official deployment and architectural consolidation of development builds Dev 3, Dev 4, and Dev 5 into a single synchronized build.Versioning Methodology and Release Pipeline
To establish a more rigorous and predictable development cycle, the project infrastructure is transitioning to an automated version tracking pipeline. Moving forward, version sequences will follow a strict milestone rule: upon the compilation and completion of the fifth iterative development build (Dev 5), the release system will automatically transition and generate a new major snapshot release branch.[!IMPORTANT]
Example Progression: Version
---1.2.9-dev-5will automatically trigger the generation of the subsequent major release,1.3.0-SNAPSHOT-1. This structural framework has been introduced to significantly improve long-term version management, dependency tracking, and update deployment predictability. This specific versioning pipeline is currently provisional and remains subject to modification as the continuous integration requirements evolve.Technical Performance and Architectural Optimization
Console Streamlining and Runtime Efficiency:* The core architecture has undergone extensive optimization to enhance processing speeds and overall server stability. A key objective of this refactoring was the drastic reduction of continuous console output logging. By suppressing redundant tracking data and routine informational messages, the build prevents unnecessary disk write overhead, maximizes console readability for administrators, and ensures that critical system errors or alerts are highly visible without log spam. Hierarchical Configuration Documentation:* Comprehensive administrative documentation has been embedded directly into the project ecosystem. This asset provides a highly organized structural framework for configuration files. It outlines exactly how properties, values, and localized parameters should be formatted, allowing server operators to maintain organized file directories and deploy custom local alterations with minimal risk of formatting errors. ---Security and Protection Infrastructure
Pet Protection Subsystem (Disabled by Default):* A specialized protection mechanism has been engineered to preserve the safety and security of player-owned pets and tamed entities. When activated, this subsystem completely immunizes protected entities from damage vectors caused by external players, hostile attacks, and unauthorized interactions or physical interventions by non-whitelisted individuals. Isolated MySQL Database Architecture:* To maximize database reliability and operational segregation, the data storage layer has been updated. The infrastructure now forces all MySQL directories, storage tables, and configuration outputs to reside within an entirely independent, dedicated sub-folder separate from standard runtime assets. Integrated Protection Feedback Particles:* Visual confirmation systems developed and tested during iterations 3 and 4 have been officially compiled into the production build. The engine now triggers real-time particle rendering routines to provide explicit gameplay feedback for security interactions. These custom particle vectors are executed upon successfully locking or unlocking a storage container, enabling local protection filters over active redstone networks, establishing active protection criteria over hoppers, and enforcing security parameters over piston mechanics to prevent illegal block movement. ---User Interface and Experience Engineering
Action Bar Information Routing:* To preserve chat aesthetics and prevent standard text saturation, user query outputs have been completely rerouted. Execution of the friend lookup utility will no longer post raw text blocks or status confirmation strings directly into the global or local player chat log. Instead, the requested user data is sent straight to the client screen via the action bar overlay, ensuring a non-intrusive HUD readout that keeps active gameplay visible. SkinRestorer Integration for Offline-Mode (Cracked) Servers:* To enhance player identification thresholds within offline-mode or hybrid network topologies, formal compatibility bridges have been engineered for the SkinRestorer API. The system is now fully capable of pulling, caching, and rendering individual user skin head textures directly inside the plugin's graphical menus and player reference lists. This integration ensures that players operating on cracked servers can instantly recognize and confirm the identity of individuals they add to their trusted access lists via accurate visual cues. ---Future Objectives and GUI Migration Roadmap
Development has officially commenced on the upcoming Snapshot 2 build. While the automated bulk-processing macro/bp friends addallhas already been fully integrated (successfully addressing the top-voted community request sourced from historical Bukkit discussion comments), the upcoming development phases will follow a specific transitional roadmap from command-line dependencies toward full graphical user interface (GUI) management.Snapshot 2: Feature Expansion and Command Implementation
The immediate next phase will focus on deploying critical structural features requested by the community alongside essential performance patches. Consequently, Snapshot 2 will introduce a higher volume of manual text commands than traditionally expected. Scheduled implementations include: Authorization and Ownership Transfer Commands (`/bp transfer <player>`):* A secure ownership migration utility allowing a protection builder to permanently delegate full administrative rights over a specific container directly to another verified user identity. Access Control List Replacement Matrix:* Addressing GitHub ticket #268, the copy-and-paste utility will abandon entry-appending in favor of an explicit "Replace Mode," entirely flushing pre-existing access lists on target blocks to prevent permission stacking. Temporal and Time-Decaying Access Protocols:* An advanced temporal authorization layer allowing users to extend block interaction privileges to auxiliary players that automatically self-terminate after a server-validated timestamp expires. Administrative Verification Utilities (`/bp info <player>Code`):* A comprehensive lookup command granting authorized staff the ability to extract a full location list of all protected coordinates registered to any targeted player profile.Snapshot 3: Interface Refinement and Visual Migration
To resolve the heavy reliance on manual commands introduced in the previous cycle, Snapshot 3 will be dedicated almost entirely to interface engineering. The objective is to migrate newly added operational commands directly into the visual management GUI. This phase will introduce: Granular Permission Controls via Graphical Interface:* Expanding the management menu to support individual permission toggles, allowing users to interactively cycle friend access levels between read-only parameters and full structural write access. Explicit Lock-on-Place State Labels:* Deprecating the use of simple enchantment glints as status indicators in favor of definitive, clear textual labels indicating absolute enabled or disabled states within the menu.Snapshot 4: Complete GUI Standardization
The ultimate milestone for Snapshot 4 is the near-total deprecation of syntax-based execution for standard users. By this release, the objective is to ensure that the vast majority of the plugin's functionalities, configurations, and administrative tools are accessible entirely through intuitive graphical menus, virtually eliminating the need for manual command inputs during standard gameplay. ---Development Methodology and Research Documentation
The layout of t1.2.9-dev-2BlockProt Reloaded 1.2.9-dev-2May 19, 2026 Added 3. Colored Particle Effects on Lock / Unlock / Settings Toggle Lock → green dust-particle ring around the block + chest-locked sound. Unlock → red dust-particle ring + sound. Double chests are handled correctly: both halves receive the particle ring simultaneously. Redstone setting toggle → redwhite DUST_COLOR_TRANSITION ring + lever click sound. Hopper setting toggle → light-gray
dark-gray transition ring. Piston setting toggle → brown
gray transition ring. All effects respect block_lock_effects: true/false in config.yml (default: true). 24. Shulker Box — Shift+Right-Click Places Without Protection Placing a shulker box while sneaking (Shift+right-click) skips the lock-on-place step. The shulker is placed without any owner, so the recipient can open and lock it as their own. Normal placement still auto-locks as configured. Configurable via the existing lock_on_place_by_default flow; no extra config key needed. 25. Skin Resolution for Cracked / Offline-Mode Servers SkinCache provides an async Mojang-API fallback for offline servers where UUIDs are name-derived and don't correspond to Mojang profiles: On first GUI open for a player, a plain (no-texture) head is shown immediately. In the background, BlockProt queries api.mojang.com to resolve the real Mojang UUID from the username, then fetches the skin texture from the session server. On the next GUI open the skinned head is returned from cache. SkinRestorer (if installed) always takes priority over the Mojang fallback. Fetch failures (network errors, rate limits, unknown names) are silently skipped; the plain head continues to be shown without any console errors. 26. Admin Teleport from Statistics Inventory In the Statistics → Your Blocks list, players with blockprot.admin permission can click any block entry to teleport directly to that block. The inventory closes after teleporting. Players without the admin permission see no change on click. 27. Amber Console Colors for BlockProt-Plus Messages Integration registration and enable messages print in gold/amber via BlockProtConsole. Informational startup messages use §e yellow, success messages use §a green, warnings §c red. Uses Bukkit.getConsoleSender().sendMessage() with legacy color codes — rendered natively by Paper's Log4j2 console renderer on 1.21+ and falls back to plain text on Spigot. Example: §6[BlockProt]§r §6Integration enabled: §eclaimchunk§r 28. Per-Player Sections in the Access Audit Log The audit GUI overview now shows one head per unique player with a clear label: §cX §fname (access denied) or §aOK §fname (access granted). Lore shows the last event timestamp, total event count, and world/coordinates. Clicking a player head opens their full personal history (all events in order). The detail view shows individual event timestamps and actions. Navigation arrows are consistent across both views. Dev 1 is dead kay don´t ask for him, his dead and will never revive,
1.2.9-SNAPSHOTBlockProt Reloaded 1.2.9-SNAPSHOTMay 19, 2026 All the information of this SNAPSHOT is in [BlockProt - Repo](https://github.com/VictorGugug/BlockProt-Plus) after this release all the changues will be documented on [Releases - Github](https://github.com/VictorGugug/BlockProt-Plus/releases)
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta