Saltar al contenido principal

Vote System

Encuestas en el juego con opciones, fecha de finalización, un voto por jugador y placeholders en vivo.

Gratuitasv0.9Social
RequiereTypeWriter0.9PlaceholderAPIopcional

Descripción general​

Vote System añade votaciones a tu servidor. Una votación es una definición de voto: un título, una lista de opciones, una fecha de cierre opcional y un mensaje que se muestra cuando la votación se ha cerrado. Cada jugador puede votar una vez por votación, desde una acción de TypeWriter (una opción de diálogo, un NPC, un clic en un menú) o con un comando. Los votos se almacenan en un artefacto de TypeWriter.

Los resultados están disponibles como placeholders de PlaceholderAPI, por lo que puedes mostrarlos en un scoreboard, en un holograma o en un menú, y con un comando para el staff. Es una votación entre tus jugadores, no un enlace a sitios de votación de listas de servidores.

Características​

  • Votaciones con varias opciones: cada opción tiene su propio texto, que puede contener placeholders y colores.
  • Un voto por jugador: se rechaza un segundo voto en la misma votación, salvo que definas un cooldownSeconds de nuevo voto en Vote Config.
  • Fecha de cierre: cierra una votación automáticamente en una fecha y hora determinadas.
  • Mensajes de cierre y de bloqueo — avisan a quien vota tarde de que la encuesta terminó, y a quien vuelve a votar demasiado pronto de que debe esperar. Ambos son MiniMessage.
  • Acción de voto: emite un voto para el jugador que la activa y continúa tu secuencia solo cuando el voto se ha registrado.
  • Mensaje de estado: envía un mensaje distinto según el jugador ya haya votado o no.
  • Resultados en directo: totales, recuentos por opción y la opción elegida por el jugador, como placeholders.
  • Comandos de staff: votar por un jugador, leer los resultados y reiniciar una votación.

Instalación​

  1. Instala PlaceholderAPI si quieres mostrar los resultados con placeholders.
  2. Coloca el JAR de Vote System en plugins/Typewriter/extensions/ y reinicia el servidor.

Primeros pasos​

Organiza una votación sobre la próxima temática del mapa:

  1. En el panel web de TypeWriter, abre una página de manifiesto y añade un artefacto Vote Data. Conserva el artifactId por defecto (vote_storage).
  2. Añade una Vote Definition. Establece displayName en Next map theme, añade tres elementos a options (por ejemplo Desert, Snow, Jungle) y enlaza el artefacto en data.
  3. Establece endDate en una fecha y hora UTC como 2026-12-31T23:00:00Z, y closedMessage en un texto breve. Deja endDate vacío para una votación sin fin.
  4. Abre una página de secuencia. Añade una Vote Action por cada opción: enlaza la definition y establece optionIndex en 0, 1 o 2. El índice de opción empieza en 0.
  5. Conecta cada acción a una opción de diálogo, a una interacción con un NPC o a un botón de menú, y coloca tu mensaje de agradecimiento o tu recompensa en los triggers de la acción. Solo se ejecutan cuando el voto se registra.
  6. Opcionalmente, añade un Vote Message antes de las opciones, para recordárselo a los jugadores que ya han votado.
  7. Publica. Usa %typewriter_vote_total_<definition id>% en un scoreboard para mostrar el número de votos.
Conserva el id de la definición

Los votos de una votación se almacenan bajo una clave derivada del id de entrada de su definición de voto. Si eliminas la entrada o cambias su id, ya no se encuentran sus votos almacenados.

Comandos​

Todos los comandos son subcomandos de /typewriter (alias /tw). <definition> es el id o el nombre de una definición de voto.

ComandoPermisoDescripción
/typewriter vote <definition> <option> [target]typewriter.vote.castVota por una opción. Las opciones empiezan en 1. Con target, vota por los jugadores seleccionados.
/typewriter vote stats [definition]typewriter.vote.statsMuestra los votos por opción y el total, de una votación o de todas.
/typewriter vote reset <definition>typewriter.vote.resetElimina todos los votos de una votación.

Todos ellos necesitan también typewriter.vote.

Textos editables​

Ningún texto que se muestra en el juego está fijado en el código. Los mensajes de una votación son campos de sus entradas: closedMessage de la Vote Definition y los dos mensajes de Vote Message. Lo que responden los comandos /typewriter vote es un snippet de TypeWriter, así que puedes reformularlo, traducirlo o cambiarle el color sin recompilar nada. Abre plugins/Typewriter/snippets.yml, busca la clave bajo content.vote, cambia el valor y ejecuta /tw reload. La extensión registra todos sus snippets con su texto por defecto al iniciarse, así que aparecen en el archivo tras el primer arranque. Si mantienes los valores por defecto, nada cambia.

Las respuestas de los comandos son MiniMessage. Se envían con el prefijo de respuesta de Typewriter (Typewriter »), que viene del motor y no forma parte de estos snippets. Un {name} en un texto se sustituye por el valor indicado en la tabla; un placeholder que no existe se queda tal cual, y un valor nunca se vuelve a examinar en busca de placeholders. El registro de la consola del servidor sigue en inglés.

Snippet (bajo content.vote.)Por defectoPlaceholders
usage<gray>Usage: /tw vote <definition> <option> [target]</gray>ninguno
option_unavailable<red>Option {option} is not available for {definition}.</red>{option} (el número escrito), {definition} (el id de la votación)
already_voted<red>{player} cannot vote in {definition} yet.</red>{player}, {definition}
cast_option_fallbackoption {number}{number} (posición de la opción, desde 1)
recorded_for_voterYour vote for <blue>{definition}</blue> has been recorded as <green>{option}</green>.{definition}, {option} (el texto de la opción)
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.ninguno
stats_lineStats for {name} [{definition}]: {options} | total: {total}{name} (el displayName, o el nombre de la entrada si está vacío), {definition}, {options}, {total}
stats_option{number}: {votes} ({label}){number}, {votes}, {label} (el texto de la opción)
stats_option_fallbackOption {number}{number}
stats_separator, ninguno
entry_not_foundCould not find entry {entry}{entry} (lo que se escribió)
entry_rejectedEntry did not pass filterninguno

stats_option se repite una vez por opción y los resultados se unen con stats_separator para formar {options} de stats_line. stats_option_fallback es el {label} de una opción sin texto, y cast_option_fallback es el nombre de esa opción en los mensajes que se envían al registrar un voto. Los dos últimos snippets son errores de comando, que el juego muestra en rojo: son texto sin formato, sin MiniMessage.

Cuando la encuesta está cerrada, /tw vote muestra el closedMessage de la encuesta al miembro del staff (cast_failed solo se usa si ese mensaje está vacío). cast_failed también responde a una entrada de datos ausente o a una opción fuera de rango.

Permisos​

PermisoConcede
typewriter.voteAcceso al comando /typewriter vote.
typewriter.vote.castEmitir un voto con el comando.
typewriter.vote.statsLeer los resultados con el comando.
typewriter.vote.resetReiniciar una votación.

La acción de voto no comprueba estos permisos: solo necesita que se ejecute la entrada.

Placeholders​

Sustituye <id> por el id de entrada de la definición de voto. Requieren PlaceholderAPI.

PlaceholderDevuelve
%typewriter_vote_display_<id>%El displayName de la votación.
%typewriter_vote_option_<id>_<n>%El texto de la opción número n, empezando en 1.
%typewriter_vote_total_<id>%El número total de votos.
%typewriter_vote_stats_<id>%Los votos de cada opción, separados por comas.
%typewriter_vote_stats_<id>_<n>%Los votos de la opción número n, empezando en 1.
%typewriter_vote_player_<id>%El texto de la opción por la que votó el jugador, o nada si no ha votado.
%typewriter_vote_has_voted_<id>%1 si el jugador no puede volver a votar por ahora (votó y la espera no ha terminado), si no 0.
%typewriter_vote_closed_<id>%1 una vez pasada la fecha de fin, si no 0.
%typewriter_vote_remaining_<id>%Segundos enteros hasta la fecha de fin; 0 sin fecha de fin o una vez pasada.

vote_votes_<id> funciona igual que vote_stats_<id>.

Entradas​

7 entradas, generadas a partir del código fuente de la extensión.

Acciones2
Eventos1
Hechos1
Artefactos1
Manifiestos2
Entradas que la versión actual no usa

Vote Cast Event y Vote Fact existen, pero todavía nada los lee: el evento nunca se dispara y el fact no se rellena con los votos. Vote Config sí se lee: fija el cooldown para votar de nuevo y el registro de depuración.

Resolución de problemas​

El voto no se registra. La acción y el comando fallan en silencio cuando falta algo: la definición de voto debe tener un artefacto data enlazado, la opción debe existir, el jugador no debe haber votado ya (o su cooldown debe haber terminado, consulta Vote Config) y la votación no debe haber pasado su endDate. Cuando la votación está cerrada, se envía el closedMessage al jugador. Cuando el jugador debe esperar todavía, se envía el blockedMessage. Activa debug en Vote Config para registrar el motivo de cada rechazo.

La opción equivocada recibe el voto. La acción de voto cuenta las opciones desde 0, mientras que el comando y los placeholders las cuentan desde 1.

La votación nunca se cierra. endDate debe ser un instante ISO-8601 en UTC que termine en Z, como 2026-12-31T23:00:00Z. Un valor en otro formato se ignora y la votación sigue abierta.

Los resultados están vacíos después de renombrar la entrada. Los votos están ligados al id de entrada de la definición. Restaura el id anterior, o reinicia la votación y empieza de nuevo.

Un placeholder se muestra tal cual. Comprueba que PlaceholderAPI está instalado y que el id es el id de entrada de la definición. La extensión también encuentra una definición cuando se solicita un placeholder antes del primer voto.

Los colores de un mensaje se ven mal. Los mensajes de estado de Vote Message, el closedMessage y el blockedMessage se leen como MiniMessage tras resolver los placeholders: escribe <red>texto</red>, no códigos &c.

Los jugadores pueden votar dos veces. La comprobación es por jugador y por votación. Usar varias definiciones de voto con las mismas opciones crea votaciones independientes.