Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ This document defines repository-wide guidance for contributors and coding agent
## Build & test expectations
- Java version: **17**.
- Preferred verification flow before submitting:
1. `mvn -q -DskipTests compile`
1. `mvn -q -DskipTests package`
2. `mvn -q test`
3. `mvn spotless:check` — if violations are reported, run `mvn spotless:apply` to fix them, then re-run the check.
4. run markdownlint and fix issues.
- If a full test run is too expensive, run targeted tests for touched areas and explicitly note what was skipped.
- After editing any `pom.xml` or Java source file, run `mvn spotless:check` (or `mvn spotless:apply`) to ensure formatting is clean before committing.

Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,21 @@ Release tags use the `v` prefix (e.g. `v3.0.2`).

---

## [3.1.0] - 2026-05-09

### Added

- **Message suppression via config** (`config.yml`):
- `messages.suppress-player`: when `true`, silences all teleport-related messages to players globally (searching, countdown, queue position, success, failure, cost).
- `messages.suppress-console`: when `true`, silences the executor notification that `/forcertp` sends to the command sender globally.
- **`--skip-message` command flag**: can be appended to `/rtp`, `/rtp <center|region>`, `/forcertp <player> [world]`, and `/rtp forcertp <player> [world]` to suppress both player-facing and executor messages for that single invocation. Tab-completion suggests the flag.

---

## [3.0.2] - 2026-05-09

### Added

- Initial changelog entry. See repository history for prior changes.

---
4 changes: 2 additions & 2 deletions docs/api/plugin-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ not exposed by the static helpers.
cost and cooldown rules are applied.

| Value | When to use |
|:------|:------------|
| :--- | :--- |
| `COMMAND` | Player triggered the teleport via a command or button. Cooldowns and costs apply. |
| `JOIN` | Player joined the server and was auto-teleported. Uses the `on-join` cost/cooldown rules. |

Expand Down Expand Up @@ -196,7 +196,7 @@ public interface TeleportService {
any YAML section. Below are the keys you can set:

| Key | Type | Example | Description |
|:----|:-----|:--------|:------------|
| :--- | :--- | :--- | :--- |
| `world` | String | `world_the_end` | World to teleport into. `auto` = player's current world. |
| `center.x` / `center.z` | int | `0` | Search centre coordinates. |
| `radius.min` | int | `500` | Minimum distance from centre. |
Expand Down
6 changes: 5 additions & 1 deletion docs/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ nav_order: 3
- `/rtp <centerName>`
- Teleports using the named center configured under `centers.named` in `rtp.yml`.
- Named center is applied as a center override only; the world's normal RTP settings still apply.
- `/rtp [centerName|regionId] --skip-message`
- Suppresses all teleport-related messages to the player for this invocation.
- Can be combined with a named center or WorldGuard region argument.

## RTP subcommands

Expand All @@ -31,8 +34,9 @@ nav_order: 3

## Force command

- `/forcertp <player> [world]`
- `/forcertp <player> [world] [--skip-message]`
- If world is omitted, EzRTP uses `force-rtp.yml` `default-world`.
- `--skip-message`: suppresses the executor notification and all player-facing teleport messages for this invocation. The flag may appear anywhere in the argument list.

## WorldGuard region mode (optional)

Expand Down
6 changes: 5 additions & 1 deletion docs/config/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ their own dedicated files.
## Settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `message-prefix` | `"&7[&bEzRTP&7] &r"` | Text prepended to every chat message the plugin sends. Supports `&` color codes and MiniMessage. |
| `language` | `en` | Selects which file under `messages/` is used for player-facing text. Example: `en` loads `messages/en.yml`. |
| `messages.force-legacy-colors` | `false` | Set to `true` on servers running very old clients that do not understand MiniMessage formatting. Converts all output to legacy `§` color codes. |
| `messages.suppress-player` | `false` | When `true`, suppresses all teleport-related messages sent to players globally (searching, countdown, success, failure, queue). Useful for automation or silent teleports. |
| `messages.suppress-console` | `false` | When `true`, suppresses the executor notification that admin commands (e.g. `/forcertp`) normally send to the command sender. |
| `worldguard.region-command.enabled` | `false` | Allows `/rtp <regionId>` to teleport players randomly **inside** a named WorldGuard region. Requires WorldGuard. |
| `worldguard.region-command.autocomplete` | `false` | When enabled, tab-completing `/rtp` will suggest WorldGuard region names. |
| `world` | `world` | Fallback world name used by utility commands (e.g. `/rtp pregenerate`). Does not affect normal RTP — that is set in `rtp.yml`. |
Expand All @@ -31,6 +33,8 @@ language: en

messages:
force-legacy-colors: false
suppress-player: false # suppress all teleport-related messages to players
suppress-console: false # suppress executor notifications for admin commands

worldguard:
region-command:
Expand Down
2 changes: 1 addition & 1 deletion docs/config/force-rtp.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ choose which normal restrictions are bypassed when the command is used.
## Settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `default-world` | `world` | World used when the command is run without specifying a world. Set to `auto` to send the target player to a random location in their current world. |
| `bypass.cooldown` | `true` | When `true`, `/forcertp` ignores the target player’s cooldown. Recommended — admins should never be blocked by a cooldown on a moderation tool. |
| `bypass.permission` | `true` | When `true`, `/forcertp` ignores any per-destination permission checks on the target player. |
Expand Down
6 changes: 3 additions & 3 deletions docs/config/gui.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ inventory.
## Top-level settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `enabled` | `true` | Set to `false` to disable the GUI entirely. Players use `/rtp` only as a plain command. |
| `title` | `<dark_aqua><bold>Random Teleport</bold></dark_aqua>` | Title shown at the top of the inventory. Supports MiniMessage formatting. |
| `rows` | `5` | Number of rows in the chest GUI (1–6). Each row has 9 slots, so 5 rows = 45 slots total (0–44). |
Expand Down Expand Up @@ -66,7 +66,7 @@ worlds:
### Entry fields

| Field | Description |
|:------|:------------|
| :--- | :--- |
| `slot` | Inventory slot (0–53). Omit to place entries in order. |
| `permission` | Permission node required to click. Leave blank for no restriction. |
| `icon.material` | Any valid Bukkit/Minecraft item ID (e.g. `GRASS_BLOCK`, `NETHERRACK`). |
Expand Down Expand Up @@ -133,7 +133,7 @@ pre-cached locations ready, so players are never shown an option that would make
them wait.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `disable-cache-filtering` | `false` | Set to `true` to always show all destinations regardless of cache state. |
| `admin-only-cache-info` | `false` | When `true`, the “only showing cached options” notice is only shown to players with admin permissions. |
| `rare_biomes.enabled` | `true` | Apply stricter cache requirements to rare biomes listed in `rtp.yml`. |
Expand Down
4 changes: 2 additions & 2 deletions docs/config/limits.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ The `rtp-limits.default` block applies to all players and worlds unless a more
specific override exists.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `cooldown-seconds` | `300` | Seconds a player must wait between teleports. `0` = no cooldown. |
| `daily-limit` | `10` | Maximum number of RTP uses per calendar day. `-1` = unlimited. |
| `weekly-limit` | `50` | Maximum number of RTP uses per calendar week. `-1` = unlimited. |
Expand Down Expand Up @@ -77,7 +77,7 @@ rtp-limits:
## Other settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `allow-gui-during-cooldown` | `true` | When `true`, players on cooldown can still open the destination GUI — they just cannot confirm a teleport until the cooldown expires. Set to `false` to hide the GUI entirely. |

## Storage backend
Expand Down
4 changes: 2 additions & 2 deletions docs/config/network.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Leave it disabled on game servers unless they also show the selection GUI.
## Top-level settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `enabled` | `false` | Set to `true` to enable network entries in the GUI. |
| `lobby` | `false` | Set to `true` on the server that hosts the GUI (typically the lobby). |
| `ping-interval-ticks` | `200` | How often EzRTP pings each configured server to check if it’s online, in ticks (200 = 10 seconds). |
Expand Down Expand Up @@ -55,7 +55,7 @@ servers:
### Server entry fields

| Field | Description |
|:------|:------------|
| :--- | :--- |
| `bungee-server` | Server name as defined in your proxy’s `config.yml` (`servers` section). |
| `host` / `port` | Address used to ping the server and check if it’s online. |
| `slot` | GUI slot (0–53). |
Expand Down
2 changes: 1 addition & 1 deletion docs/config/queue.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ multiple players teleport simultaneously.
## Settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `enabled` | `false` | Set to `true` to turn on the queue. |
| `max-size` | `0` | Maximum number of players allowed to wait in line. `0` = no cap. When the queue is full, additional requests are rejected until a slot opens. |
| `bypass-permission` | `ezrtp.queue.bypass` | Players with this permission skip the queue and teleport immediately. Useful for VIP or staff. |
Expand Down
16 changes: 8 additions & 8 deletions docs/config/rtp.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ biome filtering and countdown timers.
These settings define where a teleport destination can be.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `world` | `world` | The world players are teleported into. Use the exact world folder name (e.g. `world_nether`). Set to `auto` to always teleport within the player's current world — handy on multi-world servers. |
| `center.x` / `center.z` | `0` / `0` | The X/Z coordinate used as the centre of the search circle. Defaults to 0,0 (world spawn area). |
| `radius.min` | `500` | Closest a destination can be from the centre, in blocks. |
Expand All @@ -42,7 +42,7 @@ max-y: 320
## Search settings

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `search-pattern` | `random` | The shape used when picking candidate coordinates. See [Search Patterns](search-patterns) for all options. |
| `max-attempts` | `16` | How many candidate locations EzRTP tries before giving up and sending a failure message. Higher values reduce failed teleports but cost slightly more CPU per attempt. |

Expand All @@ -66,7 +66,7 @@ take damage during the countdown can have their teleport cancelled (configure
that in `limits.yml`).

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `countdown-seconds` | `5` | How many seconds to count down. `0` disables the countdown entirely. |
| `countdown.bossbar.enabled` | `true` | Shows a bossbar with the countdown. |
| `countdown.bossbar.title` | *(see below)* | MiniMessage text shown in the bossbar. `<seconds>` is replaced with the remaining time. |
Expand Down Expand Up @@ -114,7 +114,7 @@ When the chosen location is mid-air or underground, EzRTP scans up or down to
find solid footing before confirming the destination.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `safety.recovery.enabled` | `true` | Enables vertical scanning to find a safe Y level. |
| `safety.recovery.max-vertical-adjust` | `6` | Maximum blocks to move up or down during surface recovery. |
| `safety.recovery.max-surface-scan-depth` | `20` | How far below the candidate to scan for a footing block in normal worlds. Keep this small for performance. |
Expand All @@ -141,7 +141,7 @@ Controls how EzRTP loads chunks while searching for destinations. On Paper 1.21+
the async API is used automatically for the best performance.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `chunk-loading.use-paper-async-api` | `auto-detect` | `auto-detect` uses Paper's async chunk API when available. `always` forces it. `never` falls back to the legacy throttle on all platforms. |
| `legacy-throttle.enabled` | `true` | Enables the tick-based throttle used on Spigot/Bukkit or older Paper. |
| `legacy-throttle.interval-ticks` | `10` | Ticks between chunk load batches. |
Expand All @@ -155,7 +155,7 @@ Biome filtering lets you restrict (or require) specific biomes for RTP destinati
The full feature set includes pre-caching and rare-biome optimisation.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `biomes.enabled` | `true` | Master switch. Set to `false` to disable all biome features. |
| `biomes.include` | `[]` | If non-empty, only destinations in one of these biomes are accepted. Use Bukkit biome names, e.g. `FOREST`, `PLAINS`. |
| `biomes.exclude` | `[]` | Destinations in any listed biome are rejected. |
Expand Down Expand Up @@ -199,7 +199,7 @@ biomes:
These caps prevent a single biome search from blocking the server too long.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `biome-filtering.performance-budget.max-total-time-ms` | `0` | Maximum wall-clock search time for normal searches (ms). `0` = auto (100 ms when filters active). |
| `max-total-time-ms-rare` | `8000` | Maximum search time for rare biomes. |
| `max-biome-rejections` | `0` | Maximum number of biome mismatches before giving up. `0` = auto. |
Expand Down Expand Up @@ -245,7 +245,7 @@ particles:
Automatically teleport new (or returning) players when they join the server.

| Key | Default | Description |
|:----|:--------|:------------|
| :--- | :--- | :--- |
| `on-join.enabled` | `false` | Enables automatic RTP on join. |
| `on-join.only-first-join` | `false` | When `true`, only teleports players who have never joined before. |
| `on-join.bypass-permission` | `""` | Players with this permission are **not** teleported on join (e.g. for staff). |
Expand Down
2 changes: 1 addition & 1 deletion docs/config/search-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ search-pattern: triangle
## Comparison summary

| Pattern | Shape | Coverage type | Radius sampling |
|:--------|:------|:-------------|:----------------|
| :--- | :--- | :--- | :--- |
| `random` | Circle perimeter | Perimeter only | Integer |
| `circle` | Circle perimeter | Perimeter only | Floating-point |
| `square` | Square perimeter | Perimeter only | Integer |
Expand Down
10 changes: 5 additions & 5 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ cross-platform compatibility, and configuration-driven control for server owners
## For Server Owners & Admins

| | |
|:---|:---|
| :--- | :--- |
| [Getting Started](overview-installation) | Install EzRTP, choose a platform module, verify your setup |
| [Commands](commands) | Player and admin command reference |
| [Permissions](permissions) | Permission nodes and recommended role assignments |
Expand All @@ -35,7 +35,7 @@ cross-platform compatibility, and configuration-driven control for server owners
## Configuration Reference

| | |
|:---|:---|
| :--- | :--- |
| [config.yml](config/config) | Global plugin settings and language |
| [rtp.yml](config/rtp) | RTP bounds, safety, biomes, chunky, and countdown |
| [limits.yml](config/limits) | Cooldowns, usage limits, cost overrides, and storage backend |
Expand All @@ -48,7 +48,7 @@ cross-platform compatibility, and configuration-driven control for server owners
## Platform Modules

| | |
|:---|:---|
| :--- | :--- |
| [Bukkit / CraftBukkit](modules/installation-bukkit) | Base plugin only |
| [Spigot](modules/installation-spigot) | Base plugin only |
| [Paper](modules/installation-paper) | Base + `ezrtp-paper` module |
Expand All @@ -57,7 +57,7 @@ cross-platform compatibility, and configuration-driven control for server owners
## Integrations

| | |
|:---|:---|
| :--- | :--- |
| [Vault / Economy](integrations/vault-economy) | Charge players for RTP |
| [PlaceholderAPI](integrations/placeholderapi) | Dynamic placeholders in GUI |
| [Chunky](integrations/chunky) | World pre-generation |
Expand All @@ -67,6 +67,6 @@ cross-platform compatibility, and configuration-driven control for server owners
## For Developers

| | |
|:---|:---|
| :--- | :--- |
| [Developer API](api/plugin-api) | Trigger RTP programmatically from other plugins |
| [Developer Guide](development-collaboration) | Architecture, build workflow, contributor conventions |
2 changes: 1 addition & 1 deletion docs/modules/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ EzRTP ships a base plugin jar plus optional platform modules. Install the
module that matches your server software.

| Server | Required jars |
|:-------|:--------------|
| :--- | :--- |
| Bukkit / CraftBukkit | `EzRTP-<version>.jar` |
| Spigot | `EzRTP-<version>.jar` |
| Paper | `EzRTP-<version>.jar` + `ezrtp-paper-<version>.jar` |
Expand Down
2 changes: 1 addition & 1 deletion docs/overview-installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ matches your server software.
### Choose the correct module(s)

| Server software | Required jar(s) in `plugins/` | Notes |
|---|---|---|
| --- | --- | --- |
| Bukkit / CraftBukkit | `EzRTP-<version>.jar` | Base runtime already includes Bukkit-compatible adapters. |
| Spigot | `EzRTP-<version>.jar` | Spigot runs on the Bukkit-compatible base runtime. |
| Paper | `EzRTP-<version>.jar` + `ezrtp-paper-<version>.jar` | Paper module registers Paper-specific runtime adapters. |
Expand Down
2 changes: 1 addition & 1 deletion docs/permissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ nav_order: 4
## Declared permissions

| Permission | Default | Description |
|:-----------|:--------|:------------|
| :--- | :--- | :--- |
| `ezrtp.use` | `true` | Use `/rtp` |
| `ezrtp.reload` | `op` | Reload configuration with `/rtp reload` |
| `ezrtp.stats` | `op` | View RTP statistics with `/rtp stats` |
Expand Down
4 changes: 2 additions & 2 deletions ezrtp-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
<parent>
<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-parent</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
<relativePath>../pom.xml</relativePath>
</parent>

<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-api</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
<packaging>jar</packaging>
<name>EzRTP API</name>
<description>Lightweight public API for EzRTP intended for third-party plugins.</description>
Expand Down
6 changes: 3 additions & 3 deletions ezrtp-bukkit/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
<parent>
<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-parent</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
<relativePath>../pom.xml</relativePath>
</parent>

<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-bukkit</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
<packaging>jar</packaging>
<name>EzRTP (Bukkit)</name>
<description>EzRTP Bukkit-compatible plugin module.</description>
Expand Down Expand Up @@ -111,7 +111,7 @@
<dependency>
<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-common</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
</dependency>
</dependencies>

Expand Down
4 changes: 2 additions & 2 deletions ezrtp-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
<parent>
<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-parent</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
<relativePath>../pom.xml</relativePath>
</parent>

<groupId>com.skyblockexp</groupId>
<artifactId>ezrtp-common</artifactId>
<version>3.0.3</version>
<version>3.1.0</version>
<packaging>jar</packaging>
<name>EzRTP Common</name>
<description>Shared utilities for EzRTP (platform-independent)</description>
Expand Down
Loading
Loading