Files
purpur-leaf/README.md
T
dmg a375da547b
Release / release (push) Successful in 5m11s
CI / build (push) Successful in 1m9s
feat(leaf): migrate distribution to Java 25 and Purpur
BREAKING CHANGE: New releases require Java 25/Purpur 26.2 and use purpur-leaf-<version>.jar. Runtime Leaf identity, data folder, protection state and scoreboard team remain unchanged. Replace the old JAR rather than installing both distributions.
2026-09-12 14:20:43 -04:00

49 lines
2.8 KiB
Markdown

# Purpur Leaf
Leaf is a Purpur 26.2 plugin that lets non-aggressive players opt into visible Resistance and Strength protection.
The approved behavior is specified in the [SoMC OKF wiki](https://git.garvis.dev/dmg/somc-okf/src/branch/main/projects/purpur-leaf/index.md).
## Requirements
- Purpur 26.2 build 2618
- Java 25
Distribution repository, checkout and artifacts use `purpur-leaf`. Runtime `Leaf`, Java packages/entrypoint, `plugins/Leaf/`, commands/permissions and `leaf_protected` scoreboard team are unchanged. Replace the old JAR instead of installing both distributions. Old release tags/assets remain available. New releases no longer support Java 17.
## Build
```bash
./gradlew clean check jar
```
The plugin JAR is written to `build/libs/purpur-leaf-<version>.jar`.
## Commands
```text
/leaf on
/leaf off
/leaf status
/leaf enabled <on|off>
/leaf effect <resistance|strength> <1-5>
/leaf strength <1-5> # Deprecated Resistance alias
/leaf player <name|uuid> status
/leaf player <name|uuid> enabled <on|off>
/leaf player <name|uuid> locked <on|off>
```
Administrative commands require `leaf.admin`, granted to server operators by default.
## Compatibility
Leaf prefixes the standard Bukkit-compatible display name (used by standard chat), player-list name, and a dedicated `leaf_protected` main-scoreboard team for overhead names. Legacy `&` color codes are supported. Leaf does not move players out of an existing scoreboard team, and per-viewer/custom scoreboards may not show its overhead prefix. Chat or tab-management plugins may replace Leaf's decorated names. During cleanup, Leaf removes exact copies of its configured prefix while preserving surrounding name formatting; another plugin should therefore not intentionally use identical prefix text.
The server API identifies potion effects by type but does not expose their owning plugin. Leaf tracks the exact infinite, quiet Resistance and Strength effects it successfully installed and removes them only while each visible effect still matches. A distinct level, duration, or presentation is preserved. The server API cannot distinguish an externally supplied effect with an identical fingerprint; Leaf therefore does not claim or later remove an identical effect that was already active when reconciliation ran.
Leaf reconciles opted-in online players approximately once per second. Effects cleared by death, milk, commands, or another plugin are restored automatically. A temporary external Resistance or Strength effect is left untouched, the leaf prefix remains visible, and Leaf restores its configured effect after the external effect ends.
## Releases
Gitea Actions checks pushes and pull requests and stores a development JAR. Pull requests validate conventional commits. Main-branch conventional commits drive semantic releases after the repository defines a `RELEASE_TOKEN` with contents-write permission.