Teams API
2.5.0-bungeeTeamsAPI is a passive, server-side bridge plugin for Minecraft servers, inspired by Vault
2.5.0-bungeelatestTeamsAPI 2.5.0 (BungeeCord) [Experimental]Jun 5, 2026 Non-breaking additions. No changes required for existing providers or consumers.Added
#### Convenience methods -TeamsService.getTeamIds()- returns all team UUIDs for iteration without loading full team objects. -Team.getOwner()- default method returning the owner'sTeamMemberrecord. -VelocityTeam.getMemberUUIDs()- returns UUIDs of all members. -VelocityTeam.getOwner()- default method returning the owner's record. #### Role prefix reset NewresetPrefixOverride()method on bothTeamRoleandTeamRoleDefinitionclears any active prefix override, restoring the built-in default:
Equivalent to callingTeamRole.OWNER.setPrefixOverride("[Lord]"); TeamRole.OWNER.resetPrefixOverride(); // back to "Owner"setPrefixOverride(null). -TeamsAPI.API_VERSIONupdated to2.5.0.Changed
-docs/api.mdTeam lookup section now correctly listsgetTeam,getTeamByName, andgetPlayerTeamalongsidegetAllTeams,getTeamCount, andgetTeamIds. -docs/velocity.mdupdated to documentgetMemberUUIDs()andgetOwner()onVelocityTeam.Migration
No behavioural changes for existing providers or consumers.2.5.0-velocityTeamsAPI 2.5.0 (Velocity) [Experimental]Jun 5, 2026 Non-breaking additions. No changes required for existing providers or consumers.Added
#### Convenience methods -TeamsService.getTeamIds()- returns all team UUIDs for iteration without loading full team objects. -Team.getOwner()- default method returning the owner'sTeamMemberrecord. -VelocityTeam.getMemberUUIDs()- returns UUIDs of all members. -VelocityTeam.getOwner()- default method returning the owner's record. #### Role prefix reset NewresetPrefixOverride()method on bothTeamRoleandTeamRoleDefinitionclears any active prefix override, restoring the built-in default:
Equivalent to callingTeamRole.OWNER.setPrefixOverride("[Lord]"); TeamRole.OWNER.resetPrefixOverride(); // back to "Owner"setPrefixOverride(null). -TeamsAPI.API_VERSIONupdated to2.5.0.Changed
-docs/api.mdTeam lookup section now correctly listsgetTeam,getTeamByName, andgetPlayerTeamalongsidegetAllTeams,getTeamCount, andgetTeamIds. -docs/velocity.mdupdated to documentgetMemberUUIDs()andgetOwner()onVelocityTeam.Migration
No behavioural changes for existing providers or consumers.2.5.0TeamsAPI 2.5.0Jun 5, 2026 Non-breaking additions. No changes required for existing providers or consumers.Added
#### Convenience methods -TeamsService.getTeamIds()- returns all team UUIDs for iteration without loading full team objects. -Team.getOwner()- default method returning the owner'sTeamMemberrecord. -VelocityTeam.getMemberUUIDs()- returns UUIDs of all members. -VelocityTeam.getOwner()- default method returning the owner's record. #### Role prefix reset NewresetPrefixOverride()method on bothTeamRoleandTeamRoleDefinitionclears any active prefix override, restoring the built-in default:
Equivalent to callingTeamRole.OWNER.setPrefixOverride("[Lord]"); TeamRole.OWNER.resetPrefixOverride(); // back to "Owner"setPrefixOverride(null). -TeamsAPI.API_VERSIONupdated to2.5.0.Changed
-docs/api.mdTeam lookup section now correctly listsgetTeam,getTeamByName, andgetPlayerTeamalongsidegetAllTeams,getTeamCount, andgetTeamIds. -docs/velocity.mdupdated to documentgetMemberUUIDs()andgetOwner()onVelocityTeam.Migration
No behavioural changes for existing providers or consumers.2.4.0-bungeeTeamsAPI 2.4.0 (BungeeCord) [Experimental]May 28, 2026 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-inTeamRoleconstant at runtime:
For bulk operations two static helpers are available:// 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);
New methods on// 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();TeamRole: -getDefaultPrefix()- compile-time default prefix, unaffected by any override -setPrefixOverride(String)- sets or clears (null) a JVM-wide prefix override -applyPrefixes(Map<TeamRole, String>)- bulk-sets overrides from a map -resetAllPrefixes()- clears overrides on every built-in role constantgetPrefix()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:
Consumers can look up or enumerate registered definitions:// 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");// 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")) { ... }TeamRoleDefinitionalso supports prefix overrides viasetPrefixOverride(String), matching the same pattern asTeamRole. New methods onTeamsAPI: -registerCustomRole(Plugin, TeamRoleDefinition)- publishes a custom role -unregisterCustomRole(String)- removes a custom role by key -getCustomRole(String)- looks up a definition by key, returnsOptional-getCustomRoles()- snapshot sorted by descending priority -isCustomRoleRegistered(String)- tests presence by key #### TeamMember.getRoleDefinition()TeamMembernow has a default methodgetRoleDefinition()that returns aTeamRoleDefinitionwrapping the member's current built-in role:
Providers that register custom roles should override this method to return the precise custom definition for the member. -TeamMember member = ...; TeamRoleDefinition def = member.getRoleDefinition(); // def.getKey() -> "owner" / "admin" / "member" // def.getPriority() -> 100 / 50 / 10TeamsAPI.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 callssetPrefixOverride(...). The newgetDefaultPrefix()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.2.4.0-velocityTeamsAPI 2.4.0 (Velocity) [Experimental]May 28, 2026 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-inTeamRoleconstant at runtime:
For bulk operations two static helpers are available:// 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);
New methods on// 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();TeamRole: -getDefaultPrefix()- compile-time default prefix, unaffected by any override -setPrefixOverride(String)- sets or clears (null) a JVM-wide prefix override -applyPrefixes(Map<TeamRole, String>)- bulk-sets overrides from a map -resetAllPrefixes()- clears overrides on every built-in role constantgetPrefix()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:
Consumers can look up or enumerate registered definitions:// 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");// 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")) { ... }TeamRoleDefinitionalso supports prefix overrides viasetPrefixOverride(String), matching the same pattern asTeamRole. New methods onTeamsAPI: -registerCustomRole(Plugin, TeamRoleDefinition)- publishes a custom role -unregisterCustomRole(String)- removes a custom role by key -getCustomRole(String)- looks up a definition by key, returnsOptional-getCustomRoles()- snapshot sorted by descending priority -isCustomRoleRegistered(String)- tests presence by key #### TeamMember.getRoleDefinition()TeamMembernow has a default methodgetRoleDefinition()that returns aTeamRoleDefinitionwrapping the member's current built-in role:
Providers that register custom roles should override this method to return the precise custom definition for the member. -TeamMember member = ...; TeamRoleDefinition def = member.getRoleDefinition(); // def.getKey() -> "owner" / "admin" / "member" // def.getPriority() -> 100 / 50 / 10TeamsAPI.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 callssetPrefixOverride(...). The newgetDefaultPrefix()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.2.4.0TeamsAPI 2.4.0May 28, 2026 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-inTeamRoleconstant at runtime:
For bulk operations two static helpers are available:// 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);
New methods on// 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();TeamRole: -getDefaultPrefix()- compile-time default prefix, unaffected by any override -setPrefixOverride(String)- sets or clears (null) a JVM-wide prefix override -applyPrefixes(Map<TeamRole, String>)- bulk-sets overrides from a map -resetAllPrefixes()- clears overrides on every built-in role constantgetPrefix()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:
Consumers can look up or enumerate registered definitions:// 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");// 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")) { ... }TeamRoleDefinitionalso supports prefix overrides viasetPrefixOverride(String), matching the same pattern asTeamRole. New methods onTeamsAPI: -registerCustomRole(Plugin, TeamRoleDefinition)- publishes a custom role -unregisterCustomRole(String)- removes a custom role by key -getCustomRole(String)- looks up a definition by key, returnsOptional-getCustomRoles()- snapshot sorted by descending priority -isCustomRoleRegistered(String)- tests presence by key #### TeamMember.getRoleDefinition()TeamMembernow has a default methodgetRoleDefinition()that returns aTeamRoleDefinitionwrapping the member's current built-in role:
Providers that register custom roles should override this method to return the precise custom definition for the member. -TeamMember member = ...; TeamRoleDefinition def = member.getRoleDefinition(); // def.getKey() -> "owner" / "admin" / "member" // def.getPriority() -> 100 / 50 / 10TeamsAPI.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 callssetPrefixOverride(...). The newgetDefaultPrefix()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.2.3.0-bungeeTeamsAPI 2.3.0 (BungeeCord) [Experimental]May 27, 2026 Added
- New optionalTeamsChestServiceinterface for team chest access:getChestIds(teamId),getContents(...),setContents(...),addItem(...), andremoveItem(...). - NewTeamsAPIchest facade methods:getChestService(),isChestAvailable(),registerChestProvider(plugin, service),registerChestProvider(plugin, service, priority), andunregisterChestProvider(service). - New API tests:TeamsAPIChestTestfor chest provider registration, null-safety, priority registration, and service independence from coreTeamsService. - New docs pages:provider-chests(provider implementation/registration guidance) andconsumer-chests(consumer usage patterns and fallback guards).Changed
- TeamsAPI version bumped from2.2.0to2.3.0(non-breaking minor release). -TeamsAPI.API_VERSIONbumped to2.3.0. - README, API docs, provider/consumer guides, server guide, and public listings updated to include the optional chest capability and2.3.0dependency examples.2.3.0-velocityTeamsAPI 2.3.0 (Velocity) [Experimental]May 27, 2026 Added
- New optionalTeamsChestServiceinterface for team chest access:getChestIds(teamId),getContents(...),setContents(...),addItem(...), andremoveItem(...). - NewTeamsAPIchest facade methods:getChestService(),isChestAvailable(),registerChestProvider(plugin, service),registerChestProvider(plugin, service, priority), andunregisterChestProvider(service). - New API tests:TeamsAPIChestTestfor chest provider registration, null-safety, priority registration, and service independence from coreTeamsService. - New docs pages:provider-chests(provider implementation/registration guidance) andconsumer-chests(consumer usage patterns and fallback guards).Changed
- TeamsAPI version bumped from2.2.0to2.3.0(non-breaking minor release). -TeamsAPI.API_VERSIONbumped to2.3.0. - README, API docs, provider/consumer guides, server guide, and public listings updated to include the optional chest capability and2.3.0dependency examples.2.3.0TeamsAPI 2.3.0May 27, 2026 Added
- New optionalTeamsChestServiceinterface for team chest access:getChestIds(teamId),getContents(...),setContents(...),addItem(...), andremoveItem(...). - NewTeamsAPIchest facade methods:getChestService(),isChestAvailable(),registerChestProvider(plugin, service),registerChestProvider(plugin, service, priority), andunregisterChestProvider(service). - New API tests:TeamsAPIChestTestfor chest provider registration, null-safety, priority registration, and service independence from coreTeamsService. - New docs pages:provider-chests(provider implementation/registration guidance) andconsumer-chests(consumer usage patterns and fallback guards).Changed
- TeamsAPI version bumped from2.2.0to2.3.0(non-breaking minor release). -TeamsAPI.API_VERSIONbumped to2.3.0. - README, API docs, provider/consumer guides, server guide, and public listings updated to include the optional chest capability and2.3.0dependency examples.2.2.0-bungeeTeamsAPI 2.2.0 (BungeeCord) [Experimental]May 24, 2026 TeamsAPI now ships official extensions for three popular team plugins. Drop the extension JAR in yourplugins/folder alongside the team plugin and TeamsAPI will automatically pick it up as a provider. No code changes needed.New: official provider extensions
TeamsAPI2.2.0introduces three ready-to-use provider extensions. Each is bundled inside the mainteams-api-pluginJAR and provisioned automatically toplugins/TeamsAPI/extensions/on first startup. **[BetterTeams](https://www.spigotmc.org/resources/betterteams.17664/) extension** (teams-api-extension-betterteams) - Exposes teams, members, invites, warps, and ally/neutral relations through TeamsAPI. - Invite support:invitePlayeranddeclineInvitework for offline players;acceptInviterequires the invitee to be online at the time of the call. - Relation support coversALLYandNEUTRAL; BetterTeams does not model enemies or truces. -MEMBER,ALLY, andNEUTRALrelation constants are supported. [Towny Advanced](https://modrinth.com/plugin/towny) extension (teams-api-extension-towny) - Maps Towny towns to teams, residents to members, and nation relationships (ally/enemy) to TeamsAPI relation constants. - Claim lookup fully supported; claim and unclaim mutations are not exposed (Towny manages its own chunk lifecycle). -MEMBER,ALLY,ENEMY, andNEUTRALrelation constants are supported;TRUCEis normalized toNEUTRAL. [KingdomsX](https://www.spigotmc.org/resources/kingdomsx.77782/) extension (teams-api-extension-kingdomsx) - Maps KingdomsX kingdoms to teams, members to members, and diplomatic relations to TeamsAPI constants. - Claim lookup supported; mutations returnfalse(require a liveKingdomPlayercontext not available through TeamsAPI). - Power read-only;getPlayerMaxPowerandgetTeamMaxPoweralways return0.0(KingdomsX does not expose a per-player power ceiling in its public API). -MEMBER,ALLY,TRUCE,ENEMY, andNEUTRALrelation constants are supported; relations are applied symmetrically.New: extension management commands
| Command | Permission | Description | |---------|-----------|-------------| |/teamsapi install <extension>|teamsapi.install(op) | Copies a bundled extension JAR toplugins/TeamsAPI/extensions/. Valid names:betterteams,towny,kingdomsx. | |/teamsapi load <file>.jar|teamsapi.load(op) | Loads and enables an extension fromplugins/TeamsAPI/extensions/without a server restart. |Installation quick-start
1. The extension JARs are pre-bundled. TeamsAPI copies them toplugins/TeamsAPI/extensions/on startup automatically. Nothing to download for first-time setup. 2. Run/teamsapi install betterteams(ortowny/kingdomsx) to stage the extension for the next restart, or run `/teamsapi load teams-api-extension-betterteams-2.2.0.jar` to activate it immediately without a restart. 3. Install the matching team plugin if it is not already present, then restart (or reload) the server. Full details and a feature matrix are in the [Provider Catalog](https://ez-plugins.github.io/teams-api/provider-catalog.h…2.2.0-velocityTeamsAPI 2.2.0 (Velocity) [Experimental]May 24, 2026 TeamsAPI now ships official extensions for three popular team plugins. Drop the extension JAR in yourplugins/folder alongside the team plugin and TeamsAPI will automatically pick it up as a provider. No code changes needed.New: official provider extensions
TeamsAPI2.2.0introduces three ready-to-use provider extensions. Each is bundled inside the mainteams-api-pluginJAR and provisioned automatically toplugins/TeamsAPI/extensions/on first startup. **[BetterTeams](https://www.spigotmc.org/resources/betterteams.17664/) extension** (teams-api-extension-betterteams) - Exposes teams, members, invites, warps, and ally/neutral relations through TeamsAPI. - Invite support:invitePlayeranddeclineInvitework for offline players;acceptInviterequires the invitee to be online at the time of the call. - Relation support coversALLYandNEUTRAL; BetterTeams does not model enemies or truces. -MEMBER,ALLY, andNEUTRALrelation constants are supported. [Towny Advanced](https://modrinth.com/plugin/towny) extension (teams-api-extension-towny) - Maps Towny towns to teams, residents to members, and nation relationships (ally/enemy) to TeamsAPI relation constants. - Claim lookup fully supported; claim and unclaim mutations are not exposed (Towny manages its own chunk lifecycle). -MEMBER,ALLY,ENEMY, andNEUTRALrelation constants are supported;TRUCEis normalized toNEUTRAL. [KingdomsX](https://www.spigotmc.org/resources/kingdomsx.77782/) extension (teams-api-extension-kingdomsx) - Maps KingdomsX kingdoms to teams, members to members, and diplomatic relations to TeamsAPI constants. - Claim lookup supported; mutations returnfalse(require a liveKingdomPlayercontext not available through TeamsAPI). - Power read-only;getPlayerMaxPowerandgetTeamMaxPoweralways return0.0(KingdomsX does not expose a per-player power ceiling in its public API). -MEMBER,ALLY,TRUCE,ENEMY, andNEUTRALrelation constants are supported; relations are applied symmetrically.New: extension management commands
| Command | Permission | Description | |---------|-----------|-------------| |/teamsapi install <extension>|teamsapi.install(op) | Copies a bundled extension JAR toplugins/TeamsAPI/extensions/. Valid names:betterteams,towny,kingdomsx. | |/teamsapi load <file>.jar|teamsapi.load(op) | Loads and enables an extension fromplugins/TeamsAPI/extensions/without a server restart. |Installation quick-start
1. The extension JARs are pre-bundled. TeamsAPI copies them toplugins/TeamsAPI/extensions/on startup automatically. Nothing to download for first-time setup. 2. Run/teamsapi install betterteams(ortowny/kingdomsx) to stage the extension for the next restart, or run `/teamsapi load teams-api-extension-betterteams-2.2.0.jar` to activate it immediately without a restart. 3. Install the matching team plugin if it is not already present, then restart (or reload) the server. Full details and a feature matrix are in the [Provider Catalog](https://ez-plugins.github.io/teams-api/provider-catalog.h…2.2.0TeamsAPI 2.2.0May 24, 2026 TeamsAPI now ships official extensions for three popular team plugins. Drop the extension JAR in yourplugins/folder alongside the team plugin and TeamsAPI will automatically pick it up as a provider. No code changes needed.New: official provider extensions
TeamsAPI2.2.0introduces three ready-to-use provider extensions. Each is bundled inside the mainteams-api-pluginJAR and provisioned automatically toplugins/TeamsAPI/extensions/on first startup. **[BetterTeams](https://www.spigotmc.org/resources/betterteams.17664/) extension** (teams-api-extension-betterteams) - Exposes teams, members, invites, warps, and ally/neutral relations through TeamsAPI. - Invite support:invitePlayeranddeclineInvitework for offline players;acceptInviterequires the invitee to be online at the time of the call. - Relation support coversALLYandNEUTRAL; BetterTeams does not model enemies or truces. -MEMBER,ALLY, andNEUTRALrelation constants are supported. [Towny Advanced](https://modrinth.com/plugin/towny) extension (teams-api-extension-towny) - Maps Towny towns to teams, residents to members, and nation relationships (ally/enemy) to TeamsAPI relation constants. - Claim lookup fully supported; claim and unclaim mutations are not exposed (Towny manages its own chunk lifecycle). -MEMBER,ALLY,ENEMY, andNEUTRALrelation constants are supported;TRUCEis normalized toNEUTRAL. [KingdomsX](https://www.spigotmc.org/resources/kingdomsx.77782/) extension (teams-api-extension-kingdomsx) - Maps KingdomsX kingdoms to teams, members to members, and diplomatic relations to TeamsAPI constants. - Claim lookup supported; mutations returnfalse(require a liveKingdomPlayercontext not available through TeamsAPI). - Power read-only;getPlayerMaxPowerandgetTeamMaxPoweralways return0.0(KingdomsX does not expose a per-player power ceiling in its public API). -MEMBER,ALLY,TRUCE,ENEMY, andNEUTRALrelation constants are supported; relations are applied symmetrically.New: extension management commands
| Command | Permission | Description | |---------|-----------|-------------| |/teamsapi install <extension>|teamsapi.install(op) | Copies a bundled extension JAR toplugins/TeamsAPI/extensions/. Valid names:betterteams,towny,kingdomsx. | |/teamsapi load <file>.jar|teamsapi.load(op) | Loads and enables an extension fromplugins/TeamsAPI/extensions/without a server restart. |Installation quick-start
1. The extension JARs are pre-bundled. TeamsAPI copies them toplugins/TeamsAPI/extensions/on startup automatically. Nothing to download for first-time setup. 2. Run/teamsapi install betterteams(ortowny/kingdomsx) to stage the extension for the next restart, or run `/teamsapi load teams-api-extension-betterteams-2.2.0.jar` to activate it immediately without a restart. 3. Install the matching team plugin if it is not already present, then restart (or reload) the server. Full details and a feature matrix are in the [Provider Catalog](https://ez-plugins.github.io/teams-api/provider-catalog.h…2.1.0-bungeeTeamsAPI 2.1.0 (BungeeCord) [Experimental]May 24, 2026 Added
- OptionalRelationNatureenum (FRIENDLY,NEUTRAL,HOSTILE) to the model package. EachTeamRelationconstant carries a built-in default nature which may be queried withgetDefaultNature(). - Consumer override support:TeamRelation#setNatureOverride(RelationNature)andTeamRelation#getNature()- allows server or provider code to re-categorise a relation at runtime. PassingnulltosetNatureOverrideclears the override and restores the builtin default. Overrides are visible JVM-wide because enum constants are singletons. - Unit tests:TeamRelationTestcovering default natures and override behaviour.Changed
-TeamsAPI.API_VERSIONbumped to2.1.0.Migration
No behavioural changes to existingTeamRelationhelpers:isFriendly()andisHostile()remain unchanged and existing consumers require no changes. Providers that wish to reclassify relations (for example treatingTRUCEasNEUTRAL) may callsetNatureOverride(...)during initialisation.2.1.0-velocityTeamsAPI 2.1.0 (Velocity) [Experimental]May 24, 2026 Added
- OptionalRelationNatureenum (FRIENDLY,NEUTRAL,HOSTILE) to the model package. EachTeamRelationconstant carries a built-in default nature which may be queried withgetDefaultNature(). - Consumer override support:TeamRelation#setNatureOverride(RelationNature)andTeamRelation#getNature()- allows server or provider code to re-categorise a relation at runtime. PassingnulltosetNatureOverrideclears the override and restores the builtin default. Overrides are visible JVM-wide because enum constants are singletons. - Unit tests:TeamRelationTestcovering default natures and override behaviour.Changed
-TeamsAPI.API_VERSIONbumped to2.1.0.Migration
No behavioural changes to existingTeamRelationhelpers:isFriendly()andisHostile()remain unchanged and existing consumers require no changes. Providers that wish to reclassify relations (for example treatingTRUCEasNEUTRAL) may callsetNatureOverride(...)during initialisation.2.1.0TeamsAPI 2.1.0May 24, 2026 Added
- OptionalRelationNatureenum (FRIENDLY,NEUTRAL,HOSTILE) to the model package. EachTeamRelationconstant carries a built-in default nature which may be queried withgetDefaultNature(). - Consumer override support:TeamRelation#setNatureOverride(RelationNature)andTeamRelation#getNature()- allows server or provider code to re-categorise a relation at runtime. PassingnulltosetNatureOverrideclears the override and restores the builtin default. Overrides are visible JVM-wide because enum constants are singletons. - Unit tests:TeamRelationTestcovering default natures and override behaviour.Changed
-TeamsAPI.API_VERSIONbumped to2.1.0.Migration
No behavioural changes to existingTeamRelationhelpers:isFriendly()andisHostile()remain unchanged and existing consumers require no changes. Providers that wish to reclassify relations (for example treatingTRUCEasNEUTRAL) may callsetNatureOverride(...)during initialisation.2.0.0-bungeeTeamsAPI 2.0.0 (BungeeCord) [Experimental]May 20, 2026 Added
-TeamRelation.MEMBERconstant (ordinal 4) representing the same-team relationship. Providers should returnMEMBERfromgetRelation(A, A)when both team UUIDs are equal. Consumers comparing two players on potentially the same team will now receive a dedicated constant instead ofNEUTRAL. -TeamRelationinternalhostilityLevelfield.isMoreHostileThan()now uses this field instead of ordinal position, correctly placingMEMBERat hostility level -1 (less hostile thanALLY). Results for the original four constants are unchanged. -isFriendly()now returnstrueforMEMBERin addition toALLYandTRUCE. -TeamsAPI.API_VERSIONbumped to2.0.0.Changed
- `ALLY` default color:§a(green /#55FF55) →§b(aqua /#55FFFF). This aligns with the standard Factions color convention where green represents same-team membership. - `TRUCE` default color:§6(gold /#FFAA00) →§e(yellow /#FFFF55). Aligns legacy code character with MiniMessage<yellow>.Migration
The four original ordinals (ALLY=0,TRUCE=1,NEUTRAL=2,ENEMY=3) are unchanged. Code that does not referenceMEMBERand does not depend on the specific color values ofALLYorTRUCErequires no changes. Consumers that useALLYorTRUCEdefault colors (viagetLegacyColorCode(),getDefaultHexColor(), orTeamsRelationService.getRelationColor()) should update their color expectations accordingly. Providers that configure their own colors viagetRelationColor()overrides are unaffected.2.0.0-velocityTeamsAPI 2.0.0 (Velocity) [Experimental]May 20, 2026 Added
-TeamRelation.MEMBERconstant (ordinal 4) representing the same-team relationship. Providers should returnMEMBERfromgetRelation(A, A)when both team UUIDs are equal. Consumers comparing two players on potentially the same team will now receive a dedicated constant instead ofNEUTRAL. -TeamRelationinternalhostilityLevelfield.isMoreHostileThan()now uses this field instead of ordinal position, correctly placingMEMBERat hostility level -1 (less hostile thanALLY). Results for the original four constants are unchanged. -isFriendly()now returnstrueforMEMBERin addition toALLYandTRUCE. -TeamsAPI.API_VERSIONbumped to2.0.0.Changed
- `ALLY` default color:§a(green /#55FF55) →§b(aqua /#55FFFF). This aligns with the standard Factions color convention where green represents same-team membership. - `TRUCE` default color:§6(gold /#FFAA00) →§e(yellow /#FFFF55). Aligns legacy code character with MiniMessage<yellow>.Migration
The four original ordinals (ALLY=0,TRUCE=1,NEUTRAL=2,ENEMY=3) are unchanged. Code that does not referenceMEMBERand does not depend on the specific color values ofALLYorTRUCErequires no changes. Consumers that useALLYorTRUCEdefault colors (viagetLegacyColorCode(),getDefaultHexColor(), orTeamsRelationService.getRelationColor()) should update their color expectations accordingly. Providers that configure their own colors viagetRelationColor()overrides are unaffected.2.0.0TeamsAPI 2.0.0May 20, 2026 Added
-TeamRelation.MEMBERconstant (ordinal 4) representing the same-team relationship. Providers should returnMEMBERfromgetRelation(A, A)when both team UUIDs are equal. Consumers comparing two players on potentially the same team will now receive a dedicated constant instead ofNEUTRAL. -TeamRelationinternalhostilityLevelfield.isMoreHostileThan()now uses this field instead of ordinal position, correctly placingMEMBERat hostility level -1 (less hostile thanALLY). Results for the original four constants are unchanged. -isFriendly()now returnstrueforMEMBERin addition toALLYandTRUCE. -TeamsAPI.API_VERSIONbumped to2.0.0.Changed
- `ALLY` default color:§a(green /#55FF55) →§b(aqua /#55FFFF). This aligns with the standard Factions color convention where green represents same-team membership. - `TRUCE` default color:§6(gold /#FFAA00) →§e(yellow /#FFFF55). Aligns legacy code character with MiniMessage<yellow>.Migration
The four original ordinals (ALLY=0,TRUCE=1,NEUTRAL=2,ENEMY=3) are unchanged. Code that does not referenceMEMBERand does not depend on the specific color values ofALLYorTRUCErequires no changes. Consumers that useALLYorTRUCEdefault colors (viagetLegacyColorCode(),getDefaultHexColor(), orTeamsRelationService.getRelationColor()) should update their color expectations accordingly. Providers that configure their own colors viagetRelationColor()overrides are unaffected.1.8.0-bungeeTeamsAPI 1.8.0 (BungeeCord) [Experimental]May 19, 2026 Added
-TeamsPowerHistoryServiceoptional extension interface for reading and managing power-history entries through TeamsAPI. - New power-history model types:TeamPowerHistoryEntryandTeamPowerHistoryType(GAIN,LOSS,ADJUSTMENT). - NewTeamsAPIpower-history facade methods:getPowerHistoryService(),isPowerHistoryAvailable(),registerPowerHistoryProvider(plugin, service),registerPowerHistoryProvider(plugin, service, priority),unregisterPowerHistoryProvider(service). - New tests:TeamsAPIPowerHistoryTest(service registration/availability/null-safety) andTeamPowerHistoryTypeTest(enum contract coverage). -TeamsAPI.API_VERSIONbumped to1.8.0.1.8.0-velocityTeamsAPI 1.8.0 (Velocity) [Experimental]May 19, 2026 Added
-TeamsPowerHistoryServiceoptional extension interface for reading and managing power-history entries through TeamsAPI. - New power-history model types:TeamPowerHistoryEntryandTeamPowerHistoryType(GAIN,LOSS,ADJUSTMENT). - NewTeamsAPIpower-history facade methods:getPowerHistoryService(),isPowerHistoryAvailable(),registerPowerHistoryProvider(plugin, service),registerPowerHistoryProvider(plugin, service, priority),unregisterPowerHistoryProvider(service). - New tests:TeamsAPIPowerHistoryTest(service registration/availability/null-safety) andTeamPowerHistoryTypeTest(enum contract coverage). -TeamsAPI.API_VERSIONbumped to1.8.0.1.8.0TeamsAPI 1.8.0May 19, 2026 Added
-TeamsPowerHistoryServiceoptional extension interface for reading and managing power-history entries through TeamsAPI. - New power-history model types:TeamPowerHistoryEntryandTeamPowerHistoryType(GAIN,LOSS,ADJUSTMENT). - NewTeamsAPIpower-history facade methods:getPowerHistoryService(),isPowerHistoryAvailable(),registerPowerHistoryProvider(plugin, service),registerPowerHistoryProvider(plugin, service, priority),unregisterPowerHistoryProvider(service). - New tests:TeamsAPIPowerHistoryTest(service registration/availability/null-safety) andTeamPowerHistoryTypeTest(enum contract coverage). -TeamsAPI.API_VERSIONbumped to1.8.0.1.7.0-bungeeTeamsAPI 1.7.0 (BungeeCord) [Experimental]May 19, 2026 Added
-TeamsNotificationServiceoptional extension interface for cross-plugin player notifications with provider-controlled authorization viasenderPlugin. - Dual notification type support: enum-based built-ins (TeamNotificationType) and custom string notification types for third-party plugin namespaces. - NewTeamsAPInotification facade methods:getNotificationService(),isNotificationAvailable(),registerNotificationProvider(plugin, service),registerNotificationProvider(plugin, service, priority),unregisterNotificationProvider(service). - NewTeamNotificationTypeenum with built-in categories:GENERAL,TEAM_JOIN,TEAM_LEAVE,TEAM_INVITE,TEAM_INVITE_ACCEPT,TEAM_INVITE_DECLINE. - New tests:TeamsAPINotificationTest(service registration/availability/null-safety) andTeamNotificationTypeTest(enum contract coverage). - API reference docs and public listings updated with notification service method tables, enum documentation, and examples for both built-in and custom string types. -ClaimTerritoryTypeenum (WILDERNESS,TEAM,SAFE_ZONE,WAR_ZONE) to represent classic faction territory classes, including SafeZone and WarZone. -TeamClaim.getTerritoryType()default method. Legacy providers map toTEAMautomatically unless they override. -TeamClaim.getOwningTeamId()default method for territory-aware ownership lookups. Returns empty for non-team special territory. -TeamsClaimServicedefault methods for special territory support:claimSafeZone(...),claimWarZone(...),unclaimSpecialZone(...),getTerritoryTypeAt(...),isSafeZone(...), andisWarZone(...). - API docs, developer docs, README, and public listings updated with new claim territory capabilities and examples. -TeamsAPI.API_VERSIONbumped to1.7.0.1.7.0-velocityTeamsAPI 1.7.0 (Velocity) [Experimental]May 19, 2026 Added
-TeamsNotificationServiceoptional extension interface for cross-plugin player notifications with provider-controlled authorization viasenderPlugin. - Dual notification type support: enum-based built-ins (TeamNotificationType) and custom string notification types for third-party plugin namespaces. - NewTeamsAPInotification facade methods:getNotificationService(),isNotificationAvailable(),registerNotificationProvider(plugin, service),registerNotificationProvider(plugin, service, priority),unregisterNotificationProvider(service). - NewTeamNotificationTypeenum with built-in categories:GENERAL,TEAM_JOIN,TEAM_LEAVE,TEAM_INVITE,TEAM_INVITE_ACCEPT,TEAM_INVITE_DECLINE. - New tests:TeamsAPINotificationTest(service registration/availability/null-safety) andTeamNotificationTypeTest(enum contract coverage). - API reference docs and public listings updated with notification service method tables, enum documentation, and examples for both built-in and custom string types. -ClaimTerritoryTypeenum (WILDERNESS,TEAM,SAFE_ZONE,WAR_ZONE) to represent classic faction territory classes, including SafeZone and WarZone. -TeamClaim.getTerritoryType()default method. Legacy providers map toTEAMautomatically unless they override. -TeamClaim.getOwningTeamId()default method for territory-aware ownership lookups. Returns empty for non-team special territory. -TeamsClaimServicedefault methods for special territory support:claimSafeZone(...),claimWarZone(...),unclaimSpecialZone(...),getTerritoryTypeAt(...),isSafeZone(...), andisWarZone(...). - API docs, developer docs, README, and public listings updated with new claim territory capabilities and examples. -TeamsAPI.API_VERSIONbumped to1.7.0.1.7.0TeamsAPI 1.7.0May 19, 2026 Added
-TeamsNotificationServiceoptional extension interface for cross-plugin player notifications with provider-controlled authorization viasenderPlugin. - Dual notification type support: enum-based built-ins (TeamNotificationType) and custom string notification types for third-party plugin namespaces. - NewTeamsAPInotification facade methods:getNotificationService(),isNotificationAvailable(),registerNotificationProvider(plugin, service),registerNotificationProvider(plugin, service, priority),unregisterNotificationProvider(service). - NewTeamNotificationTypeenum with built-in categories:GENERAL,TEAM_JOIN,TEAM_LEAVE,TEAM_INVITE,TEAM_INVITE_ACCEPT,TEAM_INVITE_DECLINE. - New tests:TeamsAPINotificationTest(service registration/availability/null-safety) andTeamNotificationTypeTest(enum contract coverage). - API reference docs and public listings updated with notification service method tables, enum documentation, and examples for both built-in and custom string types. -ClaimTerritoryTypeenum (WILDERNESS,TEAM,SAFE_ZONE,WAR_ZONE) to represent classic faction territory classes, including SafeZone and WarZone. -TeamClaim.getTerritoryType()default method. Legacy providers map toTEAMautomatically unless they override. -TeamClaim.getOwningTeamId()default method for territory-aware ownership lookups. Returns empty for non-team special territory. -TeamsClaimServicedefault methods for special territory support:claimSafeZone(...),claimWarZone(...),unclaimSpecialZone(...),getTerritoryTypeAt(...),isSafeZone(...), andisWarZone(...). - API docs, developer docs, README, and public listings updated with new claim territory capabilities and examples. -TeamsAPI.API_VERSIONbumped to1.7.0.1.6.1-bungeeTeamsAPI 1.6.1 (BungeeCord) [Experimental]May 17, 2026 Added
-TeamRelation.getDisplayName()— returns a human-friendly relation name ("Ally", "Truce", "Neutral", "Enemy"). -TeamRelation.getLegacyColorCode()— returns the legacy Minecraft color code character ('a'green,'6'gold,'7'gray,'c'red) for use in chat formatting:"§" + relation.getLegacyColorCode(). -TeamRelation.getDefaultHexColor()— returns a#RRGGBBhex string suitable for Adventure / MiniMessage consumers (#55FF55,#FFAA00,#AAAAAA,#FF5555). -TeamsRelationService.getTeamsInRelation(teamId, relation)— default convenience method that returns all team UUIDs toward whichteamIdhas declared the given relation. Providers may override for a more efficient implementation. -TeamsRelationService.getRelationColor(relation)— default method that returns the display color for a relation as a#RRGGBBhex string. Providers may override to supply server-configured colors; falls back toTeamRelation.getDefaultHexColor(). -TeamsAPI.API_VERSIONbumped to1.6.1.1.6.1-velocityTeamsAPI 1.6.1 (Velocity) [Experimental]May 17, 2026 Added
-TeamRelation.getDisplayName()— returns a human-friendly relation name ("Ally", "Truce", "Neutral", "Enemy"). -TeamRelation.getLegacyColorCode()— returns the legacy Minecraft color code character ('a'green,'6'gold,'7'gray,'c'red) for use in chat formatting:"§" + relation.getLegacyColorCode(). -TeamRelation.getDefaultHexColor()— returns a#RRGGBBhex string suitable for Adventure / MiniMessage consumers (#55FF55,#FFAA00,#AAAAAA,#FF5555). -TeamsRelationService.getTeamsInRelation(teamId, relation)— default convenience method that returns all team UUIDs toward whichteamIdhas declared the given relation. Providers may override for a more efficient implementation. -TeamsRelationService.getRelationColor(relation)— default method that returns the display color for a relation as a#RRGGBBhex string. Providers may override to supply server-configured colors; falls back toTeamRelation.getDefaultHexColor(). -TeamsAPI.API_VERSIONbumped to1.6.1.1.6.1TeamsAPI 1.6.1May 17, 2026 Added
-TeamRelation.getDisplayName()— returns a human-friendly relation name ("Ally", "Truce", "Neutral", "Enemy"). -TeamRelation.getLegacyColorCode()— returns the legacy Minecraft color code character ('a'green,'6'gold,'7'gray,'c'red) for use in chat formatting:"§" + relation.getLegacyColorCode(). -TeamRelation.getDefaultHexColor()— returns a#RRGGBBhex string suitable for Adventure / MiniMessage consumers (#55FF55,#FFAA00,#AAAAAA,#FF5555). -TeamsRelationService.getTeamsInRelation(teamId, relation)— default convenience method that returns all team UUIDs toward whichteamIdhas declared the given relation. Providers may override for a more efficient implementation. -TeamsRelationService.getRelationColor(relation)— default method that returns the display color for a relation as a#RRGGBBhex string. Providers may override to supply server-configured colors; falls back toTeamRelation.getDefaultHexColor(). -TeamsAPI.API_VERSIONbumped to1.6.1.1.6.0-bungeeTeamsAPI 1.6.0 (BungeeCord) [Experimental]May 17, 2026 Added
-TeamRelationenum (ALLY,TRUCE,NEUTRAL,ENEMY) — models the declared relationship one team holds toward another. IncludesisFriendly(),isHostile(), andisMoreHostileThan(other)helpers. -TeamsRelationServiceinterface: optional extension service for inter-team relation management. Methods:setRelation(fromTeamId, toTeamId, relation, initiatorUUID),getRelation(fromTeamId, toTeamId)(defaults toNEUTRAL),getRelations(teamId)(returns all non-neutral relations as an unmodifiable map),clearRelations(teamId)(for use on team disband). Default methods:areAllies(teamAId, teamBId)(mutual ALLY required),areEnemies(teamAId, teamBId)(either side suffices). -TeamRelationChangeEvent(cancellable): fired before a team's declared relation toward another changes. ExposesgetTargetTeam(),getInitiatorUUID(),getOldRelation(),getNewRelation(), andsetNewRelation()so listeners can override the incoming relation before it is persisted. -TeamsAPIfacade methods:getRelationService(),isRelationAvailable(),registerRelationProvider(plugin, service),registerRelationProvider(plugin, service, priority),unregisterRelationProvider(service). -TeamsAPI.API_VERSIONbumped to1.6.0.1.6.0-velocityTeamsAPI 1.6.0 (Velocity) [Experimental]May 17, 2026 Added
-TeamRelationenum (ALLY,TRUCE,NEUTRAL,ENEMY) — models the declared relationship one team holds toward another. IncludesisFriendly(),isHostile(), andisMoreHostileThan(other)helpers. -TeamsRelationServiceinterface: optional extension service for inter-team relation management. Methods:setRelation(fromTeamId, toTeamId, relation, initiatorUUID),getRelation(fromTeamId, toTeamId)(defaults toNEUTRAL),getRelations(teamId)(returns all non-neutral relations as an unmodifiable map),clearRelations(teamId)(for use on team disband). Default methods:areAllies(teamAId, teamBId)(mutual ALLY required),areEnemies(teamAId, teamBId)(either side suffices). -TeamRelationChangeEvent(cancellable): fired before a team's declared relation toward another changes. ExposesgetTargetTeam(),getInitiatorUUID(),getOldRelation(),getNewRelation(), andsetNewRelation()so listeners can override the incoming relation before it is persisted. -TeamsAPIfacade methods:getRelationService(),isRelationAvailable(),registerRelationProvider(plugin, service),registerRelationProvider(plugin, service, priority),unregisterRelationProvider(service). -TeamsAPI.API_VERSIONbumped to1.6.0.1.6.0TeamsAPI 1.6.0May 17, 2026 Added
-TeamRelationenum (ALLY,TRUCE,NEUTRAL,ENEMY) — models the declared relationship one team holds toward another. IncludesisFriendly(),isHostile(), andisMoreHostileThan(other)helpers. -TeamsRelationServiceinterface: optional extension service for inter-team relation management. Methods:setRelation(fromTeamId, toTeamId, relation, initiatorUUID),getRelation(fromTeamId, toTeamId)(defaults toNEUTRAL),getRelations(teamId)(returns all non-neutral relations as an unmodifiable map),clearRelations(teamId)(for use on team disband). Default methods:areAllies(teamAId, teamBId)(mutual ALLY required),areEnemies(teamAId, teamBId)(either side suffices). -TeamRelationChangeEvent(cancellable): fired before a team's declared relation toward another changes. ExposesgetTargetTeam(),getInitiatorUUID(),getOldRelation(),getNewRelation(), andsetNewRelation()so listeners can override the incoming relation before it is persisted. -TeamsAPIfacade methods:getRelationService(),isRelationAvailable(),registerRelationProvider(plugin, service),registerRelationProvider(plugin, service, priority),unregisterRelationProvider(service). -TeamsAPI.API_VERSIONbumped to1.6.0.1.5.0-bungeeTeamsAPI 1.5.0 (BungeeCord) [Experimental]May 16, 2026 Added
-TeamsSubcommandinterface: providers can register custom subcommands under/teamsapi <name>viaTeamsAPI.registerSubcommand(plugin, subcommand). Each subcommand declares agetName(),getDescription(), optionalgetPermission(), andexecute(CommandSender, String[]). -TeamsAPI.registerSubcommand(plugin, subcommand)— registers via Bukkit ServicesManager. -TeamsAPI.unregisterSubcommand(subcommand)— unregisters; call fromonDisable. -TeamsAPI.getSubcommands()— returns all registered subcommands as a snapshot. -/teamsapi status— player-accessible (no admin permission required); shows the active provider, team count, and which optional services (invites, warps, claims, power) are registered. -/teamsapi infonow shows all five registered service types (TeamsService, InviteService, WarpService, ClaimService, PowerService) and the registered subcommand count. -teamsapi.usepermission (default:true) — basic access to/teamsapi. -teamsapi.statuspermission (default:true) — access to/teamsapi status. -PowerGainSourceenum (PASSIVE,PURCHASE,GAMEPLAY,ADMIN) — identifies the origin of a power gain for use in events and listeners. -PowerLossCauseenum (DEATH,DECAY,ADMIN) — identifies the reason for a power loss. -TeamPowerGainEvent(cancellable): fired before a player's power is increased. Listeners can modify the gain amount or cancel the event entirely. -TeamPowerLossEvent(cancellable): fired before a player's power is decreased. Listeners can modify the loss amount or cancel the event entirely. -TeamsPowerService#addPlayerPower(UUID, double)default method: adds power to a player clamped to their maximum; built ongetPlayerPower/setPlayerPower. -TeamsClaimService#isOverClaimed(UUID)default method: returnstruewhen a team's claim count exceeds its power-gated maximum (power-negative state). -config.ymlin the plugin: opt-inpassive-regen(periodic power gain for online players) andpower-shop(buy power via/teamsapi power buy <n>). -/teamsapi power status— shows the sender's current and max power. -/teamsapi power buy <amount>— purchases power units with Vault economy (requires Vault andpower-shop.enabled: truein config). -teamsapi.powerandteamsapi.power.buypermission nodes (default:op). - Passive regen scheduler: whenpassive-regen.enabled: true, grants configurable power to every online team member on a configurable interval. FiresTeamPowerGainEvent; skips if cancelled. Folia-compatible viaGlobalRegionScheduler. - Passive regen and power shop are both Folia-compatible. Folia is detected at runtime;GlobalRegionScheduleris used on Folia andBukkitScheduleron Paper / Spigot.Changed
-/teamsapinow requiresteamsapi.use; senders without it receive a permission error instead of the help message. -/teamsapi statusnow requiresteamsapi.status. -/teamsapi infonow requiresteamsapi.admin. -/teamsapi help(and the bare/teamsapi) only lists subcommands that the sender has permission to execute.1.5.0-velocityTeamsAPI 1.5.0 (Velocity) [Experimental]May 16, 2026 Added
-TeamsSubcommandinterface: providers can register custom subcommands under/teamsapi <name>viaTeamsAPI.registerSubcommand(plugin, subcommand). Each subcommand declares agetName(),getDescription(), optionalgetPermission(), andexecute(CommandSender, String[]). -TeamsAPI.registerSubcommand(plugin, subcommand)— registers via Bukkit ServicesManager. -TeamsAPI.unregisterSubcommand(subcommand)— unregisters; call fromonDisable. -TeamsAPI.getSubcommands()— returns all registered subcommands as a snapshot. -/teamsapi status— player-accessible (no admin permission required); shows the active provider, team count, and which optional services (invites, warps, claims, power) are registered. -/teamsapi infonow shows all five registered service types (TeamsService, InviteService, WarpService, ClaimService, PowerService) and the registered subcommand count. -teamsapi.usepermission (default:true) — basic access to/teamsapi. -teamsapi.statuspermission (default:true) — access to/teamsapi status. -PowerGainSourceenum (PASSIVE,PURCHASE,GAMEPLAY,ADMIN) — identifies the origin of a power gain for use in events and listeners. -PowerLossCauseenum (DEATH,DECAY,ADMIN) — identifies the reason for a power loss. -TeamPowerGainEvent(cancellable): fired before a player's power is increased. Listeners can modify the gain amount or cancel the event entirely. -TeamPowerLossEvent(cancellable): fired before a player's power is decreased. Listeners can modify the loss amount or cancel the event entirely. -TeamsPowerService#addPlayerPower(UUID, double)default method: adds power to a player clamped to their maximum; built ongetPlayerPower/setPlayerPower. -TeamsClaimService#isOverClaimed(UUID)default method: returnstruewhen a team's claim count exceeds its power-gated maximum (power-negative state). -config.ymlin the plugin: opt-inpassive-regen(periodic power gain for online players) andpower-shop(buy power via/teamsapi power buy <n>). -/teamsapi power status— shows the sender's current and max power. -/teamsapi power buy <amount>— purchases power units with Vault economy (requires Vault andpower-shop.enabled: truein config). -teamsapi.powerandteamsapi.power.buypermission nodes (default:op). - Passive regen scheduler: whenpassive-regen.enabled: true, grants configurable power to every online team member on a configurable interval. FiresTeamPowerGainEvent; skips if cancelled. Folia-compatible viaGlobalRegionScheduler. - Passive regen and power shop are both Folia-compatible. Folia is detected at runtime;GlobalRegionScheduleris used on Folia andBukkitScheduleron Paper / Spigot.Changed
-/teamsapinow requiresteamsapi.use; senders without it receive a permission error instead of the help message. -/teamsapi statusnow requiresteamsapi.status. -/teamsapi infonow requiresteamsapi.admin. -/teamsapi help(and the bare/teamsapi) only lists subcommands that the sender has permission to execute.1.5.0TeamsAPI 1.5.0May 16, 2026 Added
-TeamsSubcommandinterface: providers can register custom subcommands under/teamsapi <name>viaTeamsAPI.registerSubcommand(plugin, subcommand). Each subcommand declares agetName(),getDescription(), optionalgetPermission(), andexecute(CommandSender, String[]). -TeamsAPI.registerSubcommand(plugin, subcommand)— registers via Bukkit ServicesManager. -TeamsAPI.unregisterSubcommand(subcommand)— unregisters; call fromonDisable. -TeamsAPI.getSubcommands()— returns all registered subcommands as a snapshot. -/teamsapi status— player-accessible (no admin permission required); shows the active provider, team count, and which optional services (invites, warps, claims, power) are registered. -/teamsapi infonow shows all five registered service types (TeamsService, InviteService, WarpService, ClaimService, PowerService) and the registered subcommand count. -teamsapi.usepermission (default:true) — basic access to/teamsapi. -teamsapi.statuspermission (default:true) — access to/teamsapi status. -PowerGainSourceenum (PASSIVE,PURCHASE,GAMEPLAY,ADMIN) — identifies the origin of a power gain for use in events and listeners. -PowerLossCauseenum (DEATH,DECAY,ADMIN) — identifies the reason for a power loss. -TeamPowerGainEvent(cancellable): fired before a player's power is increased. Listeners can modify the gain amount or cancel the event entirely. -TeamPowerLossEvent(cancellable): fired before a player's power is decreased. Listeners can modify the loss amount or cancel the event entirely. -TeamsPowerService#addPlayerPower(UUID, double)default method: adds power to a player clamped to their maximum; built ongetPlayerPower/setPlayerPower. -TeamsClaimService#isOverClaimed(UUID)default method: returnstruewhen a team's claim count exceeds its power-gated maximum (power-negative state). -config.ymlin the plugin: opt-inpassive-regen(periodic power gain for online players) andpower-shop(buy power via/teamsapi power buy <n>). -/teamsapi power status— shows the sender's current and max power. -/teamsapi power buy <amount>— purchases power units with Vault economy (requires Vault andpower-shop.enabled: truein config). -teamsapi.powerandteamsapi.power.buypermission nodes (default:op). - Passive regen scheduler: whenpassive-regen.enabled: true, grants configurable power to every online team member on a configurable interval. FiresTeamPowerGainEvent; skips if cancelled. Folia-compatible viaGlobalRegionScheduler. - Passive regen and power shop are both Folia-compatible. Folia is detected at runtime;GlobalRegionScheduleris used on Folia andBukkitScheduleron Paper / Spigot.Changed
-/teamsapinow requiresteamsapi.use; senders without it receive a permission error instead of the help message. -/teamsapi statusnow requiresteamsapi.status. -/teamsapi infonow requiresteamsapi.admin. -/teamsapi help(and the bare/teamsapi) only lists subcommands that the sender has permission to execute.1.4.1-bungeeTeamsAPI 1.4.1 (BungeeCord) [Experimental]May 10, 2026 Fixed
- Publish workflow was uploadingoriginal-teams-api-plugin-*.jar(the pre-shade backup) to Modrinth instead of the shaded fat JAR. Servers loading this artifact received aNoClassDefFoundErrorforcom.skyblockexp.teamsapi.api.TeamsAPI. The JAR-locate step now correctly excludesoriginal-*.jar(prefix) rather than*-original.jar(suffix).1.4.1-velocityTeamsAPI 1.4.1 (Velocity) [Experimental]May 10, 2026 Fixed
- Publish workflow was uploadingoriginal-teams-api-plugin-*.jar(the pre-shade backup) to Modrinth instead of the shaded fat JAR. Servers loading this artifact received aNoClassDefFoundErrorforcom.skyblockexp.teamsapi.api.TeamsAPI. The JAR-locate step now correctly excludesoriginal-*.jar(prefix) rather than*-original.jar(suffix).1.4.1TeamsAPI 1.4.1May 10, 2026 Fixed
- Publish workflow was uploadingoriginal-teams-api-plugin-*.jar(the pre-shade backup) to Modrinth instead of the shaded fat JAR. Servers loading this artifact received aNoClassDefFoundErrorforcom.skyblockexp.teamsapi.api.TeamsAPI. The JAR-locate step now correctly excludesoriginal-*.jar(prefix) rather than*-original.jar(suffix).1.4.0Teams API 1.4.0May 10, 2026 Added
-TeamClaimmodel interface: read-only representation of a claimed chunk (teamId,worldName,chunkX,chunkZ,claimedAt). -TeamsClaimServiceinterface: optional extension service for chunk-claim management. Methods:claimChunk,unclaimChunk,unclaimAll,getClaimAt,getTeamClaims,getClaimCount,isClaimed,isClaimedBy,getTeamMaxClaims(-1 means unlimited). -TeamsPowerServiceinterface: optional extension service for player and team power. Methods:getPlayerPower,getPlayerMaxPower,setPlayerPower,getTeamPower,getTeamMaxPower. -TeamClaimEvent(cancellable): fired before a chunk is claimed. -TeamUnclaimEvent(cancellable): fired before a chunk is unclaimed. -TeamsAPIfacade methods:registerClaimProvider,unregisterClaimProvider,getClaimService,isClaimAvailable,registerPowerProvider,unregisterPowerProvider,getPowerService,isPowerAvailable. -TeamsAPI.API_VERSIONbumped to1.4.0. --- [Documentation](https://ez-plugins.github.io/teams-api/) · [Modrinth](https://modrinth.com/plugin/teams-api)1.3.0Teams API 1.3.0May 9, 2026 Plugin
- Expanded platform support: Spigot, Purpur, and Folia 1.16+ declared alongside Paper. -plugin.ymlapi-version: '1.16'andfolia-supported: true. - Multi-Release JAR: base classes compiled at Java 17; versioned classes at Java 25. -TeamsAPI.API_VERSIONbumped to1.3.0. - Publish workflow builds all JARs, deploys API artifact to GitHub Packages, creates a GitHub Release, and uploads to Modrinth.Velocity Bridge
- Newteams-api-velocitymodule: Velocity proxy bridge. Proxy-side plugins can query team data asynchronously viaVelocityTeamsAPI,VelocityTeamsService,VelocityTeam,VelocityTeamMember, andVelocityTeamRole. - Redis multi-proxy support: optional Redis Pub/Sub bridge (redis.enabled: trueinconfig.yml). Queries that cannot be fulfilled locally are forwarded to another proxy in the network, enabling cross-proxy team queries across multiple Velocity instances behind a shared Redis server. -config.ymlgenerated on first startup. Configurable: Redis host, port, password, database, key prefix, connection pool sizes, socket timeout, and query timeout. - Query timeout configurable viaquery.timeout-seconds(default 5 s).BungeeCord Bridge
- Newteams-api-bungeecordmodule: BungeeCord / Waterfall proxy bridge. Mirrors the Velocity bridge viaBungeeTeamsAPI,BungeeTeamsService,BungeeTeam,BungeeTeamMember, andBungeeTeamRole. - Redis multi-proxy support: optional Redis Pub/Sub bridge (redis.enabled: trueinconfig.yml). Queries that cannot be fulfilled locally are forwarded to another proxy in the network, enabling cross-proxy team queries across multiple BungeeCord instances behind a shared Redis server. -config.ymlgenerated on first startup. Configurable: Redis host, port, password, database, key prefix, connection pool sizes, socket timeout, and query timeout. - Query timeout configurable viaquery.timeout-seconds(default 5 s). --- [Documentation](https://ez-plugins.github.io/teams-api/) · [Modrinth](https://modrinth.com/plugin/teams-api)1.2.2Teams API 1.2.2May 7, 2026 JitPack does not set the working directory to the project root for install commands, so ./mvnw failed with 'No such file or directory'. Restore the explicit 'cd $HOME/build &&' prefix from the original. Version: 1.2.1 -> 1.2.2 (patch; build-system fix, no API changes)1.2.1Teams API 1.2.1May 7, 2026 jitpack.yml: - Clone MockBukkit from minecraft/v26 (dev/26.1.1 was deleted) - Capture dynamic version via git rev-parse and write to /tmp/mb-version.txt - Pass -Dmockbukkit.version=dev-$(cat /tmp/mb-version.txt) to mvnw so Maven resolves the correct local artifact instead of 0.0.0-unset Version: 1.2.0 -> 1.2.1 (patch; build-system fix, no API changes)1.2.0Teams API 1.2.0May 7, 2026 - AddedTeamWarpmodel interface (getTeamId,getName,getLocation,getCreatorUUID,getCreatedAt) - AddedTeamsWarpServiceinterface (setWarp,removeWarp,getWarp,getWarps) - AddedTeamWarpSetEvent(cancellable, fired beforesetWarp) - AddedTeamWarpDeleteEvent(cancellable, fired beforeremoveWarp) - Added warp provider registration/lookup toTeamsAPIfacade (getWarpService,isWarpAvailable,registerWarpProvider,unregisterWarpProvider)1.1.0Teams API 1.1.0May 4, 2026 What's new in 1.1.0 - Team Invite API
New:
An optional, independent service interface for team invitation flows. Providers that support invitations register an implementation separately viaTeamsInviteServiceinterfaceTeamsAPI.registerInviteProvider(). ExistingTeamsServiceimplementations are not required to support it; the API degrades gracefully when no invite provider is registered. Methods: -invitePlayer(UUID teamId, UUID inviterUUID, UUID inviteeUUID) → boolean-acceptInvite(UUID teamId, UUID playerUUID) → Optional<Team>-declineInvite(UUID teamId, UUID playerUUID) → booleanNew: invite provider management on
-TeamsAPITeamsAPI.getInviteService()- returns the registeredTeamsInviteService, ornull-TeamsAPI.isInviteAvailable()- returnstrueif an invite provider is registered -TeamsAPI.registerInviteProvider(Plugin, TeamsInviteService)- registers atNormalpriority -TeamsAPI.registerInviteProvider(Plugin, TeamsInviteService, ServicePriority)- registers at a custom priority -TeamsAPI.unregisterInviteProvider(TeamsInviteService)- unregisters the provider on disable All methods follow the existing null-safety contract (null arguments are silently ignored).New events
| Event | Cancellable | When fired | |---|---|---| |TeamInviteEvent| Yes | Before an invitation is recorded. Cancel to block it. | |TeamInviteAcceptEvent| No | After the player has joined the team. | |TeamInviteDeclineEvent| No | After the pending invitation has been removed. |1.0.1Teams API 1.0.1Apr 20, 2026 Initial release of TeamsAPI, a universal, provider-agnostic bridge plugin for Paper servers, modelled on [Vault](https://github.com/MilkBowl/VaultAPI). ---What is TeamsAPI?
TeamsAPI decouples plugins that provide team data (faction, clan, guild plugins) from plugins that consume it (scoreboards, chat formatters, quest systems). Neither side needs to know about the other. When the team plugin changes, every consumer keeps working without a recompile. ---API highlights
- `TeamsAPI` static facade —getService(),isAvailable(),registerProvider(),unregisterProvider()- `TeamsService` interface — team lifecycle, lookup, membership management, and predicate helpers - `Team` / `TeamMember` — read-only snapshot interfaces; providers own the backing data - `TeamRole` enum —OWNER (100) › ADMIN (50) › MEMBER (10)withoutranks()andcanManage()- 5 cancellable events —TeamCreateEvent,TeamDeleteEvent,TeamJoinEvent,TeamLeaveEvent,TeamRoleChangeEvent- Graceful fallback — if no provider is registered,isAvailable()returnsfalseand all facade methods return safe empty/false values ---Requirements
- Paper 26.1+ - Java 25+ ---Installation
Dropteams-api-plugin-1.0.0.jarinto your server'splugins/folder alongside a compatible team plugin, then restart. ---For developers
Add the API to your project via [JitPack](https://jitpack.io/#ez-plugins/teams-api): - Maven -com.github.ez-plugins:teams-api:1.0.1(scopeprovided) - Gradle -compileOnly 'com.github.ez-plugins:teams-api:1.0.1'See the [Developer Guide](https://ez-plugins.github.io/teams-api/developer-guide.html) for provider and consumer integration walkthroughs, and the [API Reference](https://ez-plugins.github.io/teams-api/api.html) for full method tables.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta