AmplProtections
1.0.20AmplProtections is an advanced Minecraft 1.21+ protection plugin that adds customizable land protection systems with blocks, flags, rentals, rollback, and economy integration.
1.0.20latestAmplProtections 1.0.20Aug 27, 2026 ---[1.0.20] - 2026-08-27
Added
- Added a dedicated migration log atplugins/AmplProtections/logs/migration.log. - Added a configurable database migration progress menu for players. - Added developer-controlled configuration for migration menu slots, materials, titles, and lore. - Added protection inactivity tracking and automatic expiry cleanup.Fixed
- Fixed SQLite to MySQL migration failing when SQLite storedcreated_atas epoch milliseconds. - Fixed migration retries removing related members, flags, and rentals through MySQLREPLACE INTOcascades. - Fixed migration support for numeric, textual, and boolean flag values. - Fixed environmental flags being loaded as permission flags instead of boolean flags after migration. - Preserved protection, member, flag, rental, rollback, merge, and preset relationships during database migration. ---1.0.19Changelog - AmplProtections 1.0.19Aug 14, 2026 Changelog
All notable changes to AmplProtections will be documented in this file. ---[1.0.19] - 2026-08-14
Bug Fixes
- Fixed menu button collisions: disabled buttons no longer intercept clicks when an enabled button uses the same slot. - Fixed menu item names and lore appearing italic by default. - Fixed concurrent flag writes that could overwrite or erase newer flag changes. - MySQL database writes are now processed in order to prevent races between full flag saves and individual flag updates.Maintenance
- Replaced unused imports, fields, and methods reported by the Java analyzer. - Added explicit handling for Eclipse null-safety warnings in Bukkit callbacks. - Kept skull profile handling compatible with the Paper 1.21.1 API. - Updated the plugin and Maven project version to1.0.19. ---1.0.18AmplProtections 1.0.18Aug 3, 2026 ---[1.0.18] - 2026-08-03
- MySQL: Plugin now auto-creates the database if it doesn't exist (Database & Connection Pool
CREATE DATABASE IF NOT EXISTS). No need to manually create it anymore. - MySQL: Enabled TCP keepalive (120s) to prevent the connection pool from becoming unresponsive on unstable networks. - MySQL: IncreasedconnectionTimeoutfrom 5s to 15s to handle server load spikes. - SQLite: ReducedmaximumPoolSizefrom 5 to 1 — SQLite is an embedded database and does not benefit from multiple connections, which could causeSQLITE_BUSYerrors. - SQLite: Enabled TCP keepalive (120s) for the same reason as MySQL. - SQLite: IncreasedconnectionTimeoutfrom 5s to 10s. - Both: Added graceful shutdown forExecutorServicewithawaitTermination(5s)to ensure pending database operations complete before the server shuts down.
- WrappedPlugin Lifecycle
onDisable()in atry-catch-finallyblock so thatdatabaseConnection.disconnect()is always called, even if an error occurs during shutdown (e.g., saving regions).
- Fixed duplicate YAML key warnings: TheBug Fixes
ConfigUpdaterwas inserting keys that already existed in the user's config files, causing repeatedduplicate keys foundwarnings from the YAML parser. Added a pre-insertion check to skip keys that already exist. - Fixed invalid YAML generation: List values containing special YAML characters (like|,:,{, etc.) are now properly quoted when inserted by theConfigUpdater, preventingmapping values are not allowed hereparse errors. - Silent corrupted file recovery: When a user's config/menu file is corrupted, the plugin now detects it silently (no errors in console), backs it up, and regenerates it automatically from the JAR. Previously this would flood the server console with YAML parse errors. - Synced version inplugin.ymlwithpom.xml(was out of sync).
- Clickable update notification: The download link shown to admins on player join is now clickable (opens browser to Modrinth page). - Dynamic plugin name: The update notification now displays the project name fetched from the Modrinth API instead of a hardcoded string. ---Improvements
1.0.17AmplProtections 1.0.17Aug 3, 2026 Changelog
[1.0.17] - 2026-08-02
Performance
- Spatial index forgetRegionAt()andcheckCollision()— O(1) amortized lookups instead of O(n) linear scan - OptimizedloadAllRegionsSync()— 3 queries with batch loading instead of 2N+1 individual queries - Fixed race condition onidMap— changed fromHashMaptoConcurrentHashMap- SQLitePRAGMA foreign_keysmoved to HikariCPconnectionInitSql— no longer executes on everygetConnection()Architecture
- ExtractedSchemaManagerclass — eliminates ~200 lines of duplicated table creation logic between MySQL and SQLite - ConsolidatedsendAccessDenied/sendAccessDeniedCooldowninto single method inProtectionListener- UnifiedsaveMemberSync/saveMemberAsynclogic into sharedexecuteSaveMemberinProtectionDao- Added Builder pattern toProtectionRegion(existing constructors preserved for compatibility)Changed
-ProtectionManagernow usesMessageUtils.parse()singleton instead of inlineMiniMessage.miniMessage().deserialize()-getAdjacentRegions()andmergeRegions()now use spatial index instead of scanning all world regions - Removed@Deprecated isAllowed()method fromProtectionRegion- Removed@SuppressWarnings("unused")fromAdminProtectionCommand- Removed redundant null checks inProtectionListenerevent handlers - Hardcoded Spanish fallback strings replaced with English inAdminProtectionCommandFixed
- Fixed SQLite syntax error withAUTOINCREMENTkeyword order inSchemaManager1.0.16AmplProtections 1.0.16Jul 14, 2026 Changelog
[1.0.16] - 2026-07-14
Fixed
- Nexo API integration updated to match current Nexo 1.19+ method signatures - Replaced reflection-based NexoHook with direct API calls for better reliability - Fixed double drop when breaking Nexo-based protections (only plugin item drops now) - Fixed "no inventory space" check before breaking Nexo protections - Fixed async thread error during PSStones migration (blocks now placed on main thread) - Fixed PSStones migration not placing Nexo blocks or custom-model-data blocks - Fixed blocks.yml being overwritten on plugin updates (now only created on first install)Added
- Nexo dependency in pom.xml (com.nexomc:nexo) as provided/optional - Maven repository for Nexo (https://repo.nexomc.com/releases) -no-inventory-spacemessage in lang files (en/es) - Nexo block/furniture type detection before placement (isNexoFurniture/isNexoBlock)1.0.15AmplProtections 1.0.15Jun 17, 2026 Protection System Update
This update optimizes the regional access logic and fixes member permission issues.Changes
Fixed Entry Flag Logic*: UpdatedcanPlayerActinProtectionRegion.javato properly validate theEVERYONEflag before checking for member ranks[cite: 2]. Improved Permission Hierarchy*: RefactoredcanPerformActioninProtectionRegion.javato use rank weights instead of manual boolean checks[cite: 2, 4]. * This ensures that members and higher-ranking players (Admins, Owners) are correctly granted access when theentryflag is set toMEMBERS[cite: 2, 4]. * This logic correctly respects the established rank hierarchy:OWNER > SECONDARY_OWNER > ADMIN > MEMBER[cite: 4]. Fixed Member Notification*: Corrected the message notification logic inProtectionCommand.javato ensure players receive the correct feedback when they are added to a region[cite: 1].Improvements
* The logic is now more scalable, allowing new ranks to be integrated easily by simply adjusting their weight in thePlayerRankenum[cite: 4]. * Fixed the restriction issue where members were previously denied access despite theentryflag being set toMEMBERS[cite: 2].1.0.14AmplProtections 1.0.14Jun 17, 2026 Changelog
[1.0.14] - 2026-06-17
Added
#### PSStones Migration System - New command/aprotmigrate psstonesto migrate regions from ProtectionStones - Confirmation GUI menu before migration (fully editable viamenus/migration-menu.yml) - Option to delete original PS regions after migration - Async migration to prevent server lag - Migrates owners, members, flags, and exact region bounds - Creates dynamic protection types for non-standard radii - Readsps-homeflag for correct block placement - Detailed logging of each migrated region #### Nexo Integration - NewNexoHookclass for Nexo API integration - Support for custom block models from Nexo furniture system - Newnexo-idfield inblocks.ymlfor Nexo items - Multiple API compatibility approaches for different Nexo versions #### Custom Model Data Support - Blocks can now be identified by material + custom model data - Compatible with Nexo, ItemsAdder, and Oraxen resource packs - NewgetProtectionTypeByMaterialAndModelData()method #### Configurable Limits - Custom ranks with custom limits (add as many as you want) - Per-world max protections (different limits per world) - New config structure:
#### Migration Messages - Addedworlds: world-limits: world: 10 world_nether: 3 limits: ranks: default: 3 vip: 5 mvp: 10 admin: 999migration.*section to bothen.ymlandes.yml- All migration messages are now configurable and translatableFixed
#### Critical Fixes - Fixed duplicatecommandssection in language files that caused ~80 messages to be lost - FixedCustomModelDataIllegalStateException in Paper 1.21+ (now checkshasCustomModelData()first) - Fixed PSStones regions being migrated with wrong size (now uses exact WG region bounds) - Fixed protection block not being placed at correct location during migration #### Language System - LanguageManager now uses ConfigUpdater to add new keys to existing language files - Added missing messages:commands.list-no-protections,commands.preset-invalid-sub,buy-menu.*#### Database - Migration now uses UPSERT instead of INSERT to prevent duplicate key errors - Added proper transaction rollback on migration failureChanged
#### Plugin Optimization - Reduced jar size from ~15MB to ~1.6MB - Added SQLite native library filters (only Windows x64 and Linux x64) - EnabledminimizeJarto remove unused classes #### Dependencies - Added WorldGuard as soft dependency - Added WorldEdit dependency - Added Nexo as soft dependency - Added EngineHub and sk89q repositoriesTechnical
#### New Files -src/main/java/com/amplan/amplprotections/database/PSStonesMigrationManager.java-src/main/java/com/amplan/amplprotections/hook/NexoHook.java-src/main/java/com/amplan/amplprotections/menu/MigrationConfirmMenu.java-src/main/resources/menus/migration-menu.yml#### Modified Files -src/main/java/com/amplan/amplprotections/AmplProtections.java-src/main/java/com/amplan/amplprotections/command/MigrateCommand.java-src/main/java/com/amplan/amplprotections/config/MenuConfigManager.java-src/main/java/com/amplan/amplprotections/language/LanguageManager.java-src/main/java/com/amplan/amplprotections/listener/BlockListener.java-src/main/java/com/amplan/amplprotections/manager/ProtectionManager.java-src/main/java/com/amplan/amplprotections/model/ProtectionType.java-src/main/resources/blocks.yml-src/main/resources/config.yml-src/main/resources/lang/en.yml-src/main/resources/lang/es.yml-src/main/resources/plugin.yml-pom.xml1.0.13AmplProtections 1.0.13Jun 9, 2026 Changelog
[1.0.13] - 2026-06-09
Added
- Modrinth version checker with automatic update notifications for admins.Fixed
- Race condition wheregetRegionAt()could return null immediately after placing a protection. - Memory leak inlastAccessDeniedmaps (cleaned up on player quit). - Ownership transfer not updating in memory after async DB call. - Double save when editing protection lore via command. - NPE inonPlayerMovewhenevent.getTo()returns null. -saveAllRegionsSynctransaction rollback not handling errors properly. -getRadius()truncation on asymmetric regions.Removed
- Unused variablescornerDust,glowDust,pulseGlowinParticleUtils. - Unusedpluginfield inMenuManager. - DuplicatecanMerge()method inProtectionType. - RedundantString.valueOf()andObjects.requireNonNull()calls. - StandaloneLoggerinConfigUpdater(now uses plugin logger). - Emoji in message prefix that caused rendering issues on some clients. --Xlint:-deprecationcompiler flag (deprecation warnings are now visible).1.0.12AmplProtections 1.0.12Jun 2, 2026 Changelog
[1.0.11] - 2026-06-02
Fixed
- Paper API dependency version (1.21.11-R0.1-SNAPSHOT) - ConfigUpdater duplicating content when updating menu configs - Automatic detection and regeneration of corrupt YAML config filesAdded
-/protection bulkcommand to manage multiple protections at once - Bulk manage menu for adding members to selected protections1.0.5AmplProtections 1.0.5May 29, 2026 AmplProtections is an advanced Minecraft (Paper 1.21+) protection plugin that adds customizable land protection systems with blocks, flags, rentals, rollback, and economy integration. It supports MySQL storage, configurable protection sizes and limits per rank, and a flexible flag system to control player actions inside protected areas. The plugin also includes features like holograms, particles, protection merging, rental systems, teleport cooldowns, and rollback tools for reverting block changes. Administrators can manage protections through dedicated commands, while players can create, modify, and manage their own protected regions using an in-game command system. It also integrates with Vault for economy support and PlaceholderAPI for external placeholders.
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