Files
dmg f011410b17
Release / release (push) Successful in 2m54s
CI / build (push) Successful in 1m2s
feat(commands): view and set online player heights
2026-09-06 20:05:41 -04:00

104 lines
4.0 KiB
Markdown

# Spigot Heights
A Purpur 26.2 plugin adding craftable player-scaling potions and dispenser launch tubes for tiny players.
Approved behavior is specified in the [OKF design bundle](design/index.md).
## Requirements
- Purpur 26.2 build 2618
- Java 25 or newer
## Potions
### Potion of Shifting Stature
```text
Amethyst Shard | Chorus Fruit | Amethyst Shard
Amethyst Shard | Awkward Potion | Amethyst Shard
Amethyst Shard | Chorus Fruit | Amethyst Shard
```
Drinking it chooses a random configured scale in `0.1` increments.
### Potion of Growth
```text
Gold Ingot | Amethyst Shard | Gold Ingot
Amethyst | Potion of Shifting Stature | Amethyst
Gold Ingot | Rabbit's Foot | Gold Ingot
```
### Potion of Diminution
Use the Growth recipe with a Fermented Spider Eye instead of the Rabbit's Foot. Growth and Diminution adjust scale by one configured step and clamp at the limits.
### Potion of Restoration
```text
Gold Ingot | Amethyst Shard | Gold Ingot
Amethyst Shard | Potion of Shifting Stature | Amethyst Shard
Gold Ingot | Sugar | Gold Ingot
```
Produces one Potion of Restoration. Drinking it restores scale to exactly `1.0` (normal size), even outside configured limits. This size is saved across reconnects, respawns, and server restarts. Other saved scales are still clamped to the configured range.
## Tiny-player launchers
A player below the configured scale threshold can walk onto a hopper whose output points into a dispenser. If the block in front of that dispenser is passable, the player is moved there and launched in the direction the dispenser faces. The launcher does not require redstone.
## Configuration
Defaults are in `src/main/resources/config.yml`:
```yaml
height:
minimum: 0.4
maximum: 2.0
adjustment-step: 0.1
launcher:
maximum-player-scale-exclusive: 0.5
speed: 1.5
cooldown-ticks: 20
```
Player scales are stored by UUID in `plugins/SpigotHeights/state.yml`.
## Commands
Operators (or senders granted `spigotheights.admin`) can use:
```text
/heights settings
/heights set min 0.2
/heights set max 3.0
/heights player Steve
/heights player Steve 0.5
```
Console is supported. Tab completion suggests subcommands, bound names, and valid example values; other valid numbers may also be entered.
Changes are saved to `plugins/SpigotHeights/config.yml` and take effect without a restart. Minimum must be at least `0.0625`, maximum at most `16.0`, minimum cannot exceed maximum, and the launcher threshold must remain within the range. Invalid changes or save failures leave active settings unchanged.
Players are not immediately resized. Subsequent potion use, joins, and respawns use the new limits; Restoration still returns and preserves exact scale `1.0`. The settings commands only change min/max; edit other settings in the configuration file and restart the server.
### Player height
`/heights player <name>` reports an online player's scale (`1.0` = normal size). If another plugin adds scale modifiers, both the base scale and effective scale are shown.
`/heights player <name> <scale>` immediately sets and saves that player's base scale by UUID. Values must be finite and within current min/max limits, except `1.0` is always allowed. Saved scales follow the usual limits on reconnect and respawn if configuration changes later. A failed save leaves the player's height unchanged.
Player names must match an online player exactly (case-insensitive); partial names and offline players are rejected. Tab completion suggests online names and valid example sizes. Operators, console, and senders with `spigotheights.admin` may view or set heights, including their own.
## Build
```bash
./gradlew clean check jar
```
The plugin JAR is written to `build/libs/`.
## 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 when the repository defines a `RELEASE_TOKEN` with contents-write permission.