Race
Languages: English · Français
Build timed race tracks and run multiplayer races on foot, by boat or in an elytra: sign up, wait for the synchronized countdown, chain the checkpoints and chase the record.
Features
Installation
Usage
Admin — create & configure a track (100% in-game):
Player — race:
Commands & Permissions
Command
Players (
Admins (
Configuration
Excerpt from
Compatibility
API
Loose coupling through the
(
Contributing
Race (Français)
Langues : English · Français
Crée des parcours chronométrés et lance des courses multijoueurs à pied, en bateau ou en élytra : inscris-toi, attends le décompte synchronisé, enchaîne les checkpoints et bats le record.
Fonctionnalités
Installation
Utilisation
Admin — créer & configurer un parcours (100 % en jeu) :
Joueur — courir :
Commandes & Permissions
Commande
Joueurs (
Admins (
Configuration
Extrait de
Compatibilité
API
Couplage faible via le
(
Contribution
Languages: English · Français
Build timed race tracks and run multiplayer races on foot, by boat or in an elytra: sign up, wait for the synchronized countdown, chain the checkpoints and chase the record.
- Tracks built 100% in-game: a start, ordered checkpoints (the last checkpoint = the finish line), each with a configurable radius.
- Three vehicle types — on foot, boat, or elytra (with a configurable number of rockets) — chosen per track in a settings GUI.
- Multiplayer races: players sign up with
/race join; the race auto-starts after a delay (or an admin forces it), with a synchronized countdown then a simultaneous GO. - Live HUD: chronometer + speed (km/h), a per-checkpoint title showing the time gap with the racer just ahead, and a "back to last checkpoint" compass.
- Checkpoints required in order, or optional (reaching the finish is enough) — per track.
- Records & leaderboard per track: best times, average time (cached, refreshed every 6h) and your personal rank, all shown by
/race info. - Track preview: particles + holograms (green start, cyan checkpoints, orange finish), toggled with
/race showand/race hide. - Settings GUI: rename, vehicle, rockets, checkpoints required/optional, spectator-on-finish, entity collisions on/off.
- Rank money reward via Vault (works with any economy plugin):
(racers - rank + 1) × coefficient. - Full FR/EN localization (
lang/fr.yml,lang/en.yml).
- Drop
Race-<version>.jarinto the server'splugins/folder. - Restart the server (Paper 1.21+, Java 21). Optional soft-dependencies: PlaceholderAPI, Vault (+ any economy plugin) for placeholders and money rewards.
config.yml,lang/fr.yml,lang/en.ymlandtracks.ymlare generated on first launch.
Admin — create & configure a track (100% in-game):
/race create <name>- Stand at the start, then
/race setstart <name> /race cp add <name> [radius]for each checkpoint — the last one is the finish line/race settings <name>→ pick the vehicle (on foot / boat / elytra), rockets and options- Once complete (start + finish), the track is ready to race.
Player — race:
- Run
/race listand pick a track. /race join <name>to sign up; the race starts after the countdown (or an admin's/race start)./race leaveto forfeit.
Command
/race (alias /r). Permissions: race.play (default true) · race.admin (default op).Players (
race.play):| Command | Description |
|---|---|
/race list | List the tracks (opens the menu in-game) |
/race join <name> | Join / sign up for a race |
/race leave | Leave / forfeit the race |
/race info <name> | Track details (records, average, your best) |
/race support | Get the support Discord link |
Admins (
race.admin):| Command | Description |
|---|---|
/race create <name> | Create a track |
/race delete <name> | Delete a track |
/race setstart <name> | Set the start at your position |
/race cp <add|move|delete|list> <name> [value] | Manage a track's checkpoints (last = finish) |
/race tp <name> | Teleport to a track's start |
/race settings <name> | Settings menu (name, vehicle, rockets, options) |
/race show <name> | /race hide | Enable / hide the track preview |
/race resettimes <name> | Clear a track's times and record |
/race start [name] | /race stop [name] | Force an immediate start / stop the race |
/race reload | Reload the config and messages |
Excerpt from
config.yml (English keys & comments; only player-facing values follow the server language):
Code:
# Message language: "fr" or "en" (files customizable in plugins/Race/lang/).
language: fr
prefix: "<gradient:#1e90ff:#00bfff><bold>Race</bold></gradient> <dark_gray>»</dark_gray> "
# Default radius (blocks) of a checkpoint / the finish line.
default-checkpoint-radius: 3.0
# Vault money reward by rank: (numberOfPlayers - rank + 1) * coefficient. 0 disables it.
reward-coefficient: 10.0
default-elytra-rockets: 16 # rockets given for an elytra race
auto-start-delay-seconds: 120 # auto-start delay after the first sign-up
countdown-seconds: 3 # start countdown (TP + release)
detection-interval-ticks: 2 # progress checks (checkpoints / finish)
checkpoint-gap-display-seconds: 1 # time-gap title duration (0 disables)
- Vault (optional): rank money rewards on finish, with any Vault economy (EssentialsX, CMI…). Set
reward-coefficient: 0to disable. - PlaceholderAPI (optional): placeholders
%race_in_race%,%race_record_<track>%,%race_active_track%,%race_track_count%for scoreboards, tablists and chat. - Standalone: runs on any Paper 1.21+ server — no other plugin required.
Loose coupling through the
ServicesManager (no compile-time dependency on the Race jar):
Code:
var reg = Bukkit.getServicesManager().getRegistration(RaceApi.class);
if (reg != null) {
RaceApi api = reg.getProvider();
api.getGames().forEach(g -> getLogger().info(g.displayName() + " : " + g.status()));
api.join(player, "track1");
}
RaceApi exposes getGames(), join(player, id), isInGame(uuid) and leaveCommand(); each game is a RaceGame(id, displayName, status, players, joinable). Listen to the custom events:
Code:
@EventHandler
public void onEnd(RaceEndEvent event) {
getLogger().info("Race finished on " + event.getTrack() + " — winner: " + event.getWinner());
}
RaceStartEvent exposes getTrack() / getPlayers().)- Download & support (bug reports, feature requests): website https://mc-plugins.taumah.fr or the plugin support Discord https://discord.gg/92mFJjS3jh.
- Try the plugin on a public server: https://atheramc.fr/
━━━━━━━━━━━━━━━━━━━━
Race (Français)
Langues : English · Français
Crée des parcours chronométrés et lance des courses multijoueurs à pied, en bateau ou en élytra : inscris-toi, attends le décompte synchronisé, enchaîne les checkpoints et bats le record.
- Parcours créés 100 % en jeu : un départ, des checkpoints ordonnés (le dernier checkpoint = la ligne d'arrivée), chacun avec un rayon configurable.
- Trois types de véhicule — à pied, en bateau ou en élytra (avec un nombre de fusées configurable) — choisis par parcours dans un menu de réglages.
- Courses multijoueurs : on s'inscrit avec
/race join; la course démarre automatiquement après un délai (ou un admin la force), avec un décompte synchronisé puis un GO simultané. - HUD en direct : chronomètre + vitesse (km/h), un titre à chaque checkpoint affichant l'écart de temps avec le concurrent juste devant, et une boussole « retour au dernier checkpoint ».
- Checkpoints obligatoires dans l'ordre, ou optionnels (atteindre l'arrivée suffit) — par parcours.
- Records & classement par parcours : meilleurs temps, temps moyen (mis en cache, recalculé toutes les 6 h) et ta position personnelle, le tout via
/race info. - Prévisualisation du parcours : particules + hologrammes (départ vert, checkpoints cyan, arrivée orange), activée avec
/race showet/race hide. - Menu de réglages : renommer, véhicule, fusées, checkpoints obligatoires/optionnels, spectateur à l'arrivée, collisions entre entités activées/désactivées.
- Récompense en argent au classement via Vault (fonctionne avec n'importe quelle économie) :
(nbCoureurs - rang + 1) × coefficient. - Localisation FR/EN complète (
lang/fr.yml,lang/en.yml).
- Déposer
Race-<version>.jardans le dossierplugins/du serveur. - Redémarrer le serveur (Paper 1.21+, Java 21). Dépendances optionnelles : PlaceholderAPI, Vault (+ une économie) pour les placeholders et les récompenses en argent.
config.yml,lang/fr.yml,lang/en.ymlettracks.ymlsont générés au premier lancement.
Admin — créer & configurer un parcours (100 % en jeu) :
/race create <nom>- Se placer au départ, puis
/race setstart <nom> /race cp add <nom> [rayon]pour chaque checkpoint — le dernier est la ligne d'arrivée/race settings <nom>→ choisir le véhicule (à pied / bateau / élytra), les fusées et les options- Une fois complet (départ + arrivée), le parcours est prêt à être couru.
Joueur — courir :
- Lancer
/race listet choisir un parcours. /race join <nom>pour s'inscrire ; la course démarre au décompte (ou via le/race startd'un admin)./race leavepour abandonner.
Commande
/race (alias /r). Permissions : race.play (défaut true) · race.admin (défaut op).Joueurs (
race.play) :| Commande | Description |
|---|---|
/race list | Lister les parcours (ouvre le menu en jeu) |
/race join <nom> | S'inscrire à la course |
/race leave | Se désinscrire / abandonner |
/race info <nom> | Détail d'un parcours (records, moyenne, ton meilleur temps) |
/race support | Obtenir le lien du Discord de support |
Admins (
race.admin) :| Commande | Description |
|---|---|
/race create <nom> | Créer un parcours |
/race delete <nom> | Supprimer un parcours |
/race setstart <nom> | Définir le départ à ta position |
/race cp <add|move|delete|list> <nom> [valeur] | Gérer les checkpoints (le dernier = l'arrivée) |
/race tp <nom> | Se téléporter au départ d'un parcours |
/race settings <nom> | Menu de réglages (nom, véhicule, fusées, options) |
/race show <nom> | /race hide | Activer / masquer la prévisualisation |
/race resettimes <nom> | Effacer les temps et le record d'un parcours |
/race start [nom] | /race stop [nom] | Forcer le départ immédiat / arrêter la course |
/race reload | Recharger la config et les messages |
Extrait de
config.yml (clés & commentaires en anglais ; seules les valeurs affichées aux joueurs suivent la langue du serveur) :
Code:
# Langue des messages : "fr" ou "en" (fichiers personnalisables dans plugins/Race/lang/).
language: fr
prefix: "<gradient:#1e90ff:#00bfff><bold>Race</bold></gradient> <dark_gray>»</dark_gray> "
# Rayon par défaut (blocs) d'un checkpoint / de l'arrivée.
default-checkpoint-radius: 3.0
# Récompense Vault au classement : (nbJoueurs - rang + 1) * coefficient. 0 désactive.
reward-coefficient: 10.0
default-elytra-rockets: 16 # fusées données pour une course en élytra
auto-start-delay-seconds: 120 # délai d'auto-démarrage après la 1re inscription
countdown-seconds: 3 # décompte de départ (TP + libération)
detection-interval-ticks: 2 # fréquence des vérifications (checkpoints / arrivée)
checkpoint-gap-display-seconds: 1 # durée du titre d'écart de temps (0 désactive)
- Vault (optionnel) : récompenses en argent au classement, avec n'importe quelle économie Vault (EssentialsX, CMI…).
reward-coefficient: 0pour les désactiver. - PlaceholderAPI (optionnel) : placeholders
%race_in_race%,%race_record_<parcours>%,%race_active_track%,%race_track_count%pour scoreboards, tablists et chat. - Autonome : fonctionne sur tout serveur Paper 1.21+ — aucun autre plugin requis.
Couplage faible via le
ServicesManager (aucune dépendance de compilation au jar de Race) :
Code:
var reg = Bukkit.getServicesManager().getRegistration(RaceApi.class);
if (reg != null) {
RaceApi api = reg.getProvider();
api.getGames().forEach(g -> getLogger().info(g.displayName() + " : " + g.status()));
api.join(player, "parcours1");
}
RaceApi expose getGames(), join(player, id), isInGame(uuid) et leaveCommand() ; chaque jeu est un RaceGame(id, displayName, status, players, joinable). Écouter les événements custom :
Code:
@EventHandler
public void onEnd(RaceEndEvent event) {
getLogger().info("Fin de course sur " + event.getTrack() + " — vainqueur : " + event.getWinner());
}
RaceStartEvent expose getTrack() / getPlayers().)- Téléchargement & support (bugs, propositions de fonctionnalités) : site https://mc-plugins.taumah.fr ou le Discord de support des plugins https://discord.gg/92mFJjS3jh.
- Tester le plugin sur un serveur public : https://atheramc.fr/
