[1.21.* - 26.1.*] PvPIndex Factions - API ; Faction Power ; Faction Claims ; GUI icon

[1.21.* - 26.1.*] PvPIndex Factions - API ; Faction Power ; Faction Claims ; GUI -----

From-scratch Factions refactor, old-school Factions but with modern QOL features and API options




Fixed
  • Fixed bStats created_factions chart to reset the counter after each report, ensuring it shows the number of factions created in the reporting period rather than the cumulative total since startup.
----------, Jun 7, 2026

Changed
  • Updated TeamsAPI integration from 2.4.0 to 2.5.0.
Added
  • TeamsService.getTeamIds() - returns all team UUIDs for iteration without loading full team objects. Consumers can iterate over team IDs for bulk operations without loading each full Team object.
  • Team.getOwner() - default method available via existing getOwnerUUID() and getMember() implementation. Returns the owner's TeamMember directly.
----------, Jun 6, 2026

[​IMG]

PvPIndex Factions is a long-term modernization of the classic Factions experience for modern Paper servers.

The mission is to revive Factions as an API-connectable, timeless, and production-ready plugin while preserving the gameplay identity players already love.

Supported platforms
  • Paper 1.21.x / 1.26.x - Recommended; full feature set
  • Folia 1.21.x / 1.26.x - Supported; uses Folia-native regional and async schedulers
  • Spigot 1.21.x / 1.26.x - Supported; runs in legacy compatibility mode (standard Bukkit scheduler, legacy chat listener)
  • Java 21+

Vision: timeless Factions with modern internals
  • Preserve familiar faction gameplay while modernizing architecture
  • Provide stable persistence and operational reliability
  • Enable long-term ecosystem/API connectivity
  • Reduce technical debt from legacy-era implementations

What is improved vs old Factions-era plugins
  • Cleaner command UX and help discoverability
  • Persistent invite lifecycle with login-time invite summaries
  • Improved /f map readability and interaction flow
  • Expanded claim and unclaim argument modes
  • Configurable GUI navigation via gui.yml
  • Optional faction bank tax with configurable controls
  • Modern permission structure for admins and staff
  • Soft integrations that fail gracefully when providers are missing

Why PvPIndex Factions
  • Modernized /f command surface with familiar Factions flow
  • Persistent invite lifecycle with login-time notification summaries
  • Advanced land control: claim/unclaim one, square, circle, fill, auto
  • Interactive map and improved faction territory context
  • Faction bank system with history, transfer support, and optional tax
  • Configurable /f GUI via gui.yml
  • Leaderboard sorting with /f top power|bank|land

Feature overview
Faction lifecycle

  • Create, rename, describe, and disband factions
  • Invite/revoke/accept/decline/decline-all flows
  • Rank management with promote, demote, and leader transfer
  • Fully manageable custom roles via /f role with configurable priorities and prefixes

Land and territory
  • Claim and unclaim with one/square/circle/fill/auto variants
  • Map-centered territory interaction and visibility
  • Territory context messaging for better player clarity
  • Overclaiming with enemy-relation guard, offline protection, and war shield support

Power and war mechanics
  • Configurable power model: per-player max, regen rate, loss on death, grace period
  • Optional kill power rewards — flat or scaled by victim/killer power ratio
  • Optional death streak multiplier — escalating loss for consecutive deaths
  • Optional inactive member exclusion — long-offline members excluded from max-land
  • Raidable state broadcast — notify members (and optionally the server) on threshold crossing
  • War shield system — admins set a daily UTC protection window per faction
  • /f powerhistory — paginated per-player power change log (alias: /f phist); shows death, kill, and passive-regen events

Economy and bank
  • Deposit, withdraw, transfer, and bank history tracking
  • Optional periodic tax engine with configurable rate and interval
  • Vault-ready for economy ecosystem compatibility

Homes, warps, and QoL
  • Faction home and warp systems
  • Warp management commands and listing flows
  • Notification controls for invite and territory updates
  • PlaceholderAPI role placeholders: %pvpindex_player_role% and %pvpindex_player_role_prefix%

Faction chests
  • Shared faction storage with /f chest for fast default chest access
  • Named chest management: /f chest list, /f chest open <name>, /f chest create <name>, /f chest delete <name>
  • Officers can create/delete chests; faction members can open/list based on permission nodes
  • Default chest name is configurable via factions.team-chest.default-name
  • Per-faction chest count is configurable via factions.max-team-chests (default 1)

Faction flags
  • Per-faction boolean toggles: pvp, friendly-fire, explosions, fire-spread, open
  • Officers manage flags in-game with /f flag set; defaults and editability configurable per-flag
  • Admins override any flag via /fa flag regardless of the player-editable setting

Audit log
  • Officers and above page through faction history with /f audit [page] [--action=<action>]
  • Staff view any faction's history with /fa audit <faction> [page] [--action=<action>]
  • Tracks claims, unclaims, relation changes, kicks, promotions, demotions, bank transactions, and merge events
  • Page size configurable via factions.audit.page-size in config.yml

Faction merges
  • /f merge send <faction> — officers can propose dissolving their faction into another
  • /f merge accept <faction> — officers of the target faction accept and complete the merge
  • All claims, warps, bank balance, and members are transferred atomically; sender faction is disbanded
  • Online target members are notified immediately when a request arrives

Internationalization
  • Eight built-in locale bundles: en, es, de, fr, pt-BR, ja, zh, ru
  • Players choose their language with /f language [code|reset]
  • Server default locale configurable via factions.language.default in config.yml
  • All command output, GUI items, and map display respect the resolved locale
  • Message lookup order: player locale → server default → English → inline fallback
  • Community locale contributions welcomed — see the i18n guide in the docs

Integrations
  • Vault
  • PlaceholderAPI
  • TeamsAPI
  • WorldGuard / WorldEdit
  • dynmap (3.x, tested 3.4 – 3.8)
  • EssentialsX
  • LWC / LWCX
  • EzAuction (faction auctions)
  • EzShops (faction shops)
  • EzRTP (avoids faction claims)
  • EzClean (avoids faction claims)

Integration downloads

API/connectability direction
PvPIndex Factions is designed as a modern service-oriented base so it can integrate cleanly with optional plugins and future ecosystem tooling.

This refactor direction focuses on long-term maintainability, adapter-based integration, and reliable standalone operation.

Visual preview
GUI

[​IMG]

Map
[​IMG]

Faction info
[​IMG]

Faction info page 2
[​IMG]

/f top tab-complete
[​IMG]

Faction Flags
[​IMG]

Set flag state
[​IMG]

Flag autocomplete
[​IMG]

Faction audit log
[​IMG]

Admin power history
[​IMG]

Command roots
  • Player: /f (aliases: /faction, /factions)
  • Admin: /fa (alias: /factionadmin)
  • Highlights: /f create, /f invite, /f claim, /f map, /f bank, /f warp, /f chest, /f audit

Configuration and operations
  • Generated files: config.yml, roles.yml, database.yml, messages.yml, gui.yml
  • Storage support: embedded H2 or MySQL/MariaDB
  • Operations docs available for rollout, troubleshooting, and scaling

Migration-oriented for existing communities
If your network comes from legacy Factions servers, PvPIndex Factions is built to keep the familiar gameplay loop while giving you a cleaner and more future-proof backend.

Documentation and links

License and attribution
  • LGPL-3.0
  • Derivative of MassiveCraft Factions (LGPL-3.0)
  • Refactor attribution: PvPIndex.com team (Shadow48402, Epildev)
----------, May 31, 2026

Added


  • Faction Chests:
    • New /f chest command group for shared faction storage.
    • Added subcommands: /f chest list, /f chest open <name>, /f chest create <name>, /f chest delete <name>.
    • /f chest opens the configured default chest (factions.team-chest.default-name) and auto-creates it on first use.
    • Per-faction chest count is capped by factions.max-team-chests (default: 1).
    • New permission nodes: factions.cmd.chest, factions.cmd.chest.create, and factions.cmd.chest.delete.
Changed
  • Bumped plugin version to 1.1.6.
  • Synced release metadata and public listing copy for this release.
Documentation
  • Updated TeamsAPI requirement references in public docs/listings to 2.3.0+ to match the current integration baseline.
Fixed
  • Fixed startup crash on servers using older TeamsAPI builds that do not provide TeamsChestService. TeamsAPI chest provider registration is now optional and loaded reflectively, so the plugin enables normally and keeps other available TeamsAPI adapters active.
----------, May 28, 2026

This version is a small bugfix for the /fa help command. To have effect reset of the translation file is required.

Fixed
  • Fixed MiniMessage MiniMessage translation for /fa help
  • Fixed configurable default messages for /fa help
----------, May 25, 2026

Fixed
  • All /f subcommands broken when TeamsAPI is absent: FactionCommandExecutor and FactionTabCompleter held direct import statements for TeamsAPI classes. On Paper's isolated plugin classloader this caused NoClassDefFoundError at class-load time when TeamsAPI was not installed, preventing the executor from being registered and making every /f <subcommand> (including /f info, /f map, etc.) fail with "Invalid command!".

    Introduced TeamsCommandBridge (no TeamsAPI imports, loaded unconditionally) and TeamsCommandBridgeImpl (imports TeamsAPI, instantiated only via reflection when TeamsAPI is confirmed present). Mirrors the existing TeamsApiRegistrar isolation pattern. With TeamsAPI absent the bridge is null and all subcommands route through the local CommandRegistry as intended.
----------, May 24, 2026

Added
  • /f info detail pages (/f info page <n> [faction]): the summary view now shows a hint pointing players to /f info page <n>. The new page subcommand displays additional faction stats across paginated pages:
    • Online member count with a hover list of names
    • Rank distribution (members per rank)
    • Activity stats - inactive-over-7-days count and last-seen summary
    • Relations summary (Ally / Truce / Neutral / Enemy counts)
    • Claim capacity with RAIDABLE / STABLE risk indicator
    • Full power breakdown (total, member contribution, power boost)
    • Top 3 power contributors
    • Newest member and most-recent activity timestamps
  • Sender context tracking for /f info page: the last faction viewed per sender is remembered so /f info page <n> works without repeating the faction name after an initial /f info [faction].
  • New messages in messages.yml: info.details-hint, info.page-title, info.page-next, info.page-prev, info.invalid-page, info.page-no-context.


Changed
  • Updated TeamsAPI dependency from 2.0.0 to 2.1.0.
  • Bumped plugin version to 1.1.3.
  • TeamsAPI relation adapter now honors TeamRelation nature metadata (RelationNature) when persisting relation changes, so friendly/hostile custom relation natures map safely to internal declared relations.
Fixed
  • TeamsAPI relation adapter now honors RelationNature metadata (TeamsAPI 2.1.0+): custom relation natures (FRIENDLY / HOSTILE) on non-standard TeamRelation values are mapped to the correct internal ALLY / ENEMY relation instead of always falling back to NEUTRAL.
----------, May 24, 2026

Added
  • Faction MOTD (/f motd): officers and above can set a message of the day for their faction. The MOTD is displayed in chat when a member logs in. Use /f motd clear to remove it.
  • Configurable member-size cap: a new max-members setting in config.yml limits how many players can belong to a faction (0 = unlimited). The cap is enforced in /f join and in the join service. Default is 0 (no limit).
  • Warp passwords (/f warp password <name> [password | clear]): officers and above can protect a faction warp with a password. Players must supply the correct password as a second argument (/f warp <name> <password>) to teleport. Passwords are stored as plain text in the warps table — avoid using important credentials.
  • Warp per-use cost (/f warp cost <name> <amount>): officers and above can require a Vault economy payment each time a warp is used. Setting the cost to 0 makes the warp free. The charge is deducted via Vault before teleporting; if Vault is absent or the player has insufficient funds the teleport is blocked.
  • Database migration: the warps table gains two new nullable columns (password, use_cost) when the plugin starts on an existing installation. No data is lost during upgrade from 1.1.1.
  • Dynmap startup smoke test (.github/workflows/dynmap-smoke.yml): downloads the latest dynmap plugin from Modrinth, starts a Paper server with both plugins, and asserts dynmap hooked - faction territory layer enabled. is logged. Runs on Paper 1.21.4 and 1.21.11 on every PR to main/develop.
Changed
  • Dependency upgrades (maintenance): all outdated compile and test dependencies bumped to their latest compatible versions:
    • EssentialsX 2.21.0 → 2.21.2
    • worldedit-bukkit 7.3.9 → 7.4.3
    • worldguard-bukkit 7.0.12 → 7.0.16
    • placeholderapi 2.11.6 → 2.12.2 (repo URL updated to repo.helpch.at)
    • mysql-connector-j 9.1.0 → 9.7.0
    • h2 2.3.232 → 2.4.240
    • HikariCP 6.2.1 → 7.0.2
    • junit-jupiter 5.11.4 → 5.14.4
    • mockito-core / mockito-junit-jupiter 5.14.2 → 5.23.0
    • maven-shade-plugin 3.6.0 → 3.6.2
    • asm / asm-commons override 9.8 → 9.10
    • jacoco-maven-plugin 0.8.12 → 0.8.14
    • maven-surefire-plugin 3.5.2 → 3.5.5
Fixed
  • dynmap compatibility expanded to 3.x (3.4 – 3.8): the vendored compile-time dynmap-api dependency was upgraded from 3.4-beta-3 to 3.8 (latest stable, released 2026-01-14). In dynmap 3.8 the marker API was split into a separate DynmapCoreAPI JAR; both JARs are now vendored under libs/ with minimal POMs so CI never contacts repo.mikeprimm.com. The runtime hook code only uses stable org.dynmap marker APIs that are present in every 3.x release, so the plugin continues to work with any installed dynmap 3.x version.
----------, May 23, 2026

Fixed
  • Chat crash on Paper 26.x (ClassNotFoundException / AbstractMethodError in EngineChat$PaperChatListener): multiple layers of shade-related breakage were present and are fully resolved:
    • maven-shade rewrites net.kyori.adventure.* string literals in the bytecode constant pool to com.pvpindex.lib.adventure.*. At runtime Paper's classloader cannot find that relocated namespace, causing ClassNotFoundException. String literals are now constructed at runtime via String.valueOf concatenation so shade never sees the full class name in the constant pool.
    • The chat renderer was originally a raw 4-parameter lambda targeting ChatRenderer directly; LambdaMetafactory cannot reliably link it against Paper 26.x runtime classes. The renderer now uses ChatRenderer.viewerUnaware() and a Proxy-based InvocationHandler that implements only the 3-parameter ViewerUnaware.render method, eliminating cross-version descriptor mismatches.
    • EngineChat now contains zero net.kyori.adventure imports; all adventure interactions go through java.lang.reflect against classes loaded from Paper's own classloader, so shade has nothing to rewrite in type descriptors either.
  • Chat listener rebuilt as clean OOP dual-path design: Paper/Folia servers use a PaperChatListener that installs a ChatRenderer.ViewerUnaware proxy; Spigot/Bukkit servers use a LegacyChatListener with AsyncPlayerChatEvent.setFormat. Reflection handles and the cached MiniMessage instance are resolved once at listener construction time to avoid per-message overhead.
  • H2 database crash on first command (/f create, /f join, and any other command that saves a model): H2 2.x does not implement the VALUES(col) function reference inside ON DUPLICATE KEY UPDATE that Jaloquent generates, causing a JdbcSQLSyntaxErrorException (error code 42122) on every save against an H2 backend. Upsert SQL is now transparently rewritten to MERGE INTO … KEY(id) before execution, which H2 fully supports. MySQL/MariaDB backends are unaffected.
Changed
  • Chat formatting is now disabled by default (factions.chat.show-tag: false in config.yml). Operators must opt in by setting show-tag: true. Previously it was enabled for all players by default.
----------, May 22, 2026

Added
  • Faction merge (/f merge send <faction>, /f merge accept <faction>):
    • Officers and above can send a merge request proposing their faction be absorbed by another.
    • Officers and above of the target faction can accept the request to complete the merge.
    • On acceptance, all claims, warps, bank balance, and members are transferred to the target faction; members join at the target's default rank; the sender faction is disbanded.
    • Online members of the target faction are notified when a merge request arrives.
    • New permission factions.cmd.merge (default: true).
    • New MergeRequestModel / MergeRequestRepository data layer and MergeService / MergeServiceImpl service layer.
    • New audit actions merge-request and merge-accept for the audit log.
  • Internationalization support with locale bundles under messages/ for en, es, de, fr, pt-BR, ja, zh, and ru.
  • New player language command: /f language [code|reset] with aliases lang and locale.
  • New player profile locale persistence (players.locale) for per-player language overrides.
  • New config key: factions.language.default for server-wide default locale fallback.
  • New permission node: factions.cmd.language (default true).
  • New translator/contributor documentation: docs/i18n.md.
Changed
  • Upgraded TeamsAPI integration to 2.0.0:
    • getRelation(id, id) now returns TeamRelation.MEMBER when both team UUIDs are equal (new TeamsAPI 2.0.0 contract).
  • Message resolution now follows locale fallback order: player locale -> server default -> English -> inline fallback text.
  • /f help now includes the language command.
  • /fa reload now reloads locale bundles in messages/ in addition to config.
----------, May 20, 2026

Added
  • New admin power command suite under /fa power:
    • view, set, add, remove, reset, freeze, and history
    • Added granular permissions under factions.cmd.admin.power.*
    • Admin mutations now support reason logging through power history entries
  • New power service architecture:
    • Introduced centralized PowerService / PowerServiceImpl
    • EnginePower, /f power buy, and admin power commands now use the shared service
  • Expanded power model and controls:
    • Added player-level power_frozen state
    • Added source-level power controls under factions.power.sources.*
    • Added constraints under factions.power.constraints.*
    • Added context multipliers under factions.power.multipliers.*
    • Added freeze behavior toggles under factions.power.freeze.*
    • Added power notification routing under factions.power.notifications.*
  • New message keys for power change routing and admin responses (power.admin-*, power.change-*, power.blocked-frozen).


Changed
  • Refactored power mutation paths to remove duplicated logic and make power behavior consistently configurable.
  • Updated command wiring/bootstrapping to inject and reuse the centralized power service.
----------, May 20, 2026

Added
  • Audit log (/f audit, /fa audit <faction>):
    • Records key faction actions: chunk claims/unclaims, relation changes, member kicks, promotions, demotions, and bank deposits/withdrawals/transfers.
    • /f audit [page] [--action=<action>] lets officers and above page through their faction's history with optional action-type filtering.
    • /fa audit <faction> [page] [--action=<action>] gives staff the same view for any faction; console-friendly.
    • Page size is configurable via factions.audit.page-size in config.yml (default: 10).
    • New permission factions.cmd.audit (default: op); included as a child of factions.admin.
----------, May 19, 2026

Added
  • Faction flags (/f flag, /f flag list, /f flag set <flag> [on|off]):
    • Per-faction boolean toggles that officers can manage in-game. Five built-in flags:
      • pvp: allow PvP inside the faction's claimed territory (default: true)
      • friendly-fire: allow members to harm each other (default: false)
      • explosions: allow explosions to destroy terrain in territory (default: false)
      • fire-spread: allow fire to spread in territory (default: false)
      • open: allow anyone to join without a pending invite (default: false)
    • /f flag with no arguments shows the current flag list; /f flag list is an explicit alias.
    • /f flag set <flag> toggles; /f flag set <flag> on|off sets a specific value.
    • /fa flag <faction> <flag> [on|off] lets admins override any flag regardless of the player-editable config setting.
    • Flag defaults and player-editability are configurable per-flag under factions.flags.*.
    • New permissions: factions.cmd.flag (default true), factions.cmd.flag.set (default true, officer check enforced by command logic).
    • New messages.yml keys: flag.*.


  • WorldGuard region sync (integrations.worldguard-sync-regions: false, opt-in):
    • When enabled, every faction-claimed chunk is mirrored as a ProtectedCuboidRegion in WorldGuard on startup and kept in sync with claim, unclaim, join, leave, and disband events.
    • WG handles block-break and block-place denial at its native NORMAL event priority. Because the protection engine registers at HIGH with ignoreCancelled = true, enemy players are denied before our handler runs; no per-event database query is needed for them.
    • Faction members are added to their faction's regions as WG domain members so WG passes their interactions transparently.
    • Allies are handled by a dedicated HIGHEST ignoreCancelled = false pass that un-cancels their events after a single DB lookup.
    • Safezone and warzone chunks get WG regions with an empty member list, so WG denies all building there regardless of WG membership.
    • Requires WorldGuard to be installed and loaded. Toggling the option requires a restart.
    • New config key: integrations.worldguard-sync-regions (default false).
----------, May 19, 2026

Added
  • Startup update-check integration using ez-plugins/mc-plugin-update-notifier with chained sources: Modrinth public API as primary and GitHub public API as fallback. Modrinth queries loaders paper, folia, and spigot so the check works on all supported server software.
  • Operator join notification when an update is available, including clickable release URL output.
  • New update config keys:
    • factions.updates.enabled (default false - opt-in)
    • factions.updates.notify-ops-on-join (default false)
  • New message keys:
    • update.available
    • update.url
  • DiscordSRV integration (integrations.discordsrv.enabled: true):
    • Faction create, disband, ally, truce, and enemy-declared events are broadcast to a Discord channel via DiscordSRV (pure reflection - no hard compile-time dependency).
    • Per-event toggles and Discord-markdown message templates are configurable in config.yml under integrations.discordsrv.events.*.
    • channel-id key routes messages to a specific text channel; leave empty to use DiscordSRV's main linked channel.
    • New config keys:
      • integrations.discordsrv.enabled (default false)
      • integrations.discordsrv.channel-id (default "")
      • integrations.discordsrv.events.faction-created.enabled / .message
      • integrations.discordsrv.events.faction-disbanded.enabled / .message
      • integrations.discordsrv.events.relation-ally.enabled / .message
      • integrations.discordsrv.events.relation-truce.enabled / .message
      • integrations.discordsrv.events.relation-enemy.enabled / .message
  • EssentialsX integration overhaul (integrations.essentialsx.enabled: true):
    • /f warp teleports now route through EssentialsX alongside /f home.
    • EssentialsX /back location is recorded before every teleport so players can return with /back.
    • Jailed players are blocked from /f home and /f warp with a message.
    • Detected EssentialsX version is logged at startup.
    • New messages.yml keys: home.teleported, home.teleport-failed, home.jailed, warp.teleported, warp.teleport-failed, warp.jailed.
  • Safe zones and war zones (factions.zones.safe-zone.enabled, factions.zones.war-zone.enabled):
    • Both zones are enabled by default. Disabling a zone causes its chunks to behave as Wilderness - protection, PvP rules, and power-loss suppression are all inactive.
    • New admin commands /fa safezone and /fa warzone let operators assign chunks to each zone in one-shot, square, or circle modes (with an optional remove sub-mode).
    • New permissions: factions.cmd.safezone, factions.cmd.warzone (default op).
  • Overclaiming (factions.overclaiming.enabled: false - opt-in):
    • When enabled, a faction can claim an enemy's chunk if the victim's land count exceeds their current maximum land (power-based). Border adjacency is waived for overclaims.
    • Optional guard factions.overclaiming.require-enemy-relation: true restricts overclaims to factions that have declared ENEMY relation.
    • Attacker receives a claim.overclaimed notification; all online victim members receive claim.overclaimed-victim showing remaining chunk count.
    • FactionChunkClaimEvent gains an optional overclaimedFromFaction field populated on overclaim so third-party plugins can observe the event.
    • New messages.yml keys: claim.overclaimed, claim.overclaimed-victim, claim.enemy-not-raidable.
  • Power and war improvements - six optional, independently toggleable features that improve PvP/raiding pacing. All are disabled by default:
    • F1 - Inactive member exclusion (factions.power.inactive-exclusion.enabled: false): members who have been offline longer than inactive-exclusion.days do not contribute to the faction's max-land calculation. Their stored power is unchanged; only the land-cap computation skips them, discouraging dead factions from holding territory indefinitely.
    • F2 - Death streak multiplier (factions.power.death-streak.enabled: false): consecutive deaths within a rolling window-seconds window each multiply the power loss by multiplier^streak. After the window expires the streak resets. A separate power.death-streak-penalty message is sent on streak deaths. Persisted in two new PlayerModel columns: last_death_at, death_streak.
    • F3 - Scaled kill rewards (factions.power.gain-on-kill.scale.enabled: false): kill power gain is multiplied by clamp(victimPower / killerPower, min-factor, max-factor). Rewarding high-risk kills and reducing farming incentive.
    • F4 - Raidable state broadcast (factions.raidable.broadcast.enabled: true): after each power tick, the engine detects factions that cross the raidable threshold and notifies members. Optional server-wide: true broadcasts to all online players. The raidable flag is persisted in a new FactionModel column: is_raidable.
    • F5 - Offline protection (factions.overclaiming.offline-protection.enabled: false): blocks overclaiming when all members of the defending faction are currently offline, preventing pure offline raiding.
    • F6 - War shield (factions.war.shield.enabled: false): a faction may be assigned a daily UTC protection window by an admin using the new /fa shield <faction> <start-hour> <duration-hours> command. During the window the faction's land cannot be overclaimed. Persisted in two new FactionModel columns: shield_start_hour, shield_duration_hours.
    • New admin command: /fa shield <faction> <clear|<start-hour (0-23)> <duration-hours>>.
    • New permission: factions.cmd.shield (default op, child of factions.admin).
    • New config.yml keys:
      • factions.power.inactive-exclusion.enabled / .days
      • factions.power.death-streak.enabled / .window-seconds / .multiplier
      • factions.power.gain-on-kill.scale.enabled / .min-factor / .max-factor
      • factions.raidable.broadcast.enabled / .server-wide
      • factions.overclaiming.offline-protection.enabled
      • factions.war.shield.enabled / .max-duration-hours
    • New messages.yml keys: power.death-streak-penalty, raidable.*, shield.*, claim.enemy-offline-protected, claim.shield-active.
  • /f powerhistory [<player>] [<page>] (alias: phist): shows a paginated log of significant power changes (death, kill, and purchase events). Players can view their own history without any extra permission. Viewing another player's history requires factions.cmd.power.history.other (default op). All message templates are configurable in messages.yml under power.history-*.
  • TeamsAPI 1.8.0 power history provider: when TeamsAPI 1.8.0+ is present the plugin registers a TeamsPowerHistoryService implementation that exposes all recorded power-change events through the standard TeamsAPI surface. Consumer plugins can read player and team history, filter by time range, add external entries, and remove or clear records without touching the database directly. The provider is registered reflectively so servers running TeamsAPI 1.7.x or earlier start cleanly and the provider is silently skipped. New permissions: factions.cmd.power.history (default true), factions.cmd.power.history.other (default op).
Changed
  • TeamsAPI dependency updated to 1.8.0 (was 1.7.0).
  • Update notifier library is now explicitly relocated in shading: com.github.ezplugins.updater -> com.pvpindex.lib.updater, preventing runtime classpath conflicts.
  • Update check is disabled by default (factions.updates.enabled: false). Opt in by setting it to true.
  • factions.updates.modrinth-slug, factions.updates.github-owner, and factions.updates.github-repo are no longer exposed as config keys; the values are hardcoded in the plugin and the config entries are ignored if present.
  • EssentialsX interop now uses the compile-time EssentialsX API instead of reflection, making it resilient to future EssentialsX API changes and easier to diagnose when something breaks.
  • Plugin validates that the plugin named Essentials actually implements IEssentials before enabling the integration; logs a warning and falls back to noop if not.
----------, May 19, 2026

Added
  • TeamsAPI 1.6 relation provider: the plugin now implements the TeamsRelationService interface introduced in TeamsAPI 1.6. External plugins and scripts can read and write inter-faction relations (ALLY, TRUCE, NEUTRAL, ENEMY) through the standard TeamsAPI surface. TeamRelationChangeEvent is fired on every relation change, allowing third-party plugins to observe or cancel relation updates before they are persisted.
Changed
  • TeamsAPI dependency updated to 1.6.1 (was 1.5.0).
Fixed
  • Plugin crashed on startup when TeamsAPI 1.5.x was installed (NoClassDefFoundError: TeamsRelationService): the TeamsRelationService interface was introduced in TeamsAPI 1.6 and did not exist in older installations. A direct bytecode reference to it in the registrar caused the JVM bytecode verifier to fail when loading the class, crashing the plugin on startup. All references to TeamsRelationService and its concrete adapter are now loaded via reflection so that TeamsAPI 1.5.x servers start cleanly and the relation provider is silently skipped when TeamsAPI < 1.6 is detected.

  • Stale relation entries after faction disband: when a faction was disbanded, references to it stored in other factions' relation maps were not removed, leaving orphaned entries in the database. Disbanding a faction now clears all incoming relation references across every other faction.
----------, May 18, 2026

Resource Information
Author:
----------
Total Downloads: 150
First Release: May 17, 2026
Last Update: Jun 7, 2026
Category: ---------------
All-Time Rating:
0 ratings
Find more info at pvp-index.github.io...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings