Skip to content

Releases: castledking/GriefPrevention3D

v18.0.8: Fix claimed double chest split by adjacent single chest

07 Jun 04:03

Choose a tag to compare

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

18.0.7

02 Jun 00:43

Choose a tag to compare

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 by messages.yml so 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:

  • Owner
  • Manager
  • Builder
  • Container
  • Access
  • Untrusted

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

29 May 22:00

Choose a tag to compare

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 UnsupportedClassVersionError on 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) with Collections.emptyList() / Collections.singletonList() / Arrays.asList()
  • Replaced all Set.of() / Set.of(a) / Set.of(a, b) with Collections.emptySet() / Collections.singleton() / Collections.unmodifiableSet(new HashSet<>(Arrays.asList(...)))
  • Replaced all Map.of() / Map.of(k, v) with Collections.emptyMap() / Collections.singletonMap()
  • Replaced all Map.copyOf() and List.copyOf() with Collections.unmodifiableMap(new HashMap<>(...)) and Collections.unmodifiableList(new ArrayList<>(...))
  • Replaced String.isBlank() with Compat.isBlank() (trim + isEmpty)
  • Replaced String.repeat(n) with Compat.repeat() (StringBuilder loop)
  • Replaced Files.writeString() and Files.readString() with Files.write() / Files.readAllBytes() + String constructor
  • Replaced FileReader(File, Charset) with InputStreamReader(new FileInputStream(file), charset)
  • Replaced var with explicit types
  • Replaced @Deprecated(since = ...) / @Deprecated(forRemoval = true, ...) with plain @Deprecated
  • Created Compat utility class (com.griefprevention.compat.Compat) for isBlank(), 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

27 May 09:07

Choose a tag to compare

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 in CompatUtil to safely access explosion results, which don't exist in 1.8.8.
  • Fixed NoClassDefFoundError: org.bukkit.event.block.BlockExplodeEvent — Created separate BlockExplodeEventHandler with conditional registration, as this event doesn't exist in 1.8.8 Spigot.
  • Fixed NoClassDefFoundError: org.bukkit.event.entity.ItemMergeEvent — Created separate ItemMergeEventHandler with conditional registration, as this event doesn't exist in 1.8.8 Spigot.
  • Fixed NoSuchMethodError: PlayerInventory.getItemInMainHand() — Replaced direct calls with CompatUtil.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=true JVM 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

27 May 01:23

Choose a tag to compare

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 EntityPickupItemEvent handling 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 / OfflinePlayer equality behavior.

Affected Config

This regression only applied when PvP fresh-spawn protection was active:

GriefPrevention:
  PvP:
    ProtectFreshSpawns: true

No 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

25 May 04:19

Choose a tag to compare

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-workspace branch 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 BoundaryVisualizationEvent to mutate the boundary set, swap the VisualizationProvider, or short-circuit drawing entirely.
  • Implement VisualizationProvider / VisualizationStyle to render claims using their own block palettes, particle effects, glow displays, or packet pipelines.
  • Call BoundaryVisualization.visualizeClaim(...), visualizeArea(...), and visualizeNearbyClaims(...) directly to trigger the same visuals GP uses internally.
  • Reuse the built-in FakeBlockVisualization, LegacyFakeBlockVisualization (1.8.8), AntiCheatCompatVisualization, and GlowingVisualization (1.19.3+) implementations.

See Public Api.txt for the full surface and code examples.

Bugfixes

Claim Tools

  • Fixed ClaimToolDispatcher.handleModificationTool running the 3D-corner snap raycast unconditionally on the second click of a resize. The snap is now gated by ClaimToolInteractionState.shouldAttempt3DCornerSelection, mirroring the PlayerEventHandler path.
  • 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 PlayerData once 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: false

Pairing

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

25 May 01:18

Choose a tag to compare

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.2 in both pom.xml and gradle.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_PATH and legacy GRASS_PATH as 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

24 May 19:40

Choose a tag to compare

release(v18.0.1): Legacy Compatibility Fixes & Release Automation

18.0

24 May 08:28

Choose a tag to compare

release(v18.0): Java 11 Compatibility & Unified 1.8.8 → 26.1.x Support

17.5.4

22 May 12:14

Choose a tag to compare

release(v17.5.4): Restore ClaimPermission.Inventory for backward comp…