SERVER BUILD PROTECTOR
Protect exact build volumes from unauthorized changes and theft while keeping intended interactions, automation, natural updates, Lootr containers, and player graves working normally.
FEATURES
- Server-authoritative protection using exact block coordinates rather than chunk borders.
- Untrusted players cannot place or break blocks or access protected containers, dropped items, item frames, armor stands, storage vehicles, or configured item-bearing entities.
- Owners and trusted players retain full building and container access.
- Doors, buttons, levers, waystones, gravestones, and similar non-storage interactions remain usable.
- TNT, creepers, fire, lava-started fires, unauthorized pistons, entities, and other destructive effects cannot damage protected builds.
- Piston actions are atomic: every base, head, moved or destroyed block, slime or honey attachment, and destination must pass before any block changes.
- Universal Graves death graves create a temporary one-block protection exception, then normal area protection resumes as soon as the grave is removed.
- Lootr containers remain available to every player because their loot is player-specific.
- Operators can remove any protection and create protections for cached offline players or the server.
- Vanilla hopper and dropper extraction obeys the configured external-transfer policy, defaulting to same-owner automation only.
- Overlapping protections are rejected, and horizontal limits, per-player limits, dimensions, compatibility IDs, transfer policy, and outline visibility are configurable.
- Optional client installation provides protected-volume outlines and editable middle-click corner selection.
COMMANDS
Coordinates are six space-separated whole numbers without commas or parentheses.
/protect x1 y1 z1 x2 y2 z2
Protects the inclusive volume between two corners in the current dimension.
/protect as username x1 y1 z1 x2 y2 z2
Operator only. Creates a protection for a player listed in the server's usercache.json, including offline players.
/protect server x1 y1 z1 x2 y2 z2
Operator only. Creates a server-owned protection.
/trust username
Gives an online player full access to all your current and future protections.
/untrust username
Removes an online player from your trust list.
/unprotect
Removes the protection containing your current position. Operators may remove any protection.
/protect list
Lists your protections and trusted players.
/protect repairpistons
Operator only. Repairs recoverable moving-piston, orphan piston-head, and invalid extended-piston states within a 10-block radius of the operator.
NATURAL AND AUTOMATED BEHAVIOR
Fluids spread and recede normally. Natural leaves decay, while player-placed persistent leaves remain protected. Turtle eggs, frogspawn, and sniffer eggs hatch normally.
Plants and trees grow normally, snow melts, gravity blocks fall, unsupported plants and attachments pop off, villagers farm, sheep graze, and snow golems create trails. Grass, mycelium, and moss spread; farmland dries; copper oxidizes; and coral dies normally.
Rabbit and ravager crop damage, enderman block movement, farmland trampling, sculk spreading, fire spread, and lava-started fires remain blocked.
Piston triggers retain a generation-based authorization containing the initiating player, origin, originating claim and owner, trigger type, and creation time. Authorization follows queued piston events, scheduled redstone ticks, moving-piston completion, and resulting blockstate, comparator, and neighbor updates. Buttons, pressure plates, tripwires, targets, repeaters, observers, comparators, trusted redstone timers, and piston-driven loops may continue without requiring the player to trigger every downstream piston manually.
Circuit authorization is persisted in the world and restored across clean server restarts while queued or active work remains. Dormant generations expire naturally. Interrupted physical moving-piston states are still normalized safely rather than resuming incomplete movement.
Pistons outside protection may operate entirely outside but cannot enter a claim. Claim-owned sculk, observer, daylight-sensor, and registered mod automation remains inside its originating claim. Player-started pistons may cross between protected claims only when the initiating player currently owns or is trusted in every affected claim. Movement from a protected claim into unprotected space remains blocked. Every downstream action still receives the complete atomic preflight check.
Any vibration may activate a sculk or calibrated sculk sensor circuit. Sculk sensors, observers, daylight sensors, and registered automatic sources receive claim-owned authorization and may operate machinery inside their originating claim. Automatic pistons may otherwise move blocks and push players, mobs, and vehicles normally when atomic protection checks pass.
Interrupted piston states are normalized when chunks finish loading instead of resuming across a restart. Recoverable moving blocks are restored, while invalid collision remnants are removed. Operators may also run /protect repairpistons for a manual 10-block-radius repair.
MOD COMPATIBILITY
Universal Graves 3.10.2 death-grave placement, access, breaking, and cleanup are permitted inside every protection. Only the position currently occupied by the death-grave block is temporarily exempt; Universal Graves retains its own grave access rules, and the original area protection automatically resumes there when the grave disappears or restores its replaced block.
Lootr containers remain openable by every player while their blocks remain protected from unauthorized destruction. Lootr and Universal Graves are optional and must be installed with their own dependencies when wanted.
Waystone and grave-style registry identifiers are excluded from inventory locking. Exact additional per-player container, safe-interaction, and protected item-bearing entity IDs may be configured.
A server-side compatibility API lets other Fabric mods register state-aware per-player containers, safe interactions, item-bearing entities, temporary graves, natural updates, and automation sources. It also exposes read-only claim, player-access, item-transfer, and current-authorization queries. Server Build Protector creates all automation tokens itself; compatibility rules cannot forge players, owners, trust, generations, or bypass piston boundaries. Unknown pipe mods must call the transfer query or receive a dedicated adapter.
CLIENT HELPERS
With the same JAR and Fabric API installed client-side, comma toggles red outlines for protected volumes. Middle-click two corners to open an editable /protect command; the command is not sent until Enter is pressed. If no block is targeted, the player's current block coordinates are used.
SIZE LIMITS AND DATA
Default horizontal limits are 320 blocks on either axis and 3,840 blocks of horizontal area, equivalent to 15 chunk areas. Height may span the dimension's build range.
Edit config/server-build-protector.json and restart to configure maxHorizontalAxisBlocks, maxHorizontalAreaBlocks, maxProtectionsPerPlayer (0 is unlimited), dimensionAllowlist, dimensionDenylist, externalItemTransferPolicy (same_owner, deny_all, or allow_all), exact compatibility ID lists, and outlineVisibility (all, own_and_trusted, or disabled). Denylists take precedence, while an empty dimension allowlist permits every dimension not denied.
Protection data is stored in world/server-build-protector.json by player UUID. Active circuit authorization is stored separately in world/server-build-protector-circuits.json. Invalid or unsupported protection, circuit, or configuration data stops startup instead of silently disabling protection.
INSTALLATION
Requires Minecraft Java 1.21.11, Fabric Loader 0.19.3, Fabric API 0.141.4+1.21.11, and Java 21 or newer. Place ServerBuildProtector-1.0.7-beta.jar in the server's mods folder.
Clients do not need the mod for enforcement or commands. Client installation is only needed for outlines and middle-click selection.