File Details
HyperPerms-2.7.8.jar
- R
- Feb 5, 2026
- 2.47 MB
- 133
- Early Access
File Name
HyperPerms-2.7.8.jar
Supported Versions
- Early Access
API v2 Foundation & PlaceholderAPI Integration
This release introduces the HyperPerms API v2 foundation with a completely overhauled event system, async permission methods, query capabilities, and metrics tracking. It also adds PlaceholderAPI integration for Hytale.
API v2 Foundation
New Event System
The event system has been completely overhauled with proper event firing across all permission operations.
New Event Classes:
GroupCreateEvent- Fired when a group is created (cancellable)GroupDeleteEvent- Fired when a group is deleted (cancellable)GroupModifyEvent- Fired when group properties changeUserGroupChangeEvent- Fired when user group membership changesUserLoadEvent- Fired when user data is loadedUserUnloadEvent- Fired when user is unloaded from cacheDataReloadEvent- Fired when data is reloadedTrackPromotionEvent- Fired on track promotion (cancellable)TrackDemotionEvent- Fired on track demotion (cancellable)
Event Enhancements:
Cancellableinterface for events that can be cancelledEventPriorityenum (LOWEST, LOW, NORMAL, HIGH, HIGHEST, MONITOR)- Async event subscription support
PermissionHolderListenerpattern for User/Group models
Async Permission Methods
New async methods for non-blocking permission checks:
// Async permission check api.hasPermissionAsync(uuid, "permission.node") .thenAccept(result -> { }); // Async with TriState api.getPermissionValueAsync(uuid, "permission.node") .thenAccept(tristate -> { }); // Fluent async builder api.checkAsync(uuid) .permission("build.place") .inWorld("nether") .withGamemode("survival") .result() .thenAccept(canBuild -> { });
TriState Enum
New TriState enum for distinguishing between TRUE, FALSE, and UNDEFINED permission states:
TriState value = api.getPermissionValue(uuid, "some.permission"); if (value == TriState.UNDEFINED) { // Permission not explicitly set }
QueryAPI
New API for searching and querying users and groups:
QueryAPI query = api.getQuery(); // Find users with a permission query.findUsersWithPermission("admin.*").thenAccept(uuids -> { }); // Find users in a group query.findUsersInGroup("moderator").thenAccept(uuids -> { }); // Fluent user queries query.queryUsers() .withPermission("build.*") .inGroup("builder") .withContext("world", "creative") .limit(100) .execute(); // Group queries query.queryGroups() .withWeightBetween(50, 100) .inheritsFrom("default") .execute();
MetricsAPI
New API for accessing permission check statistics and audit logs:
MetricsAPI metrics = api.getMetrics(); if (metrics != null) { // Cache statistics CacheStats cache = metrics.getCacheStats(); double hitRate = metrics.getCacheHitRate(); // Permission check stats PermissionCheckStats stats = metrics.getCheckStats(); // Hotspot analysis metrics.getHotspots(10).thenAccept(hotspots -> { hotspots.forEach(h -> System.out.println(h.permission() + ": " + h.checkCount()) ); }); // Audit log metrics.getRecentAuditLog(50).thenAccept(entries -> { }); }
Bulk Operations
New bulk operations in UserManager and GroupManager:
// Load multiple users userManager.loadUsers(uuidCollection).thenAccept(userMap -> { }); // Save multiple users userManager.saveUsers(userCollection); // Batch modify users userManager.batchModify(uuids, user -> { user.addNode(Node.builder("new.permission").build()); }); // Get all known UUIDs userManager.getAllKnownUUIDs().thenAccept(allUuids -> { });
PlaceholderAPI Integration
HyperPerms now integrates with PlaceholderAPI for Hytale, providing two-way placeholder support.
Available Placeholders
| Placeholder | Description |
|---|---|
%hyperperms_prefix% |
Player's prefix |
%hyperperms_suffix% |
Player's suffix |
%hyperperms_group% |
Primary group name |
%hyperperms_groups% |
All groups (comma-separated) |
%hyperperms_group_weight% |
Primary group weight |
%hyperperms_has_<permission>% |
Check if player has permission |
Configuration
placeholderapi: enabled: true parse-external: true # Parse external PAPI placeholders in chat
Bug Fixes
Async Threading Fix
Fixed a critical threading issue where permission checks could cause race conditions when called from async contexts. Permission resolution now properly handles concurrent access.
Prefix/Suffix Priority Fix
Group weight is now correctly used as the default priority for prefix and suffix resolution. Previously, the priority could be incorrectly calculated in certain inheritance scenarios.
Web Editor Error Messaging
Improved error messaging when applying empty or invalid changes from the web editor. Users now receive clear feedback about what went wrong.
Documentation
- Redesigned README with expanded features and documentation links
- Added comprehensive API documentation links
- Improved getting started guide

