Yet Another TPA
YATPA: A combination of various project ideas into one, but still lean and simple enough to be a viable replacement or solution to teleporting. Suitable for Fabric and Paper.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
Yet Another TPA
YATPA

YATPA is a teleport plugin/mod project for modern Minecraft servers: - `paper/`: Paper plugin (1.21.x API target) - `fabric/`: Fabric dedicated-server mod (1.21.x Mojmap/Fabric API scaffold)
What makes YATPA stand out is that it combines full teleport-request/home/back/spawn/RTP/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 <player>` - `/tpahere <player>` or `/tphere <player>` - `/tpaccept` - `/tpdeny` - `/tpatoggle` - `/tpablock <player>` - `/tpaunblock <player>` - Homes: - `/tphome set [name]` - `/tphome set default <name>` - `/tphome delete <name>` - `/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) - OP commands: - `/ytp <player>` - `/ytp <player> <targetPlayer>` - `/ytp <player> <x> <y> <z> [realm]` - `/ytp <x> <y> <z> [realm]` - `/tpoffline <player>` - `/tpalog [page]` - In-game admin config (OP): - `/yatpa settings` - `/yatpa gui` (Paper, paginated inventory editor for all settings; click to toggle/edit) - `/yatpa set <path> <value>` - `/yatpa reload` - `/setspawn` - 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.
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. - 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 costs: enabled: false mode: NONE # NONE, XP_LEVELS, ITEM, CURRENCY xp_levels: tpa: 4 tpahere: 4 home: 16 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 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 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). See LICENSE.