Timed broadcast & advertisement plugin — clickable links, hex colors, priority overrides, and a smart flood guard.
!Spigot 1.20+ !Paper !Java 17 !Author
PulseMsg is a lightweight but powerful broadcast plugin that lets server owners schedule timed advertisement messages with full color control, clickable links, hover tooltips, and a smart flood guard so players never get spammed.
Each message runs on its own independent timer — no more messages colliding or overflowing chat at the same time.
| Feature | Description |
|---|---|
| ⏱ Per-message timers | Each message has its own interval-seconds — completely independent |
| 🔗 Clickable links | Open URLs, suggest commands, run commands, or copy text to clipboard |
| 🎨 Full color support | Legacy &x codes and hex &#RRGGBB both supported on every line |
| 🚨 Priority messages | Mark a message as priority: true to always fire, even alongside others |
| 🛡 Flood guard | At most one non-priority message per scheduler tick — no chat spam |
| 🔒 Permission gating | Send specific messages only to players with a given permission node |
| 🔀 Random or sequential | Send messages in order or shuffle them with random-order: true |
| 👥 Minimum players | Skip broadcasts when fewer than N players are online |
| ♻ Hot reload | /pm reload applies all config changes with zero server restart |
All commands require the pulsemsg.admin permission (default: OP).
Aliases: /pulsemsg, /pm, /pulse
| Command | Description |
|---|---|
/pm reload | Reload config and restart the scheduler |
/pm list | List all messages with enabled/disabled status |
/pm send <id> | Manually fire a message immediately |
/pm info <id> | Show details and next-fire countdown for a message |
/pm toggle | Pause or resume all broadcasts |
/pm help | Show the help menu |
| Node | Default | Description |
|---|---|---|
pulsemsg.admin | OP | Full access to all PulseMsg commands |
pulsemsg.bypass | false | Player will never receive any broadcasts |
PulseMsg generates a fully documented config.yml on first run. Here's a taste:
global-interval-seconds: 60
global-prefix: 'ᛩf2&l[PulseMsg]&r '
random-order: false
minimum-players: 0
messages:
discord-ad:
enabled: true
title: 'ᱹda&l⚡ Join Our Discord ⚡'
body:
- '&7Stay connected with the community!'
- '&7Get support, updates, and giveaways.'
- ' '
- 'ᱹda&l&nJoin Now&r &7— discord.gg/example'
interval-seconds: 300
priority: true # always fires even alongside other messages
prefix: 'ᱹda[Discord]&r ' # overrides the global prefix
click:
action: OPEN_URL
value: 'https://discord.gg/example'
hover: '&9Click to join our Discord!'
store-ad:
enabled: true
title: '&#f1c40f&l★ Support The Server ★'
body:
- '&7Ranks, cosmetics and more at our store!'
interval-seconds: 1200
priority: false
click:
action: OPEN_URL
value: 'https://store.example.com'
hover: '&eClick to open the store!'
| Action | Effect |
|---|---|
OPEN_URL | Opens a URL in the player's browser |
SUGGEST_CMD | Puts text into the player's chat box |
RUN_CMD | Runs a command as the player |
COPY_TEXT | Copies text to the player's clipboard |
PulseMsg ticks every global-interval-seconds. Each tick it counts down every message's own timer independently. When a message is due:
Made with care by rradajbi — open an issue on GitHub for bugs or feature requests.
