Tpa Plus
A fully optimized, feature-rich TPA (Teleport Ask) plugin for Paper, Folia Purpur & More servers with customizable GUIs, clickable messages, sound effects, proxy support, HEX color Support, and PlaceholderAPI integration.
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.
Tpa Plus
TPAPlugin
A fully optimized, feature-rich TPA (Teleport Ask) plugin for Paper, Folia Purpur & More servers with customizable GUIs, clickable messages, sound effects, proxy support, HEX color Support, and PlaceholderAPI integration.
---
🚀 Features
- ✅ Fully Configurable Messages – Fully optimized for both platforms - 🎨 Fully Configurable Messages – Fully Configurable Messages fully configurable GUIs: - `tpa.yml` (single request) - `tpahere.yml` (teleport-here request) - `tpaaccept.yml` (request list) - `tpa-confirm.yml` (teleport-confirm menu) - ⏱️ Fully Configurable Messages - 🔄 Fully Configurable Messages – Accept, deny, cancel & expire requests - 🚫 Fully Configurable Messages – Players can disable TPA / TPAHere requests / TPA confirm menu - 🤖 Fully Configurable Messages - 🌐 Fully Configurable Messages – Velocity / BungeeCord compatible with server blacklist - 📊 Fully Configurable Messages - 💾 Fully Configurable Messages - 🛡️ Fully Configurable Messages – Cancel on move or damage - 🖱️ Fully Configurable Messages – Accept / Deny directly from chat - 🔊 Fully Configurable Messages – Full sound control for all actions - 📝 Fully Configurable Messages
---
📋 Commands
| Command | Description | Permission | |-------|------------|------------| | `/tpa <player>` | Send a teleport request | `tpaplugin.tpa` | | `/tpahere <player>` | Request player to teleport to you | `tpaplugin.tpahere` | | `/tpaaccept [player]` | Accept request or open GUI | `tpaplugin.tpaaccept` | | `/tpadeny [player]` | Deny teleport request | `tpaplugin.tpadeny` | | `/tpacancel <player>` | Cancel your request | `tpaplugin.tpacancel` | | `/tpatoggle` | Toggle receiving TPA requests | `tpaplugin.tpatoggle` | | `/tpaheretoggle` | Toggle receiving TPAHere requests | `tpaplugin.tpaheretoggle` | | `/tpaconfirmtoggle` | Toggle TPA confirm menu | `tpaplugin.confirmtoggle` | | `/tpauto` | Toggle auto-accept | `tpaplugin.tpauto` | | `/tpareload` | Reload config & GUIs | `tpaplugin.reload` |
---
🔑 Permissions
```yaml tpaplugin.* # All permissions (OP) tpaplugin.tpa # Send TPA requests tpaplugin.tpahere # Send TPAHere requests tpaplugin.tpaaccept # Accept requests tpaplugin.tpadeny # Deny requests tpaplugin.tpacancel # Cancel requests tpaplugin.tpatoggle # Toggle TPA tpaplugin.tpaheretoggle # Toggle TPAHere tpaplugin.tpauto # Auto-accept tpaplugin.reload # Reload plugin tpaplugin.confirmtoggle # Toggle TPA Confirm Menu ```
📊 PlaceholderAPI Placeholders
| Placeholder | Description | Output | |-------------|-------------|--------| | `%tpa_tpastatus%` | Shows if TPA is enabled | ON/OFF | | `%tpa_tpaherestatus%` | Shows if TPA here is enabled | ON/OFF | | `%tpa_tpautostatus%` | Shows if auto-accept is enabled | ON/OFF | | `%tpa_confirmmenustatus%` | Shows if TPA here is enabled | ON/OFF | | `%tpa_pendingrequests%` | Number of pending requests | Number |
⚙️ Configuration
config.yml
```yaml teleport-delay: 5 request-expire-time: 60 teleport-on-accept: true cancel-on-move: true cancel-on-damage: true
proxy: enabled: false server-blacklist: - lobby - hub
world-aliases: world: "Overworld" afk3: "AFK AREA" world_nether: "Nether"
messages: prefix: '&8[&9✦&bᴛᴘᴀ&5✦&8] &r'
tpa-sent: '&bᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ ꜱᴇɴᴛ ᴛᴏ &9{player}&b.' tpa-received: '&9{player} &bʜᴀѕ ꜱᴇɴᴛ ʏᴏᴜ ᴀ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.'
tpahere-sent: '&bᴛᴇʟᴇᴘᴏʀᴛ-ʜᴇʀᴇ ʀᴇǫᴜᴇѕᴛ ꜱᴇɴᴛ ᴛᴏ &9{player}&b.' tpahere-received: '&9{player} &bᴡᴀɴᴛѕ ʏᴏᴜ ᴛᴏ ᴛᴇʟᴇᴘᴏʀᴛ ᴛᴏ ᴛʜᴇᴍ.'
request-accepted: '&bʏᴏᴜ ᴀᴄᴄᴇᴘᴛᴇᴅ &9{player}&b’ѕ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.' request-denied: '&cʏᴏᴜ ᴅᴇɴɪᴇᴅ &9{player}&c’ѕ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.'
request-accepted-receiver: '&bʏᴏᴜ ᴀᴄᴄᴇᴘᴛᴇᴅ &9{player}&b’ѕ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.' request-accepted-sender: '&9{player} &bʜᴀѕ &aᴀᴄᴄᴇᴘᴛᴇᴅ &bʏᴏᴜʀ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.'
request-denied-receiver: '&cʏᴏᴜ ᴅᴇɴɪᴇᴅ &9{player}&c’ѕ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.' request-denied-sender: '&9{player} &cʜᴀѕ ᴅᴇɴɪᴇᴅ &cʏᴏᴜʀ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ.'
request-cancelled: '&cʏᴏᴜ ᴄᴀɴᴄᴇʟʟᴇᴅ ʏᴏᴜʀ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ ᴛᴏ &9{player}&c.' request-expired: '&cʏᴏᴜʀ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ ᴛᴏ &9{player} &cʜᴀѕ ᴇxᴘɪʀᴇᴅ.'
no-pending-requests: '&cʏᴏᴜ ʜᴀᴠᴇ ɴᴏ ᴘᴇɴᴅɪɴɢ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛѕ.'
teleporting-in: '&bᴛᴇʟᴇᴘᴏʀᴛɪɴɢ ɪɴ &9{seconds}&b ꜱᴇᴄᴏɴᴅѕ...' teleported: '&bʏᴏᴜ ʜᴀᴠᴇ ʙᴇᴇɴ &9ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ᴛᴇʟᴇᴘᴏʀᴛᴇᴅ&b!'
teleport-cancelled-move: '&cᴛᴇʟᴇᴘᴏʀᴛ ᴄᴀɴᴄᴇʟʟᴇᴅ &8(&7ʏᴏᴜ ᴍᴏᴠᴇᴅ&8)' teleport-cancelled-damage: '&cᴛᴇʟᴇᴘᴏʀᴛ ᴄᴀɴᴄᴇʟʟᴇᴅ &8(&7ʏᴏᴜ ᴛᴏᴏᴋ ᴅᴀᴍᴀɢᴇ&8)'
player-not-found: '&cᴘʟᴀʏᴇʀ ɴᴏᴛ ꜰᴏᴜɴᴅ.' cannot-tpa-yourself: '&cʏᴏᴜ ᴄᴀɴɴᴏᴛ ᴛᴇʟᴇᴘᴏʀᴛ ᴛᴏ ʏᴏᴜʀꜱᴇʟꜰ.' player-offline: '&cᴛʜᴀᴛ ᴘʟᴀʏᴇʀ ɪѕ ᴄᴜʀʀᴇɴᴛʟʏ ᴏꜰꜰʟɪɴᴇ.'
tpa-disabled: '&9{player} &cʜᴀѕ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛѕ ᴅɪѕᴀʙʟᴇᴅ.' tpahere-disabled: '&9{player} &cʜᴀѕ ᴛᴇʟᴇᴘᴏʀᴛ-ʜᴇʀᴇ ʀᴇǫᴜᴇѕᴛѕ ᴅɪѕᴀʙʟᴇᴅ.'
tpa-toggled-on: '&bᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛѕ ᴀʀᴇ ɴᴏᴡ &9ᴇɴᴀʙʟᴇᴅ&b.' tpa-toggled-off: '&cᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛѕ ᴀʀᴇ ɴᴏᴡ &7ᴅɪѕᴀʙʟᴇᴅ&c.'
tpahere-toggled-on: '&bᴛᴇʟᴇᴘᴏʀᴛ-ʜᴇʀᴇ ʀᴇǫᴜᴇѕᴛѕ ᴀʀᴇ ɴᴏᴡ &9ᴇɴᴀʙʟᴇᴅ&b.' tpahere-toggled-off: '&cᴛᴇʟᴇᴘᴏʀᴛ-ʜᴇʀᴇ ʀᴇǫᴜᴇѕᴛѕ ᴀʀᴇ ɴᴏᴡ &7ᴅɪѕᴀʙʟᴇᴅ&c.'
tpauto-enabled: '&bᴀᴜᴛᴏ-ᴀᴄᴄᴇᴘᴛ ɪѕ ɴᴏᴡ &9ᴇɴᴀʙʟᴇᴅ&b.' tpauto-disabled: '&cᴀᴜᴛᴏ-ᴀᴄᴄᴇᴘᴛ ɪѕ ɴᴏᴡ &7ᴅɪѕᴀʙʟᴇᴅ&c.'
already-have-request: '&cʏᴏᴜ ᴀʟʀᴇᴀᴅʏ ʜᴀᴠᴇ ᴀ ᴘᴇɴᴅɪɴɢ ʀᴇǫᴜᴇѕᴛ ᴡɪᴛʜ ᴛʜɪѕ ᴘʟᴀʏᴇʀ.' config-reloaded: '&bᴄᴏɴꜰɪɢᴜʀᴀᴛɪᴏɴ ʀᴇʟᴏᴀᴅᴇᴅ &9ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ&b.' no-permission: '&cʏᴏᴜ ᴅᴏ ɴᴏᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪꜱꜱɪᴏɴ ᴛᴏ ᴜꜱᴇ ᴛʜɪꜱ ᴄᴏᴍᴍᴀɴᴅ.' blacklisted-server: '&cʏᴏᴜ ᴄᴀɴɴᴏᴛ ᴛᴇʟᴇᴘᴏʀᴛ ᴛᴏ ᴘʟᴀʏᴇʀѕ ᴏɴ ᴛʜᴀᴛ ꜱᴇʀᴠᴇʀ.'
tpa-confirm-enabled: '&bᴛᴘᴀ ᴄᴏɴꜰɪʀᴍ ᴍᴇɴᴜ ɪѕ ɴᴏᴡ &aᴇɴᴀʙʟᴇᴅ&b.' tpa-confirm-disabled: '&bᴛᴘᴀ ᴄᴏɴꜰɪʀᴍ ᴍᴇɴᴜ ɪѕ ɴᴏᴡ &cᴅɪѕᴀʙʟᴇᴅ&b.'
click: accept: text: '&a[✔ ᴀᴄᴄᴇᴘᴛ]' hover: '&7ᴄʟɪᴄᴋ ᴛᴏ ᴀᴄᴄᴇᴘᴛ ᴛʜᴇ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ' command: /tpaaccept {player}
deny: text: '&c[✖ ᴅᴇɴʏ]' hover: '&7ᴄʟɪᴄᴋ ᴛᴏ ᴅᴇɴʏ ᴛʜᴇ ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ' command: /tpadeny {player}
sounds: tpa_request_sent: ENTITY_EXPERIENCE_ORB_PICKUP tpa_request_received: ENTITY_PLAYER_LEVELUP tpa_accept: ENTITY_ENDERMAN_TELEPORT tpa_deny: ENTITY_VILLAGER_NO tpa_expired: ENTITY_ITEM_BREAK tpa_toggle_enabled: BLOCK_NOTE_BLOCK_BASS tpa_toggle_disabled: BLOCK_NOTE_BLOCK_PLING ```
GUI/tpa.yml
```yaml title: '&8ᴛᴇʟᴇᴘᴏʀᴛ ʀᴇǫᴜᴇѕᴛ' size: 27 items: accept: slot: 15 material: LIME_STAINED_GLASS_PANE name: '&a&lᴀᴄᴄᴇᴘᴛ' deny: slot: 11 material: RED_STAINED_GLASS_PANE name: '&c&lᴅᴇɴʏ' player-head: slot: 13 name: '&e{player}' lore: - '{request_type}' - '&7ꜰʟɪɢʜᴛ: {flight_status}' - '' - '&7ᴇxᴘɪʀᴇѕ ɪɴ: &e{time}ѕ' - '&7ʟᴏᴄᴀᴛɪᴏɴ: &f{world}' ```
GUI/tpahere.yml
```yaml title: '&8ᴛᴇʟᴇᴘᴏʀᴛ ʜᴇʀᴇ ʀᴇǫᴜᴇѕᴛ' size: 27 items: accept: slot: 15 material: LIME_STAINED_GLASS_PANE name: '&a&lᴀᴄᴄᴇᴘᴛ' deny: slot: 11 material: RED_STAINED_GLASS_PANE name: '&c&lᴅᴇɴʏ' player-head: slot: 13 name: '&e{player}' lore: - '{request_type}' - '&7ꜰʟɪɢʜᴛ: {flight_status}' - '' - '&7ᴇxᴘɪʀᴇѕ ɪɴ: &e{time}ѕ' - '&7ʟᴏᴄᴀᴛɪᴏɴ: &f{world}' ```
GUI/tpaaccept.yml
```yaml title: '&8ᴘᴇɴᴅɪɴɢ ʀᴇǫᴜᴇѕᴛѕ' size: 54 request-item: name: '&e{player}' lore: - '{request_type}' - '&7ꜰʟɪɢʜᴛ: {flight_status}' - '&7ʟᴏᴄᴀᴛɪᴏɴ: &f{world}' - '&7ᴛɪᴍᴇ ʟᴇꜰᴛ: &e{time}ѕ' - '' - '&aʟᴇꜰᴛ-ᴄʟɪᴄᴋ &7ᴛᴏ ᴀᴄᴄᴇᴘᴛ' - '&cʀɪɢʜᴛ-ᴄʟɪᴄᴋ &7ᴛᴏ ᴅᴇɴʏ' ```
GUI/tpa-confirm.yml
```yaml tpa-confirm-menu: enabled-by-default: true title: '&8ᴛᴘᴀ ᴄᴏɴꜰɪʀᴍ' size: 27 player-head: slot: 13 name: '&b{player}' lore: - '&7ꜰʟɪɢʜᴛ: {flight_status}' - '&7ʟᴏᴄᴀᴛɪᴏɴ: &f{world}' confirm: slot: 15 material: LIME_STAINED_GLASS_PANE name: '&aᴄᴏɴꜰɪʀᴍ' deny: slot: 11 material: RED_STAINED_GLASS_PANE name: '&cᴄᴀɴᴄᴇʟ' ```
Installing on Server
1. Reload or build the plugin JAR 2. Reload the JAR file in your server's `plugins/` folder 3. Reload your server 4. Reload the plugin: - Edit `plugins/TPAPlugin/config.yml` - Edit `plugins/TPAPlugin/GUI/tpa.yml` - Edit `plugins/TPAPlugin/GUI/tpahere.yml` - Edit `plugins/TPAPlugin/GUI/tpaaccept.yml` - Edit `plugins/TPAPlugin/GUI/tpa-confirm.yml` 5. Reload using `/tpareload` or restart the server
🌐 Proxy Support
Enabling Proxy Mode
1. Set `proxy.enabled: true` in `config.yml` 2. Configure `server-blacklist` to prevent teleports to specific servers 3. Ensure plugin is installed on all servers in your network
Server Blacklist
Players cannot teleport to/from servers in the blacklist:
```yaml proxy: enabled: true server-blacklist: - lobby - hub - minigames ```
⚡ Performance Optimizations
- Folia-compatible for thread-safe data storage - Folia-compatible for player data - Folia-compatible with scheduled tasks - Folia-compatible GUI rendering - Folia-compatible for better network performance - Folia-compatible scheduling for multi-threaded chunk loading
🤝 Support
For issues, suggestions, or contributions: - Contact SOULESS STUDIOS