MysticNametags

A custom nametag system where you create your own tags players can equip or purchase.

File Details

mysticnametags-1.1.6.jar

  • R
  • Mar 2, 2026
  • 20.77 MB
  • 272
  • Early Access

File Name

mysticnametags-1.1.6.jar

Supported Versions

  • Early Access

🏷 MysticNameTags v1.1.6


🧩 Server Compatibility

  • Target Server Version: >= 2026.1.0
  • Tested against Hytale server builds 2026.1.x.
  • Fully compatible with v1.1.5 configs and data (tags, settings, storage).

🔥 Major Additions

1️⃣ Reliable Playtime Requirements + Zib’s Playtime Integration

Playtime-based tag requirements are now fully functional and no longer rely on broken/legacy API calls.

New Playtime Backend

Playtime is now provided via a dedicated PlaytimeService:

  • Ticks online time at a configurable interval (default 60s).
  • Persists playtime using the same storageBackend as tags:
    • FILE, SQLITE, or MYSQL.
  • Exposed through IntegrationManager via PlaytimeProvider.

Tags that use:

"requiredPlaytimeMinutes": 60

now correctly check against this service.

Configurable playtime provider

settings.json gained a playtimeProvider mode:

"playtimeProvider": "AUTO"

Supported values:

  • "AUTO" – Prefer Zid’s Playtime mod if present, otherwise fallback to internal stats.
  • "INTERNAL" – Always use MysticNameTags’ internal PlaytimeService.
  • "ZIB_PLAYTIME" – Force Zib’s Playtime; logs a warning and falls back if the mod isn’t found.
  • "NONE" – Disable playtime requirements (they always pass).

Zib’s Playtime as Optional Depend

If Zid’s Playtime is installed:

  • MysticNameTags automatically wires a ZibPlaytimeProvider through IntegrationManager.
  • Playtime requirements read directly from Zib’s API.
  • If the mod is missing or the API misbehaves:
    • MysticNameTags now fails cleanly and falls back to the internal provider instead of throwing.

TL;DR – Playtime requirements work, don’t crash, and can be swapped between internal and Zib’s Playtime via config.


2️⃣ EndlessLeveling Stat Requirements

Tags can now depend on EndlessLeveling stats using special requiredStatKey prefixes.

New behavior in IntegrationManager#getStatValue:

  • Keys starting with endlessleveling. are routed through EndlessLevelingStatBridge.
  • If that succeeds, the result is used as the stat value.
  • If EndlessLeveling is missing or throws, the system logs at FINE level and continues with internal stats (no hard failure).

Examples in tags.json:

"requiredStatKey": "endlessleveling.level",
"requiredStatValue": 30
"requiredStatKey": "endlessleveling.xp",
"requiredStatValue": 15000
"requiredStatKey": "endlessleveling.skill.archery",
"requiredStatValue": 10

The tag requirements panel now renders these nicely via resolveStatDisplayName:

  • endlessleveling.level → “Endless Level” (localized)
  • endlessleveling.xp → “Endless XP” (localized)
  • endlessleveling.skill.<Attr> → “Skill Level: <Pretty Name>` or a localized string where provided.

This lets you build progression tags like “Endless Wanderer”, “Archery Adept”, or “Level 50 Founder” against the EndlessLeveling progression curve.


3️⃣ Settings System Quality-of-Life Overhaul

settings.json has been cleaned up and made far more self-documenting, without breaking compatibility.

Grouped sections with inline descriptions

Instead of a pile of _comment_* fields, the file is now grouped by section:

"_": "MysticNameTags settings.json – edit & reload/restart to apply changes.",
"_core": "Core nameplate settings. nameplateFormat = layout (tokens: {rank}, {name}, {tag})...",
"nameplateFormat": "{rank} {name} {tag}",
"stripExtraSpaces": true,
"language": "en_US",
"tagDelaysecs": 60,

"__storage": "Storage backend for tag ownership data...",
"storageBackend": "FILE",
"sqliteFile": "playerdata.db",
"mysqlHost": "localhost",
...

Sections include:

  • _core – nameplate format, cooldown, language
  • _storage – FILE/SQLITE/MYSQL + connection details
  • _nameplates – master toggle + default tag behavior
  • _endless – EndlessLeveling nameplate/race options
  • _placeholders – WiFlow / helpch PlaceholderAPI toggles
  • _economyeconomySystemEnabled, coin mode, physical coin mode, permission gate
  • _rpg – RPGLeveling nameplate hooks
  • _playtime – playtime provider mode + /tags owned toggle
  • _other – any unknown/future settings

New/updated settings

  • tagDelaysecs Configurable equip cooldown in seconds before a player can equip a different tag. Used by the UI equip throttle & notification.
  • playtimeProvider (See Playtime section above.)
  • economySystemEnabled, useCoinSystem, usePhysicalCoinEconomy Clarified roles, with better inline documentation:
    • economySystemEnabled is the master flag – if false, the Tags UI shows N/A balance and tag purchases don’t attempt any economy backend, even if EcoTale/HyEssentialsX/VaultUnlocked/etc. are present.
  • ownedTagsCommandEnabled Controls whether /tagsowned + the owned-only UI path are available.

Existing fields like language, RPGLeveling toggles, and default tag behavior remain unchanged but are now much easier to understand for server owners.


4️⃣ Tag UI & Nameplate QoL Improvements

In addition to the v1.1.5 requirements panel, v1.1.6 adds further polish and control.

Equip Cooldown & Feedback

  • New equip throttle using Settings.getTagEquipDelaySeconds():
    • When a player tries to equip a different tag too quickly, MysticNameTags:
      • Cancels the action.
      • Sends a localized notification (via MysticNotificationUtil) showing the remaining cooldown seconds.
  • Cooldown does not apply to:
    • Unequips.
    • Equipping the same tag again.
    • Internal ownership changes.

Smarter Requirements Panel (extended)

The hover panel now:

  • Shows playtime progress using a dedicated translation key:
    • Example: Playtime: 32 / 60 minutes
  • Includes a block for placeholder-based requirements (for integrations that use placeholder conditions in tags.json):
    • Uses readable placeholder operator value lines.
  • Uses better rank & tag color detection for the Current Nameplate preview:
    • Tries rank prefix color first.
    • Falls back to tag’s primary color if needed.

All of this is wired through MysticNameTagsTagsUI and the buildRequirementsBody(...) / resolveStatDisplayName(...) helpers, and is fully localization-friendly.


⚙ Improvements

  • Playtime integration is now centralized and pluggable via PlaytimeService + PlaytimeProvider, instead of scattered or broken API calls.
  • EndlessLeveling integration is no longer nameplate-only:
    • You can now use Endless stats directly in requiredStatKey.
  • Settings are easier to read and reason about, with grouped sections and short in-file docs for each group.
  • IntegrationManager:
    • Clean separation between:
      • Internal stats (PlayerStatManager).
      • EndlessLeveling stats via EndlessLevelingStatBridge.
      • Playtime providers (internal vs Zib’s Playtime).
    • More defensive logging around stat/placeholder/item handlers.

🚀 Performance

  • Playtime tracking piggybacks on the existing ECS + timer infrastructure:
    • No per-tick bloat; updates occur at the configured interval.
  • EndlessLeveling stat lookups:
    • Only happen when a tag actually needs an endlessleveling.* stat.
    • Fail fast and defer to internal stats if the bridge throws.
  • Requirements hover panel:
    • Only builds content when actually hovering a tag with requirements.
    • Uses cached canUse where possible to avoid repeated expensive checks.

🐛 Bug Fixes

  • Fixed broken or outdated playtime API calls, which previously caused:
    • Playtime requirements to silently fail or never unlock.
    • Occasional errors when external playtime mods were missing.
  • Ensured that Zid’s Playtime being absent no longer spams stack traces:
    • Integration is now truly optional and safely probed via reflection.
  • Fixed edge cases where missing or malformed requiredStatKey / requiredPlaytimeMinutes values in tags.json could cause NPEs or incorrect lock states.
  • Improved resilience of:
    • Item requirement handlers – unexpected inventory API issues now log and fail safe, instead of bricking tags.
    • Stat providers – bad or unknown stat keys no longer break the UI and are handled gracefully.
  • Resolved minor UI inconsistencies between:
    • Economy dashboard reporting and tag menu “balance N/A”.