Plugin Vota40
Conecta tu servidor de Minecraft con 40servidoresMC: da recompensas in-game a quien vote y suma puntos extra para subir puestos en el ranking. Gratis, de código abierto y compatible con Bukkit/Spigot/Paper/Glowstone (1.7.10 en adelante), Folia y Sponge.
/voto40ya enlaza a la página de votar de TU servidor, no a la home. Cuando un jugador aún no había votado hoy, el plugin le mandaba siempre ahttps://www.40servidoresmc.es/en vez de a la ficha de tu propio servidor — el resto seguía funcionando bien (los votos se registraban y reclamaban con normalidad), así que era fácil confundirlo con un fallo de configuración. Corregido: la web ya manda el enlace correcto y el plugin lo usa directamente.- 146 tests unitarios y un entorno de pruebas end-to-end contra Paper y Folia reales (jugador conectado de verdad, no solo consola). Sin cambios en
config.ymlni en los comandos.
Confirmado de 1.12.2 a 1.20 en Bukkit/Spigot/Paper/Glowstone; también en Folia 1.20.4 (mismo .jar de Bukkit) desde v3.0.2; versión aparte para Sponge (API 7, 1.12.2+).
Con Java < 8u101 puede fallar la conexión SSL — usa el .jar «sslfix» o revisa la guía de compatibilidad.
El código es público. Aportaciones y bugs se gestionan en GitHub.
Instalación
- Descarga el
.jarde la versión compatible con tu servidor desde la página de descargas. - Copia el
.jara la carpeta/pluginsde tu servidor (en Sponge va en/mods) y reinícialo (o cárgalo con tu plugin manager sin reiniciar). - Se creará la carpeta
/plugins/40ServidoresMC/. Abre suconfig.ymly ajústalo a tu gusto (ver tabla más abajo). - Pega tu clave privada del servidor (la encuentras en Mi servidor) en la opción
clavedel config. - Configura el premio que quieres dar a los jugadores por votar en
comandosCustom.
¿No detecta los votos de tu servidor? Revisa que la clave sea correcta. Si el problema persiste, activa debug: true y abre un ticket en GitHub con los detalles.
Configuración
Todo se ajusta desde /plugins/40ServidoresMC/config.yml:
| Clave | Tipo | Por defecto | Descripción |
|---|---|---|---|
| debug | boolean | false | Log más detallado, con más mensajes en caso de errores. |
| clave | string | 'key' | La clave privada de tu servidor, obtenida en "Mi servidor" de la web. |
| api-url | string | 'https://www.40servidoresmc.es/api2.php?clave=' | Base de la API. No la toques salvo que sepas lo que haces — no hace falta cambiarla para nada de lo de esta página. |
| broadcast.activado | boolean | true | Retransmite un mensaje a todo el servidor anunciando que un jugador ha recibido su premio por votar. |
| broadcast.mensajeBroadcast | string | "&aGracias a {0}…" | Mensaje a retransmitir. {0} se sustituye por el nombre del votante. Admite códigos de color. |
| mensaje | string | "&6Gracias por votarnos!…" | Mensaje enviado al jugador al validar su voto. Admite códigos de color. |
| comandosCustom | List<String> | — | Comandos a ejecutar para dar el premio. {0} se sustituye por el nombre del votante. |
| readTimeOut | int | 10000 | Milisegundos que el plugin espera al leer la web de 40servidoresMC. |
| cooldown | int | 60 | Segundos mínimos entre dos ejecuciones de /voto40 del mismo jugador, para no saturar la API con pulsaciones repetidas. |
| log-ip | boolean | false | Registra la IP del jugador tras un voto válido. Desactivado por defecto, actívalo solo si de verdad lo necesitas (privacidad). |
| stats-cmd-cache-seconds | int | 30 | Segundos que se cachea la respuesta de /stats40 antes de volver a consultar la web. 0 o negativo desactiva la caché. |
| update-repo | string | 'richicru/40ServidoresMC' | Repositorio de GitHub donde /update40 busca versiones nuevas. No lo cambies salvo que sepas lo que haces. |
| update-branch | string | 'dev' | Rama del repo que consulta el actualizador. Si tu config trae "development" de una versión antigua, cámbialo a "dev" — esa rama ya no existe. |
| configVer | int | 4 | Versión interna del formato de config. No cambiar a mano. |
Mensajes personalizables y colores
Todos los mensajes que el plugin envía al jugador (incluido su color) se pueden cambiar sin tocar código, desde config.yml, bajo la clave messages.<clave>. Cada mensaje trae ya un color por defecto incrustado con el formato clásico de Minecraft (& + un carácter):
messages:
vote-fetching: "&bObteniendo voto..."
vote-v3-thanks: "&e&l¡Gracias por votar!"
Solo hace falta escribir las claves que quieras cambiar — cualquiera que omitas usa el valor por defecto de la tabla de más abajo. Solo los 16 colores clásicos y los códigos de formato (no hex/RGB tipo &#RRGGBB).
| Código | Color | Nombre |
|---|---|---|
| &0 | Negro | |
| &1 | Azul oscuro | |
| &2 | Verde oscuro | |
| &3 | Turquesa oscuro | |
| &4 | Rojo oscuro | |
| &5 | Púrpura oscuro | |
| &6 | Dorado | |
| &7 | Gris | |
| &8 | Gris oscuro | |
| &9 | Azul | |
| &a | Verde | |
| &b | Turquesa | |
| &c | Rojo | |
| &d | Rosa | |
| &e | Amarillo | |
| &f | Blanco | |
| &l &o &n &m &k &r | — | Negrita, cursiva, subrayado, tachado, aleatorio, reset (formato, no color) |
Ver las 29 claves de messages.* y su texto por defecto
| Clave | Por defecto | Cuándo se usa |
|---|---|---|
| vote-fetching | &7Obteniendo voto... | Al ejecutar /voto40, mientras el plugin consulta la web. |
| vote-exception | &cHa ocurrido una excepción. Avisa a un administrador | Fallo inesperado validando el voto. |
| vote-circuit-open | &eReintentando en {seconds}s. Tu voto no se ha perdido. | La web ha fallado varias veces seguidas; el plugin frena reintentos automáticamente. |
| vote-rate-limited | &eAPI saturada (límite 20/min). Reintenta en {seconds}s. | Límite de peticiones a la API superado. |
| vote-v3-pending-vote | &6No has votado hoy. Puedes hacerlo en &a | Texto antes del enlace de voto (el enlace en sí no es configurable, lo manda la web). |
| vote-v3-already-rewarded | &aYa has canjeado tu premio. Vuelve a votar el &6{siguiente_voto}&a. | El jugador ya reclamó su premio de hoy. |
| vote-v3-thanks | &a¡Gracias por votar! Tu premio ha sido entregado. | Voto validado y premio entregado con éxito. |
| vote-v3-delivery-failed | &cNo pudimos entregar tu premio. Vuelve a /voto40 en unos minutos (la reserva se ha liberado). | comandosCustom falló al ejecutarse; el voto sigue disponible para reintentar. |
| vote-v3-ack-failed | &aPremio entregado, pero no pudimos confirmarlo al servidor. La reserva expirará sola en 5 min. | El premio sí se dio, pero la confirmación a la web falló. |
| vote-v3-invalid-key | &cClave incorrecta. Entra en &bhttps://40servidoresmc.es/miservidor.php &cy cambia esta. | La clave del config.yml no coincide con ningún servidor. |
| stats-invalid-key | &cClave incorrecta. Entra en &bhttps://40servidoresmc.es/miservidor.php &cy cambia esta. | Igual que la anterior, pero al ejecutar /stats40. |
| stats-header | &9==> &7{server} &festá en el TOP &a{position} | Cabecera de /stats40. |
| stats-day-votes | &bVotos hoy: &6{count} | Línea de /stats40. |
| stats-day-votes-rewarded | &bVotos premiados hoy: &6{count} | Línea de /stats40. |
| stats-week-votes | &bVotos semanales: &6{count} | Línea de /stats40. |
| stats-week-votes-rewarded | &bVotos premiados semanales: &6{count} | Línea de /stats40. |
| stats-last-votes | &bÚltimos 20 votos: {votes} | Línea de /stats40. |
| stats-exception | &cHa ocurrido una excepción. Revisa la consola o avisa a un administrador | Fallo inesperado en /stats40. |
| stats-circuit-open | &eReintentando en {seconds}s. | Mismo circuit breaker que en el voto, aplicado a /stats40. |
| stats-rate-limited | &eAPI saturada (límite 20/min). Reintenta en {seconds}s. | Límite de peticiones superado en /stats40. |
| cmd-no-permission | &cNo tienes permiso para usar este comando | Cualquier comando ejecutado sin el permiso requerido. |
| cmd-cooldown | &6No puedes ejecutar este comando tantas veces seguidas! | El jugador repite un comando antes de que pase el cooldown. |
| cmd-error | &cHa ocurrido un error inesperado | Error genérico no capturado en ningún otro mensaje. |
| cmd-only-player | &cEste comando sólo puede ser ejecutado por usuarios | Un comando que exige un jugador se ejecuta desde consola. |
| reload-success | &aConfiguración recargada correctamente | Al ejecutar /reload40 con éxito. |
| reload-version | &aFuncionando la versión {version} | Segunda línea de /reload40, muestra la versión activa. |
| test-header | &bPlataforma de test para 40ServidoresMC: | Cabecera de /test40. |
| update-no-info | No se pudo obtener la información de versiones. | /update40 no pudo consultar GitHub. |
| update-no-new | No hay versión más moderna recomendada para tu versión de Minecraft. | /update40, ya tienes la última versión. |
¿Cada cuánto puede votar un jugador?
Un mismo jugador (por nick o por IP, lo que salte primero) puede dejar un voto web válido a tu servidor cuando se cumplen las dos condiciones a la vez:
- No haber votado ya ese mismo día natural (el día cambia a medianoche en horario UTC, es decir la 1:00 o las 2:00 de la madrugada española según el cambio de hora).
- Que hayan pasado al menos 12 horas reales desde su voto anterior a tu servidor.
La segunda condición existe para cerrar el hueco que deja la primera por sí sola justo alrededor de la medianoche UTC (sin ella, alguien podía votar a las 23:59 y otra vez dos minutos después). Si un jugador te dice que "el sistema de votos no espera 24 horas completas", esto es lo que hay que explicarle: el límite real es 1 voto/día + 12h mínimas, no una ventana fija de 24h — y por eso, según a qué hora vote, la próxima vez que pueda votar puede ser en 12h o casi en 24h. La web ya le muestra la hora exacta a partir de la cual puede volver a votar, tanto si lo intenta antes de tiempo como en la propia página de voto.
Comandos
| Comando | Alias | Permiso | Función |
|---|---|---|---|
| /voto40 | vote40, votar40, mivoto40 | 40servidores.voto | Valida el voto del jugador y le otorga el premio si corresponde. Solo desde el juego. |
| /test40 | — | 40servidores.test | Simula el premio y ejecuta los comandos configurados sin registrar un voto real. Útil para probar la config. |
| /stats40 | — | 40servidores.stats | Muestra estadísticas de votos del servidor desde el propio juego. También desde consola. |
| /update40 | actualizar40, upd40 | 40servidores.actualizar | Comprueba si hay una versión nueva del plugin y muestra el changelog. También desde consola. |
| /reload40 | recargar40, config40 | 40servidores.recargar | Recarga la configuración del plugin sin reiniciar el servidor. También desde consola. |
Placeholders (PlaceholderAPI)
Si tienes PlaceholderAPI instalado, el plugin registra su hook automáticamente — nada que activar. Úsalos en TAB, scoreboard, formato del chat, o cualquier plugin que admita placeholders. Todos empiezan por %40servidoresmc_.
Solo disponibles en Bukkit/Spigot/Paper/Folia — la versión Sponge no incluye esta integración. Los valores se cachean 5 minutos; si la web no responde, el placeholder devuelve una cadena vacía en vez de romper el texto.
| Placeholder | Devuelve | Ejemplo |
|---|---|---|
| %40servidoresmc_position% | Puesto actual del servidor en el ranking. | #5 |
| %40servidoresmc_day_votes% | Votos totales recibidos hoy. | 42 |
| %40servidoresmc_day_votes_rewarded% | De los de hoy, cuántos ya se han canjeado. | 38 |
| %40servidoresmc_week_votes% | Votos totales de esta semana. | 187 |
| %40servidoresmc_week_votes_rewarded% | De los de esta semana, cuántos ya se han canjeado. | 164 |
| %40servidoresmc_server_name% | Nombre del servidor tal como está registrado en la web. | MiServidor |
&6#%40servidoresmc_position% &7%40servidoresmc_server_name%
&e&lVotos del día: &f%40servidoresmc_day_votes%
Soporte y contribuir
El plugin es de código abierto y lo mantiene la comunidad. Si encuentras un error o tienes una sugerencia, abre un ticket en el issue tracker de GitHub.
Añádelo y empieza a recibir votos en cuanto lo aprobemos.