COWMODSКаталог модов

SendMSG

SendMSG – Private Messaging for Your Server

Автор: zamber3093обновлён 16 окт. 2026 г.
УправлениеОбщениеУтилиты

Описание

SendMSG – Private Messaging for Your Server

SendMSG

Sent a message Received a message Subtitle

Lightweight, multilingual, and fully customizable private messaging plugin for Paper 1.21+ and 26.1+ Works on its own. No other plugin is required.


✨ Features

FeatureDescription
📨 5 sending commands/msg, /m, /tell, /w, /pm
💬 Quick reply/r or /reply – reply to the last sender, even if they are offline (when offline messages are on)
🌍 3 languagesEnglish, Ukrainian, Russian (change with /sendmsg lang)
🛡️ Anti-spamConfigurable delay between messages, with a bypass permission
🔔 Sound alertsCustomizable sounds for sending and receiving
📢 SubtitlesPopup notification when you receive a message
🔕 Block PMs/msgtoggle – disable incoming private messages
👁️ SocialSpy/spy – see all private messages (operators)
🚫 Ignore system/ignore and /ignore list – ignore players, with auto-expiry
📭 Offline messages (optional)Messages to offline players are shown when they join
🔗 Link and IP filter (optional)Hides or blocks links and IP addresses in private messages
🏷️ LuckPerms prefixes (optional)Shows the sender's group prefix, e.g. [Admin] Alex -> Bob
🧩 PlaceholderAPI (optional)Placeholders for unread count, last contact, and more
🖱️ Clickable reply (optional)The reply hint is a button that fills in /r
📣 Discord logging (optional)Sends every private message to a Discord channel (webhook)
📁 Message loggingAll PMs saved to logs/private.log
💾 StorageSQLite database (default) or YAML files
🧹 Auto cleanupExpired ignores are removed every minute; old offline messages every hour
🔔 Update notificationsChecks Modrinth on startup and tells operators when a new version is out
🎨 Fully customizableAll messages in messages/*.yml, with colour codes
⚡ EssentialsX compatibleTakes over private messages from EssentialsX

Optional features are OFF by default. Turn them on in config.yml. The plugin works without any of them.


🎮 How it looks in-game

When you send a message:

✉ You -> Player: Hello!

When you receive a message:

  • 📺 Subtitle: ✉ You have a message
  • 💬 Chat: ✉ Player writes you: Hello!
  • 💬 Reply hint: → Reply with: /r (text)
  • 🔊 Sound: ENTITY_EXPERIENCE_ORB_PICKUP

⚠️ All text, sounds, subtitles, and colours can be changed in the configuration files.


📋 Commands

CommandDescriptionAliases
/msg <player> <message>Send a private message/m, /w, /tell, /pm
/r <message>Reply to the last player you talked to/reply
/ignore <player>Ignore or unignore a player (toggle)/ig
/ignore listShow who you ignore and how long each ignore lasts–
/msgtoggleTurn incoming private messages on or off–
/spyToggle SocialSpy (see all PMs)–
/sendmsg lang <code>Change the plugin language–
/sendmsg spiesShow who currently has SocialSpy on–
/sendmsg reloadReload the configuration–
/sendmsg helpShow help–

Language codes: EN (English), UA (Ukrainian), RU (Russian)


🔐 Permissions

PermissionDescriptionDefault
sendmsg.msgAllows /msg and /m✅ true
sendmsg.replyAllows /r and /reply✅ true
sendmsg.ignoreAllows /ignore✅ true
sendmsg.msgtoggleAllows /msgtoggle✅ true
sendmsg.colorAllows colour codes (&a, &#RRGGBB...) in private messages👑 op
sendmsg.bypass.cooldownBypass the message cooldown👑 op
sendmsg.filter.bypassNot filtered by the link and IP filter👑 op
sendmsg.spyAllows /spy (SocialSpy)👑 op
sendmsg.adminAccess to /sendmsg admin commands👑 op

With LuckPerms, give these permissions to groups in LuckPerms instead of to single players.


⚙️ Configuration (config.yml)

Basics

# Plugin language: ru-RU, uk-UA, en-EN
lang: en-EN

# Delay between messages, in seconds
cooldown-seconds: 10

# Longest private message, in characters (0 = no limit)
max-message-length: 200

Features

Turn parts of the plugin on or off:

features:
  subtitle: true          # subtitle when you receive a message
  sound-receive: true     # sound when you receive a message
  sound-send: true        # sound when you send a message
  reply-hint: true        # "/r" hint below incoming messages
  clickable-reply: false  # make the hint a button (off by default)
  cooldown: true          # message cooldown
  msg-toggle: true        # /msgtoggle
  social-spy: true        # /spy
  log-to-file: true       # save all PMs to logs/private.log

Storage

storage:
  type: sqlite            # sqlite = plugins/SendMSG/sendmsg.db | yaml = ignores.yml, names.yml, offline.yml
  fallback-to-yaml: false # if SQLite cannot open, stop with an error (false) or use YAML files (true)

On the first start with sqlite, data from the YAML files is imported automatically (only if the database is empty). Changing storage.type later does not move data back. Restart the server after changing it.

Offline messages (off by default)

offline-messages:
  enabled: false          # store messages for offline players
  max-per-player: 50      # undelivered messages per player
  expire-days: 30         # delete undelivered messages after N days (0 = keep)

Link and IP filter (off by default)

filters:
  enabled: false          # turn the filter on
  links: true             # hide http(s):// and www. links and bare domains
  ip-addresses: true      # hide IPv4 addresses, with or without a port
  action: mask            # mask = replace with [hidden] | block = do not send the message

Integrations (off by default)

integrations:
  luckperms:
    enabled: false        # show the sender's LuckPerms prefix (needs LuckPerms)
  placeholderapi:
    enabled: false        # register %sendmsg_...% placeholders (needs PlaceholderAPI)

Restart the server after changing the integrations.

Discord logging (off by default)

discord-webhook:
  enabled: false
  url: ""                 # your webhook URL – keep it secret
  username: "SendMSG Spy"

Setup guide: docs/discord-webhook.md.

Sounds

sound:
  receive:
    name: ENTITY_EXPERIENCE_ORB_PICKUP
    volume: 1.0
    pitch: 1.2
  send:
    name: ENTITY_VILLAGER_WORK_CARTOGRAPHER
    volume: 1.0
    pitch: 1.0

Ignores

ignore:
  auto-expire-days: 7            # remove an ignore after N days (0 = forever)
  notify-ignored-sender: true    # tell the sender their message was blocked

Update checker

update-checker:
  enabled: true              # check Modrinth on startup for a new version
  notify-ops-on-join: true   # tell operators when they join, if an update exists

📝 Message formats

Texts are in messages/en-EN.yml, messages/uk-UA.yml, and messages/ru-RU.yml.

format:
  incoming:    "&2✉ &f&l{from} &7writes you: &f{message}"
  reply-hint:  "&2→ &7Reply with: &b&n/r (text)"
  outgoing:    "&2✉ &7&lYou &7-> &f&l{to}&7: &f{message}"
  spy:         "&8[SPY] &7{from} -> {to}: {message}"
  console-name: "Console"

subtitle: "&2✉ &7You have a message"
subtitle-reply: "&2✉ &7Someone replied to you"

Colour codes: &0-9, &a-f, &k-o, &r, and &#RRGGBB. Players without sendmsg.color have them removed from their messages.


🚀 Installation

  1. Download SendMSG.jar
  2. Place it in your server's plugins/ folder
  3. Restart your server
  4. (Optional) Edit config.yml or messages/*.yml
  5. Done! The plugin works immediately

Upgrading from 2.0.x? Your ignore lists and nicknames from ignores.yml and names.yml are imported into the new SQLite database on the first start. The original files are kept as a backup. To keep using the YAML files instead, set storage.type: yaml. Your config.yml is rebuilt from the new template on the first start: comments and layout are updated, your values are kept, and the old file is saved as config.backup-v<n>.yml. Settings that no longer exist are removed.


❓ FAQ

  • How do I change the language? Use /sendmsg lang EN (English), /sendmsg lang UA (Ukrainian), or /sendmsg lang RU (Russian).

  • How do I disable sounds? Set sound-receive: false and sound-send: false in config.yml.

  • How do I remove the cooldown? Set cooldown-seconds: 0 in config.yml, or give players the sendmsg.bypass.cooldown permission.

  • How does /ignore work? /ignore <player> adds a player to your ignore list. Use the command again to remove them. A blocked sender is told that you ignore them (unless you turn notify-ignored-sender off).

  • Can ignores expire automatically? Yes. Ignores are removed after auto-expire-days.

  • Can I block all private messages? Yes. Use /msgtoggle. Nobody can message you until you turn it back on.

  • What is SocialSpy? Admins with sendmsg.spy can use /spy to see all private messages on the server.

  • Can players message someone who is offline? Only if you turn on offline-messages.enabled. The message is shown when the player joins.

  • Can I hide links and IP addresses in messages? Yes. Turn on filters.enabled. Choose mask to hide them, or block to refuse the whole message.

  • Where is data stored?

    • storage.type: sqlite: ignore lists, last known nicknames, and offline messages are in plugins/SendMSG/sendmsg.db.
    • storage.type: yaml: the same data is in ignores.yml, names.yml, and offline.yml.
    • All private messages are logged in plugins/SendMSG/logs/private.log.
    • Cooldowns, /msgtoggle, SocialSpy, and last contact are kept in memory only and reset on restart.
  • Does it work with EssentialsX? Yes. SendMSG handles private messages before EssentialsX, so you can use both.

  • Can the console send messages? Yes. The console can use /msg <player> <message>.

  • Does the plugin send data anywhere?

    • On startup, SendMSG makes one read-only request to the public Modrinth API to check for a newer version. Disable it with update-checker.enabled: false.
    • If you turn on Discord logging, every private message is sent to the Discord webhook you configure. Only turn it on if you want that.
    • Nothing else leaves your server.

Statistics

bStats

📞 Support

  • 🐛 Report a bug – Join our Discord
  • 💬 Suggest a feature – Same link
  • 💬 Get help – Same link

Галерея

Sent a messageSubtitleSendMSGReceived a message

Последние версии

Все версии →
release

SendMSG 2.1.0

2.1.0
16 окт. 2026 г.78Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3paper
Скачать
Что нового
# Changelog ## 2.1.0 Compared with 2.0.2. ### Upgrade notes (read first) - **Storage default changed to SQLite** (`storage.type: sqlite`, file `plugins/SendMSG/sendmsg.db`). On the first start, data from `ignores.yml`, `names.yml` and `offline.yml` is **imported automatically** into the database (only if the database is empty). The yaml files are kept as a backup and are not deleted. To keep using the yaml files instead, set `storage.type: yaml`. - **Colour codes** (`&a`, `&l`, `&#RRGGBB`...) in private messages now need the `sendmsg.color` permission (operators by default). Other players have the codes removed. - **Message length** is limited to 200 characters by default (`max-message-length`). Set `0` for no limit. - **Ignored senders** are told that their message was blocked (`ignore.notify-ignored-sender: true`). Set it to `false` to show a normal "sent" line instead. ### Added - Config check at startup and on `/sendmsg reload`. It warns about negative numbers, values that are not true/false, unknown feature names, and unknown sound names, instead of silently using defaults. - On update, `config.yml` is rebuilt from the new template, so it keeps the same comments and layout. Your existing values are kept, new settings get their default values, and the old file is saved as `config.backup-v<n>.yml`. Settings that no longer exist are removed (they stay in the backup) and listed in the log. - SQLite storage (`sendmsg.db`), with YAML files still available (`storage.type: yaml`). - Offline messages: a message to an offline player is kept and shown when they join. Off by default (`offline-messages.enabled`). - Link and IP filter for `/msg` and `/r`: hides `http(s)://` and `www.` links, bare domains, and IPv4 addresses, or blocks the message. Off by default (`filters.enabled`). Players with `sendmsg.filter.bypass` are not filtered. - LuckPerms prefix in front of the sender's name in the chat line. Off by default (`integrations.luckperms.enabled`). Requires LuckPerms. - PlaceholderAPI placeholders: `%sendmsg_unread%`, `%sendmsg_last_contact%`, `%sendmsg_ignored%`, `%sendmsg_msgtoggle%`, `%sendmsg_spy%`. Off by default (`integrations.placeholderapi.enabled`). Requires PlaceholderAPI. - Clickable reply hint: the "Reply with: /r" line becomes a button that fills `/r ` in the chat box. Off by default (`features.clickable-reply`). - Discord webhook: sends every private message to a Discord channel. Off by default (`discord-webhook.enabled`). Retries on rate limits (HTTP 429, using `retry_after`) and on server errors. Mentions are disabled, and player text is escaped for Discord markdown. - `/sendmsg spies` shows who currently has SocialSpy enabled. - `/ignore list` shows who you ignore and how long each ignore lasts. - `sendmsg.filter.bypass` permission. - `sendmsg.color` permission. - Config options: `storage.fallback-to-yaml`, `ignore.notify-ignored-sender`, `max-message-length`. ### Changed - Config file and code comments are in English. - If SQLite cannot open, the plugin stops with an error instead of silently switching to YAML. Set `storage.fallback-to-yaml: true` to allow the switch. - Private message log is written by one background thread, in order. - Cooldown can no longer be negative. - SocialSpy checks `sendmsg.spy` on every message, and turns off when the player leaves. - Feature switches missing from an old config file use the default for that feature. - Source code is split into packages: `commands`, `service`, `storage`, `listeners`, `integrations`. ### Fixed - After an upgrade, messages added in newer versions showed as `[missing: ...]` when the language file was from an older version. - Plugin crashed on an invalid `lang` value. It now falls back to English. - Cooldown reset when a player relogged. - Offline unignore. - Ukrainian messages were out of sync with the other languages. - A damaged YAML data file was overwritten, which lost its data. It is now kept as `*.broken-<time>`. - PlaceholderAPI expansion was registered twice after `/reload`. - A race between adding and purging offline messages could drop a message from memory. - Discord messages still in the queue were dropped silently on shutdown. Now they get 5 seconds to send, and the number of dropped messages is logged. - Player names and text in Discord embeds could format or link text. Now escaped. - The update checker sent a personal e-mail address in its User-Agent. Replaced with the project page URL.
release

SendMSG 2.0.2

2.0.2
24 июл. 2026 г.86Minecraft: 26.1, 26.1.1, 26.1.2, 26.2paper
Скачать
Что нового
## Added support for newer versions of Minecraft (21.1+)
release

SendMSG 2.0.1

2.0.1
23 июл. 2026 г.70Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper
Скачать
Что нового
## ✨ Added - **Update notifications in-game:** the plugin now checks Modrinth on startup for a newer version of SendMSG. If an update is available, server operators (`sendmsg.admin` or OP) get a chat notification when they join: `[SendMSG] A new version is available: 2.0.1 — modrinth.com/plugin/sendmsg/versions` This check is silent and never blocks server startup. Configurable in `config.yml`: ```yaml update-checker: enabled: true # turn the check on/off entirely notify-ops-on-join: true # notify ops when they join if an update exists ``` ## 🐛 Bug Fixes - **Fixed:** console log messages (plugin startup, unknown-sound warning, update checker) were always printed in Russian regardless of the `lang` setting in `config.yml`. They are now fully localized and follow the selected language (`en-EN`, `ru-RU`, `uk-UA`), just like in-game chat messages. ## 🧹 Improvements - Tidied up comments in `config.yml` around the `update-checker` section. - Replaced the placeholder contact address in the update checker's API request with a real one, per Modrinth's API guidelines (server-side only, not visible to players). - No changes to existing commands, permissions, or config keys otherwise — safe drop-in update. **Recommended action:** no config changes needed, just replace the jar and restart the server.
release

SendMSG 2.0

2.0
14 мая 2026 г.54Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper
Скачать
Что нового
## 📝 Changelog ### v2.0 **New Features:** - ✅ **/ignore** – Ignore/unignore players (toggle, saves to `ignores.yml`) - ✅ **/msgtoggle** – Disable all incoming private messages - ✅ **/spy** – SocialSpy mode (see all private messages, permission: `sendmsg.spy`) - ✅ **Auto-expire ignores** – Ignores automatically removed after N days (configurable) - ✅ **Message logging** – All PMs saved to `logs/private.log` with timestamps - ✅ **Auto-purge** – Expired ignores cleaned up every hour - ✅ **subtitle-reply** – Separate subtitle when someone replies to you **New Permissions:** - ✅ `sendmsg.ignore` – Allows using `/ignore` (default: `true`) - ✅ `sendmsg.msgtoggle` – Allows using `/msgtoggle` (default: `true`) - ✅ `sendmsg.spy` – Allows using `/spy` (default: `op`) **New Config Options:** - ✅ `features.msg-toggle` – Enable/disable `/msgtoggle` command - ✅ `features.social-spy` – Enable/disable `/spy` command - ✅ `features.log-to-file` – Enable/disable private message logging - ✅ `ignore.auto-expire-days` – Auto-remove ignore after N days (default: `7`) **Text Improvements:** - ✅ English: `whispers:` → `writes you:` - ✅ Ukrainian: `пише:` → `пише вам:` - ✅ Russian: `пишет:` → `пишет тебе:` - ✅ Added `subtitle-reply` for all languages **New Files:** - ✅ `ignores.yml` – Persistent ignore list storage - ✅ `logs/private.log` – Private message logs
beta

SendMSG 1.0

1.0
30 апр. 2026 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper
Скачать
Что нового
v1.0 - ✅ Full support for 3 languages (EN, UA, RU) - ✅ Sound notifications (separate for send/receive) - ✅ Subtitles when receiving private messages - ✅ /sendmsg lang command to change language in-game - ✅ /sendmsg reload command to reload configuration - ✅ sendmsg.bypass.cooldown permission to ignore delay - ✅ Console can now message players - ✅ Full Paper 1.21 compatibility