Aller au contenu principal

Vote System

Sondages en jeu avec options, date de fin, un vote par joueur et placeholders en direct.

Gratuitesv0.9Social
NécessiteTypeWriter0.9PlaceholderAPIfacultatif

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 cooldownSeconds de 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​

  1. Installez PlaceholderAPI si vous voulez afficher les résultats avec des placeholders.
  2. 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 :

  1. Dans le panneau web de TypeWriter, ouvrez une page manifest et ajoutez un artifact Vote Data. Conservez l'artifactId par défaut (vote_storage).
  2. Ajoutez une Vote Definition. Définissez displayName sur Next map theme, ajoutez trois éléments à options (par exemple Desert, Snow, Jungle) et liez l'artifact dans data.
  3. Définissez endDate sur une date et une heure UTC telles que 2026-12-31T23:00:00Z, et closedMessage sur un court texte. Laissez endDate vide pour un sondage sans fin.
  4. Ouvrez une page de séquence. Ajoutez une action Vote Action pour chaque option : liez la definition et définissez optionIndex sur 0, 1 ou 2. L'index d'option commence à 0.
  5. 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 triggers de l'action. Ils ne s'exécutent que lorsque le vote est enregistré.
  6. Facultativement, ajoutez un Vote Message avant les options, pour rappeler aux joueurs qui ont déjà voté qu'ils l'ont fait.
  7. Publiez. Utilisez %typewriter_vote_total_<definition id>% sur un scoreboard pour afficher le nombre de votes.
Conservez l'identifiant de la définition

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.

CommandePermissionDescription
/typewriter vote <definition> <option> [target]typewriter.vote.castVote pour une option. Les options commencent à 1. Avec target, vote pour les joueurs sélectionnés.
/typewriter vote stats [definition]typewriter.vote.statsAffiche les votes par option et le total, pour un sondage ou pour tous.
/typewriter vote reset <definition>typewriter.vote.resetSupprime 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éfautPlaceholders
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_fallbackoption {number}{number} (rang de l'option, à partir de 1)
recorded_for_voterYour vote for <blue>{definition}</blue> has been recorded as <green>{option}</green>.{definition}, {option} (le texte de l'option)
recorded_by_otherRecorded vote for <blue>{player}</blue> in {definition}: {option}.{player}, {definition}, {option}
recorded_for_selfVote 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_definitionsThere are no active vote definitions.aucun
stats_lineStats 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_fallbackOption {number}{number}
stats_separator, aucun
entry_not_foundCould not find entry {entry}{entry} (ce qui a été saisi)
entry_rejectedEntry did not pass filteraucun

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​

PermissionAutorise
typewriter.voteL'accès à la commande /typewriter vote.
typewriter.vote.castVoter avec la commande.
typewriter.vote.statsLire les résultats avec la commande.
typewriter.vote.resetRé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.

PlaceholderRenvoie
%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
Événements1
Faits1
Artefacts1
Manifestes2
Entrées non utilisées par la version actuelle

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.