Releases: castledking/GriefPrevention3D
17.4.3
GriefPrevention3D v17.4.3
Wiki: https://github.com/castledking/GriefPrevention3D/wiki
Highlights
- Unified command hardening — Fixed several standalone command edge cases and permission checks.
- PlaceholderAPI support — Added a small optional GP3D PlaceholderAPI expansion.
- More claim protections — Added protections for animal mounting, entity unleashing, hanging entities, and weaving cobwebs.
- QuickShop-Hikari compatibility — Restore-nature now preserves QuickShop shop signs.
- Claim expiration exemption — Players with the griefprevention.dontexpire permission are now skipped by inactive-claim cleanup when Vault is installed.
Unified Commands
The unified command handler now handles standalone aliases more carefully:
- Explicit empty
standalone:lists inalias.ymlnow disable standalone aliases for that subcommand instead of falling back to enum defaults. - Standalone no-argument commands now reject extra arguments instead of forwarding unexpected input.
- Standalone commands can now use custom tab completion where needed.
- Unified subcommands now check their configured permission before execution.
/shapedclaims,/claim mode shaped,/3dsubdivideclaims, and/claim mode 3dnow consistently enforce their dedicated permissions.
Affected files: CommandAliasConfiguration.java, UnifiedCommandHandler.java, UnifiedClaimCommand.java, UnifiedAdminClaimCommand.java, GriefPrevention.java, plugin.yml.
PlaceholderAPI
Added optional PlaceholderAPI integration with identifier gp3d.
New placeholders:
%gp3d_in_subdivision%—truewhen the player is inside any subdivision.%gp3d_in_3d_subdivision%—truewhen the player is inside a 3D subdivision.
PlaceholderAPI is a soft dependency. The expansion registers automatically when PlaceholderAPI is installed.
Affected files: pom.xml, plugin.yml, PlaceholderAPIExpansion.java, GriefPrevention.java.
Protection Fixes
Animal mounting requires access trust
Players now need Access trust to mount claimed rideable animals. /ignoreclaims still bypasses this for administrators.
Affected file: PlayerEventHandler.java.
Entity unleashing requires container trust
When theft prevention is enabled, players now need Container trust to unleash entities inside claims. /ignoreclaims still bypasses this for administrators.
Affected file: PlayerEventHandler.java.
Hanging entity protection
Item frames, paintings, and other hanging entities are now protected from additional edge cases:
- physics breaks caused by projectiles or nearby updates while the supporting block still exists
- direct non-player damage
- player/projectile damage without Build permission
- explosion damage events
Affected file: EntityEventHandler.java.
Weaving cobwebs no longer trip block-change protection
The Weaving potion effect can now create cobwebs from living-entity deaths without being caught by unrelated entity block-change protections.
Affected file: EntityEventHandler.java.
QuickShop-Hikari Compatibility
Restore-nature now detects QuickShop shop signs by their persistent data key and preserves both:
- the shop sign itself
- the block supporting the shop sign
This prevents GP3D restore-nature operations from silently removing QuickShop shop signs through direct block restoration.
Affected files: BlockSnapshot.java, RestoreNatureProcessingTask.java.
Claim Expiration Bypass
If Vault is installed, claim expiration now honors:
griefprevention.dontexpire
Players with that permission are skipped by the inactive-claim cleanup task.
Affected files: CleanupUnusedClaimPreTask.java, plugin.yml.
Migration
No data migration required.
New optional integrations:
- Install PlaceholderAPI to use the new
%gp3d_*%placeholders. - Install Vault plus a permissions provider to use
griefprevention.dontexpire.
New permissions from v17.4.2 remain default-true:
griefprevention.shapedclaimsgriefprevention.3dsubdivideclaims
17.4.1
GriefPrevention3D v17.4.1
Wiki: https://github.com/castledking/GriefPrevention3D/wiki
This release pulls in fixes for a batch of long-standing upstream GriefPrevention bugs that hadn't been merged in their tracker yet.
Upstream Issue Fixes
Workstations no longer treated as theft (#2587)
Grindstones, looms, stonecutters, and cartography tables are now usable in claims by players without trust — same as crafting tables. These are pure crafting workstations with no persistent inventory (any items left in them drop to the floor on close), so the PreventTheft path no longer applies to them.
Affected file: PlayerEventHandler.java.
TNT-above-sea-level chat spam fixed (#2586)
The "TNT will not destroy blocks above sea level" warning is now rate-limited per-player to once every 10 seconds. Map-art builders and large TNT placements no longer flood chat with one message per block.
Implementation: a new tntAboveSeaLevelWarningTimestamp field on PlayerData gates the message in BlockEventHandler.onBlockPlace.
Ender Dragon breath now damages players in PvP-protected claims (#2577)
The PvP "lingering potion" handler used to cancel any AreaEffectCloud damage when the defender was inside a PvP-protected claim. That accidentally included the Ender Dragon's breath attack, which made dragon fights trivial whenever the End island was an admin claim.
The handler now only intervenes when the cloud's source is a Player. Mob-sourced clouds (the dragon, plus any future mob that produces an AreaEffectCloud) pass through normally.
Affected file: EntityDamageHandler.handlePvpDamageByLingeringPotion.
Copper trapdoors honor LockTrapDoors (#2550)
The trapdoor-locking path now uses a robust isLockableTrapdoor() helper that checks both Tag.TRAPDOORS and falls back to a _TRAPDOOR name suffix match. Copper trapdoors (and any future trapdoor variants) are protected even on Bukkit API versions where Tag.TRAPDOORS doesn't yet include them.
Affected file: PlayerEventHandler.java.
Player data corruption on storage read failure (#2589 / #666)
When the data store (database or flat-file) failed to read a player's record — most commonly a transient MySQL wait_timeout / EOFException — the failure was silently swallowed and a fresh PlayerData with default values was returned. On the player's next save, those defaults were written back, permanently destroying the player's accrued and bonus claim blocks. This has been a long-standing upstream bug that resets players to zero blocks even when their actual claims are still on disk.
GP3D now flags failed reads via a new loadFailedFromStorage field on PlayerData. Both DatabaseDataStore and FlatFileDataStore set this flag when a read genuinely fails (vs. legitimately returning no row for a brand-new player). The save path in both backends refuses to persist a flagged PlayerData, so the on-disk record is preserved until a successful re-load happens. The player can still play this session with conservative defaults; their real record
Brushing loophole closed
The previous brush protection only ran on PlayerInteractEvent, which fires once when the player starts brushing. Because brushing is tick-driven and the targeted block can change while the player keeps right-click held, players could start brushing a block outside a claim, walk into the claim, and let the brush complete on a claimed SUSPICIOUS_SAND/SUSPICIOUS_GRAVEL block — bypassing the original check.
GP3D now also listens to EntityChangeBlockEvent and re-checks Build permission at the moment the suspicious block transitions to its loot result. The check is restricted to actual brushing transitions (SUSPICIOUS_SAND -> SAND, SUSPICIOUS_GRAVEL -> GRAVEL) with a held-brush guard, so unrelated entity-driven block changes are not affected.
Affected file: PlayerEventHandler.onPlayerBrushComplete.
Migration
No configuration changes or data migration required. All fixes are behavior changes that take effect immediately on update.
17.4.0
GriefPrevention3D v17.4.0
Wiki: https://github.com/castledking/GriefPrevention3D/wiki
Highlights
- More translatable messages — Added
CommandRequiresPlayerkey for console-command error messages. - Plugin metadata — Added
authorsandwebsitefields toplugin.yml.
Translatable Messages
Added new Messages enum key:
CommandRequiresPlayer— Sent when a player-only command is used from console. Default:"This command can only be used by players."
This is now used by /buyclaimblocks and /sellclaimblocks in UnifiedClaimCommand instead of a hardcoded string. Customize it in plugins/GriefPreventionData/messages.yml.
Plugin Metadata
Updated plugin.yml with additional metadata:
description: "The self-service anti-griefing plugin for Minecraft servers — now with full 3D subdivisions"website:https://castled.codesauthors:[CASTLEDKING, RoboMWM, BigScary]
Migration
No configuration changes or data migration required. The new CommandRequiresPlayer key will be added to your messages.yml automatically on next load if missing.
17.3.7
GriefPrevention3D v17.3.7
Highlights
- Boundary Violation Alerts - Claim owners are notified when pistons or liquids get blocked at their claim boundary, with smart deduplication and burst detection
- Improved Claim Selection Messages - More informative messages when selecting claims and subdivisions
- Updated Player Manual - Welcome book now includes GP3D branding and additional commands
- New Wiki - https://github.com/castledking/GriefPrevention3D/wiki
Boundary Violation Alerts
Pistons and liquids blocked at claim boundaries now send a chat message to the claim owner (if online) explaining where the violation occurred. Covers:
- Pistons pushing blocks into or out of claims
- Water/lava trying to flow into or out of claims
Improved Claim Selection Messages
- Subdivisions now get a dedicated, verbose message with color-coded command list
- Basic claims reference
/claim abandon - Top-level claims reference
/claim abandon toplevel - All messages better reflect available commands
Updated Player Manual
- Added "✅ This server is using GriefPrevention3D" branding
- Added
/3dSubdivideClaimsand/WitherExplosionsto commands page
17.3.1
Release: Shaped Claims + Subclaim Resize Fixes
Highlights
- Added shaped claim editing workflow with segment-based expansion/resizing.
- Fixed subclaim resize validation so subdivisions cannot be resized outside parent confines.
- Fixed container-corner interaction flow so 3D subdivision corner clicks correctly prioritize resize.
- Added stronger nested-subclaim safety checks to prevent invalid create paths.
Shaped Claims
To enable shaped claims, set:
GriefPrevention.Claims.AllowShapedClaims: true
Then use:
/shapedclaimsto enter shaped claim mode.
Quick Walkthrough
In shaped claim mode:
- Right-click boundaries to create/edit segments on non-rectangular claims.
- Click corners or matching segment points to perform shaped merge-resizes.
- Right-click selected segments to resize claim sides directly.
- Segment resize direction depends on player position relative to the segment:
- Center = expand full side.
- Left = expand left portion.
- Right = expand right portion.
/expandclaim 10and/expandclaim -10work with selected segments.
Subclaim Resize Fixes
- Prevented 2D/3D subdivision resize from escaping parent confines and creating conflict-zone style invalid states.
- Added stricter containment checks for subclaim create/resize paths.
- Ensured existing shaped claims remain protected even if
AllowShapedClaimsis later turned off. - Updated resize failure messaging for parent-confine violations.
Technical Improvements
- Container-click handling now matches normal shovel behavior for corner clicks:
- Corner click on editable 3D subdivision starts resize flow first.
- Subdivision creation no longer incorrectly starts on those corner/container interactions.
- Nested subdivision creation is now guarded at datastore level, not only interaction layer logic.
17.2.6
17.2.5
Fix purpur servers duping pearls
17.2.4
Overview
- Folia fix: Prevent endermites spawning and damaging entities when using enderpearls in claims
Full changelog:
17.2.3...17.2.4
17.2.2
Overview
- fix EnderPearlsRequireAccessTrust setting not actually working
Full changelog:
17.2.1...17.2.2
17.2.1
Overview
- Add inheritNothingForNewSubdivisions field for claim data
- Allow /rsc to be ran in main claims, restricting their future subdivision permissions
- Add new MainClaimSubdivisionInheritDisabled and Enabled messages
Full changelog: 17.2.0...17.2.1