Plugin moderno de anuncios para Paper/Spigot/Folia con Clean Architecture, Adventure/MiniMessage, GUI in-game, Redis Pub/Sub y Discord.
English documentation: README_EN.md
- Anuncios por
CHAT,TITLE,SUBTITLE,ACTIONBAR,BOSSBAR,TOAST,SOUNDyDISCORD_WEBHOOK. - Mensajes con Adventure/MiniMessage y placeholders internos.
- PlaceholderAPI como dependencia opcional.
- BossBars y ActionBars con prioridad y limpieza al salir/desactivar.
- Toasts virtuales basados en advancements.
- Editor in-game con menus Bukkit e input tipo anvil.
- Configuracion YAML con Configurate:
config.yml,announcements/*.yml,messages/*.ymlymenus/*.yml. - Reload seguro: una configuracion invalida no reemplaza el estado runtime anterior.
- Migracion legacy desde WelcomeDonations archivado.
- Redis Pub/Sub para anuncios cross-server.
- Discord webhook outbound y DiscordSRV inbound opcional.
- Scheduler compatible con Bukkit y preparado para Folia mediante abstraccion.
- Java 21.
- Paper/Spigot 1.21.x. Recomendado: Paper 1.21.1.
- Gradle Wrapper incluido en el repositorio.
- Opcional: PlaceholderAPI, DiscordSRV, Redis, PacketEvents/ProtocolLib segun las integraciones que uses.
Desde la raiz del proyecto:
.\gradlew.bat test .\gradlew.bat :platform-spigot:build
El plugin se genera en:
platform-spigot/build/libs/AdvancedAnnouncer-0.1.0-SNAPSHOT.jar
- Compila el proyecto o descarga el
.jargenerado. - Copia
platform-spigot/build/libs/AdvancedAnnouncer-0.1.0-SNAPSHOT.jara la carpetaplugins/de tu servidor Paper/Spigot. - Inicia el servidor.
- Verifica que se cree
plugins/AdvancedAnnouncer/. - Ejecuta
/announcer versiony/announcer debug.
| Comando | Descripcion |
|---|---|
/announcer |
Muestra ayuda base. |
/announcer version |
Muestra version del plugin, plataforma e integraciones. |
/announcer debug |
Muestra estado de plataforma, scheduler, Folia, PlaceholderAPI, Redis, Discord y anuncios cargados. |
/announcer list |
Lista anuncios cargados. |
/announcer create <id> |
Crea un anuncio CHAT basico en YAML. |
/announcer delete <id> |
Elimina un anuncio. |
/announcer toggle <id> |
Activa o desactiva un anuncio. |
/announcer send <id> |
Envia un anuncio a las audiencias validas. |
/announcer preview <id> |
Previsualiza un anuncio solo para el jugador ejecutor. |
/announcer reload |
Recarga config, anuncios y scheduler de forma segura. |
/announcer migrate |
Migra formatos legacy de WelcomeDonations cuando existan. |
/announcer editor |
Abre el editor in-game. |
/announcer redis test |
Diagnostica Redis. |
/announcer discord test |
Envia una prueba al bridge Discord si esta configurado. |
| Permiso | Uso |
|---|---|
announcer.admin |
Acceso completo. |
announcer.editor |
Abre el editor GUI. |
announcer.migrate |
Ejecuta migracion legacy. |
announcer.reload |
Recarga configuracion. |
announcer.send |
Envia anuncios manualmente. |
announcer.preview |
Previsualiza anuncios. |
announcer.toggle |
Activa/desactiva anuncios. |
announcer.debug |
Consulta estado debug. |
announcer.redis |
Usa diagnosticos Redis. |
announcer.discord |
Usa diagnosticos Discord. |
announcer.receive.alert |
Recibe anuncios generales. |
announcer.receive.vip |
Recibe anuncios VIP. |
announcer.bypass.cooldown |
Reservado para saltar cooldowns. |
Archivos principales:
plugins/AdvancedAnnouncer/config.yml: idioma, servidor, Redis, Discord, scheduler y defaults.plugins/AdvancedAnnouncer/announcements/*.yml: anuncios por archivo.plugins/AdvancedAnnouncer/messages/en.ymlymessages/es.yml: mensajes de administracion.plugins/AdvancedAnnouncer/menus/*.yml: base para menus.plugins/AdvancedAnnouncer/backups/: backups antes de migraciones o guardados destructivos.
Ejemplo minimo:
announcements: welcome: name: Welcome enabled: true type: GLOBAL channels: - CHAT - ACTIONBAR messages: - "<green>Welcome, {player_name}!</green>" actionbar: message: "<yellow>Enjoy your stay.</yellow>" duration: PT3S priority: 5 priority: 1 interval: PT5M
La validacion revisa MiniMessage, cron, permisos, servidores/grupos, sonidos, materiales de toast, Redis URI y Discord webhook URL.
Redis esta desactivado por defecto.
server: id: "survival-01" groups: - "survival" redis: enabled: true uri: "redis://localhost:6379" channel: "advanced_announcer:broadcast" ignore-self: true reconnect-delay-seconds: 5 publish-scheduled-network-announcements: false
Prueba:
/announcer redis test
Para smoke test cross-server, levanta dos servidores con distinto server.id, configura grupos compatibles y envia un anuncio type: NETWORK.
Discord esta desactivado por defecto.
Webhook outbound:
discord: enabled: true webhook: enabled: true url: "https://discord.com/api/webhooks/..." username: "AdvancedAnnouncer" color: 16171844 footer: "play.example.net" thumbnail-url: "" timestamp: true
Prueba:
/announcer discord test
DiscordSRV inbound:
discord: enabled: true discordsrv: enabled: true channel-whitelist: - "123456789012345678" allowed-role-ids: [] cooldown-seconds: 3 minecraft-format: "<aqua>%discord_user%</aqua>: <white>%discord_message%</white>"
DiscordSRV es softdepend: si no esta instalado, el plugin arranca igual.
- Ejecuta
.\gradlew.bat :platform-spigot:build. - Copia
platform-spigot/build/libs/AdvancedAnnouncer-0.1.0-SNAPSHOT.jaraplugins/. - Inicia Paper 1.21.x.
- Entra al servidor como operador.
- Ejecuta
/announcer version. - Ejecuta
/announcer debug. - Ejecuta
/announcer list. - Ejecuta
/announcer preview welcome. - Ejecuta
/announcer send welcome. - Ejecuta
/announcer editory prueba crear, duplicar, alternar, previsualizar y guardar. - Edita un YAML en
plugins/AdvancedAnnouncer/announcements/. - Ejecuta
/announcer reload. - Prueba canales
CHAT,TITLE,ACTIONBAR,BOSSBAR,TOASTySOUND. - Opcional: activa Redis y prueba
/announcer redis test. - Opcional: activa Discord webhook y prueba
/announcer discord test.
- Si el plugin no carga, confirma Java 21 y Paper/Spigot 1.21.x.
- Si un reload falla, revisa los errores del comando y la consola; el runtime anterior se conserva.
- Si MiniMessage falla, valida cierres de tags como
<green>texto</green>. - Si Redis no conecta, revisa URI, firewall y que
redis.enabledeste entrue. - Si Discord no envia, revisa que
discord.enabled,discord.webhook.enabledy la URL del webhook sean validos. - Si DiscordSRV no funciona, confirma que DiscordSRV este instalado y que el canal/rol este permitido.
core-api: contratos publicos sin Bukkit/Paper/Redis/DiscordSRV.core-domain: modelo puro de anuncios y validacion base.application: casos de uso y comandos.platform-common: Configurate, MiniMessage, Redis/Jackson, webhook HTTP, scheduler y utilidades neutrales.platform-spigot: bootstrap Bukkit/Paper, comandos, GUI, Adventure audiences, sonidos y bridges de servidor.legacy/welcomedonations-maven: implementacion Maven antigua archivada como referencia de migracion.
Desarrollado con pasión por dos desarrolladores que les gusta mucho Minecraft.
- Juan S Pimentel Lalangui
- Bryan A Vidal Crispin