103 lines
3.9 KiB
Markdown
103 lines
3.9 KiB
Markdown
# Spigot Creeper Fear
|
||
|
||
A Spigot 26.2 plugin that lets players earn six Creeper Aura ranks. Once unlocked, an aura prevents a creeper explosion within 25 blocks of the player from breaking blocks, whether or not the explosion hits the player. Players hit by the explosion receive rank-dependent damage.
|
||
|
||
## Requirements
|
||
|
||
- Spigot 26.2
|
||
- Java 17 or newer
|
||
|
||
## Progression
|
||
|
||
Players earn one current-tier point when they kill a creeper directly, through a projectile, or through an owned tameable. A self-destructing creeper also awards one point to every player its explosion hits. Rank I unlocks at 25 points by default; subsequent ranks require 100 points each. Progress resets to zero when a rank is unlocked.
|
||
|
||
| Rank | Creeper damage | Block damage |
|
||
| --- | ---: | --- |
|
||
| Locked | 1× | Normal |
|
||
| I | 3× | Prevented |
|
||
| II | 2× | Prevented |
|
||
| III | 1.5× | Prevented |
|
||
| IV | 1× | Prevented |
|
||
| V | 0.5× | Prevented |
|
||
| VI | Cancelled | Prevented |
|
||
|
||
Progress is stored by player UUID in `plugins/CreeperFear/player-progress.sqlite3`. Database work runs away from the server thread.
|
||
|
||
After each point, a temporary boss bar shows current-tier progress. Unlocking a rank displays a full-screen title. Rank VI players no longer receive a progress bar.
|
||
|
||
## Build and install
|
||
|
||
```bash
|
||
./gradlew clean check jar
|
||
cp build/libs/spigot-creeper-fear-0.1.0-SNAPSHOT.jar /path/to/server/plugins/
|
||
```
|
||
|
||
Restart the server after copying the JAR. The plugin creates its configuration and SQLite database under `plugins/CreeperFear/`.
|
||
|
||
## Commands
|
||
|
||
| Command | Description | Permission |
|
||
| --- | --- | --- |
|
||
| `/creeperaura progress` | Show personal progress | `creeperfear.progress` |
|
||
| `/creeperaura progress <player>` | Inspect a known online or offline player | `creeperfear.admin.inspect` |
|
||
| `/creeperaura set <player> <progress>` | Set current-tier progress | `creeperfear.admin.modify` |
|
||
| `/creeperaura add <player> <amount>` | Adjust current-tier progress | `creeperfear.admin.modify` |
|
||
| `/creeperaura rank <player> <rank>` | Set rank and reset tier progress | `creeperfear.admin.modify` |
|
||
| `/creeperaura threshold <rank> <points>` | Persist a rank requirement | `creeperfear.admin.configure` |
|
||
| `/creeperaura reload` | Reload validated configuration | `creeperfear.admin.configure` |
|
||
|
||
The personal progress permission defaults to everyone. Administrative permissions default to server operators. Administrative changes are recorded in the server log.
|
||
|
||
Commands provide permission-aware tab completion for subcommands, online player names, and valid ranks. Known offline players remain valid command targets but are not suggested.
|
||
|
||
## Configuration
|
||
|
||
```yaml
|
||
progression:
|
||
requirements:
|
||
I: 25
|
||
II: 100
|
||
III: 100
|
||
IV: 100
|
||
V: 100
|
||
VI: 100
|
||
|
||
aura:
|
||
damage-multipliers:
|
||
I: 3.0
|
||
II: 2.0
|
||
III: 1.5
|
||
IV: 1.0
|
||
V: 0.5
|
||
VI: 0.0
|
||
|
||
feedback:
|
||
progress-bar-seconds: 5
|
||
rank-up-title: "Creeper Aura %rank%"
|
||
rank-up-subtitle: "Unlocked!"
|
||
```
|
||
|
||
Requirements must be positive integers. Multipliers must be finite and non-negative. Invalid reloads are rejected while the last valid runtime settings remain active. Requirement changes preserve current rank and tier progress; a subsequent qualifying point can unlock at most one rank.
|
||
|
||
## Releases
|
||
|
||
Gitea Actions builds and tests every push and pull request and uploads a development JAR. Pull requests also validate conventional commit messages.
|
||
|
||
Pushes to `main` run semantic-release:
|
||
|
||
- `fix:` creates a patch release;
|
||
- `feat:` creates a minor release;
|
||
- a breaking-change footer or `!` creates a major release.
|
||
|
||
A successful release attaches a versioned JAR to the corresponding Gitea release. The repository must define a `RELEASE_TOKEN` secret with repository contents write permission.
|
||
|
||
For a local versioned artifact:
|
||
|
||
```bash
|
||
./gradlew clean check jar -PreleaseVersion=1.2.3
|
||
```
|
||
|
||
## Design
|
||
|
||
The [OKF design bundle](design/index.md) contains the architecture and completed user stories.
|