
GriefPrevention3D
Форк популярного GriefPrevention с поддержкой 3D-субделений. Создавайте участки с точными границами по высоте - идеально для многоуровневых построек и сложных приватов на сервере Minecraft.
GriefPrevention3D v18.3.2 (Fabric 1.21.11 experimental)
Список изменений
GriefPrevention3D v18.3.2 — Fabric 1.21.11 (experimental alpha)
Wiki: https://github.com/castledking/GriefPrevention3D/wiki
This is an alpha, dedicated-server-only build of the native Fabric platform. It is not feature complete and is not a drop-in replacement for the Paper plugin. Back up
GriefPreventionDatabefore running it. Requires Fabric API. LuckPerms is optional but strongly recommended.
Overview
This build closes most of the remaining gap between the Fabric claim-block economy and Bukkit's, and brings Paper-compatible permission-node trust to Fabric. Everything below matches upstream GriefPrevention arithmetic deliberately, including its integer division and overflow behavior, so a world can be moved between Paper and Fabric without the numbers changing.
Manage trust permission renamed
The permission that gates granting manage trust is now griefprevention.managetrust, matching
the /managetrust command name. It replaces the griefprevention.managertrust spelling used during
Fabric development.
If you granted or denied griefprevention.managertrust in LuckPerms, update it. The node defaults
to allowed, so a server that never configured it explicitly needs no change.
Separately, granting trust to a permission node requires griefprevention.permissiontrust. On
Fabric it inherits from griefprevention.adminclaims, and falls back to operator status when no
permission provider is installed.
Manage trust no longer erases interaction trust
The shared claim codec stripped build, container, and access trust from any identifier listed under
Managers when a claim file was read. A player granted /trust and then /managetrust on Paper
lost their interaction trust as soon as the claim was loaded — on either platform.
Manage trust and interaction trust are now independent on Fabric too:
- reading a claim keeps both;
/gp3d claim trust <target> manageno longer clears an existing interaction level, and granting an interaction level no longer clears manage trust;- trust checks are satisfied by either track.
Claims already on disk are not migrated. If someone lost access under an earlier build, grant it again once; it will persist correctly from now on.
Playtime claim blocks
Accrual is wired and follows Bukkit's global ten-minute cadence and integer division. The default 100 blocks/hour therefore delivers 16 blocks per check — 96 over six uninterrupted checks, not 100.
- The first check treats a player as active unless they are riding or in liquid. Later checks apply
Accrued Idle Thresholdmovement detection andAccruedIdlePercent. - Accrual applies in every world, including creative and claim-disabled worlds, matching Bukkit.
griefprevention.accruals(default allowed) andgriefprevention.accruals.afkbypass(default operator-only) are honored through the permission bridge, including explicit LuckPerms denials.- Each award participates immediately in balance and claim mutations, and is atomically written to only the accrued-block line of the player file before the delivery completes.
- Disconnect and server shutdown retry any award whose write failed.
- A zero-or-negative hourly rate at startup does not schedule the task, as on Bukkit; making it positive requires a server restart.
Both the legacy BlocksAccruedPerHour / MaxAccruedBlocks keys and the newer
Claim Blocks Accrued Per Hour.Default / Max Accrued Claim Blocks.Default shapes are read, and
legacy values are carried into the newer keys rather than being reset to defaults.
Claim count limit and abandon return ratio
MaximumNumberOfClaimsPerPlayeris enforced. The first golden-shovel corner is rejected at the limit, and persistence rechecks it before the claim is actually created.griefprevention.overrideclaimcountlimitbypasses it; Minecraft operators get the same bypass without a permission provider.- A non-default
Claims.AbandonReturnRationow applies. Abandoning an owned top-level claim adjusts only the accrued-block line, using Bukkit's exact ceiling arithmetic — at0.5, abandoning a 25-block claim removes 13 accrued blocks. - The player record is written atomically. A malformed or concurrently changed record fails the mutation closed instead of being overwritten, and the claim deletion is rolled back if the entitlement update cannot be committed. At the default ratio, player files stay byte-for-byte identical during claim mutations.
Permission-node trust
Paper-compatible [permission.node] entries in Builders, Containers, Accessors, and
Managers are resolved through the optional LuckPerms bridge for block and entity protections and
for explosion-trigger access. General and level-specific deny entries are included in the
evaluation.
The trust commands accept a quoted bracketed node or a bare dotted node, and persist the bracketed Bukkit representation, so a claim edited on Fabric reads correctly on Paper:
/gp3d claim trust myserver.vip container
/gp3d claim trust "[myserver.vip]" container
Trust targets may now also be a previously seen player name, resolved through the online list and Minecraft's seen-player cache — not just online players.
Command replies are sent only to the executor instead of being broadcast to other operators.
Config and message files are updated in place
On each Fabric boot, newly shipped config.yml and messages.yml keys that are missing from an
existing file are inserted. Existing values, comments, ordering, and unknown addon fields are left
untouched.
Still not wired
Economy operations, administrative balance commands, denial feedback messages, subdivision tools, fluid/piston protection paths, and legacy/database import tooling remain unimplemented. See the platform README for the current coverage list and the manual verification gate.
Verification
The full ./gradlew check pipeline passes: 434 tests, 0 failures, 0 errors — 51 on the Fabric
platform, 2 in the Fabric bootstrap, 136 in the shared core, and 245 in the Bukkit plugin. The
Fabric boot smoke test runs against the exact generated universal JAR.
Fabric coverage added here includes the accrual cadence and idle arithmetic, the abandon-ratio penalty, claim-count limits and overrides, permission-node trust evaluation and target resolution, the trust-command permission defaults, and the config/message defaults updater.
Cross-platform round trips, LuckPerms-backed permission trust, and the claim-block economy still need live verification. The manual gate in the platform README covers explosions, migration, claim-block balance, accrual, abandon ratio, and permission-node trust on both platforms.
Files Changed
M gp3d-core/src/main/java/com/griefprevention/claims/ClaimBlockConfigCodec.java
M gp3d-core/src/main/java/com/griefprevention/claims/ClaimBlockSettings.java
M gp3d-core/src/main/java/com/griefprevention/claims/ClaimTrustSnapshot.java
M gp3d-core/src/main/java/com/griefprevention/persistence/ClaimDocumentCodec.java
M gp3d-core/src/main/java/com/griefprevention/persistence/PlayerDataDocumentCodec.java
A gp3d-core/src/main/java/com/griefprevention/claims/ClaimBlockAbandonment.java
A gp3d-core/src/main/java/com/griefprevention/claims/ClaimBlockAccrual.java
A gp3d-core/src/main/java/com/griefprevention/claims/ClaimTrustCommandPermissions.java
A gp3d-core/src/main/java/com/griefprevention/claims/ClaimTrustIdentifier.java
M platforms/fabric-1.21.11/README.md
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricClaimBlockService.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricClaimRepository.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricClaimToolHooks.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricCommands.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricDataFolder.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricExplosionProtection.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricProtectionHooks.java
M platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/GriefPreventionFabric.java
A platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricClaimBlockAccrual.java
A platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricClaimTrustEvaluator.java
A platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricPermissionResolver.java
R platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricGroupBonusPermissions.java -> FabricPermissions.java
A platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricTrustCommandAuthorization.java
A platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricTrustTargetResolver.java
R platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/LuckPermsGroupBonusPermissionResolver.java -> LuckPermsPermissionResolver.java
A platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/YamlDefaultsUpdater.java
D platforms/fabric-1.21.11/src/main/java/com/griefprevention/fabric/FabricGroupBonusPermissionResolver.java
