Releases: castledking/GriefPrevention3D
v18.0.8: Fix claimed double chest split by adjacent single chest
v18.0.8: Fix claimed double chest split by adjacent single chest
GriefPrevention3D v18.0.8
Wiki: GriefPrevention3D Wiki
Thanks to @thiagorigonatti for fixing this issue!
Upstream Issue Fix
Placing a chest next to a claimed double chest breaks the double chest (#2606)
Before: Placing a single chest outside a claim adjacent to a double chest fully inside the claim would forcibly split the double chest into two singles — even though no cross-claim double chest was actually formed.
After: The double chest is left untouched when the placed chest remains single.
The root cause was in denyConnectingDoubleChestsAcrossClaimBoundary: it assumed any chest placed near a double chest had connected to it, and unconditionally split both blocks. The fix adds a guard that checks the placed chest's type after placement — if it is still Chest.Type.SINGLE, the method returns early and the neighboring double chest is preserved.
Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 8 |
| Bukkit API Target | 1.13 |
Migration
No data migration is required.
See Also
- Issue #2606 — Upstream bug report
- PR #2607 — Upstream fix by @thiagorigonatti
18.0.7
GriefPrevention3D v18.0.7
Wiki: GriefPrevention3D Wiki
Highlights
- Added PlaceholderAPI trust status placeholders — Scoreboards can now show whether a player is trusted in the claim or subdivision they are standing in, and what effective trust level they have there.
- Customizable trust-level labels — The text returned by
%gp3d_trust_level%is backed bymessages.ymlso servers can localize or restyle the displayed labels.
PlaceholderAPI
New Placeholders
| Placeholder | Result |
|---|---|
%gp3d_is_trusted% |
true when the player has at least access trust in the claim/subdivision they are standing in, otherwise false. |
%gp3d_trust_level% |
Returns the player's effective claim trust label for the claim/subdivision they are standing in. |
%gp3d_trust_level% uses the innermost claim at the player's location, so 3D subdivisions and regular subdivisions are reported instead of only the top-level claim.
Effective trust is resolved from highest to lowest:
OwnerManagerBuilderContainerAccessUntrusted
When the player is not standing in any claim, %gp3d_trust_level% returns Unclaimed.
New Messages
The following messages.yml keys are added automatically on startup or reload:
Messages:
PlaceholderTrustLevelUnclaimed: "Unclaimed"
PlaceholderTrustLevelOwner: "Owner"
PlaceholderTrustLevelManager: "Manager"
PlaceholderTrustLevelBuilder: "Builder"
PlaceholderTrustLevelAccess: "Access"
PlaceholderTrustLevelContainer: "Container"
PlaceholderTrustLevelUntrusted: "Untrusted"Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 8 |
| Bukkit API Target | 1.13 |
Migration
No data migration is required.
Existing messages.yml files will receive the new trust-level keys automatically the next time GP3D loads messages.
18.0.6
GriefPrevention3D v18.0.6
Wiki: GriefPrevention3D Wiki
Highlights
- Java 8 Bytecode — The plugin now compiles to Java 8 bytecode (class version 52.0), allowing it to load on servers running Java 8. This resolves
UnsupportedClassVersionErroron 1.8.8 servers that cannot upgrade beyond Java 8.
Java 8 Migration
- Replaced all
List.of()/List.of(a)/List.of(a, b, c)withCollections.emptyList()/Collections.singletonList()/Arrays.asList() - Replaced all
Set.of()/Set.of(a)/Set.of(a, b)withCollections.emptySet()/Collections.singleton()/Collections.unmodifiableSet(new HashSet<>(Arrays.asList(...))) - Replaced all
Map.of()/Map.of(k, v)withCollections.emptyMap()/Collections.singletonMap() - Replaced all
Map.copyOf()andList.copyOf()withCollections.unmodifiableMap(new HashMap<>(...))andCollections.unmodifiableList(new ArrayList<>(...)) - Replaced
String.isBlank()withCompat.isBlank()(trim + isEmpty) - Replaced
String.repeat(n)withCompat.repeat()(StringBuilder loop) - Replaced
Files.writeString()andFiles.readString()withFiles.write()/Files.readAllBytes()+ String constructor - Replaced
FileReader(File, Charset)withInputStreamReader(new FileInputStream(file), charset) - Replaced
varwith explicit types - Replaced
@Deprecated(since = ...)/@Deprecated(forRemoval = true, ...)with plain@Deprecated - Created
Compatutility class (com.griefprevention.compat.Compat) forisBlank(),repeat()
Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 8 |
| Bukkit API Target | 1.13 |
Migration
No data migration is required.
Existing claims, configs, and player data remain compatible.
18.0.5
GriefPrevention3D v18.0.5
Wiki: GriefPrevention3D Wiki
Highlights
- 1.8.8 Runtime Error Fixes — Fixed several runtime errors that occurred when running the plugin on Minecraft 1.8.8 servers with Java 11+.
- Expanded PvP Configuration — Added config options to allow container access and respawn anchor usage during PvP combat.
- AFK Accrual Bypass Permission — Added permission to bypass AFK checks for claim block accrual.
- New Claim Lifecycle Events — Added "Start" events for claim creation/resize and pre-delete event for addon integration.
1.8.8 Compatibility
- Fixed
NoSuchMethodError: EntityExplodeEvent.getExplosionResult()— Added compatibility methods inCompatUtilto safely access explosion results, which don't exist in 1.8.8. - Fixed
NoClassDefFoundError: org.bukkit.event.block.BlockExplodeEvent— Created separateBlockExplodeEventHandlerwith conditional registration, as this event doesn't exist in 1.8.8 Spigot. - Fixed
NoClassDefFoundError: org.bukkit.event.entity.ItemMergeEvent— Created separateItemMergeEventHandlerwith conditional registration, as this event doesn't exist in 1.8.8 Spigot. - Fixed
NoSuchMethodError: PlayerInventory.getItemInMainHand()— Replaced direct calls withCompatUtil.getItemInMainHand()throughout the codebase for 1.8.8 compatibility.
Netty Compatibility
- Note: PaperSpigot 1.8.8 has incompatible Netty epoll transport with Java 11+. Users experiencing "Unable to access address of buffer" errors should:
- Switch to regular Spigot 1.8.8 (recommended), or
- Add
-Dio.netty.transport.noNative=trueJVM flag (may not work on all PaperSpigot builds)
New Config Options
Two new options under GriefPrevention.PvP in config.yml:
| Key | Default | Effect |
|---|---|---|
AllowContainerAccess |
false |
When true, players can access containers (chests, shulker boxes, etc.) during PvP combat. |
AllowRespawnAnchor |
false |
When true, players can use respawn anchors during PvP combat. |
Existing servers will pick up the defaults on first load and have the keys persisted to config.yml automatically.
New Permissions
| Permission | Default | Effect |
|---|---|---|
griefprevention.accruals.afkbypass |
op |
Bypasses the AFK check for claim block accrual. Players with this permission will accrue claim blocks even if they are idle. |
griefprevention.accruals |
true |
Controls whether a player receives claim blocks at the configured hourly rate when not AFK. Negating this permission disables accruals entirely. |
New Events
StartClaimCreationEvent
Fired when a player starts creating a claim via the modification tool (golden shovel), before the claim is created. This event fires at the initial shovel click, allowing addons to:
- Validate claim creation before it begins
- Redirect to alternative claim creation flows
- Show custom claim creation UI
- Cancel the creation process entirely
StartSubdivideClaimCreationEvent
Extends StartClaimCreationEvent with additional context for subdivision creation. Includes the parent claim being subdivided.
StartClaimResizeEvent
Fired when a player starts resizing a claim via the modification tool, before the resize is applied. This event is cancellable and allows addons to:
- Validate resize operations before they complete
- Apply custom resize logic
- Cancel invalid resizes
PreDeleteClaimEvent
Fired before a claim is deleted, allowing addons to intercept and prevent deletion. This event is cancellable and provides the claim being deleted.
ClaimsInactivityExpireEvent
Fired when a player's claims expire due to inactivity. Unlike the per-claim ClaimExpirationEvent, this event fires once for all expired claims belonging to a player, providing:
- The UUID of the player whose claims expired
- A list of all expired claims
- A method to calculate total claim blocks freed
This is useful for economy integrations that need to handle bulk claim expiration efficiently.
Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 11 |
| Bukkit API Target | 1.13 |
Server Recommendations for 1.8.8:
- Use Spigot 1.8.8 (not PaperSpigot) for best Java 11+ compatibility
- PaperSpigot 1.8.8 has Netty epoll issues with Java 11+ that cannot be resolved via JVM flags
Migration
No data migration is required.
Existing claims, configs, and player data remain compatible.
18.0.4
GriefPrevention3D v18.0.4
Wiki: GriefPrevention3D Wiki
Highlights
- Fixed a post-death item pickup regression — Players who respawned with PvP fresh-spawn immunity could sometimes be unable to pick up their own items until they left and rejoined.
Bugfixes
Item Pickup
- Fixed
EntityPickupItemEventhandling so fresh-spawn PvP immunity ends when an immune player picks up an item instead of cancelling the pickup. - This resolves a deadlock where an empty-inventory player was expected to pick up an item to lose immunity, but the pickup itself was blocked by that same immunity state.
- Hardened locked death-drop ownership checks to compare player UUIDs directly, avoiding server-version differences in
Player/OfflinePlayerequality behavior.
Affected Config
This regression only applied when PvP fresh-spawn protection was active:
GriefPrevention:
PvP:
ProtectFreshSpawns: trueNo config migration is required.
Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 11 |
| Bukkit API Target | 1.13 |
Migration
No data migration is required.
Existing claims, configs, and player data remain compatible.
18.0.3
v18.0.3: Visualization API Surface, Resize Raytrace Fix & Selection Sessions
GriefPrevention3D v18.0.3
Wiki: GriefPrevention3D Wiki
Highlights
- Public visualization API surface — Ported the boundary-visualization extension points from the
feature/gpapiaddon-workspacebranch so addons can drive their own claim visuals without reflection. - Improved 3D claim raytrace logic — Fixed a regression where the second click of a 3D subclaim resize could snap back to an existing claim corner, causing the resize to no-op or collapse the claim into a 1-block sliver.
- New claim-selection sessions — Selecting a claim with the modification tool can now keep that claim as the implicit target for follow-up commands (
/trust,/abandonclaim, etc.) until the visualization clears. - Configurable selected-claim messaging — Optional alternate selection messages so addons can present richer "claim selected" UX without overriding
ResizeStart.
Visualization API
The com.griefprevention.visualization and com.griefprevention.events packages are now part of the supported public API. Addons can:
- Listen for
BoundaryVisualizationEventto mutate the boundary set, swap theVisualizationProvider, or short-circuit drawing entirely. - Implement
VisualizationProvider/VisualizationStyleto render claims using their own block palettes, particle effects, glow displays, or packet pipelines. - Call
BoundaryVisualization.visualizeClaim(...),visualizeArea(...), andvisualizeNearbyClaims(...)directly to trigger the same visuals GP uses internally. - Reuse the built-in
FakeBlockVisualization,LegacyFakeBlockVisualization(1.8.8),AntiCheatCompatVisualization, andGlowingVisualization(1.19.3+) implementations.
See Public Api.txt for the full surface and code examples.
Bugfixes
Claim Tools
- Fixed
ClaimToolDispatcher.handleModificationToolrunning the 3D-corner snap raycast unconditionally on the second click of a resize. The snap is now gated byClaimToolInteractionState.shouldAttempt3DCornerSelection, mirroring thePlayerEventHandlerpath. - This resolves the report where dragging a 3D subclaim corner down through transparent blocks (e.g. leaves) did nothing, or occasionally collapsed the claim to a 1-block-thin layer.
- Fetches
PlayerDataonce before the corner raycast so the gate reflects the actual resize/subdivide state.
New Config Options
Two new options under GriefPrevention.Claims in config.yml:
| Key | Default | Effect |
|---|---|---|
UseClaimSelectSessions |
true |
When you start resizing a claim with the modification tool, that claim becomes the implicit target for subsequent commands until the visualization reverts. |
UseClaimSelectedMessages |
false |
When true (and sessions are enabled), replaces the legacy ResizeStart instruction with the contextual ClaimSelected / ClaimSelectedTopLevel / SubdivisionSelected messages. |
Existing servers will pick up the defaults on first load and have the keys persisted to config.yml automatically.
Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 11 |
| Bukkit API Target | 1.13 |
Migration
No data migration is required.
Existing claims, configs, and player data remain compatible. If you want the new selection behavior off, set:
GriefPrevention:
Claims:
UseClaimSelectSessions: false
UseClaimSelectedMessages: falsePairing
Pairs with GPExpansion v1.1.1 for claim block accrual profile controls. Visualization addons targeting the new public surface should depend on GriefPrevention3D >= 18.0.3.
18.0.2
GriefPrevention3D v18.0.2
Wiki: https://github.com/castledking/GriefPrevention3D/wiki
Highlights
- Fixed golden shovel grass-pathing regression — Right-clicking close grass blocks with the claim modification tool no longer turns them into dirt/grass path blocks while selecting claim corners.
- Fixed path-block visualization snapping — Dirt path and legacy grass path blocks are no longer treated as transparent for boundary visualization placement.
- Version sync — Updated release metadata to
18.0.2in bothpom.xmlandgradle.properties.
Fixes
Claim Tools
- Fixed a regression introduced during legacy compatibility work where claim-tool right-clicks could still trigger the shovel's vanilla block interaction.
- Claim creation, resizing, subdivision editing, and claim inspection clicks now consume the right-click before Bukkit applies item behavior to the target block.
- This prevents accidental terrain changes when selecting claim corners on grass blocks at close range.
Visualizations
- Fixed Y-snapped visualizations treating
DIRT_PATHand legacyGRASS_PATHas transparent. - Boundary markers now snap above path blocks instead of dropping below them.
- The fix applies to standard, legacy, anti-cheat, and glow plus anti-cheat visualization paths.
Compatibility
| Category | Support |
|---|---|
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 11 |
| Bukkit API Target | 1.13 |
Migration
No data migration is required.
Existing claims, configs, and player data remain compatible.
18.0.1
release(v18.0.1): Legacy Compatibility Fixes & Release Automation
18.0
release(v18.0): Java 11 Compatibility & Unified 1.8.8 → 26.1.x Support
17.5.4
release(v17.5.4): Restore ClaimPermission.Inventory for backward comp…