Tags
Creators
Details
2.4.0-bungee
Compatibility
Changes
Non-breaking additions. No changes required for existing providers or consumers.
Added
Role prefix overrides
Consumers can now customise the display prefix for any built-in TeamRole
constant at runtime:
// Override a single role
TeamRole.OWNER.setPrefixOverride("[Lord]");
// Read back: returns override when set, default otherwise
String prefix = TeamRole.OWNER.getPrefix(); // "[Lord]"
// Original default is always available
String def = TeamRole.OWNER.getDefaultPrefix(); // "Owner"
// Clear the override
TeamRole.OWNER.setPrefixOverride(null);
For bulk operations two static helpers are available:
// Apply multiple overrides at once (null value clears that role's override)
TeamRole.applyPrefixes(Map.of(
TeamRole.OWNER, "[Lord]",
TeamRole.ADMIN, "[Officer]"
));
// Clear all overrides for every built-in role
TeamRole.resetAllPrefixes();
New methods on TeamRole:
getDefaultPrefix()- compile-time default prefix, unaffected by any overridesetPrefixOverride(String)- sets or clears (null) a JVM-wide prefix overrideapplyPrefixes(Map<TeamRole, String>)- bulk-sets overrides from a mapresetAllPrefixes()- clears overrides on every built-in role constant
getPrefix() now returns the override when set, otherwise the compile-time
default. Existing calls to getPrefix() require no changes.
Custom role definitions and registry
Providers that model roles beyond the three built-in constants (OWNER, ADMIN,
MEMBER) can now publish them through a server-wide registry:
// In your provider plugin's onEnable()
TeamRoleDefinition coOwner = new TeamRoleDefinition("co_owner", 75, "Co-Owner");
TeamsAPI.registerCustomRole(this, coOwner);
// In onDisable()
TeamsAPI.unregisterCustomRole("co_owner");
Consumers can look up or enumerate registered definitions:
// Look up by key
Optional<TeamRoleDefinition> role = TeamsAPI.getCustomRole("co_owner");
// Iterate all custom roles (sorted highest priority first)
for (TeamRoleDefinition def : TeamsAPI.getCustomRoles()) {
getLogger().info(def.getKey() + " - priority " + def.getPriority());
}
// Test presence
if (TeamsAPI.isCustomRoleRegistered("co_owner")) { ... }
TeamRoleDefinition also supports prefix overrides via setPrefixOverride(String),
matching the same pattern as TeamRole.
New methods on TeamsAPI:
registerCustomRole(Plugin, TeamRoleDefinition)- publishes a custom roleunregisterCustomRole(String)- removes a custom role by keygetCustomRole(String)- looks up a definition by key, returnsOptionalgetCustomRoles()- snapshot sorted by descending priorityisCustomRoleRegistered(String)- tests presence by key
TeamMember.getRoleDefinition()
TeamMember now has a default method getRoleDefinition() that returns a
TeamRoleDefinition wrapping the member's current built-in role:
TeamMember member = ...;
TeamRoleDefinition def = member.getRoleDefinition();
// def.getKey() -> "owner" / "admin" / "member"
// def.getPriority() -> 100 / 50 / 10
Providers that register custom roles should override this method to return the precise custom definition for the member.
TeamsAPI.API_VERSIONupdated to2.4.0.
Migration
No behavioural changes for existing providers or consumers. getPrefix() still
returns the same defaults ("Owner", "Admin", "Member") unless a plugin
explicitly calls setPrefixOverride(...). The new getDefaultPrefix() method
gives a stable, always-available fallback. The custom role registry starts empty;
absence of a registered definition for a role key is a valid state.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:2NJKwgXC:MdDIi24e"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:2NJKwgXC:MdDIi24e"
}

