Skip to content

HyperPerms v2.8.3

Choose a tag to compare

@derrickmehaffy derrickmehaffy released this 05 Mar 23:09
· 145 commits to main since this release

Added

  • MysticNameTags Integration - First-class soft dependency with reflection-based detection
    • Event-driven cache invalidation on permission/group changes via HyperPerms EventBus
    • Calls TagManager.clearCanUseCache() and MysticNameTagsAPI.refreshNameplate() on changes so tags update without relog
    • Group-level permission changes invalidate all online players who may inherit from the affected group
    • LuckPerms conflict detection with warning log
    • Local CachedTagData with 5-second TTL for API method results
    • Public API: getActiveTagDisplay, getActiveTagId, getAvailableTagCount, hasTagPermission, refreshPlayerTags, etc.
    • Configurable via config.json mysticnametags section (enabled, refresh toggles, tag permission prefix)
    • Auto-migration adds config section to existing configs
  • PlaceholderAPI Expansion - 5 new MysticNameTags placeholders
    • %hyperperms_tag% - Active tag ID
    • %hyperperms_tag_display% - Active tag display text (colored)
    • %hyperperms_tag_count% - Number of available tags
    • %hyperperms_tags% - All available tag IDs (comma-separated)
    • %hyperperms_has_tag_<name>% - Check tag permission (true/false)
  • Temporary Permissions Developer API - Full public API for managing timed permissions programmatically
    • New TemporaryPermissionInfo record DTO with getRemaining() and isExpired() methods
    • PermissionHolder interface: 12 new methods for setting, querying, and modifying temporary permissions
      • setPermission(perm, value, Duration/Instant) - Set permissions with expiry
      • isTemporaryPermission(perm) / getPermissionExpiry(perm) / getPermissionRemaining(perm) - Query expiry state
      • setPermissionExpiry(perm, Instant) / adjustPermissionExpiry(perm, Duration) - Modify or remove expiry
      • getTemporaryPermissions() - Enumerate all active temporary permissions
      • addGroup(name, Duration/Instant) - Temporary group membership via interface
    • HyperPermsAPI top-level convenience methods: setTemporaryPermission(), getTemporaryPermissions(), isTemporaryPermission(), getPermissionRemaining()
    • All methods are backward-compatible default methods — no breaking changes
  • Permission Enumeration API - getResolvedPermissions(UUID) on HyperPermsAPI
    • Returns all granted permission strings for a user including inherited permissions from group hierarchy
    • Enables plugins to scan permissions by prefix without depending on the native provider chain

Fixed

  • EssentialsPlus Compatibility - Fixed provider ordering causing parameterized permission queries to fail silently
    • Hytale's native provider was first in the chain and couldn't resolve HyperPerms virtual groups
    • ensureFirstProvider() now reorders the provider chain so HyperPerms is always first
    • Fixes essentialsplus.sethome.limit.[n], essentialsplus.home.reduce.cooldown.*, and similar queries
  • Compilation Warnings - Resolved all 63 compiler warnings for a completely clean build
    • Fixed 56 dangling-doc-comments warnings in migration record types
    • Fixed 4 unchecked/rawtypes warnings in AsyncPermissionCheckBuilder
    • Fixed 3 text-blocks trailing whitespace warnings in SQLiteAnalyticsStorage