
EasyTPA
EasyTPA: A simple-to-use plugin for servers of all sizes.
EasyTPA
The EasyTPA for your mc server
English Description
💡 Commercial Use: This plugin is free for individuals. If you are a business or generate revenue with this plugin, you must contact me to obtain authorization.
✨ Features
- Player teleportation —
/tpa,/tpahere,/tpaccept,/tpdeny,/tpcancel,/tptoggle - Homes —
/home,/sethome,/delhomewith per-player limit and permission tiers - Warps —
/warp,/setwarp,/delwarp,/warpswith per-player ownership and clickable list - Spawn —
/spawn,/setspawn - Back —
/back(previous position or configurable death location) - Random teleport —
/rtp(alias/wild) with async chunk loading - Reload —
/tpreload - Global cooldown configurable between two teleportations (bypassable via permission)
- Anti-movement delay — teleportation is cancelled if the player moves
- Configurable TPA timeout — requests expire automatically
- Optional permission system — can be disabled for servers without a permissions plugin
- 100% customizable messages — MiniMessage format, colors, hover, click
- Clickable warps in chat with
/warps
📦 Installation
- Download
easytpa-1.0.0.jarfrom the Releases - Place the file in your server's
plugins/folder - Start (or restart) the server
- Edit
plugins/EasyTPA/config.ymlandmessages.ymlto your needs - Reload with
/tpreload(no restart needed)
Required: Paper 1.21.4+ — Java 21+
⚙️ Configuration — config.yml
# false → everyone can use player commands without permission
# true → checks permissions (compatible with LuckPerms and any Bukkit plugin)
permissions: false
# Delay before teleportation (seconds). 0 to disable.
# The player must not move, otherwise the teleportation is cancelled.
teleport-delay: 3
# Duration (seconds) before a TPA request expires
tpa-timeout: 60
# Global cooldown between two teleportations (seconds). 0 to disable.
# Bypass with: teleport.cooldown.bypass
teleport-cooldown: 30
# /back can bring back to death location if true
back-on-death: true
# Maximum number of homes per player
# If permissions: true, extendable via teleport.home.multiple.<number>
max-homes: 1
# Maximum number of warps per player
max-warps: 5
# Maximum radius (blocks) for /rtp
rtp-radius: 5000
# Minimum radius (blocks) for /rtp (avoids spawn)
rtp-min-radius: 100
# Maximum attempts to find a safe position for /rtp
rtp-max-attempts: 20
# Message prefix (MiniMessage format)
messages-prefix: "<dark_gray>[<aqua>EasyTPA<dark_gray>]<reset> "
📋 Commands
| Command | Description | Required Permission |
|---|---|---|
/tpa <player> | Request to teleport to a player | teleport.tpa |
/tpahere <player> | Request a player to come to you | teleport.tpahere |
/tpaccept | Accept a TPA request | teleport.tpaccept |
/tpdeny | Deny a TPA request | teleport.tpdeny |
/tpcancel | Cancel your pending request | teleport.tpcancel |
/tptoggle | Enable/disable receiving requests | teleport.tptoggle |
/home [name] | Teleport to a home | teleport.home |
/sethome [name] | Set a home at your position | teleport.sethome |
/delhome [name] | Delete a home | teleport.delhome |
/warp <name> | Teleport to a warp | teleport.warp |
/setwarp <name> | Create/edit a warp | teleport.setwarp |
/delwarp <name> | Delete a warp | Warp owner or admin |
/warps | List warps (clickable) | teleport.warps |
/spawn | Teleport to spawn | teleport.spawn |
/setspawn | Set the spawn | teleport.admin |
/back | Return to previous position | teleport.back |
/rtp or /wild | Safe random teleportation | teleport.rtp |
/tpreload | Reload the configuration | teleport.admin |
If
permissions: falseinconfig.yml, all player commands are accessible without permission. Admin commands always require OP orteleport.admin.
🔒 Permissions
| Permission | Description | Default |
|---|---|---|
teleport.tpa | Use /tpa | true |
teleport.tpahere | Use /tpahere | true |
teleport.tpaccept | Use /tpaccept | true |
teleport.tpdeny | Use /tpdeny | true |
teleport.tpcancel | Use /tpcancel | true |
teleport.tptoggle | Use /tptoggle | true |
teleport.home | Use /home | true |
teleport.sethome | Use /sethome | true |
teleport.delhome | Use /delhome | true |
teleport.warp | Use /warp | true |
teleport.warps | Use /warps | true |
teleport.setwarp | Create/edit a warp | op |
teleport.delwarp | Delete any warp | op |
teleport.spawn | Use /spawn | true |
teleport.back | Use /back | true |
teleport.rtp | Use /rtp | true |
teleport.cooldown.bypass | Ignore teleportation cooldown | op |
teleport.home.multiple.<n> | Have up to n homes (e.g. .5, .10) | — |
teleport.admin | All admin permissions | op |
💬 Messages — messages.yml
All messages use Adventure's MiniMessage format. You can use colors, effects, clickable links, and more.
Available placeholders:
| Placeholder | Description |
|---|---|
<player> | A player's name |
<home> | A home name |
<warp> | A warp name |
<delay> | Delay in seconds |
<max> | Maximum limit |
<remaining> | Remaining seconds (cooldown) |
<usage> | Command syntax |
MiniMessage customization examples:
# Colors
teleport-success: "<green>Teleportation successful!"
# Gradient color
tpa-sent: "<gradient:#55ff55:#00aa00>Request sent to <player></gradient>"
# Bold text with emoji
teleport-pending: "<gold><bold>⏳ Teleporting in <delay>s... Don't move!</bold>"
# Clickable link (already used for TPA buttons)
tpa-received-buttons: "<green><click:run_command:/tpaccept>[Accept]</click>"
🏗️ Building from source
Requirements: Java 21, Maven 3.8+
git clone https://github.com/crafteria-dev/EasyTPA.git
cd EasyTPA
mvn package
The compiled JAR is located at target/easytpa-1.0.0.jar.
📁 Project structure
src/main/java/fr/easytpa/
├── EasyTPA.java # Main class, initialization
├── commands/ # One file per command (17 commands)
│ ├── TpaCommand.java
│ ├── TpaHereCommand.java
│ ├── TpAcceptCommand.java
│ ├── TpDenyCommand.java
│ ├── TpCancelCommand.java
│ ├── TpToggleCommand.java
│ ├── HomeCommand.java
│ ├── SetHomeCommand.java
│ ├── DelHomeCommand.java
│ ├── WarpCommand.java
│ ├── SetWarpCommand.java
│ ├── DelWarpCommand.java
│ ├── WarpsCommand.java
│ ├── SpawnCommand.java
│ ├── SetSpawnCommand.java
│ ├── BackCommand.java
│ ├── RtpCommand.java
│ └── TpReloadCommand.java
├── managers/ # Business logic and persistence
│ ├── ConfigManager.java # config.yml reader
│ ├── MessageManager.java # MiniMessage + prefix
│ ├── TpaManager.java # TPA requests, timeout, toggle
│ ├── TeleportDelayManager.java # Delay, anti-movement, cooldown
│ ├── CooldownManager.java # Global per-player cooldown
│ ├── HomeManager.java # Homes (homes.yml)
│ ├── WarpManager.java # Warps (warps.yml)
│ ├── SpawnManager.java # Spawn (spawn.yml)
│ └── BackManager.java # Previous position (in-memory)
├── listeners/
│ └── TeleportListener.java # PlayerMove, PlayerDeath, PlayerQuit
└── utils/
├── LocationUtils.java # YAML serialization, safety checks
└── PermissionUtils.java # Player/admin permission checks
src/main/resources/
├── plugin.yml # Command and permission declarations
├── config.yml # Main configuration
└── messages.yml # Customizable messages
🔧 Internal workings
Teleportation flow
- The command (e.g.
/home spawn) callsTeleportDelayManager.scheduleTeleport() - The cooldown is checked — if active, a message is sent and the request is dropped
- The anti-movement delay starts (
teleport-delayseconds) - If the player moves → cancellation (
PlayerMoveEvent) - Otherwise →
executeTeleport(): saves the position for/back, callsplayer.teleportAsync()asynchronously - On success → the cooldown is updated, the callback sends the success message
Warp system
- Each warp stores the creator's UUID (
warps.yml) - A player can only delete or overwrite their own warps
- Admins (
teleport.adminor OP) can manage all warps - The
max-warpslimit is per player (not global)
Random teleportation (/rtp)
- Generates coordinates within a ring between
rtp-min-radiusandrtp-radius - Uses
world.getChunkAtAsync()to load chunks without blocking the server - Checks position safety (2 air blocks, solid ground, no magma/campfire)
- Retries up to
rtp-max-attemptstimes if the position is not safe
📜 License
This project is licensed under the Fair Core License (FCL).
- ✅ Free for personal use and non-commercial servers
- ✅ Modification and redistribution of source code with attribution
- ❌ Commercial use (revenue generation) without authorization is prohibited
For any commercial inquiry, contact ZO3N on GitHub.
github.com/crafteria-dev/EasyTPA
French Description
💡 Usage Commercial : Ce plugin est gratuit pour les particuliers. Si vous êtes une entreprise ou que vous générez des revenus avec ce plugin, vous devez me contacter pour obtenir une autorisation.
✨ Fonctionnalités
- Téléportation entre joueurs —
/tpa,/tpahere,/tpaccept,/tpdeny,/tpcancel,/tptoggle - Homes —
/home,/sethome,/delhomeavec limite par joueur et tiers de permissions - Warps —
/warp,/setwarp,/delwarp,/warpsavec propriété par joueur et liste cliquable - Spawn —
/spawn,/setspawn - Retour —
/back(position précédente ou lieu de mort configurable) - Téléportation aléatoire —
/rtp(alias/wild) avec chargement async des chunks - Rechargement —
/tpreload - Cooldown global configurable entre deux téléportations (bypass par permission)
- Délai anti-mouvement — la téléportation est annulée si le joueur bouge
- Timeout TPA configurable — les demandes expirent automatiquement
- Système de permissions optionnel — désactivable pour les serveurs sans plugin de perms
- Messages 100 % personnalisables — format MiniMessage, couleurs, hover, click
- Warps cliquables dans le chat avec
/warps
📦 Installation
- Télécharger
easytpa-1.0.0.jardepuis les Releases - Placer le fichier dans le dossier
plugins/de votre serveur Paper - Démarrer (ou redémarrer) le serveur
- Modifier
plugins/EasyTPA/config.ymletmessages.ymlselon vos besoins - Recharger avec
/tpreload(inutile de redémarrer)
Requis : Paper 26.1.2+ — Java 25+
⚙️ Configuration — config.yml
# false → tout le monde peut utiliser les commandes joueur sans permission
# true → vérifie les permissions (compatible LuckPerms et tout plugin Bukkit)
permissions: false
# Délai avant téléportation (secondes). 0 pour désactiver.
# Le joueur ne doit pas bouger, sinon la téléportation est annulée.
teleport-delay: 3
# Durée (secondes) avant expiration d'une demande TPA
tpa-timeout: 60
# Cooldown global entre deux téléportations (secondes). 0 pour désactiver.
# Contourne avec : teleport.cooldown.bypass
teleport-cooldown: 30
# /back peut ramener au lieu de mort si true
back-on-death: true
# Nombre maximum de homes par joueur
# Si permissions: true, extensible via teleport.home.multiple.<nombre>
max-homes: 1
# Nombre maximum de warps par joueur
max-warps: 5
# Rayon maximum (blocs) pour /rtp
rtp-radius: 5000
# Rayon minimum (blocs) pour /rtp (évite le spawn)
rtp-min-radius: 100
# Tentatives maximum pour trouver une position sûre pour /rtp
rtp-max-attempts: 20
# Préfixe des messages (format MiniMessage)
messages-prefix: "<dark_gray>[<aqua>EasyTPA<dark_gray>]<reset> "
📋 Commandes
| Commande | Description | Permission requise |
|---|---|---|
/tpa <joueur> | Demander à se téléporter à un joueur | teleport.tpa |
/tpahere <joueur> | Demander à un joueur de venir à vous | teleport.tpahere |
/tpaccept | Accepter une demande TPA | teleport.tpaccept |
/tpdeny | Refuser une demande TPA | teleport.tpdeny |
/tpcancel | Annuler votre demande en attente | teleport.tpcancel |
/tptoggle | Activer/désactiver la réception de demandes | teleport.tptoggle |
/home [nom] | Se téléporter à un home | teleport.home |
/sethome [nom] | Définir un home à votre position | teleport.sethome |
/delhome [nom] | Supprimer un home | teleport.delhome |
/warp <nom> | Se téléporter à un warp | teleport.warp |
/setwarp <nom> | Créer/modifier un warp | teleport.setwarp |
/delwarp <nom> | Supprimer un warp | Créateur du warp ou admin |
/warps | Lister les warps (cliquables) | teleport.warps |
/spawn | Se téléporter au spawn | teleport.spawn |
/setspawn | Définir le spawn | teleport.admin |
/back | Retourner à la position précédente | teleport.back |
/rtp ou /wild | Téléportation aléatoire sûre | teleport.rtp |
/tpreload | Recharger la configuration | teleport.admin |
Si
permissions: falsedansconfig.yml, toutes les commandes joueur sont accessibles sans permission. Les commandes admin nécessitent toujours OP outeleport.admin.
🔒 Permissions
| Permission | Description | Défaut |
|---|---|---|
teleport.tpa | Utiliser /tpa | true |
teleport.tpahere | Utiliser /tpahere | true |
teleport.tpaccept | Utiliser /tpaccept | true |
teleport.tpdeny | Utiliser /tpdeny | true |
teleport.tpcancel | Utiliser /tpcancel | true |
teleport.tptoggle | Utiliser /tptoggle | true |
teleport.home | Utiliser /home | true |
teleport.sethome | Utiliser /sethome | true |
teleport.delhome | Utiliser /delhome | true |
teleport.warp | Utiliser /warp | true |
teleport.warps | Utiliser /warps | true |
teleport.setwarp | Créer/modifier un warp | op |
teleport.delwarp | Supprimer n'importe quel warp | op |
teleport.spawn | Utiliser /spawn | true |
teleport.back | Utiliser /back | true |
teleport.rtp | Utiliser /rtp | true |
teleport.cooldown.bypass | Ignorer le cooldown de téléportation | op |
teleport.home.multiple.<n> | Avoir jusqu'à n homes (ex: .5, .10) | — |
teleport.admin | Toutes les permissions admin | op |
💬 Messages — messages.yml
Tous les messages utilisent le format MiniMessage d'Adventure. Vous pouvez utiliser des couleurs, effets, liens cliquables, etc.
Placeholders disponibles :
| Placeholder | Description |
|---|---|
<player> | Nom d'un joueur |
<home> | Nom d'un home |
<warp> | Nom d'un warp |
<delay> | Délai en secondes |
<max> | Limite maximale |
<remaining> | Secondes restantes (cooldown) |
<usage> | Syntaxe de la commande |
Exemples de personnalisation MiniMessage :
# Couleurs
teleport-success: "<green>Téléportation effectuée !"
# Couleur dégradée
tpa-sent: "<gradient:#55ff55:#00aa00>Demande envoyée à <player></gradient>"
# Texte en gras avec emoji
teleport-pending: "<gold><bold>⏳ Téléportation dans <delay>s... Ne bougez pas !</bold>"
# Lien cliquable (déjà utilisé pour les boutons TPA)
tpa-received-buttons: "<green><click:run_command:/tpaccept>[Accepter]</click>"
🏗️ Compilation depuis les sources
Prérequis : Java 25, Maven 3.8+
git clone https://github.com/crafteria-dev/EasyTPA.git
cd EasyTPA
mvn package
Le JAR compilé se trouve dans target/easytpa-1.0.0.jar.
📁 Structure du projet
src/main/java/fr/easytpa/
├── EasyTPA.java # Classe principale, initialisation
├── commands/ # Un fichier par commande (17 commandes)
│ ├── TpaCommand.java
│ ├── TpaHereCommand.java
│ ├── TpAcceptCommand.java
│ ├── TpDenyCommand.java
│ ├── TpCancelCommand.java
│ ├── TpToggleCommand.java
│ ├── HomeCommand.java
│ ├── SetHomeCommand.java
│ ├── DelHomeCommand.java
│ ├── WarpCommand.java
│ ├── SetWarpCommand.java
│ ├── DelWarpCommand.java
│ ├── WarpsCommand.java
│ ├── SpawnCommand.java
│ ├── SetSpawnCommand.java
│ ├── BackCommand.java
│ ├── RtpCommand.java
│ └── TpReloadCommand.java
├── managers/ # Logique métier et persistance
│ ├── ConfigManager.java # Lecture de config.yml
│ ├── MessageManager.java # MiniMessage + préfixe
│ ├── TpaManager.java # Demandes TPA, timeout, toggle
│ ├── TeleportDelayManager.java # Délai, anti-mouvement, cooldown
│ ├── CooldownManager.java # Cooldown global par joueur
│ ├── HomeManager.java # Homes (homes.yml)
│ ├── WarpManager.java # Warps (warps.yml)
│ ├── SpawnManager.java # Spawn (spawn.yml)
│ └── BackManager.java # Position précédente (mémoire)
├── listeners/
│ └── TeleportListener.java # PlayerMove, PlayerDeath, PlayerQuit
└── utils/
├── LocationUtils.java # Sérialisation YAML, vérification sécurité
└── PermissionUtils.java # Vérification permissions joueur/admin
src/main/resources/
├── plugin.yml # Déclaration commandes et permissions
├── config.yml # Configuration principale
└── messages.yml # Messages personnalisables
🔧 Fonctionnement interne
Flux d'une téléportation
- La commande (ex:
/home spawn) appelleTeleportDelayManager.scheduleTeleport() - Le cooldown est vérifié — si actif, message et abandon
- Le délai anti-mouvement démarre (
teleport-delaysecondes) - Si le joueur bouge → annulation (
PlayerMoveEvent) - Sinon →
executeTeleport(): sauvegarde la position pour/back, appel asyncplayer.teleportAsync() - En cas de succès → le cooldown est mis à jour, le callback envoie le message de succès
Système de warps
- Chaque warp enregistre l'UUID du créateur (
warps.yml) - Un joueur ne peut supprimer ou écraser que ses propres warps
- Les admins (
teleport.adminou OP) peuvent gérer tous les warps - La limite
max-warpsest par joueur (pas globale)
Téléportation aléatoire (/rtp)
- Génère des coordonnées dans un anneau entre
rtp-min-radiusetrtp-radius - Utilise
world.getChunkAtAsync()pour charger les chunks sans bloquer le serveur - Vérifie la sécurité de la position (2 blocs d'air, sol solide, pas de magma/feu de camp)
- Réessaie jusqu'à
rtp-max-attemptsfois si la position n'est pas sûre
📜 Licence
Ce projet est sous licence Fair Core License (FCL).
- ✅ Utilisation gratuite pour usage personnel et serveurs non commerciaux
- ✅ Modification et redistribution du code source avec attribution
- ❌ Utilisation commerciale (génération de revenus) sans autorisation interdite
Pour toute demande commerciale, contactez ZO3N sur GitHub.
github.com/crafteria-dev/EasyTPA
Сервер для плагина EasyTPA - как у профи
Плагин EasyTPA создан для серверов: на своём сервере вы настраиваете его под себя и решаете, кому играть. Создать сервер с плагином EasyTPA для друзей можно за пару минут - BungeeHost всё уже подготовил.
