/
paper, folia, and spigot so the check works on all supported
server software.factions.updates.enabled (default false - opt-in)factions.updates.notify-ops-on-join (default false)update.availableupdate.urlintegrations.discordsrv.enabled: true):
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.integrations.discordsrv.enabled (default false)integrations.discordsrv.channel-id (default "")integrations.discordsrv.events.faction-created.enabled / .messageintegrations.discordsrv.events.faction-disbanded.enabled / .messageintegrations.discordsrv.events.relation-ally.enabled / .messageintegrations.discordsrv.events.relation-truce.enabled / .messageintegrations.discordsrv.events.relation-enemy.enabled / .messageintegrations.essentialsx.enabled: true):
/f warp teleports now route through EssentialsX alongside /f home./back location is recorded before every teleport so players can return with /back./f home and /f warp with a message.messages.yml keys: home.teleported, home.teleport-failed, home.jailed,
warp.teleported, warp.teleport-failed, warp.jailed.factions.zones.safe-zone.enabled, factions.zones.war-zone.enabled):
/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).factions.cmd.safezone, factions.cmd.warzone (default op).factions.overclaiming.enabled: false - opt-in):
factions.overclaiming.require-enemy-relation: true restricts overclaims
to factions that have declared ENEMY relation.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.messages.yml keys: claim.overclaimed, claim.overclaimed-victim,
claim.enemy-not-raidable.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.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.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.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.factions.overclaiming.offline-protection.enabled: false):
blocks overclaiming when all members of the defending faction are currently offline,
preventing pure offline raiding.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./fa shield <faction> <clear|<start-hour (0-23)> <duration-hours>>.factions.cmd.shield (default op, child of factions.admin).config.yml keys:
factions.power.inactive-exclusion.enabled / .daysfactions.power.death-streak.enabled / .window-seconds / .multiplierfactions.power.gain-on-kill.scale.enabled / .min-factor / .max-factorfactions.raidable.broadcast.enabled / .server-widefactions.overclaiming.offline-protection.enabledfactions.war.shield.enabled / .max-duration-hoursmessages.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-*.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).com.github.ezplugins.updater -> com.pvpindex.lib.updater, preventing runtime classpath conflicts.factions.updates.enabled: false). Opt in by setting it
to true.Essentials actually implements IEssentials before
enabling the integration; logs a warning and falls back to noop if not.
Modern Factions refactor, old-school factions but with modern QOL features