diff --git a/README.md b/README.md index 89d886b..a86d104 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ BirdMessenger turns written correspondence into an in-world activity. Players se ## Features - **Character recipients** — choose and confirm a recipient through an in-game character picker connected to RPCharacters. -- **Recipient opt-out** — players can use `/rpcharacter mail off` in RPCharacters to hide their active character from the recipient list, or `/rpcharacter mail on` to restore it. If a recipient opts out before a sender confirms, the letter is returned; already-sent mail still arrives. +- **Recipient opt-out** — characters can be hidden from the recipient list through RPCharacters; already-sent mail still arrives. - **Physical letters** — send supported blank, sealed, or opened letter items while preserving the item and its contents. - **Sealed correspondence** — sign letters with their own title and break the seal when opening them to read. - **Travel time** — delivery time follows the distance to the recipient's character location, with an estimated arrival shown to the sender. @@ -25,32 +25,15 @@ Technical documentation is maintained in [TF-Minecraft/Docs](https://github.com/ ## Tests -If a mail file or one of its entries cannot be decoded, BirdMessenger preserves -the original file beside it as `.corrupt-` before later saves can -replace it. These recovery copies include unreadable entries and should be kept -until the affected mail has been recovered. If the copy cannot be created, -startup fails and the affected file cannot be overwritten by the store. - -Install the pinned shared plugin dependencies, download the private build -inputs, then run the build with Java 21. In Bash: - -```bash -python3 path/to/TLibs/tools/install-plugins.py --pom pom.xml --mode pinned && - (read -rsp 'ServerAssets token: ' GH_TOKEN && echo && export GH_TOKEN && - bash .github/scripts/prepare-release.sh) && - mvn clean verify -``` - -The installer comes from a separate TLibs checkout -(`git clone https://github.com/TF-Minecraft/TLibs.git`); point `path/to/TLibs` at it. The token needs Contents read access -to TF-Minecraft/ServerAssets. The prompt keeps it out of shell history, the -subshell keeps it out of your session and Maven, and Maven only runs if both -preparation steps succeed. CI supplies it from `DEPS_TOKEN`. - -Tests use JUnit and Mockito and run without a live Minecraft server. +With Java 21 and the [build dependencies](https://github.com/TF-Minecraft/Docs/blob/main/projects/BirdMessenger/README.md#build-and-dependencies) prepared, +run `mvn clean verify`. + +JUnit 5 and Mockito cover letters, recipient selection, delivery, persistence and +plugin boundaries without starting a live Minecraft server. `mvn clean verify` requires 100% production line coverage with no class or package -exclusions. JaCoCo writes HTML and XML reports to `target/site/jacoco/`, and CI -uploads them alongside the Surefire test reports. The gate measures lines; +exclusions. JaCoCo writes `target/site/jacoco/index.html` and +`target/site/jacoco/jacoco.xml`; Surefire results are in `target/surefire-reports/`. +The Build workflow uploads both report directories. The gate measures lines; it does not require 100% branch coverage or replace testing on a live server. ## License