
CoreChatX
CoreChatX is a complete communication suite for Minecraft servers. It brings multiple chat-related features into one polished system.
CoreChatX 2026.1.5
release12 мая 2026 г.CoreChatX 2026.1.5
Fixed
- Discord -> Minecraft player mentions are now controlled by the target channel's
allow-mentions.from-discordsetting. - Discord custom pings such as
@staffnow require at least one matching Discord role ID configured inpings.yml. - Custom pings with missing or empty
discord-rolesnow stay as plain text when used from Discord and do not notify Minecraft players. - Minecraft custom pings still use
use-permission; existingreceive-permissionchecks still apply to Minecraft recipients. - Telegram inbound mentions are now controlled by
allow-mentions.from-telegram. - Network chat from other Minecraft servers remains treated as Minecraft-originated and uses
allow-mentions.from-minecraft.
Configuration
channels.yml now uses source-specific mention gates:
allow-mentions:
from-minecraft: true
from-discord: true
from-telegram: true
pings.yml custom pings now support Discord role allow-lists:
custom-pings:
staff:
trigger: "@staff"
use-permission: "corechatx.ping.use.staff"
receive-permission: "corechatx.staff"
discord-roles:
- "123456789012345678"
bypass-toggle: true
token-format: "<#ff8f8f>{trigger}</#ff8f8f>"
Empty discord-roles: [] means the ping cannot be activated from Discord.
Migration
- Existing scalar values like
allow-mentions: trueorallow-mentions: falseare replaced at startup with the new nested default section. - Existing nested source values are preserved, and missing nested keys are added automatically.
CoreChatX 2026.1.5
release12 мая 2026 г.CoreChatX 2026.1.5
Fixed
- Discord -> Minecraft player mentions are now controlled by the target channel's
allow-mentions.from-discordsetting. - Discord custom pings such as
@staffnow require at least one matching Discord role ID configured inpings.yml. - Custom pings with missing or empty
discord-rolesnow stay as plain text when used from Discord and do not notify Minecraft players. - Minecraft custom pings still use
use-permission; existingreceive-permissionchecks still apply to Minecraft recipients. - Telegram inbound mentions are now controlled by
allow-mentions.from-telegram. - Network chat from other Minecraft servers remains treated as Minecraft-originated and uses
allow-mentions.from-minecraft.
Configuration
channels.yml now uses source-specific mention gates:
allow-mentions:
from-minecraft: true
from-discord: true
from-telegram: true
pings.yml custom pings now support Discord role allow-lists:
custom-pings:
staff:
trigger: "@staff"
use-permission: "corechatx.ping.use.staff"
receive-permission: "corechatx.staff"
discord-roles:
- "123456789012345678"
bypass-toggle: true
token-format: "<#ff8f8f>{trigger}</#ff8f8f>"
Empty discord-roles: [] means the ping cannot be activated from Discord.
Migration
- Existing scalar values like
allow-mentions: trueorallow-mentions: falseare replaced at startup with the new nested default section. - Existing nested source values are preserved, and missing nested keys are added automatically.
CoreChatX 2026.1.4
release12 мая 2026 г.CoreChatX 2026.1.4
Fixed
- Discord -> Minecraft messages no longer force a hardcoded
[Discord]sender prefix. - Discord -> Minecraft messages can now be fully formatted from
discord.inbound.format. - Discord bridge formats can now be overridden per channel from
channels.yml. - Telegram bridge formats can now be overridden per channel from
channels.yml. - Discord -> Minecraft messages now expose
{rank_prefix}as the sender's highest Discord role name. - Added
{role_color}for Discord -> Minecraft messages. It resolves to the highest colored Discord role and can be used as a MiniMessage color tag. - Added
{channel_prefix}for Discord -> Minecraft messages so custom channel tags can be kept indiscord.inbound.format. - PlaceholderAPI placeholders are now processed in
discord.formatfor Minecraft -> Discord messages. - Minecraft -> Discord
discord.formatnow supports{rank_prefix}. - Minecraft formatting codes from LuckPerms or PlaceholderAPI prefixes are stripped before messages are sent to Discord or Telegram, while the actual message text is preserved.
- Telegram outbound formats also support
{rank_prefix}if the token is used. - Inbound bridge logging now handles unexpected/unknown source ids without throwing.
Configuration
Discord -> Minecraft messages are now controlled by one format key:
discord:
inbound:
format: "{channel_prefix}[Discord] {role_color}{rank_prefix}</role_color>{sender_name}: {plain_text}"
Per-channel bridge formats can be set in channels.yml:
channels:
mod:
discord:
outbound-format: "[MOD] {rank_prefix}{sender_name}: {plain_text}"
inbound-format: "{channel_prefix}[Discord] {role_color}{rank_prefix}</role_color>{sender_name}: {plain_text}"
telegram:
outbound-format: "[MOD] {rank_prefix}{sender_name}: {plain_text}"
inbound-format: "{channel_prefix}[Telegram] {sender_name}: {plain_text}"
If a per-channel format is blank, CoreChatX falls back to the matching global bridge format.
Available inbound tokens:
{source}: display source name, for exampleDiscordorTelegram{source_type}: raw source id, for examplediscord{channel_id}: CoreChatX channel id{channel_prefix}: prefix extracted from the channel format, or the configured channel prefix fallback{sender_name}: bridge sender display name{rank_prefix}: Discord sender's highest role name, blank for Telegram{role_color}: MiniMessage color tag from the highest colored Discord role, orwhite{plain_text}/{message}: sanitized message content
Example with role-colored prefix and message:
discord:
inbound:
format: "{channel_prefix}<dark_gray>[Discord]</dark_gray> {role_color}{rank_prefix}</role_color> <white>{sender_name}</white>: {role_color}{plain_text}</role_color>"
Minecraft -> Discord formats can now use PlaceholderAPI placeholders and {rank_prefix}:
discord:
format: "[{source_server}] [{channel_id}] {rank_prefix}{sender_name}: {plain_text}"
Safety
- Bridge formats are now validated on config load.
- Unknown placeholders and invalid inbound MiniMessage syntax produce warnings instead of failing startup.
- The outbound formatter strips formatting from templates and rank prefixes, but preserves literal ampersands in the real chat message.
CoreChatX 2026.1.4
release12 мая 2026 г.CoreChatX 2026.1.4
Fixed
- Discord -> Minecraft messages no longer force a hardcoded
[Discord]sender prefix. - Discord -> Minecraft messages can now be fully formatted from
discord.inbound.format. - Discord bridge formats can now be overridden per channel from
channels.yml. - Telegram bridge formats can now be overridden per channel from
channels.yml. - Discord -> Minecraft messages now expose
{rank_prefix}as the sender's highest Discord role name. - Added
{role_color}for Discord -> Minecraft messages. It resolves to the highest colored Discord role and can be used as a MiniMessage color tag. - Added
{channel_prefix}for Discord -> Minecraft messages so custom channel tags can be kept indiscord.inbound.format. - PlaceholderAPI placeholders are now processed in
discord.formatfor Minecraft -> Discord messages. - Minecraft -> Discord
discord.formatnow supports{rank_prefix}. - Minecraft formatting codes from LuckPerms or PlaceholderAPI prefixes are stripped before messages are sent to Discord or Telegram, while the actual message text is preserved.
- Telegram outbound formats also support
{rank_prefix}if the token is used. - Inbound bridge logging now handles unexpected/unknown source ids without throwing.
Configuration
Discord -> Minecraft messages are now controlled by one format key:
discord:
inbound:
format: "{channel_prefix}[Discord] {role_color}{rank_prefix}</role_color>{sender_name}: {plain_text}"
Per-channel bridge formats can be set in channels.yml:
channels:
mod:
discord:
outbound-format: "[MOD] {rank_prefix}{sender_name}: {plain_text}"
inbound-format: "{channel_prefix}[Discord] {role_color}{rank_prefix}</role_color>{sender_name}: {plain_text}"
telegram:
outbound-format: "[MOD] {rank_prefix}{sender_name}: {plain_text}"
inbound-format: "{channel_prefix}[Telegram] {sender_name}: {plain_text}"
If a per-channel format is blank, CoreChatX falls back to the matching global bridge format.
Available inbound tokens:
{source}: display source name, for exampleDiscordorTelegram{source_type}: raw source id, for examplediscord{channel_id}: CoreChatX channel id{channel_prefix}: prefix extracted from the channel format, or the configured channel prefix fallback{sender_name}: bridge sender display name{rank_prefix}: Discord sender's highest role name, blank for Telegram{role_color}: MiniMessage color tag from the highest colored Discord role, orwhite{plain_text}/{message}: sanitized message content
Example with role-colored prefix and message:
discord:
inbound:
format: "{channel_prefix}<dark_gray>[Discord]</dark_gray> {role_color}{rank_prefix}</role_color> <white>{sender_name}</white>: {role_color}{plain_text}</role_color>"
Minecraft -> Discord formats can now use PlaceholderAPI placeholders and {rank_prefix}:
discord:
format: "[{source_server}] [{channel_id}] {rank_prefix}{sender_name}: {plain_text}"
Safety
- Bridge formats are now validated on config load.
- Unknown placeholders and invalid inbound MiniMessage syntax produce warnings instead of failing startup.
- The outbound formatter strips formatting from templates and rank prefixes, but preserves literal ampersands in the real chat message.
CoreChatX 2026.1.3
beta12 мая 2026 г.CoreChatX Config Manager Changes
Added
- Added automatic default-key synchronization for Paper YAML configuration files.
- When a config file exists but is missing a key from the bundled default, CoreChatX now writes that missing key back into the real file.
- Existing configured values are preserved and are not overwritten by bundled defaults.
- Missing nested sections and empty map sections are restored, including values such as route maps and channel overrides.
- The default locale file
locales/en_us.ymlis also synchronized from bundled defaults. - Velocity
velocity-config.propertiesnow appends missing bundled default properties when the file exists but is incomplete.
Safety Rules
- Invalid or unparsable YAML files are not rewritten automatically.
- Runtime data files such as
playerdata.yml,state.yml,channeldata.yml,ignoredata.yml, andmutedata.ymlare not treated as normal admin config for default-key synchronization. - Velocity properties are appended instead of rewriting the whole file, so existing comments and values stay intact.
Technical
- Added
DefaultConfigSynchronizeras the Paper-side central YAML loader/synchronizer. - Updated Paper config loading paths to use the synchronizer through
ConfigurationService,ConfigRegistry, and the default locale loader. - Added regression coverage for restoring missing nested defaults without overwriting existing values.
- Added missing-property synchronization to the Velocity bootstrap config loader.
