Configuration
Toute la configuration tient dans plugins/CobaltiaAnnonces/annonces.json. Ce fichier est en JSON strict : pas de commentaires, des guillemets doubles et aucune virgule après le dernier élément d’une liste ou d’un objet.
Structure générale
Section intitulée « Structure générale »{ "titre": { "texte": "...", "largeur": 44 }, "cadres": { "<id>": { ... } }, "annonces": { "<id>": { ... } }, "zones": { "<id>": { ... } }, "rotations": [ { ... } ], "entrees": [ { ... } ]}| Clé | Type | Rôle |
|---|---|---|
titre |
objet | Titre affiché en haut des annonces encadrées. |
cadres |
objet d’objets | Cadres décoratifs, indexés par identifiant. |
annonces |
objet d’objets | Les annonces, indexées par identifiant. |
zones |
objet d’objets | Zones nommées (région WorldGuard ou cube), utilisées par le ciblage et les entrées. |
rotations |
liste | Envois automatiques à intervalle régulier. |
entrees |
liste | Annonces affichées à l’entrée d’une zone. |
Toutes les clés sont facultatives : une section absente est simplement vide. Les clés inconnues sont ignorées.
Format des durées
Section intitulée « Format des durées »Les durées (toutes, delai_par_joueur) s’écrivent comme une suite de nombres suivis d’une unité : s (secondes), m (minutes), h (heures), d (jours). Les unités se combinent et les espaces sont ignorés.
| Exemple | Durée |
|---|---|
"90s" |
1 minute 30 secondes |
"15m" |
15 minutes |
"1h30m" |
1 heure 30 minutes |
"1d" |
24 heures |
Une durée nulle, vide ou dans un autre format ("5 min", "1.5h") est refusée.
Le titre est inséré, centré, juste sous le haut du cadre de chaque annonce encadrée (sauf si l’annonce le désactive).
"titre": { "texte": "<glyph:annonce_titre>", "largeur": 44}| Champ | Type | Obligatoire | Description |
|---|---|---|---|
texte |
texte MiniMessage | oui | Contenu du titre : un glyphe ou du texte mis en forme. |
largeur |
entier (pixels) | non | Largeur affichée du titre, utilisée pour le centrer. 0 par défaut si absent. |
Sans bloc titre, le plugin utilise <glyph:annonce_titre> avec une largeur de 44 pixels.
Un cadre ajoute une ligne décorative en haut et en bas de l’annonce et définit la largeur dans laquelle le titre et les lignes sont centrés.
"cadres": { "simple": { "haut": "<glyph:annonce_simple_haut_g><font:cobaltia:bandeau></font><glyph:annonce_simple_haut_d>", "bas": "<glyph:annonce_simple_bas_g><font:cobaltia:bandeau></font><glyph:annonce_simple_bas_d>", "largeur": 241 }, "simple_petit": { "haut": "<glyph:annonce_simple_petit_haut>", "bas": "<glyph:annonce_simple_petit_bas>", "largeur": 129, "vides_apres_haut": 1 }}| Champ | Type | Obligatoire | Description |
|---|---|---|---|
haut |
texte MiniMessage | oui | Ligne affichée en premier. |
bas |
texte MiniMessage | oui | Ligne affichée en dernier. |
largeur |
entier (pixels) > 0 | oui | Largeur intérieure du cadre ; sert de référence pour centrer le titre et les lignes. |
vides_apres_haut |
entier ≥ 0 | non | Nombre de lignes vides insérées sous le haut du cadre. 0 par défaut. |
Le centrage mesure chaque ligne au pixel près (police Minecraft, gras compris, et glyphes connus du serveur Cobaltia) puis la décale de la moitié de l’espace libre. Une ligne plus large que le cadre n’est pas décalée.
annonces
Section intitulée « annonces »Chaque annonce est un objet dont la clé est l’identifiant (utilisé dans les commandes, les rotations et les entrées).
"annonces": { "vote": { "nom": "Rappel vote", "cadre": "simple", "lignes": [ "<gray>Vote pour le serveur avec <click:run_command:'/vote'><hover:show_text:'<gray>Voter'><white><u>/vote</u></white></hover></click> !" ], "son": "entity.experience_orb.pickup" }, "bienvenue": { "lignes": [ "<gradient:#5FD3FF:#1E6BFF>Bienvenue %player_name% !</gradient>", "", "<gray>Tapez <white>/aide</white> pour commencer." ] }}| Champ | Type | Obligatoire | Description |
|---|---|---|---|
lignes |
liste de textes MiniMessage | oui (au moins une) | Contenu de l’annonce, une entrée par ligne de chat. "" produit une ligne vide. Les placeholders PlaceholderAPI y sont remplacés pour chaque destinataire. |
nom |
texte | non | Nom lisible affiché dans le menu et dans la confirmation d’envoi. Par défaut : l’identifiant. |
cadre |
identifiant de cadre | non | Cadre à utiliser (doit exister dans cadres). Sans cadre, les lignes sont envoyées telles quelles, sans titre ni centrage. |
titre |
booléen | non | Avec un cadre, true par défaut : affiche le titre. Mettez false pour l’omettre. Sans cadre, ce champ n’a pas d’effet. |
son |
clé de son Minecraft | non | Son joué à chaque destinataire, par exemple entity.experience_orb.pickup ou block.note_block.pling. Une clé invalide est ignorée sans erreur. |
Dans l’exemple, vote est encadrée et centrée, avec son titre et un son ; bienvenue est envoyée ligne par ligne, sans cadre.
Une zone est un espace nommé d’un monde. Elle sert de cible aux envois et aux rotations, et de déclencheur aux entrées. Deux types existent :
"zones": { "spawn": { "monde": "world", "region": "spawn" }}| Champ | Description |
|---|---|
monde |
Nom du monde (obligatoire). |
region |
Identifiant de la région WorldGuard dans ce monde. |
Un joueur est dans la zone dès que la région s’applique à sa position. WorldGuard est requis : sans lui, ces zones sont toujours vides.
"zones": { "arene": { "monde": "survie", "min": [100000, -64, 100000], "max": [100010, 320, 100010] }}| Champ | Description |
|---|---|
monde |
Nom du monde (obligatoire). |
min |
Premier coin : liste de trois entiers [x, y, z]. |
max |
Coin opposé : liste de trois entiers [x, y, z]. |
Les deux coins peuvent être donnés dans n’importe quel ordre ; les bornes sont incluses et comparées aux coordonnées de bloc du joueur. Aucun plugin n’est requis.
Si region est présent, il est prioritaire sur min/max. Une zone sans region ni coins valides est refusée.
Le champ cible d’une rotation accepte quatre formes :
| Forme | Destinataires |
|---|---|
"tous" (ou champ absent) |
Tous les joueurs en ligne. |
{ "monde": "survie" } |
Les joueurs d’un monde. |
{ "mondes": ["survie", "survie_nether"] } |
Les joueurs de plusieurs mondes. monde et mondes peuvent être combinés. |
{ "zone": "spawn" } |
Les joueurs présents dans la zone au moment de l’envoi. La zone doit exister dans zones. |
Les destinataires sont calculés à chaque envoi. Si personne n’est dans la cible, l’envoi automatique est simplement sauté.
rotations
Section intitulée « rotations »Une rotation envoie l’une de ses annonces à intervalle régulier.
"rotations": [ { "id": "general", "toutes": "10m", "ordre": "hasard", "annonces": ["vote", "boutique", "discord"], "cible": "tous", "actif": true }, { "id": "spawn", "toutes": "5m", "ordre": "suite", "annonces": ["bienvenue"], "cible": { "zone": "spawn" } }]| Champ | Type | Obligatoire | Description |
|---|---|---|---|
id |
texte | oui | Identifiant unique de la rotation, utilisé par /annonces rotation. |
toutes |
durée | oui | Intervalle entre deux envois. |
annonces |
liste d’identifiants | oui (au moins une) | Annonces diffusées ; chacune doit exister dans annonces. |
ordre |
"suite" ou "hasard" |
non | suite (par défaut) parcourt la liste dans l’ordre puis recommence ; hasard tire une annonce au sort sans jamais répéter la précédente. |
cible |
cible | non | Destinataires (voir Ciblage). "tous" par défaut. |
actif |
booléen | non | État initial, true par défaut. |
Fonctionnement :
- le premier envoi a lieu un intervalle complet après le démarrage ou le rechargement ;
- le plugin vérifie les rotations chaque seconde ; plusieurs rotations peuvent tourner en parallèle, chacune avec son propre rythme ;
- dans l’exemple,
generaldiffuse une annonce au hasard toutes les 10 minutes à tout le serveur, etspawnenvoiebienvenuetoutes les 5 minutes aux seuls joueurs présents au spawn.
Une entrée affiche une annonce à un joueur au moment où il entre dans une zone.
"entrees": [ { "zone": "arene", "annonce": "regles_arene", "delai_par_joueur": "30m" }]| Champ | Type | Obligatoire | Description |
|---|---|---|---|
zone |
identifiant de zone | oui | Zone surveillée (doit exister dans zones). |
annonce |
identifiant d’annonce | oui | Annonce envoyée au joueur qui entre. |
delai_par_joueur |
durée | non | Délai minimal avant qu’un même joueur ne reçoive à nouveau cette annonce pour cette zone. 30m par défaut. |
Fonctionnement :
- l’entrée est détectée quand le joueur change de bloc, se téléporte, change de monde ou se connecte directement dans la zone ;
- l’annonce n’est envoyée qu’au joueur concerné, et seulement s’il n’était pas déjà dans la zone ;
- plusieurs entrées peuvent viser la même zone (une annonce chacune) ;
- le délai anti-répétition est conservé en mémoire au rechargement, mais remis à zéro au redémarrage du serveur.
Exemple complet
Section intitulée « Exemple complet »{ "titre": { "texte": "<glyph:annonce_titre>", "largeur": 44 }, "cadres": { "simple": { "haut": "<glyph:annonce_simple_haut_g><font:cobaltia:bandeau></font><glyph:annonce_simple_haut_d>", "bas": "<glyph:annonce_simple_bas_g><font:cobaltia:bandeau></font><glyph:annonce_simple_bas_d>", "largeur": 241 } }, "annonces": { "vote": { "nom": "Rappel vote", "cadre": "simple", "lignes": ["<gray>Vote pour le serveur avec <white>/vote</white> !"], "son": "entity.experience_orb.pickup" }, "bienvenue_spawn": { "nom": "Bienvenue au spawn", "lignes": ["<gray>Bienvenue au spawn, <white>%player_name%</white> !"] } }, "zones": { "spawn": { "monde": "world", "region": "spawn" } }, "rotations": [ { "id": "general", "toutes": "10m", "annonces": ["vote"], "cible": "tous" } ], "entrees": [ { "zone": "spawn", "annonce": "bienvenue_spawn", "delai_par_joueur": "1h" } ]}Ce fichier diffuse le rappel de vote encadré toutes les 10 minutes à tout le serveur, et souhaite la bienvenue à chaque joueur qui entre dans la région spawn, au plus une fois par heure et par joueur.
Référence des clés
Section intitulée « Référence des clés »27 résultats
titre.texteTexte MiniMessage du titre affiché en tête des annonces encadrées, généralement un glyphe.
titre.largeurLargeur en pixels du titre, utilisée pour le centrer dans le cadre.
cadres.<id>.hautLigne MiniMessage affichée en haut du cadre <id> (bordure supérieure).
cadres.<id>.basLigne MiniMessage affichée en bas du cadre <id> (bordure inférieure).
cadres.<id>.largeurLargeur intérieure du cadre en pixels, obligatoire et positive, sur laquelle le titre et les lignes sont centrés.
cadres.<id>.vides_apres_hautNombre de lignes vides insérées sous la bordure supérieure du cadre (0 par défaut).
annonces.<id>.nomNom lisible de l'annonce, affiché dans le menu et les retours de commande ; l'identifiant est utilisé s'il est absent.
annonces.<id>.cadreIdentifiant d'un cadre défini dans cadres ; sans cadre, les lignes sont envoyées telles quelles, sans centrage.
annonces.<id>.lignesListe des lignes MiniMessage de l'annonce, au moins une, avec placeholders PlaceholderAPI ; une ligne vide ajoute un espace.
annonces.<id>.sonSon Minecraft joué à chaque destinataire (clé de son, par exemple entity.experience_orb.pickup) ; aucun son si absent.
annonces.<id>.titreAffiche le titre commun en tête de l'annonce encadrée (true par défaut) ; sans effet si l'annonce n'a pas de cadre.
zones.<id>.regionRégion WorldGuard qui définit la zone ; à défaut, la zone est un cube défini par min et max.
zones.<id>.mondeNom du monde où se trouve la zone, obligatoire.
zones.<id>.minPremier coin [x, y, z] de la zone cubique, utilisé lorsqu'aucune région n'est indiquée.
zones.<id>.maxCoin opposé [x, y, z] de la zone cubique, utilisé lorsqu'aucune région n'est indiquée.
rotations[].idIdentifiant unique de la rotation, utilisé par /annonces rotation.
rotations[].toutesIntervalle entre deux annonces de la rotation, en durée combinable s, m, h, d (par exemple 5m ou 1h30m).
rotations[].ordreOrdre de diffusion : suite (dans l'ordre de la liste) ou hasard (aléatoire, sans répéter la précédente).
rotations[].annoncesListe des identifiants d'annonces diffusées par la rotation, au moins une.
rotations[].cibleDestinataires de la rotation : tous, ou un objet indiquant monde, mondes ou zone.
rotations[].actifÉtat initial de la rotation (true par défaut) ; un état changé par /annonces rotation est prioritaire.
rotations[].cible.zoneLimite la rotation aux joueurs présents dans cette zone (identifiant défini dans zones).
rotations[].cible.mondeLimite la rotation aux joueurs présents dans ce monde.
rotations[].cible.mondesLimite la rotation aux joueurs présents dans l'un des mondes de cette liste.
entrees[].zoneZone dont l'entrée déclenche l'annonce pour le joueur qui y pénètre.
entrees[].annonceIdentifiant de l'annonce envoyée au joueur lorsqu'il entre dans la zone.
entrees[].delai_par_joueurDélai minimal avant de renvoyer cette annonce au même joueur, en durée s, m, h, d (30m par défaut).
- Aucune entrée.