Vote System
Présentation
Vote System ajoute des sondages à votre serveur. Un sondage est une définition de vote : un titre, une liste d'options, une date de fin facultative et un message affiché une fois le sondage clos. Chaque joueur peut voter une fois par sondage, depuis une action TypeWriter (une option de dialogue, un PNJ, un clic dans un menu) ou avec une commande. Les votes sont stockés dans un artifact TypeWriter.
Les résultats sont disponibles sous forme de placeholders PlaceholderAPI, ce qui permet de les afficher sur un scoreboard, dans un hologramme ou dans un menu, ainsi qu'avec une commande pour le staff. Il s'agit d'un vote entre vos joueurs, et non d'un lien vers des sites de vote de listes de serveurs.
Fonctionnalités
- Sondages à plusieurs options — chaque option a son propre texte, qui peut contenir des placeholders et des couleurs.
- Un vote par joueur — un second vote sur le même sondage est refusé, sauf si vous définissez un
cooldownSecondsde revote dans Vote Config. - Date de fin — clôturez automatiquement un sondage à une date et une heure données.
- Messages de fermeture et de blocage — informent les retardataires que le sondage est terminé, et ceux qui revotent trop tôt qu'ils doivent attendre. Les deux sont en MiniMessage.
- Action de vote — enregistre un vote pour le joueur à l'origine du déclenchement, et ne poursuit votre séquence que si le vote a bien été enregistré.
- Message de statut — envoie un message différent selon que le joueur a déjà voté ou non.
- Résultats en direct — totaux, décomptes par option et option choisie par le joueur, sous forme de placeholders.
- Commandes du staff — voter pour un joueur, lire les résultats et réinitialiser un sondage.
Installation
- Installez PlaceholderAPI si vous voulez afficher les résultats avec des placeholders.
- Placez le JAR de Vote System dans
plugins/Typewriter/extensions/et redémarrez le serveur.
Premiers pas
Organisez un sondage sur le prochain thème de carte :
- Dans le panneau web de TypeWriter, ouvrez une page manifest et ajoutez un artifact Vote Data. Conservez l'
artifactIdpar défaut (vote_storage). - Ajoutez une Vote Definition. Définissez
displayNamesurNext map theme, ajoutez trois éléments àoptions(par exempleDesert,Snow,Jungle) et liez l'artifact dansdata. - Définissez
endDatesur une date et une heure UTC telles que2026-12-31T23:00:00Z, etclosedMessagesur un court texte. LaissezendDatevide pour un sondage sans fin. - Ouvrez une page de séquence. Ajoutez une action Vote Action pour chaque option : liez la
definitionet définissezoptionIndexsur0,1ou2. L'index d'option commence à 0. - Reliez chaque action à une option de dialogue, une interaction avec un PNJ ou un bouton de menu, et placez votre message de remerciement ou votre récompense dans les
triggersde l'action. Ils ne s'exécutent que lorsque le vote est enregistré. - Facultativement, ajoutez un Vote Message avant les options, pour rappeler aux joueurs qui ont déjà voté qu'ils l'ont fait.
- Publiez. Utilisez
%typewriter_vote_total_<definition id>%sur un scoreboard pour afficher le nombre de votes.
Les votes d'un sondage sont stockés sous une clé dérivée de l'identifiant d'entrée de sa définition de vote. Si vous supprimez l'entrée ou changez son identifiant, ses votes stockés ne sont plus retrouvés.
Commandes
Toutes les commandes sont des sous-commandes de /typewriter (alias /tw). <definition> est l'identifiant ou le nom d'une définition de vote.
| Commande | Permission | Description |
|---|---|---|
/typewriter vote <definition> <option> [target] | typewriter.vote.cast | Vote pour une option. Les options commencent à 1. Avec target, vote pour les joueurs sélectionnés. |
/typewriter vote stats [definition] | typewriter.vote.stats | Affiche les votes par option et le total, pour un sondage ou pour tous. |
/typewriter vote reset <definition> | typewriter.vote.reset | Supprime tous les votes d'un sondage. |
Toutes nécessitent également typewriter.vote.
Textes modifiables
Aucun texte affiché en jeu n'est figé dans le code. Les messages d'un vote sont des champs de ses entrées : closedMessage de la Vote Definition et les deux messages de Vote Message. Ce que répondent les commandes /typewriter vote est un snippet TypeWriter : vous pouvez donc le reformuler, le traduire ou le recolorer sans rien recompiler. Ouvrez plugins/Typewriter/snippets.yml, trouvez la clé sous content.vote, changez la valeur et lancez /tw reload. L'extension enregistre tous ses snippets avec leur texte par défaut au démarrage : ils apparaissent donc dans le fichier après le premier démarrage. Gardez les valeurs par défaut et rien ne change.
Les réponses des commandes sont en MiniMessage. Elles sont envoyées avec le préfixe de réponse Typewriter (Typewriter »), qui vient du moteur et ne fait pas partie de ces snippets. Un {name} dans un texte est remplacé par la valeur indiquée dans le tableau ; un placeholder qui n'existe pas reste tel quel, et une valeur n'est jamais réexaminée à la recherche de placeholders. Le journal de la console du serveur reste en anglais.
Snippet (sous content.vote.) | Par défaut | Placeholders |
|---|---|---|
usage | <gray>Usage: /tw vote <definition> <option> [target]</gray> | aucun |
option_unavailable | <red>Option {option} is not available for {definition}.</red> | {option} (le numéro saisi), {definition} (l'identifiant du vote) |
already_voted | <red>{player} cannot vote in {definition} yet.</red> | {player}, {definition} |
cast_option_fallback | option {number} | {number} (rang de l'option, à partir de 1) |
recorded_for_voter | Your vote for <blue>{definition}</blue> has been recorded as <green>{option}</green>. | {definition}, {option} (le texte de l'option) |
recorded_by_other | Recorded vote for <blue>{player}</blue> in {definition}: {option}. | {player}, {definition}, {option} |
recorded_for_self | Vote registered for {definition}: {option}. | {definition}, {option} |
cast_failed | <red>Unable to register the vote for {player} in {definition}.</red> | {player}, {definition} |
reset_done | <green>Votes reset for {definition}.</green> | {definition} |
no_definitions | There are no active vote definitions. | aucun |
stats_line | Stats for {name} [{definition}]: {options} | total: {total} | {name} (le displayName, ou le nom de l'entrée s'il est vide), {definition}, {options}, {total} |
stats_option | {number}: {votes} ({label}) | {number}, {votes}, {label} (le texte de l'option) |
stats_option_fallback | Option {number} | {number} |
stats_separator | , | aucun |
entry_not_found | Could not find entry {entry} | {entry} (ce qui a été saisi) |
entry_rejected | Entry did not pass filter | aucun |
stats_option est répété une fois par option, et les résultats sont joints avec stats_separator pour former {options} de stats_line. stats_option_fallback est le {label} d'une option sans texte, et cast_option_fallback est le nom d'une telle option dans les messages envoyés quand un vote est enregistré. Les deux derniers snippets sont des erreurs de commande, affichées en rouge par le jeu : ce sont du texte brut, sans MiniMessage.
Quand le sondage est fermé, /tw vote affiche le closedMessage du sondage au membre du staff (cast_failed n'est utilisé que si ce message est vide). cast_failed répond aussi à une entrée de données absente ou à une option hors limites.
Permissions
| Permission | Autorise |
|---|---|
typewriter.vote | L'accès à la commande /typewriter vote. |
typewriter.vote.cast | Voter avec la commande. |
typewriter.vote.stats | Lire les résultats avec la commande. |
typewriter.vote.reset | Réinitialiser un sondage. |
L'action de vote ne vérifie pas ces permissions : elle a seulement besoin que l'entrée s'exécute.
Placeholders
Remplacez <id> par l'identifiant d'entrée de la définition de vote. Ils nécessitent PlaceholderAPI.
| Placeholder | Renvoie |
|---|---|
%typewriter_vote_display_<id>% | Le displayName du sondage. |
%typewriter_vote_option_<id>_<n>% | Le texte de l'option numéro n, à partir de 1. |
%typewriter_vote_total_<id>% | Le nombre total de votes. |
%typewriter_vote_stats_<id>% | Les votes de chaque option, séparés par des virgules. |
%typewriter_vote_stats_<id>_<n>% | Les votes de l'option numéro n, à partir de 1. |
%typewriter_vote_player_<id>% | Le texte de l'option pour laquelle le joueur a voté, ou rien s'il n'a pas voté. |
%typewriter_vote_has_voted_<id>% | 1 si le joueur ne peut pas revoter pour l'instant (il a voté et le délai n'est pas écoulé), sinon 0. |
%typewriter_vote_closed_<id>% | 1 une fois la date de fin passée, sinon 0. |
%typewriter_vote_remaining_<id>% | Secondes entières avant la date de fin ; 0 sans date de fin ou une fois passée. |
vote_votes_<id> fonctionne comme vote_stats_<id>.
Entrées
7 entrées, générées depuis la source de l'extension.
Actions2
- Vote ActionVote Action
- Vote MessageVote Message
Événements1
- Vote Cast EventVote Cast Event
Faits1
- Vote FactVote Fact
Artefacts1
- Vote DataVote Data
Manifestes2
- Vote ConfigVote System Configuration
- Vote DefinitionVote Definition
Vote Cast Event et Vote Fact existent, mais rien ne les lit pour l'instant : l'événement n'est jamais déclenché et le fact n'est pas alimenté par les votes. Vote Config est lu : il règle le cooldown de revote et le journal de débogage.
Dépannage
Le vote n'est pas enregistré. L'action et la commande échouent silencieusement lorsqu'il manque quelque chose : la définition de vote doit avoir un artifact data lié, l'option doit exister, le joueur ne doit pas avoir déjà voté (ou son cooldown doit être écoulé, voir Vote Config), et le sondage ne doit pas avoir dépassé sa endDate. Lorsque le sondage est clos, le closedMessage est envoyé au joueur. Quand le joueur doit encore attendre, le blockedMessage est envoyé. Activez debug dans Vote Config pour journaliser la raison de chaque refus.
La mauvaise option reçoit le vote. L'action de vote compte les options à partir de 0, alors que la commande et les placeholders comptent à partir de 1.
Le sondage ne se clôt jamais. endDate doit être un instant ISO-8601 en UTC se terminant par Z, tel que 2026-12-31T23:00:00Z. Une valeur dans un autre format est ignorée et le sondage reste ouvert.
Les résultats sont vides après avoir renommé l'entrée. Les votes sont liés à l'identifiant d'entrée de la définition. Restaurez l'ancien identifiant, ou réinitialisez le sondage et recommencez.
Un placeholder s'affiche tel quel. Vérifiez que PlaceholderAPI est installé et que l'identifiant est bien l'identifiant d'entrée de la définition. L'extension retrouve aussi une définition lorsqu'un placeholder est demandé avant le premier vote.
Les couleurs d'un message semblent fausses. Les messages de statut de Vote Message, le closedMessage et le blockedMessage sont lus en MiniMessage après résolution des placeholders : écrivez <red>texte</red>, pas des codes &c.
Des joueurs peuvent voter deux fois. La vérification se fait par joueur et par sondage. Utiliser plusieurs définitions de vote avec les mêmes options crée des sondages distincts.