
GPExpansion v1.0.8
release4 мая 2026 г.GPExpansion v1.0.8
Bug Fixes
Config Migration Fix
Fixed a critical bug in the player-commands section migration that could corrupt config.yml:
- The
ensurePlayerCommandPresent()method now properly inserts new entries immediately after theplayer-commands:header - Previously, the insertion logic could place entries at incorrect indentation levels, causing YAML parse errors
- This fixes the
InvalidConfigurationException: expected <block end>, but found '-'error during plugin startup
Technical Changes
- VersionManager.java: Rewrote
ensurePlayerCommandPresent()to:- Detect the
player-commands:header with proper regex matching - Preserve existing indentation structure
- Insert entries immediately after the header before existing list items
- Add proper logging for insertion failures
- Detect the
Migration
If your config.yml was corrupted by v1.0.7's migration:
- Stop your server
- Delete or rename
plugins/GPExpansion/config.yml - Start the server - a fresh config will be generated
- Re-apply your custom settings from backup
Alternatively, manually fix the YAML structure ensuring player-commands entries are indented with 2 spaces:
player-commands:
- claimfly.use
- claims
Files Changed
src/main/java/codes/castled/gpexpansion/config/VersionManager.java
Notes
- No new features in this release - strictly a bugfix for the config migration
- All existing claim flight functionality remains unchanged
- PlaceholderAPI placeholders, admin commands, and passive claim flight mode work as documented in v1.0.7
GPExpansion v1.0.7
release4 мая 2026 г.GPExpansion v1.0.7
Highlights
- Timed Claim Flight — Ported claim flight from the GriefPrevention3D-ClaimFly fork and expanded it into a time-bank based toggle feature.
- Passive Claim Flight Option — Added a config toggle to allow claim flight without the time bank.
- Claim Flight Admin Tools — Added
/claimflymanagement commands for staff. - PlaceholderAPI Support — Added claim flight time/status placeholders.
- Config Repair — Fixed malformed
player-commandshandling and added automaticclaimfly.useinsertion.
New Features
Timed Claim Flight
Claim flight now grants flight only when the player has all required conditions:
- Permission:
griefprevention.claimfly.use(default:true) - Available time: player must have claim flight time remaining
- Toggle enabled: player must have claim flight enabled with
/claimflyor/claim fly - Claim access: player must be inside a claim they have access/trust in
- Gamemode: Survival or Adventure only
When active, remaining claim flight time is consumed while the player is receiving claim flight.
Passive Claim Flight Mode
Added:
passive-claim-flight: false
When set to true, players with griefprevention.claimfly.use can use claim flight in owned/trusted claims without needing claim flight time. This disables the time-bank requirement and prevents claim flight time from being consumed while passive mode is active.
Player Commands
/claimfly— Toggles personal claim flight on/off/claim fly— Alias through the main/claimcommand
Players without remaining claim flight time cannot enable the toggle.
Admin Commands
Staff with gpx.admin can manage online players' claim flight time:
/claimfly add <player|all|*> <time>/claimfly check <player|all|*>/claimfly reset <player|all|*>/claimfly take <player|all|*> <time>/claimfly set <player|all|*> <time>
Supported time examples:
30m1h1h20m12s1d
PlaceholderAPI
Added placeholders:
%claim_flight_time%— Remaining claim flight time, formatted like1h 20m 12sor0s%claim_flight%— Returnsyesif the player has claim flight time remaining, otherwiseno
Claim Flight Safety
- Automatically revokes claim flight when leaving a valid claim or running out of time
- Applies slow falling for 5 seconds if the player was actively flying when flight is revoked
- Periodic reconciler runs every 2 seconds to catch:
- Gamemode changes
- Permission revocation
- Trust/access changes
- Time expiration
- Tracks only flight granted by claimfly so other plugin flight sources are not stripped
Fixes
- Fixed
PlayerJoinEventNullPointerExceptioncaused by storing null claim values in aConcurrentHashMap - Fixed
player-commandsparsing so hyphenated permission names likesign.create.self-mailboxare not split incorrectly - Disabled the config normalization routine that could corrupt YAML indentation for
claim.toggleglobal.1 - Added automatic ensure logic for
claimfly.usein existingplayer-commandssections
Migration
The default config.yml now includes:
passive-claim-flight: false
player-commands:
- claimfly.use
Existing installs will automatically add passive-claim-flight: false if it is missing and append claimfly.use to player-commands if it is missing. This grants griefprevention.claimfly.use through the dynamic gpx.player permission path.
Claim flight balances and toggle states are stored in:
plugins/GPExpansion/claim-flight.yml
Technical Notes
- Uses GPBridge for reflection-based GriefPrevention API access
- Folia-compatible via SchedulerAdapter
- Uses a persistent claim flight manager for player time balances and toggle states
- Only applies to Survival and Adventure gamemodes
- Creative and Spectator gamemodes manage their own flight and are ignored by claimfly
GPExpansion v1.0.6
release1 мая 2026 г.GPExpansion v1.0.6
Highlights
- Real VaultUnlocked v2 support:
/buyclaimblocksand the rest of the economy flow now correctly use the modern UUID + BigDecimal API. - The
/buyclaimblocksconfirmation chest is now fully translatable via a newguis/buyclaimblocks-confirm.yml. - New layout for the confirmation menu: Cancel · Info · Confirm (red, gold ingot, green).
- Clearer error message when an economy provider plugin is missing vs. when Vault itself is missing.
- Stopped the duplicate-permission warnings on startup when running alongside GriefPrevention.
PermissionManagernow tolerates malformedplayer-commandsentries inconfig.yml.- Source repackaged from
dev.towki.gpexpansiontocodes.castled.gpexpansion.
Translatable Confirmation GUI
A new file is shipped to plugins/GPExpansion/guis/buyclaimblocks-confirm.yml on first run. It controls every visible string and item inside the confirmation chest:
title: "&6Buy {amount} blocks for {totalCost}"
filler:
material: GRAY_STAINED_GLASS_PANE
slots:
cancel: 0
info: 2
confirm: 4
items:
info:
material: GOLD_INGOT
name: "&6&l{amount} Claim Blocks"
lore:
- ""
- "&7Cost per block: &e{cost}"
- "&7Total cost: &a{totalCost}"
confirm:
material: LIME_WOOL
name: "&a&lCONFIRM"
lore:
- ""
- "&7Click to purchase"
- "&e{amount} &7claim blocks"
cancel:
material: RED_WOOL
name: "&c&lCANCEL"
lore:
- ""
- "&7Click to cancel"
Placeholders ({amount}, {cost}, {totalCost}) are pre-formatted by your active economy. The defaults match the previous English text, so existing servers see no visible change until they translate the file.
Chat-side messages (cost mismatch, purchase confirmation, etc.) continue to be sourced from GriefPrevention's messages.yml via the v1.0.5 bridge.
Repackage: codes.castled.gpexpansion
The Java sources moved from dev.towki.gpexpansion to codes.castled.gpexpansion. This is purely a namespace/branding change — there is no behavioral difference and no migration step is required.
Compatibility
- Paper API
1.26.1(Java 21). - Folia-supported.
- GriefPrevention3D
v17.3.10+(uses the sameMessagesenum bridge introduced in v1.0.5). - Vault, VaultUnlocked v1, VaultUnlocked v2.x, or any provider that registers
net.milkbowl.vault.economy.Economyornet.milkbowl.vault2.economy.Economy.
Files Added / Changed
- Added
src/main/resources/guis/buyclaimblocks-confirm.yml. - Refactored
BuyClaimBlocksConfirmationGUIto render fully from the new YAML with English fallbacks. - Refactored
GPExpansionPlugineconomy methods (getBalance,hasMoney,withdrawMoney,depositMoney,formatMoney) for v2 BigDecimal/UUID + newinterpretEconomyResponsehelper + newisVaultPluginInstalledhelper. - Refactored
BuyClaimBlocksCommandto differentiate "no Vault" vs "no provider". - Refactored
PermissionManager.updatePlayerCommandPermissions()for malformed-entry tolerance. - Cleaned
paper-plugin.yml(removed duplicategriefprevention.claims/griefprevention.transferclaimdeclarations). - Renamed all source packages from
dev.towki.gpexpansion→codes.castled.gpexpansion.
GPExpansion v1.0.5
release30 апреля 2026 г.GPExpansion v1.0.5
Highlights
/buyclaimblockschat output is now translatable through GriefPrevention'smessages.yml.- Added a public
GPBridge.getGPMessage(...)accessor so other GPExpansion features can reuse GP-side translations without duplicating strings. - Added
GPExpansionPlugin.getBalance(OfflinePlayer)for richer "not enough money" error context.
Unified Translations With GriefPrevention
Server admins reported that strings like "This command can only be used by players." and "Economy features are disabled on this server." could not be translated for the /buyclaimblocks flow because they were hard-coded in GPExpansion. This release routes the chat-side strings through GriefPrevention's existing messages.yml, so a single translation pass covers both plugins.
The following messages are now read from plugins/GriefPreventionData/messages.yml (with GP3D v17.3.10+, or any GP fork that exposes the Messages enum):
CommandRequiresPlayer— sent when the command is used from console.EconomyDisabled— when the claim-blocks economy feature is disabled.EconomyNoVault— when no Vault provider is hooked.EconomyBuyBlocksUsage— when the amount argument is missing.EconomyInvalidAmount— when the amount argument is not a positive integer.EconomyNotEnoughMoney— supports{0}cost and{1}balance placeholders.EconomyPurchaseCancelled— sent when the player clicks the GUI cancel button.EconomyBuyBlocksConfirmation— supports{0}amount,{1}cost,{2}new total placeholders.
If GriefPrevention is missing or running an older fork that does not expose those keys, GPExpansion silently falls back to the same English text shipped in v1.0.4, so behavior is unchanged for that case.
GUI-only strings (button labels, item names, hopper title, lore) still live in plugins/GPExpansion/lang.yml and are unaffected by this change.
Technical Improvements
GPBridge.getGPMessage(String key, String... args)andgetGPMessageOr(String key, String fallback, String... args)provide reflective access to GP's translated messages, with cached lookups for both theMessagesenum class and theDataStore.getMessagemethod.GPExpansionPlugin.getBalance(OfflinePlayer)exposes a unified balance read that supports both legacy Vault and Vault 2 providers.BuyClaimBlocksCommandandBuyClaimBlocksConfirmationGUIwere refactored to use the new bridge methods; English defaults remain inline as fallbacks.
GPExpansion v1.0.4
release21 апреля 2026 г.GPExpansion v1.0.4
Highlights
- Added a new
/buyclaimblocksconfirmation menu and full purchase flow driven from GPExpansion. - Significant
/claimmapperformance pass for large claims and long shaped edits. - Added in-canvas panning controls so the map editor can be navigated without touching the spyglass icon.
Buy Claim Blocks Confirmation Flow
- Added a new hopper-style confirmation GUI for
/buyclaimblocks <amount>.- Center slot shows the total cost and cost-per-block derived from GriefPrevention's economy config.
- Dedicated Confirm (lime) and Cancel (red) buttons, with glass-pane fillers between them.
- Closing the inventory without clicking Confirm cancels the purchase cleanly.
- The command now routes entirely through GPExpansion when present:
- validates GriefPrevention availability and
claimBlocksEnabled, - requires a Vault or VaultUnlocked provider,
- re-checks balance at the moment of confirm to avoid race conditions,
- refunds automatically if the claim-block credit step fails.
- validates GriefPrevention availability and
- Added tab-completion with common purchase sizes (
10,50,100,500,1000).
Claim Map Editor Performance
- Reduced per-click latency on
/claimmapfor large claims by:- reusing cached boundary state between consecutive shaped edits,
- short-circuiting polygon rebuilds on no-op edits,
- avoiding repeated reflective lookups into GriefPrevention internals on the hot path.
- Improved frame-to-frame update cost when dragging or repeatedly clicking tiles, so long shaped paths can be drawn in a single session without hitches.
- Cut down redundant visualization refreshes during multi-tile edits.
In-Canvas Panning Options
- Added in-canvas panning so the map can be moved without touching the spyglass icon.
- Dedicated pan controls shift the viewport while keeping selection and edit state.
- Panning works in both Basic and Shaped edit modes.
- Panning respects the current zoom level and snaps to the active tile grid so edits stay aligned after moves.
- Selection and partial-tile overlays stay consistent across pans so in-progress shaped edits are not lost by navigating the canvas.
Technical Improvements
- Added public helpers on the GP bridge for reading the claim-blocks economy config and crediting bonus claim blocks through the normal save path.
- Reduced allocations in the map editor's tile refresh loop, especially for claims with many cells or long perimeters.
Recommended Pairing
- Pair this release with GriefPrevention
v17.3.5for the shaped-claim performance work that enables large shaped path creation driven from the map editor.