From 97f5beb03f804620898212fc7249e95ff93638b9 Mon Sep 17 00:00:00 2001 From: Ryan Barlow <7389646+ryanbarlow97@users.noreply.github.com> Date: Sun, 11 Oct 2026 20:52:24 +0000 Subject: [PATCH 1/3] docs(Infestations): death on login reaches only the character who logged off Co-Authored-By: Claude Opus 5.5 --- projects/Infestations/README.md | 14 +++++++------- projects/Infestations/overview.md | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/projects/Infestations/README.md b/projects/Infestations/README.md index 556c502..cf528fa 100644 --- a/projects/Infestations/README.md +++ b/projects/Infestations/README.md @@ -10,15 +10,15 @@ TFMC runs Minecraft **1.21.10**. See the [shared platform and build baseline](.. Infestations builds with Java **21** against `io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT`. Install the pinned TLibs -`2.0.1`, SimpleFactions `3.0.2`, and InteractibleFurniture `0.2.1` release -artifacts with the shared dependency installer. The build also prepares a -checksum-verified MythicMobs `5.13.1-SNAPSHOT` input from the private -ServerAssets repository. +`2.0.1`, RPCharacters `2.4.0`, SimpleFactions `3.0.2`, and +InteractibleFurniture `0.2.1` release artifacts with the shared dependency +installer. The build also prepares a checksum-verified MythicMobs +`5.13.1-SNAPSHOT` input from the private ServerAssets repository. At runtime, `plugin.yml` requires TLibs, SimpleFactions, MythicMobs, -ItemsAdder, and InteractibleFurniture. The plugin code does not call ItemsAdder -directly; the default lure is an ItemsAdder item (`ia.tfmc:lure`) placed as -InteractibleFurniture. +ItemsAdder, and InteractibleFurniture; RPCharacters is optional. The plugin +code does not call ItemsAdder directly; the default lure is an ItemsAdder item +(`ia.tfmc:lure`) placed as InteractibleFurniture. ## Guides diff --git a/projects/Infestations/overview.md b/projects/Infestations/overview.md index 7016400..fbb6889 100644 --- a/projects/Infestations/overview.md +++ b/projects/Infestations/overview.md @@ -83,8 +83,11 @@ second until they leave. without dropping them. `/lure leave` fails the lure when nobody committed remains. - **Logout:** a committed player who logs out has `logout-grace-seconds` to - return and remains committed. After the grace period, they are killed on - their next login. A committed player who dies leaves the lure. + return and remains committed. After the grace period, the character they + logged out as is killed when it is next active, at login or after a + character switch. If that character has died in the meantime, the death is + dropped and the player leaves the lure. Without RPCharacters, the player is + killed on their next login. A committed player who dies leaves the lure. Players cannot break the lure, and explosions and pistons cannot move it. Lure furniture that does not match saved lure state is removed on enable, reload, @@ -144,6 +147,9 @@ map data. and skipped. - **InteractibleFurniture** hosts the lure; placement, interaction, and break events drive the lure lifecycle. TLibs item paths identify the lure item. +- **RPCharacters** (optional) identifies the character a committed player + logged out as, so a death owed after the logout grace reaches only that + character. - **Map export:** on start and whenever infestations are set, spread, cleared, or reloaded, the plugin writes each province's ID, severity, group, and display name to `MapAPI/infestation_data.json` and uploads it through the @@ -151,8 +157,9 @@ map data. ## Persistence and shutdown -- Infestations and lure state, including committed players, logout grace, and - lure counters, are stored in `plugins/Infestations/Data/infestations.json`. +- Infestations and lure state, including committed players, logout grace, the + character each committed player logged out as, and lure counters, are stored + in `plugins/Infestations/Data/infestations.json`. - The latest map export is `plugins/Infestations/MapAPI/infestation_data.json`. - When `logging` is true, spawn decisions are appended to `plugins/Infestations/logs/spawn.log`; `wipe-log` deletes it on each start @@ -186,7 +193,7 @@ dependency set: that killing a mob that summons parasitic worms raises the remaining count. 5. Exercise victory, a committed player leaving the province (damage until `/lure leave`), losing the whole party, and a logout both within and beyond - the grace period. + the grace period, including a return on another character after it. 6. On a test server, enable `spread` with a short interval and confirm worsening, land spread, single water and sea hops, and group terrain limits. 7. Confirm `MapAPI/infestation_data.json` is written and uploaded. From fd4ad90b3d3d8ce9b3df8d780a5264999ed00c52 Mon Sep 17 00:00:00 2001 From: Ryan Barlow <7389646+ryanbarlow97@users.noreply.github.com> Date: Sun, 11 Oct 2026 21:32:41 +0000 Subject: [PATCH 2/3] docs(Infestations): pending lure deaths stay with their character Describe the other character rules, the hold on deaths without a character, and the account fallback without RPCharacters. Co-Authored-By: Claude Opus 5.5 --- projects/Infestations/overview.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/projects/Infestations/overview.md b/projects/Infestations/overview.md index fbb6889..db8c970 100644 --- a/projects/Infestations/overview.md +++ b/projects/Infestations/overview.md @@ -86,8 +86,24 @@ second until they leave. return and remains committed. After the grace period, the character they logged out as is killed when it is next active, at login or after a character switch. If that character has died in the meantime, the death is - dropped and the player leaves the lure. Without RPCharacters, the player is - killed on their next login. A committed player who dies leaves the lure. + dropped and the player leaves the lure. A committed player who dies leaves + the lure. +- **Other characters:** with RPCharacters, the commitment stays with the + character who logged out. Only that character's return ends the grace. While + its grace runs or its death waits, another character on the same account + takes no `deserter-damage`, and its death or `/lure leave` does not touch the + commitment. When that other character logs out, the waiting grace or death + keeps its character and deadline. If character data has not loaded when the + player logs in, the grace or death waits until a character is active. +- **Deaths without a character:** with RPCharacters, a death owed by a player + whose character was not recorded, such as one saved before characters were + recorded, is held instead of applied, and a console warning names the + player and province on enable, reload, and when the grace runs out. It + clears when the lure ends or when that account dies or uses `/lure leave`, + and like any owed death it keeps the lure from failing until then. +- **Without RPCharacters:** the account is the character. A recorded character + is ignored, so the player is killed on their next login, and any return + ends the grace. Players cannot break the lure, and explosions and pistons cannot move it. Lure furniture that does not match saved lure state is removed on enable, reload, @@ -148,8 +164,10 @@ map data. - **InteractibleFurniture** hosts the lure; placement, interaction, and break events drive the lure lifecycle. TLibs item paths identify the lure item. - **RPCharacters** (optional) identifies the character a committed player - logged out as, so a death owed after the logout grace reaches only that - character. + logged out as, read at the lowest quit priority before RPCharacters unloads + its data, so the logout grace, deserter damage, and a death owed after the + grace reach only that character. Character activation ends that character's + grace or applies its death. - **Map export:** on start and whenever infestations are set, spread, cleared, or reloaded, the plugin writes each province's ID, severity, group, and display name to `MapAPI/infestation_data.json` and uploads it through the From 9ed256f341dd97a6b25f234ea485f9c4ff1b6ecf Mon Sep 17 00:00:00 2001 From: Ryan Barlow <7389646+ryanbarlow97@users.noreply.github.com> Date: Sun, 11 Oct 2026 21:40:20 +0000 Subject: [PATCH 3/3] docs(Infestations): held deaths without a character bring no penalties Co-Authored-By: Claude Opus 5.5 --- projects/Infestations/overview.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/projects/Infestations/overview.md b/projects/Infestations/overview.md index db8c970..c52a3f1 100644 --- a/projects/Infestations/overview.md +++ b/projects/Infestations/overview.md @@ -76,12 +76,13 @@ second until they leave. still zero, the lure is removed and the infestation is cleared. The delay lets death summons join the count. - **Failure:** the lure is removed and the infestation returns to idle at the - same severity when no committed player is alive, online, or within the logout - grace period. A committed player who leaves the province stays in the lure and - takes `deserter-damage` every second, in Survival or Adventure, until - `/lure leave` drops them out. Coming back into the province stops that damage - without dropping them. `/lure leave` fails the lure when nobody committed - remains. + same severity when no committed player is alive and online, within the + logout grace period, or owed a death on login. A death held without a + character, described below, does not count. A committed player who leaves + the province stays in the lure and takes `deserter-damage` every second, in + Survival or Adventure, until `/lure leave` drops them out. Coming back into + the province stops that damage without dropping them. `/lure leave` fails + the lure when nobody committed remains. - **Logout:** a committed player who logs out has `logout-grace-seconds` to return and remains committed. After the grace period, the character they logged out as is killed when it is next active, at login or after a @@ -98,9 +99,11 @@ second until they leave. - **Deaths without a character:** with RPCharacters, a death owed by a player whose character was not recorded, such as one saved before characters were recorded, is held instead of applied, and a console warning names the - player and province on enable, reload, and when the grace runs out. It - clears when the lure ends or when that account dies or uses `/lure leave`, - and like any owed death it keeps the lure from failing until then. + player and province on enable, reload, and when the grace runs out. While it + is held, that account takes no `deserter-damage` and gets no warnings for + being outside the province, and neither the death nor the account's + commitment keeps the lure from failing. It clears when the lure ends or when + that account dies or uses `/lure leave`. - **Without RPCharacters:** the account is the character. A recorded character is ignored, so the player is killed on their next login, and any return ends the grace.