MonitoringMinecraft MonitoringMinecraft

AdvancedChat-AC

Плагин BukkitPaperPurpur

AdvancedChatv2 gives every player control over what they see in chat. They can silence the entire public chat, block specific players, view who they have ignored, and the server automatically stops advertising messages before they reach anyone

12 скачиваний 0 подписчиков
Оцените первым

AdvancedChat-AC

Version: 1.0.0  |  Author: Spy  |  API: Spigot / Paper 1.13 – 1.21+

logo

AdvancedChat-AC gives every player control over what they see in chat. They can silence the entire public chat, block specific players, view who they have ignored, and the server automatically stops advertising messages before they reach anyone — all with no lag, no database, and no extra setup.


How It Works — Quick Overview

  • Chat Toggle — a player runs /chattoggle and from that point on, no public chat messages appear for them at all. They run it again and chat comes back. Their preference is saved and survives restarts.
  • Ignore — a player runs /ignore Steve and Steve's messages stop appearing for them personally. Steve sees nothing different — he can still chat normally; only the player who ignored him cannot see his messages. Running /ignore Steve again un-ignores him.
  • Ignore List/ignorelist prints every player name that person has ignored, sorted alphabetically.
  • Ad Filter — every message is checked against a word list and a domain extension list before it reaches anyone. If it matches, the sender gets a warning and the message is silently dropped. OPs can bypass this.

All of this happens on an async thread — the main server tick is never touched during a chat event.


Installation

  1. Place AdvancedChatv2.jar inside your server's plugins/ folder.
  2. Start or restart the server.
  3. Three files are generated automatically:
    • plugins/AdvancedChatv2/config.yml — all player-facing messages
    • plugins/AdvancedChatv2/block.yml — ad filter word list and domain extensions
    • plugins/AdvancedChatv2/playerdata.json — created on first save, stores toggle and ignore state

No database. No extra plugins. No configuration required to get started.


Commands

/chattoggle

Field Value
Aliases /ctoggle, /tc
Permission advancedchat.toggle
Who can use All players by default

What it does: Toggles whether the player sees public chat.

  • Chat is ON by default for every player. Running /chattoggle turns it OFF — they no longer receive any public chat messages from anyone.
  • Running /chattoggle again turns it back ON — they see chat normally again.
  • The player's own messages are not affected. They can still type and send; they just will not see incoming messages from others while toggled off.
  • This setting is saved to disk and persists across restarts, reconnects, and server crashes.
  • Toggle state is stored only for players who have turned it OFF — players with chat on use zero memory.

/ignore <player>

Field Value
Aliases /unignore
Permission advancedchat.ignore
Who can use All players by default
Tab-complete Yes — suggests all currently online players

What it does: Hides or un-hides a specific player's chat messages from you. This is a personal toggle — it only affects what you see. The ignored player is never notified.

  • Running /ignore Steve once hides all of Steve's future chat messages from you.
  • Running /ignore Steve again brings his messages back.
  • Works on offline players — you can ignore someone who is not currently online. The name is resolved through Bukkit's offline player cache. If the player has never joined the server, the command tells you they were not found.
  • You cannot ignore yourself.
  • Each player's ignore list is stored individually. Ignoring Steve does not affect anyone else's view of Steve's messages — only yours.
  • When you un-ignore your last player and your ignore list becomes empty, the memory used by your list is freed immediately.

/ignorelist

Field Value
Aliases /ilist, /ignoredlist
Permission advancedchat.ignore
Who can use All players by default

What it does: Displays a formatted list of every player you are currently ignoring. Names are resolved from UUID to username using Bukkit's offline player cache — no extra lookups or delays. The list is sorted alphabetically.

If you are not ignoring anyone, a message tells you so and hints how to use /ignore.


Permissions

Permission node What it grants Who has it by default
advancedchat.toggle Use /chattoggle All players
advancedchat.ignore Use /ignore and /ignorelist All players
advancedchat.bypass.filter Send any message without ad-filter checks OPs only

Ad Filter

Every message sent in public chat is scanned before it reaches any player. The scan is done in-memory and adds no measurable overhead. There are three layers of detection:

1. Blocked Words (block.ymlblocked-words)

A list of plain text phrases. If any phrase appears anywhere inside the message (case-insensitive, substring match), the message is blocked.

Examples of what gets blocked with the defaults:

  • "discord.gg/myserver" — contains discord.gg
  • "Get FREE RANKS at our server!" — contains free ranks
  • "BUY NOW at our website" — contains buy now

2. Blocked Domain Extensions (block.ymlblocked-extensions)

A list of domain endings. Any word in the message that ends with one of these is treated as a URL and the message is blocked.

Examples:

  • "play.ourserver.net" — ends with .net
  • "visit shop.store for items" — ends with .store
  • "join us at coolserver.gg" — ends with .gg

3. IP Address Detection (always on)

Any text matching the pattern of an IPv4 address (x.x.x.x) is automatically blocked regardless of the lists.

Examples:

  • "connect to 192.168.1.1"
  • "ip: 10.0.0.1:25565"

What happens when blocked

The message is cancelled — no other player ever sees it. The sender receives the filter-blocked message. No one else is notified. Players with advancedchat.bypass.filter skip all three layers.


Configuration Files

config.yml — Messages

Every message the plugin sends to players. Use & colour codes.

messages:
  chat-disabled:      "&aChat has been &cdisabled&a. Use &f/chattoggle &ato re-enable."
  chat-enabled:       "&aChat has been &aenabled&a. You can now see public chat again."
  now-ignoring:       "&aYou are now ignoring &f{player}&a. Their messages will be hidden from you."
  no-longer-ignoring: "&aYou are no longer ignoring &f{player}&a. You can see their messages again."
  player-not-found:   "&cPlayer &f{player} &cwas not found or has never joined."
  ignore-self:        "&cYou cannot ignore yourself."
  ignore-usage:       "&eUsage: &f/ignore <player>"
  ignorelist-empty:   "&eYou are not ignoring anyone. Use &f/ignore <player> &eto ignore someone."
  ignorelist-header:  "&8&m----&r &eIgnored Players &7({size}) &8&m----"
  ignorelist-entry:   "&7- &f{player}"
  ignorelist-footer:  "&8&m----&r &7Use &f/ignore <player> &7to unignore &8&m----"
  filter-blocked:     "&cYour message was blocked — no advertising allowed."
  players-only:       "&cOnly players can use this command."
  no-permission:      "&cYou do not have permission to use this command."

Placeholders:

Placeholder Works in
{player} now-ignoring, no-longer-ignoring, player-not-found, ignorelist-entry
{size} ignorelist-header

Colour codes:

Code Colour Code Colour
&0 Black &8 Dark Gray
&1 Dark Blue &9 Blue
&2 Dark Green &a Green
&3 Dark Aqua &b Aqua
&4 Dark Red &c Red
&5 Dark Purple &d Light Purple
&6 Gold &e Yellow
&7 Gray &f White
&l Bold &o Italic
&m Strikethrough &n Underline
&r Reset &k Obfuscated

block.yml — Ad Filter Words

blocked-words:
  - "discord.gg"
  - "buy now"
  - "free ranks"
  - "join my server"
  - "youtube.com"
  # add your own entries here

blocked-extensions:
  - ".com"
  - ".net"
  - ".org"
  - ".fun"
  - ".gg"
  - ".xyz"
  - ".io"
  - ".me"
  - ".store"
  - ".online"
  - ".site"
  - ".club"
  - ".tk"
  - ".ml"
  # add more endings here

Changes take effect after a server restart or plugin reload.


Data & Persistence

Player data is saved in plugins/AdvancedChatv2/playerdata.json:

{
  "chatDisabled": [
    "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
  ],
  "ignored": {
    "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb": [
      "cccccccc-cccc-cccc-cccc-cccccccccccc"
    ]
  }
}
  • chatDisabled — UUIDs of players who toggled chat off. Players with chat on are not listed at all.
  • ignored — map of observer UUID → array of ignored UUIDs. Players with empty ignore lists are not listed at all.

When saves happen:

  • Player disconnects → async save off the main thread
  • Command used (toggle / ignore) → async save so state persists even if server crashes before next disconnect
  • Server shuts down → final synchronous save, no data lost

A serial counter ensures if multiple async saves queue up at the same time, only the newest snapshot is written. Old in-flight writes are discarded automatically.


RAM & CPU Usage

This section gives exact numbers for every operation the plugin performs so you know precisely what load it adds to your server.


Memory per player

What is stored Bytes per entry Notes
One UUID in chatDisabled ~64 bytes Only stored if player toggled chat OFF
One entry in ignored map (outer) ~64 bytes Only created when player ignores someone
One UUID in an ignore list (inner) ~64 bytes One per ignored player
Player with no toggles or ignores 0 bytes Nothing is stored for inactive players

Real totals by server size:

Players online 10% have chat disabled 5% have ignore lists (avg 5 ignored each) Total plugin RAM
100 players 10 × 64 B = 0.6 KB 5 × 5 × 64 B = 1.6 KB ~2.2 KB
500 players 50 × 64 B = 3.1 KB 25 × 5 × 64 B = 8 KB ~11 KB
1,000 players 100 × 64 B = 6.4 KB 50 × 5 × 64 B = 16 KB ~22 KB
10,000 players 1,000 × 64 B = 64 KB 500 × 5 × 64 B = 160 KB ~224 KB

At any realistic player count the plugin uses well under 1 MB of RAM. The server itself, chunk data, entities, and other plugins will use gigabytes — this plugin is invisible by comparison.


CPU per chat message

Every chat message triggers two operations on the async thread (not the main tick):

Step 1 — Ad filter check

The message is checked against your blocked-words list and domain patterns.

Operation Time per call Notes
One String.contains() word check ~20–50 ns Scans the message for one phrase
One regex domain pattern check ~500–1,000 ns Matches one domain extension
IP address regex check ~500 ns Always runs once
50 words + 20 extensions (typical config) ~30–50 µs total Entire filter check for one message

Step 2 — Recipient filtering

For each player who would receive the message, the plugin does two ConcurrentHashMap.get() lookups — one to check if they have chat disabled, one to check if they are ignoring the sender. Both are O(1) and take ~50–100 ns each.

Recipients online Lookups Time
50 players 100 lookups ~5–10 µs
200 players 400 lookups ~20–40 µs
500 players 1,000 lookups ~50–100 µs
1,000 players 2,000 lookups ~100–200 µs

Total per message (filter + recipient loop):

Players online Time per message Messages per second (10 players chatting) CPU load
100 ~60 µs 10 msg/s = 0.6 ms/s < 0.1% of one core
500 ~150 µs 10 msg/s = 1.5 ms/s < 0.2% of one core
1,000 ~250 µs 10 msg/s = 2.5 ms/s < 0.3% of one core

This entire workload runs on an async thread, isolated from the main server tick. Even if the filter takes longer than expected, TPS is completely unaffected.


Save operations

Operation Thread Time Frequency
Snapshot copy (before async write) Main or quit thread ~5–50 µs Per player quit or command
JSON write to disk Async thread ~1–5 ms Per player quit or command
Shutdown save Main thread ~1–5 ms Once, on /stop

The JSON file is small — even with 10,000 players who all have ignore lists it is unlikely to exceed a few hundred KB. Write time remains under 5 ms. Because writes are async, the main thread is never blocked.


Memory & CPU summary

Metric Value
Plugin RAM at 500 players ~11 KB
Plugin RAM at 1,000 players ~22 KB
CPU per chat message (500 players) ~150 µs, on async thread
Main thread impact during chat Zero
Main thread impact during save Zero (async)
Disk I/O during gameplay Zero
Performance compared to vanilla chat Indistinguishable

Folder Layout

plugins/
└── AdvancedChatv2/
    ├── config.yml          ← all player-facing messages
    ├── block.yml           ← ad filter words and domain extensions
    └── playerdata.json     ← auto-generated, do not edit manually
Смотри также

Похожие подборки плагины — по версиям Майнкрафта, загрузчикам и жанрам.

Сервера Майнкрафт

Играть интереснее на сервере — выбирай в рейтинге серверов Майнкрафт и заходи прямо сейчас.

SkyBars
SkyBars Java + BE
225 онлайн
1.8 — 26.2 версия
🎮 ВЫЖИВАНИЕ ⚔️ АНАРХИЯ 🚗 ГТА РП 🎤 ГОЛОСОВОЙ ЧАТ 🎁 БЕСПЛАТНЫЙ ДОНАТ 🌟 СМП 💻 ПК+ТЕЛЕФОН
MineLandy
MineLandy Java + BE
22 онлайн
1.12.2 — 26.1.2 версия
Ванила и анархия без приватов — полная свобода действий и честное выживание
beesmp
beesmp Java
0 онлайн
26.2 — 1.21.11 версия
Bee smp-улей,где каждый оставляет свой след
WahaCraft
WahaCraft Лаунчер
1 онлайн
Кланы | Боссы | RPG | Уникальная карта | PVP | Захват территорий | ВАРХАММЕР
MineLauncher
Лаунчер Майнкрафт без лицензии — все версии
Бесплатный лаунчер для ПК и Андроид — все версии 26.2, 1.21.11, 26.1.2, 1.16.5. Fabric, NeoForge, Forge, шейдеры, моды и скины в один клик.
Без лицензии Fabric, NeoForge, Forge Моды, шейдеры, скины Все версии Майнкрафта ПК и Андроид Для слабых ПК Сервера в лаунчере
Скачать бесплатно
Windows и Андроид · Бесплатно · Без лицензии
Наш чат