HyperEssentials integrates with several plugins via reflection-based soft dependencies. All integrations fail gracefully if the target plugin is not installed.
HyperEssentials uses HyperPerms for permission checks when available. Detection is reflection-based via HyperPermsProviderAdapter.
Resolution chain (PermissionManager):
- Try HyperPerms via
HyperPermsProviderAdapter - Fall back to OP check (via reflection)
- For bypass permissions, default to
false - For user permissions, respect
allowWithoutPermissionModconfig flag
Features used:
hasPermission(uuid, node)— standard permission checksgetPermissionValue(uuid, prefix, default)— numeric limits (e.g., home count viahome.limit.N)getPrimaryGroup(uuid)— group lookup- Wildcard resolution: exact node → category wildcard (
hyperessentials.home.*) → root wildcard (hyperessentials.*)
Reflection-based integration via HyperFactionsIntegration for territory awareness:
getFactionAtLocation(world, x, z)— faction name at coordinatesgetRelationAtLocation(playerUuid, world, x, z)— relation type (OWN, ALLY, NEUTRAL, ENEMY)getTerritoryLabel(world, x, z)— territory display label
FactionTerritoryChecker uses this integration for home placement/teleport restrictions:
canUseHome(uuid, world, x, z)— returnsResult.ALLOWEDor a denial with territory typeResultenum:ALLOWED,BLOCKED_OWN,BLOCKED_ALLY,BLOCKED_ENEMY,BLOCKED_NEUTRAL,BLOCKED_WILDERNESS- Territory restrictions are configurable per-relationship in
config/homes.json - Bypass permissions:
bypass.factions,bypass.factions.sethome,bypass.factions.home
Economy integration via VaultEconomyProvider using reflection on VaultUnlocked 2:
getBalance(uuid)— get player balancehas(uuid, amount)— check if player has sufficient fundswithdraw(uuid, amount)— withdraw from player accountdeposit(uuid, amount)— deposit to player account- Uses plugin name
"HyperEssentials"as the account namespace
Lazy initialization — only connects to VaultUnlocked on first use.
Listed as a soft dependency in manifest.json for load ordering. Permission resolution falls through the PermissionManager chain if LuckPerms is present alongside or instead of HyperPerms.
Class detection via Class.forName("com.ecotale.Ecotale"). No active integration logic — reserved for future economy features (teleport costs, kit prices, warp fees).
Stub class with no implementation. Reserved for future chat integration (announcement delivery through channels, module-specific formatting).