promotional bannermobile promotional banner

Jvips

JVIPS — VIP System with Vouchers for Hytale

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 stackable option per VIP in vips.json (default: false)
  • New stackAmount option 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 durationSeconds from vips.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 overwritten
  • vips.json — New VIP properties (like stackable, stackAmount) are injected into every VIP you've configured, with sensible defaults. Your commands, durations, display names, and lore are preserved
  • Messages/*.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

  • VipDefinition model: added stackable (boolean) and stackAmount (int) fields
  • VoucherPayload: added customDurationSeconds field, included in HMAC signature
  • PlayerVipState: added stackCount field for tracking extensions
  • VoucherService.ActivationResult: new stacked() and blockedStackLimit() result types
  • VoucherItemFactory: 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 for vips.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/stackAmount default to non-stackable behavior (same as v1.1.0).
  • HMAC compatibility — Vouchers created in v1.1.0 remain valid (customDuration defaults to 0).