File Details
Jvips-1.2.0.jar
- R
- Feb 13, 2026
- 2.36 MB
- 27
- Early Access
File Name
Jvips-1.2.0.jar
Supported Versions
- Early Access
JVIPS v1.2.0 — Voucher Stacking, Custom Duration & Smart Config Merge
🆕 New Features
🔄 Voucher Stacking
Players can now extend their active VIP by using additional vouchers of the same type, instead of being blocked.
- New
stackableoption per VIP invips.json(default:false) - New
stackAmountoption to limit maximum stacks (0= unlimited) - Each stack adds the full VIP duration to the remaining time
- Stack count is tracked per player and persisted across restarts
- Works with both voucher activation (right-click) and
/vips add
Example config:
"thorium": {
"durationSeconds": 2592000,
"stackable": true,
"stackAmount": 3
}
In-game behavior:
- Player activates Thorium (30 days) → uses another Thorium voucher → now has 60 days remaining
- After 3 stacks, further attempts are blocked with a configurable message
⏱️ Custom Duration
Admins can now specify a custom duration when giving VIPs, overriding the default from vips.json.
Commands:
/vips givekey <vip> <player> --duration <time>
/vips add <player> <vip> --duration <time>
Time format: Combine any of d (days), h (hours), m (minutes), s (seconds):
/vips givekey thorium Player1 --duration 1d2h10m
/vips add Player1 thorium --duration 30m
/vips givekey cobalt Player2 --duration 7d
- Duration is stored in the voucher metadata and protected by HMAC signature
- Voucher lore displays the correct custom duration
- If omitted, uses the default
durationSecondsfromvips.json
🔀 Smart Config Merge (Auto-Update)
Updating the plugin no longer resets your configurations. JVIPS now performs intelligent merging on startup and on /vips reload.
How it works:
config.json— New sections and fields are added automatically; your existing settings are never overwrittenvips.json— New VIP properties (likestackable,stackAmount) are injected into every VIP you've configured, with sensible defaults. Your commands, durations, display names, and lore are preservedMessages/*.json— New message keys are added without touching your customized messages
Example: After updating from v1.1.0 to v1.2.0, your custom VIP automatically gains the new fields:
Before (your config):
"myCustomVip": {
"displayName": "[DIAMOND]",
"durationSeconds": 86400,
"commandsOnActivate": ["lp user {player} parent add diamond"]
}
After update (auto-merged):
"myCustomVip": {
"displayName": "[DIAMOND]",
"durationSeconds": 86400,
"stackable": false,
"stackAmount": 0,
"commandsOnActivate": ["lp user {player} parent add diamond"]
}
All merge actions are logged to the console for full transparency.
📝 New Message Keys
The following message keys have been added to all language files (en_US, pt_BR, es_ES):
| Key | Description |
|---|---|
player.vipStacked |
Shown when a player extends their VIP via stacking |
error.stackLimitReached |
Shown when stack limit is reached |
error.invalidDuration |
Shown when an invalid duration format is provided |
admin.add.stacked |
Admin feedback when stacking via /vips add |
These keys are automatically added to your existing message files via the smart merge system.
🛠️ Technical Changes
VipDefinitionmodel: addedstackable(boolean) andstackAmount(int) fieldsVoucherPayload: addedcustomDurationSecondsfield, included in HMAC signaturePlayerVipState: addedstackCountfield for tracking extensionsVoucherService.ActivationResult: newstacked()andblockedStackLimit()result typesVoucherItemFactory: accepts custom duration, writes to item metadata (jvips:customDuration)- New utility:
DurationParser— parses human-readable duration strings (1d2h10m5s→ seconds) - New utility:
ConfigMerger— generic deep-merge for JSON config files - New utility:
VipsConfigMerger— specialized merge forvips.json(respects arrays, templates from JAR)
📦 Upgrade Notes
- Drop-in replacement — Just replace the JAR and restart. All configs are auto-merged.
- No manual config changes required — New fields are added automatically with safe defaults.
- Backward compatible — Existing VIPs without
stackable/stackAmountdefault to non-stackable behavior (same as v1.1.0). - HMAC compatibility — Vouchers created in v1.1.0 remain valid (customDuration defaults to
0).

