# 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.adminclaims` keep 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` (or `makeadmin` on 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](https://github.com/GriefPrevention/GriefPrevention/issues/2619),
rooted in the server behavior described in
[PaperMC/Paper#7726](https://github.com/PaperMC/Paper/issues/7726).
**Fix:** the drop is stopped at the click instead of after the fact, using the
community-accepted workaround from
[PaperMC/Paper#12475](https://github.com/PaperMC/Paper/pull/12475):
- `InventoryClickEvent` drop actions (`DROP_ONE_SLOT`/`DROP_ALL_SLOT`/`DROP_ONE_CURSOR`/
`DROP_ALL_CURSOR`) are cancelled at `LOWEST` priority 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` (default `false`).
- 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.
- `MyCommand` was 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 new `messages_cs_CZ.yml` (Czech) locale file was added with a full translation of all
330 message keys.
## Tests
- `ShapedSubdivisionTest` covers 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.
- `ClaimBoundsTest` covers column-exact overlap for shaped polygons: cavity columns are not
part of a shaped claim, while Y separation between claims is preserved.
- `AdminSubdivisionTest` covers 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.
- `PlayerDropItemEventHandlerTest` covers 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 when
`AllowCombatItemDrop` is 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
```
Optional dependencies
PlaceholderAPI
Any compatible version
VaultUnlocked
Any compatible version
QuickShop-Hikari
Any compatible version
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }