EndlessLeveling Integration
GroupManager integrates with EndlessLeveling (by Airijko) to provide two complementary bridges: an Info Bridge that displays player levels in the group HUD, and a Party Bridge that lets EndlessLeveling's XP-sharing and aura systems recognise GroupManager groups as native parties.
How It Works
The integration activates automatically at server startup if EndlessLeveling is detected. It is entirely optional — GroupManager works without it.
Info Bridge — Level Display in HUD
Each group member's level is fetched from EndlessLeveling every server tick and cached in GroupManager's tracker. The group HUD then shows the level next to each member's name:
PlayerName [Lv.42] - Leader
PlayerName [Lv.17]
PlayerName [Lv.5] [OFFLINE]
The level indicator updates in real time alongside the health, energy, and mana bars. If EndlessLeveling is not installed, the HUD behaves exactly as before.
Party Bridge — XP Sharing & Auras
EndlessLeveling provides party-based features (XP sharing in range, group auras, mob scaling) that require a compatible party plugin. GroupManager satisfies this requirement by exposing a PartyPro-compatible API (me.tsumori.partypro.api.PartyProAPI) inside its own JAR.
When EndlessLeveling scans for a party plugin at startup it finds this class via reflection, and from that point on:
| Feature | Effect |
|---|---|
| Shared XP in range | When a group member kills a mob, nearby group members also receive XP via grantSharedXpInRange. |
| Group auras / buffs | Aura effects that apply to the whole party are applied to all online group members. |
| Mob level scaling | EL can scale mob difficulty based on the average level of the party in range. |
GroupManager groups map directly to EndlessLeveling parties — no additional configuration is needed.
Quick Access from Group UI
When EndlessLeveling is installed, an "EndlessLeveling" button appears in the Group UI. Clicking it opens the EndlessLeveling interface (runs the /el command for the player).
Available Service Methods
Other GroupManager components (or third-party plugins that depend on GroupManager) can call EndlessLevelingService directly:
import com.groupmanager.integration.endlessleveling.EndlessLevelingService;
// Availability check (always call this first)
boolean available = EndlessLevelingService.isAvailable();
// Level and XP
int level = EndlessLevelingService.getPlayerLevel(playerUuid); // -1 if unavailable
double xp = EndlessLevelingService.getPlayerXp(playerUuid); // -1.0 if unavailable
int prestige = EndlessLevelingService.getPlayerPrestigeLevel(playerUuid);
int cap = EndlessLevelingService.getLevelCap();
// Class / race
String race = EndlessLevelingService.getRaceId(playerUuid);
String primary = EndlessLevelingService.getPrimaryClassId(playerUuid);
String secondary = EndlessLevelingService.getSecondaryClassId(playerUuid);
// XP grants
EndlessLevelingService.grantXp(playerUuid, 500.0);
EndlessLevelingService.grantSharedXpInRange(sourceUuid, 300.0, 20.0);
The PlayerSnapshot returned by EndlessLeveling does not include an xp() field despite some documentation suggesting otherwise. Always use getPlayerXp(UUID) for current XP.
Known SkillAttributeType Values
EndlessLeveling 9.23.0 exposes the following attribute types (three of these are undocumented in the official docs):
| Type | Notes |
|---|---|
LIFE_FORCE | Max health bonus |
STRENGTH | Physical damage bonus |
DEFENSE | Damage reduction |
HASTE | Attack / cast speed |
PRECISION | Crit chance |
FEROCITY | Crit damage |
STAMINA | Energy pool |
DISCIPLINE | Energy regeneration |
FLOW | Energy cost reduction |
SORCERY | Magic damage bonus |
PIERCE_FLAT | ⚠️ Undocumented — flat armour penetration |
PIERCE_PCT | ⚠️ Undocumented — percentage armour penetration |
ROOT | ⚠️ Undocumented — root / crowd control |
XP Sharing
GroupManager can automatically share XP earned by one group member with all nearby members. This feature runs on top of EndlessLeveling's addXpGrantListener hook and is fully configurable from config.json.
How It Works
- When a player receives XP from any source, GroupManager's listener fires.
- It checks whether XP sharing is enabled and whether the player is in a group.
- It scans all online group members within
ShareExpRangeblocks. - If no other member is in range, the original player keeps 100 % of the XP.
- If one or more members are in range,
ShareExpPercent% of the XP is pooled and divided equally among everyone in range (including the original recipient).
Example
ShareExpPercent = 80,ShareExpRange = 30, group of 3 members all within 30 blocks.
- Player A kills a mob → gains 1 000 XP
- Pool = 800 XP (80 %)
- Each player (A, B, C) receives 266 XP from the pool
- Player A's net gain = 1 000 − (800 − 266) = 466 XP
- Players B and C each gain 266 XP
XP Sharing Configuration
Key (inside EndlessLeveling) | Type | Default | Description |
|---|---|---|---|
ShareExpEnabled | boolean | true | Enable / disable XP sharing globally |
ShareExpPercent | double | 80.0 | Percentage of earned XP placed in the shared pool (0–100) |
ShareExpRange | double | 30.0 | Maximum distance in blocks to be considered "in range" |
Passive Group Buffs
GroupManager applies a damage reduction buff to any group member when allies are nearby. The buff is recalculated on every damage event — no persistent status effects are applied.
How It Works
- For every group member within
PassiveBuffRangeblocks (excluding the victim),DefenseReductionPerMember% is added to the damage reduction. - The total reduction is capped at
MaxDefenseReduction%. - The buff applies to all incoming damage (mobs, players, environmental), not just PvP.
- If no allies are nearby the victim receives no reduction.
Example
DefenseReductionPerMember = 5,MaxDefenseReduction = 20, 3 allies within range.
- Reduction = min(3 × 5, 20) = 15 %
- A hit that would deal 100 damage instead deals 85 damage
Passive Buff Configuration
Key (inside EndlessLeveling) | Type | Default | Description |
|---|---|---|---|
PassiveBuffsEnabled | boolean | true | Enable / disable passive damage reduction buff |
PassiveBuffRange | double | 30.0 | Radius in blocks to count nearby allies |
DefenseReductionPerMember | double | 5.0 | Damage reduction % granted per nearby ally |
MaxDefenseReduction | double | 20.0 | Maximum total damage reduction % regardless of ally count |
Setup
No configuration is needed for basic setup. The integration is fully automatic:
- Install both GroupManager and EndlessLeveling on your server.
- Start the server.
- GroupManager detects EndlessLeveling at startup and activates all bridges.
To tune XP sharing and passive buffs, add an EndlessLeveling block to config.json (see Configuration File).
If EndlessLeveling is not installed, GroupManager works normally with no errors — the integration simply remains inactive.