Tags
Creators
Details
18.2.17-fabric-1.21.11
Compatibility
Required content
Changes
GriefPrevention3D v18.2.17
Wiki: https://github.com/castledking/GriefPrevention3D/wiki
Features
Shaped 2D subdivisions
Subdivisions can now be drawn as free-form orthogonal polygons inside a claim, matching the shaped-claims tooling but scoped to a parent claim.
Run /shapedsubdivideclaims (aliases: shapedsubdivideclaim, ssc, shapedsubdivide) or
/claim mode shapedsubdivide to enter the mode:
- Right-click inside one of your claims to place corners, then click your first corner again to close the subdivision.
- Click an existing shaped subdivision's boundary to enter a reshape session for it.
- A shaped subdivision must stay inside the claim it subdivides.
- Shaped subdivisions work inside top-level 2D claims only; a 3D claim cannot be subdivided with this mode, and a shaped subdivision spans the same vertical range as its parent claim.
The mode is gated by a new GriefPrevention.Claims.AllowShapedSubClaims setting, which
defaults to false. Both /shapedsubdivideclaims and /claim mode shapedsubdivide refuse
to enter the mode while it is disabled.
Overlap checks between a shaped polygon and other claims are now column-exact: a 3D claim sitting only inside the shaped claim's rectangular bounding box but over a cavity (a concave notch the polygon does not actually cover) is no longer treated as an overlap, while Y separation between claims is still respected.
Admin-controlled subdivisions
Staff can flag an individual subdivision as administered by the server, taking its editing and trust management away from the claim owner.
Use /aclaim makeadmin and /aclaim makebasic (or the standalone /makeadmin and
/makebasic) on a subdivision. Staff need griefprevention.adminclaims.convert. The
subdivision has to be selected first by right-clicking one of its corners with the golden
shovel; running the command without a selection tells you to select one and run it again.
Once a subdivision is administrative:
- The claim owner loses Edit and Manage inside it, and cannot resize it, hand out trust inside it, or abandon the claim containing it.
- Staff holding
griefprevention.adminclaimskeep full Edit and Manage inside it. - The owner still controls the claim around it, so an administrative subdivision is not an admin claim — it is a subclaim whose interior is staff-managed.
/aclaim makebasic(ormakeadminon an already-admin subdivision) converts it back.
The flag is persisted in both storage backends: the flat-file claim codec carries an Admin Subdivision field on the shared claim file, and the database schema grows
griefprevention_claimdata.adminsubdivision via the usual ADD COLUMN IF NOT EXISTS
migration, so existing files and tables upgrade in place and the two backends stay
feature-for-feature.
Fixes
Items dropped during combat could be silently deleted when the main inventory was full
During PvP combat with GriefPrevention.PvP.AllowCombatItemDrop at its default false,
GriefPrevention cancels item drops so the items stay in the player's inventory. Cancelling a
drop only works when the server can put the stack back: the server returns a cancelled drop
to the main inventory, so anything dropped from the cursor or an armor or offhand slot —
with no main slot to return to — was destroyed when the 36 main slots were full or could not
absorb the stack. This is upstream
GriefPrevention issue #2619,
rooted in the server behavior described in
PaperMC/Paper#7726.
Fix: the drop is stopped at the click instead of after the fact, using the community-accepted workaround from PaperMC/Paper#12475:
InventoryClickEventdrop actions (DROP_ONE_SLOT/DROP_ALL_SLOT/DROP_ONE_CURSOR/DROP_ALL_CURSOR) are cancelled atLOWESTpriority during combat, so the click is never applied and the item simply stays where it is.- Closing an inventory during combat with an item on the cursor moves that item into the main inventory instead of letting the server drop it; only the portion that cannot fit stays on the cursor.
- A leftover drop that still reaches
PlayerDropItemEvent(a hack client, or the small cursor remainder on inventory close) falls like vanilla — the item lands on the ground — rather than being deleted.
Main-hand Q-drops remain safe: the server splits the stack out of the hotbar slot, so the existing block keeps the item in hand. The fix is being contributed back to upstream GriefPrevention.
Notes
- New configuration:
GriefPrevention.Claims.AllowShapedSubClaims(defaultfalse). - Existing claims need no conversion: shaped subdivisions and admin flags are new fields, and both flat-file and database stores read them with safe defaults when absent.
- The combat-drop fix is not 3D-specific; it ships in GriefPrevention3D and is also queued as an upstream pull request.
MyCommandwas added to the plugin's soft-depend list.- Localization: all existing locale files (
de_DE,en_PT,es,fr_FR,ja_JP,ms_MY,pl_PL,pt_BR,ru_RU,tr_TR,uk_UA,zh_CN) picked up translations for the shaped-subdivision, admin-subdivision, and combat-drop messages introduced this release. A newmessages_cs_CZ.yml(Czech) locale file was added with a full translation of all 330 message keys.
Tests
ShapedSubdivisionTestcovers drawing a shaped subdivision inside a parent claim, requiring the parent to be a top-level 2D claim, containment within the parent, and reshaping an existing shaped subdivision.ClaimBoundsTestcovers column-exact overlap for shaped polygons: cavity columns are not part of a shaped claim, while Y separation between claims is preserved.AdminSubdivisionTestcovers the owner losing Edit/Manage inside an admin subdivision (while still controlling the surrounding claim), staff keeping both inside it, and normal subdivisions inheriting owner control.PlayerDropItemEventHandlerTestcovers the combat-drop handlers: drop-click cancellation in combat, cursor-on-close being moved into the main inventory, the full-inventory safety net that drops instead of deleting, and combat state being ignored whenAllowCombatItemDropis enabled.
Files Changed
M gp3d-core/src/main/java/com/griefprevention/claims/ClaimBounds.java
M gp3d-core/src/main/java/com/griefprevention/claims/editor/ClaimEditTargetType.java
M gp3d-core/src/main/java/com/griefprevention/claims/editor/ClaimEditorSkeleton.java
M gp3d-core/src/main/java/com/griefprevention/claims/persistence/ClaimDataSchema.java
M gp3d-core/src/test/java/com/griefprevention/claims/ClaimBoundsTest.java
M gp3d-core/src/test/java/com/griefprevention/fabric/FabricClaimFileStoreTest.java
M src/main/java/com/griefprevention/commands/UnifiedAdminClaimCommand.java
M src/main/java/com/griefprevention/commands/UnifiedClaimCommand.java
M src/main/java/me/ryanhamshire/GriefPrevention/Alias.java
M src/main/java/me/ryanhamshire/GriefPrevention/Claim.java
M src/main/java/me/ryanhamshire/GriefPrevention/ClaimToolDispatcher.java
M src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java
M src/main/java/me/ryanhamshire/GriefPrevention/DatabaseDataStore.java
M src/main/java/me/ryanhamshire/GriefPrevention/EquipShovelProcessingTask.java
M src/main/java/me/ryanhamshire/GriefPrevention/FlatFileDataStore.java
M src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java
M src/main/java/me/ryanhamshire/GriefPrevention/Messages.java
M src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java
M src/main/java/me/ryanhamshire/GriefPrevention/ShovelMode.java
M src/main/java/me/ryanhamshire/GriefPrevention/StartupHeader.java
M src/main/resources/alias.yml
M src/main/resources/messages.yml
M src/main/resources/messages_de_DE.yml
M src/main/resources/messages_en.yml
M src/main/resources/messages_en_PT.yml
M src/main/resources/messages_es.yml
M src/main/resources/messages_fr_FR.yml
M src/main/resources/messages_ja_JP.yml
M src/main/resources/messages_ms_MY.yml
M src/main/resources/messages_pl_PL.yml
M src/main/resources/messages_pt_BR.yml
M src/main/resources/messages_ru_RU.yml
M src/main/resources/messages_tr_TR.yml
M src/main/resources/messages_uk_UA.yml
M src/main/resources/messages_zh_CN.yml
M src/main/resources/plugin.yml
A src/main/resources/messages_cs_CZ.yml
A src/test/java/me/ryanhamshire/GriefPrevention/AdminSubdivisionTest.java
A src/test/java/me/ryanhamshire/GriefPrevention/PlayerDropItemEventHandlerTest.java
A src/test/java/me/ryanhamshire/GriefPrevention/ShapedSubdivisionTest.java
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:pqVXF7b5:OqKAQF2u"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:pqVXF7b5:OqKAQF2u"
}

