## [1.3.0] - Summon altars, variants, rages and anti-cheese
### Added
- **Summon items & altars** — new `summon` list on a boss. Players right-click with a configured
item (vanilla `item`, optional exact `name`, or a Fiw Tools `toolId`) to start the fight,
optionally only on an `altar` block. Per-entry `consume`, per-player `cooldownSeconds`,
`variant` and a server-wide `message`. Example: `examples/summon/ember_warden.json`.
- **Spawn limits** — `spawnLimits.maxAlive` and a server-wide `cooldownSeconds` for player
summons, with refusal messages telling the player why. Living bosses are counted even in
unloaded chunks. State is saved in `config/fiw_bosses/data/spawns.json`. Admin
`/boss spawn` is never limited.
- **Difficulty variants** — named `variants` (e.g. `hard`) with `healthMultiplier`,
`damageMultiplier`, `meleeDamageMultiplier`, `abilityDamageMultiplier`, `lootMultiplier`, an
optional replacement `loot` table and `displayName`. Saved with the boss.
- **Melee / ability damage multipliers** — phases gain `meleeDamageMultiplier` and
`abilityDamageMultiplier` next to `damageMultiplier`.
- **Arena leash** — `arena.radius`: a boss pulled too far from its spawn point resets (home,
full health, phase 1, fight ledger cleared so nobody earns loot for the abandoned attempt).
`minionsOnReset` despawns its minions or brings them to the boss.
- **Anti-cheese** — opt-in `antiCheese.stuck` detection with admin-chosen actions
(`teleport_to_target`, `teleport_attack`, `teleport_home`, `heal`, `reset`, `despawn`,
`rage:<name>`) and optional per-occurrence `escalation`; bosses and custom minions destroy
boats/minecarts they're put in (on by default, optional `vehicleRage`); opt-in
`ignoreSlowBlocks` (cobweb, powder snow, berry bush, honey, soul sand...) with per-block
overrides. Custom minions that can't reach their target teleport to it
(`teleportWhenStuck`, on by default). Bosses still never break blocks.
- **Rages & enrage timer** — named `rages` that override the current HP phase while active
(abilities, multipliers, gear, protection, messages) plus `durationSeconds`,
`extraHealthPercent`, `healPercent` and `bossBarColor`. Triggered by stuck actions, vehicles,
or automatically `afterSeconds` into the fight. Saved through restarts. Example:
`examples/anticheese/rift_sentinel.json`.
- **Loot lockout** — `rewards.lockoutHours`: a player who earned rewards from a boss gets no
per-player loot or reward commands from it until the lockout ends (still listed in the
summary, and told how long is left). `lockoutPerVariant` chooses one shared lockout or one
per variant. Saved in `config/fiw_bosses/data/lockouts.json`.
- **Kill records** — total kills, fastest kill and its party, top single-fight damage and
kills per player, in `config/fiw_bosses/data/records.json`. `/boss stats [bossId]`.
- **Discord kill webhooks** — `settings.json` `webhooks.discord` (or a boss's own `webhook`,
or `"enabled": false`) posts an embed on every rewarded kill: killer, fight time, variant,
top damage, unique drops, new-record footer. Sent off the server thread, no retries.
- **Shield phase (pylons)** — a phase or rage `shield` summons `count` pylons (any custom
minion) in a ring; the boss takes no damage until all are destroyed, and the boss bar shows
how many are left. Example: `examples/anticheese/minions/rift_pylon.json`.
- **Selectable path finding** — `pathfinding` in settings.json (default `"vanilla"`, unchanged)
or per boss/minion. `"shared"` lets squads chasing the same target share one path search and
re-plans less often for far targets — a big saving for large minion swarms.
- **Scheduled world spawns** — `schedules` in settings.json or a boss file's `schedule`:
every `intervalMinutes` or at daily `times`, random pick from `locations`, server-wide
countdown broadcasts, at most one live boss per schedule. Validated on reload (exactly one
timing option; a boss file wins over settings.json for the same boss).
- Commands: `/boss spawn <bossId> variant <name> [pos]`, `/boss limits <bossId> [reset]`,
`/boss rage <targets> start <name>`, `/boss rage <targets> end`, `/boss stats [bossId]`,
`/boss schedule list`, `/boss schedule trigger <id>`.
- API: `FiwBossesAPI.isMinion(Entity)`, `FiwBossesAPI.getVariant(Entity)`.
### Changed
- A phase's `damageMultiplier` now scales ability damage as well as melee (it used to be
melee only). Use `meleeDamageMultiplier` to keep the old behavior.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }