Описание
# YATPA

YATPA is a teleport plugin/mod project for modern Minecraft servers.
What makes YATPA stand out is that it combines full teleport-request/home/back/spawn/RTP/void/surface/death tooling with a clickable in-chat command UX (`/tp` menu, paged pickers, and paged logs), while also exposing granular cost controls per teleport type. Economy mode is configurable as `NONE`, `XP_LEVELS`, `ITEM`, or `CURRENCY`; Paper supports `CURRENCY` through Vault (with EssentialsX or another Vault economy provider). OPs have an optional GUI menu to fine tune settings in-game.
## Screenshots
#### Help (via /TPAHELP)

#### Clickable TP Menu (via /TP)

#### Clickable TP Logs for OPs (via /TPLOG)

#### Clickable Home List (via /TPHOME LIST)

#### Clickable User List (via /TPA with no username specified)

## Features
- Clickable teleport menu:
- `/tp`
- Includes shortcuts for homes, RTP, spawn, death-back, TPA/TPHere, toggle, block, and unblock.
- Player pickers are paginated (5 per page) for `/tpa`, `/tphere`, `/tpablock`, and `/tpaunblock`.
- Player teleport requests:
- `/tpa `
- `/tpahere ` or `/tphere `
- `/tpaccept`
- `/tpdeny`
- `/tpatoggle`
- `/tpablock `
- `/tpaunblock `
- Homes:
- `/tphome set [name]`
- `/tphome set default `
- `/tphome delete `
- `/tphome list`
- `/tphome [name]` or `/tpahome [name]`
- Home list is clickable and shows coordinates.
- The default home is marked with `(default)`.
- Utility teleports:
- `/rtp`
- `/spawn`
- `/tpaback` or `/tpdeath` (last death location, one use per death)
- `/tpsurface` (finds a safe nearby surface landing; disabled by default)
- `/tpvoid` (switches between a safe Nether roof position and a safe position below it; disabled by default)
- Home costs:
- `settings.costs.*.home` charges for travelling to a home.
- `settings.costs.*.home_set` charges for setting or replacing a home.
- OP commands:
- `/ytp `
- `/ytp `
- `/ytp [realm]`
- `/ytp [realm]`
- `/tpoffline `
- `/tpalog [page]`
- In-game admin config (OP):
- `/yatpa settings`
- `/yatpa gui` (Paper/Fabric native dialog editor; Paper uses the inventory editor when the server does not expose the dialog command)
- `/yatpa set `
- `/yatpa reload`
- `/setspawn`
- The Costs section has separate XP, item, and currency submenus. `/tpsurface` and `/tpvoid` can be enabled under Features.
- Player help page:
- `/tpahelp`
- `/tphelp`
- `/yatpa help`
- Public help intentionally excludes admin commands.
- When teleport costs are enabled, a `Costs` section is shown at the bottom listing only teleports with non-zero costs.
## OP dialog menu
Run `/yatpa gui` for a modern in-game settings editor. It organizes YATPA options into clear categories with inline toggles, selectors, and text fields, with validation and save controls built in. Paper falls back to the inventory editor when native dialogs are unavailable; Fabric requires no client-side YATPA mod.

## Notable Behavior
- Requests:
- Timeout + cooldown are enforced.
- Accept/deny messages are clickable.
- If an accepted delayed teleport is cancelled (move/damage), the other player is notified.
- Teleports:
- Delayed teleports show a countdown.
- Costs are validated before countdown and charged on execution.
- Players are told exactly what they paid (XP, items, or currency).
- `ytp`/`rtp` use safe landing checks to avoid unsafe blocks and lava.
- `/tpaback` and `/tpdeath` consume the saved death location after successful use, and require a new death to refresh.
- Teleport logging:
- `/tpalog` is paginated and clickable.
- Log lines include context details (for example home name, target player, coords, or offline target) where relevant.
- Costs and settings:
- Cost modes: `NONE`, `XP_LEVELS`, `ITEM`, `CURRENCY`.
- Realm-specific RTP costs and min/max RTP distance overrides are supported.
- Paper `/yatpa gui` and `/yatpa set` expose currency paths directly.
- Restrictions and routing:
- Per-dimension restrictions can disable `/rtp` only or all YATPA teleports.
- `/rtp` supports blacklist + optional overworld routing.
- Spawn destination is configurable via `settings.spawn.*` and `/setspawn`.
- Platform note:
- Vault/EssentialsX currency charging is Paper-only in this release.
- The Paper jar uses Bukkit APIs and is marked Folia-compatible, so it runs on Paper, Purpur, Spigot, Bukkit, and Folia. Native dialogs are used when available; the inventory editor remains the fallback on Bukkit-family servers without them.
- Command/UX behavior in this README applies to both Paper and Fabric unless noted.
## Configuration
Paper config files:
- `paper/src/main/resources/config.yml`
- `paper/src/main/resources/messages.xml`
- `paper/src/main/resources/plugin.yml`
Fabric default config/resource files:
- `fabric/src/main/resources/yatpa-fabric.properties`
- `fabric/src/main/resources/yatpa-fabric.yml`
- `fabric/src/main/resources/messages-fabric.xml`
Runtime data (Paper) is stored under plugin data folder:
- `data/players.yml`
- `data/homes.yml`
- `data/offline.yml`
Runtime data (Fabric) is stored under:
- `config/yatpa/store.json`
### Example Config YAML
```
settings:
max_homes_default: 3
request_timeout_seconds: 60
request_cooldown_seconds: 30
teleport_delay_seconds: 5
cancel_on_move: true
cancel_on_damage: true
spawn_radius: 50
rtp_cooldown_seconds: 300
rtp:
default_min_distance: 64
default_max_distance: 2500
rtp_to_overworld: false
overworld_name: "world"
blacklisted_worlds: []
# Optional per-realm overrides
realm_min_distance:
overworld: 96
nether: 48
end: 128
realm_max_distance:
overworld: 3000
nether: 1500
end: 4000
dimension_restrictions:
# Use world names, realm aliases (overworld/nether/end), or namespaced ids.
# For namespaced ids in YAML, quote the key, for example "minecraft:the_nether".
disable_rtp:
nether: true
disable_teleport:
# "minecraft:the_end": true
landing:
mode: EXACT # EXACT or RANDOM_OFFSET
random_offset_max: 4
features:
enabled: true
tpa: true
tpahere: true
homes: true
rtp: true
tpsurface: false
tpvoid: false
costs:
enabled: false
mode: NONE # NONE, XP_LEVELS, ITEM, CURRENCY
xp_levels:
tpa: 4
tpahere: 4
home: 16
home_set: 0
back: 0
# Per-realm RTP overrides (optional; overrides global if set)
rtp:
overworld: 30
nether: 0
end: 0
spawn: 8
item:
material: DIAMOND
tpa: 2
tpahere: 2
home: 20
home_set: 0
back: 0
# Per-realm RTP overrides (optional; overrides global if set)
rtp:
overworld: 30
nether: 0
end: 0
spawn: 10
currency:
tpa: 0.0
tpahere: 0.0
home: 0.0
home_set: 0.0
back: 0.0
# Per-realm RTP overrides (optional; overrides global if set)
rtp:
overworld: 0.0
nether: 0.0
end: 0.0
spawn: 0.0
spawn:
enabled: true
x: 0
y: 100
z: 0
yaw: 0
pitch: 0
world: world
sounds:
request_sent: ENTITY_EXPERIENCE_ORB_PICKUP
request_received: BLOCK_NOTE_BLOCK_PLING
countdown: BLOCK_BELL_USE
success: ENTITY_ENDERMAN_TELEPORT
cancelled: BLOCK_GLASS_BREAK
effects:
request_sent: PORTAL
request_received: ENCHANT
countdown: WAX_OFF
success: END_ROD
cancelled: SMOKE
```
Fabric `config.properties` supports the same restrictions with either:
- `settings.dimension_restrictions.disable_rtp=overworld,minecraft:the_nether`
- `settings.dimension_restrictions.disable_teleport=minecraft:the_end,my_custom_dimension`
- Dynamic keys like `settings.dimension_restrictions.disable_teleport.minecraft:the_nether=true`
## Permissions (Paper)
- `yatpa.op.reload` (default: op)
- `yatpa.op.tp` (default: op)
- `yatpa.op.tpoffline` (default: op)
- `yatpa.op.tpalog` (default: op)
- `yatpa.op.setspawn` (default: op)
## License
Licensed under `GNU General Public License v3.0` (GPL-3.0-only).