CoreChatX
2026.3.3CoreChatX is a complete communication suite for Minecraft servers. It brings multiple chat-related features into one polished system.
2026.3.3latestCoreChatX 2026.3.34 days ago CoreChatX 2026.3.3
Added
- Added bStatsdiscord_integrationcharts on Paper and Velocity and atelegram_integrationchart on Paper to count configured integrations. The new chart values contain only status categories, without bot tokens, Discord/Telegram IDs, player identities, messages, or traffic volume. The existing global bStats opt-out is respected; Paper proxy backends report Discord asManaged by Velocity.Fixed
- Fixed Discord ChatItem images being generated for channels withexport-to-bridges: false. Standalone and proxy servers now stop these exports before image preparation or sending while preserving local ChatItems andallow-chatitems. - Fixed overhead chat bubbles exposing messages fromSTAFFchannels or channels with a non-emptypermission-receive, even when bubble allowlists enabled them. Public-channel bubble settings continue to work as configured. - Fixed player-head ChatItem snapshots potentially blocking the Paper main thread during profile completion. Missing skins now use an immediate fallback while bounded asynchronous lookup, timeout, cache, and shutdown handling prepare a texture for a later capture. - Fixed Discord death messages bypassing Paper cancellation,showDeathMessages, blank-message checks, or the main scoreboard's death-message visibility. Discord and network deaths now share the same public eligibility rules; advancement announcements are unchanged. - Fixed PremiumVanish exposure through CoreChatX-managed Velocity TAB entries, chat completions, and shared backend directories. TAB and completions now use per-viewer visibility, public directories omit vanished players, hide/show and permission changes reconcile state, and cleanup preserves entries owned by other plugins.Known issues
- Public-channel bubbles still cannot enforce per-viewer ignore or hidden-channel rules, or a chat radius smaller than the bubble view distance. Disable bubbles for channels that require those audience restrictions.2026.3.2CoreChatX 2026.3.22 weeks ago CoreChatX 2026.3.2
Changed
- ChatItem previews and remote PMs now limit overlapping requests, with customizable busy feedback inchatitems.ymlandmessages.yml. Older previews may expire early under heavy load. Forwarded PMs consume the configured cooldown even if later rejected or timed out. - Discord console logging now recovers from stalled requests, and ChatItem disk-cache limits remain enforced across reloads, with memory fallback on cache errors. Image transfers and Discord/Telegram exports also have workload limits and timeouts; overloaded exports may be dropped while Minecraft chat continues.Safety
- Strengthened Velocity backend/player validation, Discord account-link updates and chat-text handling. Added stricter checks for runtime libraries, downloaded assets and custom resource packs; invalid libraries block Velocity startup, failed asset updates keep the working cache, and oversized textures may need resizing.Migration
- Update Velocity and all participating Paper backends together. Stop Paper backends before Velocity, install matching2026.3.2JARs everywhere, then start Velocity first. Mixed2026.3.1/2026.3.2networks are incompatible. No database migration is required when upgrading from2026.3.1. - Ensure Paperdeployment.server-idmatches its registered Velocity backend name. For multiple groups, addbackend-groups.<server>=<network-channel>invelocity-config.propertiesfor every participating backend and match its Paperdeployment.network-channel; these mappings are optional with one group. - Telegram now accepts incoming messages only from explicitly mapped chats/topics intelegram.inbound.routes. Settelegram.inbound.allow-unmapped-chats: trueto restore the previousdefault-channelfallback. Custom pings from Telegram or other generic remote sources require an emptyuse-permission.2026.3.1CoreChatX 2026.3.13 weeks ago CoreChatX 2026.3.1
Added
- Added optional full advancement synchronization between Paper backends in the same Velocity group. The proxy stores criteria, partial progress and completion dates in YAML or MySQL, progressively merging each player's existing progress as they visit each backend. Explicit revocations stay revoked when older backend data is imported. - Historical advancement progress is restored without repeating chat announcements, toasts, XP, items or reward functions. New completions can announce live across participating backends; inventories, XP balances, statistics and recipe books are not synchronized. - Addeddeath-messages.network-enabledto relay public death messages within the same Velocity group. It respects the source world's death-message rule and excludes hidden, cancelled and team-restricted messages; local death messages remain unchanged. - Added optionalPremiumVanishhooks on Paper standalone and Velocity. Hidden players' join, first-join and quit announcements are suppressed, including their corresponding bridge messages; accepted first joins and counters are still recorded.Configuration
- Advancement synchronization and network death messages are disabled by default. Advancement sync requiresadvancement-sync.enabledon Paper andvelocity-advancements.propertieson Velocity, explicit backend-to-group pins and a unique secret per backend. Its authenticated endpoint saves independently of online plugin-message carriers. Use HTTPS or an encrypted tunnel between separate machines; endpoint settings require a restart. Disable other plugins' advancement synchronization first. See the [setup guide](https://wiki-corechatx.icewolf23x.dev/advancement-sync.ht… -hooks.premiumvanishis enabled by default in Paperconfig.ymland Velocityvelocity-config.properties. InstallPremiumVanishon the proxy for Velocity-owned network announcements. Paper hook changes apply through/corechatx reload; Velocity changes require a restart.Migration
- Before updating, stop the affected servers and back up every file and subfolder in their plugin folders, the complete Minecraft worlds and the CoreChatX database when MySQL is used. Stop Paper backends before Velocity so final saves can finish. Install matching2026.3.1JARs on the proxy and all participating backends, then start Velocity first. - MySQL adds schema migrationV004andccx_player_advancements, including installations that leave advancement sync disabled. The normal schema auto-migration applies it at startup; ifschema-auto-migrate=false, arrange the schema upgrade before boot. Older builds reject schema version 4: reverting only the JAR is not a database downgrade. - Canonical backups containing advancement records use format3and retain that progress through Velocity YAML-to-MySQL migration and rollback. Backups without advancement records keep format1or2, and both remain readable. Keep pre-update backups for downgrades, and retain each backend's existing world files until the required player visits have imported their progress.2026.3.0.1-hotfixCoreChatX 2026.3.0.1-hotfixSep 13, 2026 CoreChatX 2026.3.0.1-hotfix
Changed
- Paper and Velocity now display prominent, colored console banners for Modrinth updates: green for recommended stable releases and yellow for experimental alpha/beta builds, with installed/available versions and the download link. - Added the [CoreChatX wiki](https://wiki-corechatx.icewolf23x.dev/) link to the Paper and Velocity startup banners.Fixed (hotfix-related)
- Fixed the first public chat message after joining or switching a Velocity backend being rejected because moderation data was only requested when the player tried to chat. Paper now loads player settings, privacy, channel, mute and global state proactively on join, with bounded read retries. Chat remains protected while authoritative moderation data is unavailable. - Fixed delayed proxy join callbacks applying display changes or first-join announcements to a disconnected or replaced player session. Accepted-join effects now wait for confirmed player and moderation data. - Fixed proxy request timeouts and first-join warnings reporting onlynull. Diagnostics now identify the operation, request, backend and player; timed-out writes are not automatically retried because they may already have committed. - Fixed the Modrinth update checker rejecting four-part hotfix versions such as2026.3.0.1-hotfix. This build orders hotfix revisions numerically and continues to detect later stable, beta and alpha versions.Compatibility
- Updating from2026.3.0requires no configuration conversion or MySQL schema migration. Existing YAML/MySQL data and protocol29are unchanged.Migration
- Stop the affected servers and back up every file and subfolder in the CoreChatX plugin folders before replacing the JARs; also back up MySQL when used. Install the matching hotfix JAR on Velocity and each participating Paper backend, then restart. Download this hotfix manually: the update checker in the older2026.3.0build does not recognize this version format. For upgrades from2026.2.6that also move YAML data to MySQL, follow the [step-by-step migration guide](https://wiki-corechatx.icewolf23x.dev/migration.html).2026.3.0CoreChatX 2026.3.0Sep 9, 2026 CoreChatX 2026.3.0
Added
- Added asynchronous Modrinth update checks after startup and every 24 hours by default. Console and OP players receive stable-update recommendations and separate experimental alpha/beta announcements; no automatic installation occurs. - OptionalMYSQLruntime storage for standalone Paper and Velocity: preferences, nicknames, statistics, active/hidden channels, ignores, mutes, global state, Discord links, unlink records and pending codes.YAMLremains the default; Velocity keeps each network group separate. - Added/ccxstorageon Paper and Velocity for health checks, file/database validation, checksummed backups, migration plans, parity checks, history, resume and abort. Confirmations and durable journals protect migration/rollback; unfinished transitions keep affected gameplay storage unavailable. - Added the Channel compass in/ccxsettingsand/chatsettings:Persistentkeeps the last channel;Non persistentrestores the configured default on reconnect, including after restarts. Changing the preference leaves the current channel unchanged, as do proxy backend transfers within the same connection.Changed
- Settings, nickname, channel, ignore and moderation changes now report success after authority confirmation. Single-setting updates preserve other preferences;/ignoreand/unignoreapply the requested final state and enforce saved-list limits. A response timeout does not cancel an accepted database write. - WithMYSQL, Paper loads complete player state before admission. Gameplay storage waits for database readiness and ownership checks; failures never silently select YAML. A database lease prevents two live processes from writing the same scope.Fixed
Storage and recovery
- Fixed/ccxstorage migrate files-to-mysql abortdeleting rows that a planned/failed run never imported. Abort now preserves later imports and refuses deletion when imported contents have changed. - Fixed recovery accepting run IDs from another namespace or scope. Migration operations now enforce the configured owner, preventing cross-group changes. - Fixed Paper treating malformed persistent YAML as empty data and overwriting it. Startup reports the error; failed player/global reloads block writes and shutdown flushes until the file is repaired and successfully reloaded. - Fixed older concurrent YAML snapshots replacing newer data. Write failures now reach callers, and maintenance drains accepted writes—including timed-out requests—before migration or rollback. - Fixed writes retaining authority after waiting on locks past lease expiry. Shutdown also resolves queued operations and late completions, preventing expired owners from writing and callers from waiting indefinitely. - Fixed migration/rollback retries after a successful abort being mistaken for completed cutovers. Verified aborts can be retried without deleting journals; Velocity also supports cancelling unexecuted plans and safely repeating interrupted aborts. - Fixed MySQL startup deadlocks when network groups initialize separate scopes concurrently. Duplicate owners of the same scope remain rejected. - Fixed YAML saves after MySQL-to-YAML rollback droppingruntime-updated-at, regressing player aggregate versions and breaking canonical backup parity. - Fixed MySQL startup checksum mismatches from packaged migration line endings. JARs preserve the original migration bytes; never edit database checksums to bypass validation.Player state and moderation
- Fixed delayed proxy mute lookups clearing newer mutes or leaving backend caches incorrectly cleared. - Fixed proxy public chat and PMs bypassing mutes before the player state loaded. With mute enforcement enabled, messages receive temporary-unavailability feedback until the authoritative mute lookup completes. - Fixed simultaneous Velocity YAML nickname changes assigning the same visible name to different players. Full player updates and/nickenforce normalized nickname ownership atomically. - Fixed late completions overwriting newer settings, channels, statistics, mutes, global state or Discord links/unlinks. Old quit cleanup no longer evicts newer login state; delayed code reads cannot restore invalidated Discord codes. - Fixed/chatmuteoverwriting the first-join counter and concurrent settings/ignore changes replacing unrelated values. - Fixed/corechatx reloadtemporarily resetting proxy preferences or statistics. Hydrated mirrors and pending requests survive reload, then refresh after transport registration. Deployment and storage identity changes still require restart.Discord and integrations
- Fixed link instructions showing/linkwith custom Discord command names. Minecraft code help, required-link admission and Discord DMs now use the configured standalone/proxy command. - Fixed the first inbound Discord message showing an unresolved linked-player nickname before proxy player state loaded. - Fixed mandatory Discord linking admitting unlinked players when commands were unavailable or code creation failed.account-linking.require-linked-to-playnow denies entry; Velocity checks before backend entry.deny-if-unverifiableonly controls role checks for already linked players. - Fixed Velocity Discord console feedback missing messages sent through current or typed Adventure calls. - Reduced resource-pack fingerprint string copying during Discord ChatItem image initialization, cutting avoidable Paper startup/reload work while preserving the cache fingerprint format. - Fixed Discord token verification and gateway shutdown blocking Paper startup or/corechatx reload. Reconnection is asynchronous; retired connections and queued role callbacks cannot revive the old bridge. - Fixed linked Discord messages being dropped on standalone MySQL after the Minecraft player quit or the server restarted. Offline nickname/staff checks load saved settings asynchronously, honorallow-offline-linked-playersand deny delivery when settings are unavailable.Chat and menus
- Fixed dragging items into the temporary/ccxsettingsinventory and losing them when the menu closed. - Fixed cross-server PM timeouts silently discarding pending deliveries. Each affected sender is now notified once. - Fixed inbound bridge and outbound Telegram length limits splitting emoji UTF-16 pairs.Configuration
- Addedupdate-check.enabledandupdate-check.interval-hoursto Paperconfig.ymland Velocityvelocity-config.properties. Customize OP notices throughmessages.ymlkeysupdates.stableandupdates.preview; Velocity notifications are console-only. - Added{link_command}, the configured Discord command name without/, to linking messages. Use/{link_command} code:{code}; standalone Paper or Velocity suppliesaccount-linking.link-command-name. Exact older stock messages adapt automatically; customized messages need the placeholder added manually. - Paperstorage.ymland Velocityvelocity-storage.ymlnow configurestorage.backend, stable namespace/scope, MySQL connections/TLS, bounded pools/executors, timeouts, leases andschema-auto-migrate. Supply credentials throughstorage.mysql.password-env; TLS defaults toVERIFY_IDENTITY. - Added savedpersistent-channel-enabled, defaulting totruefor existing players, andlink-check-unavailable-kickin Paper Discord messages and Velocity account-linking messages.Permissions
- Addedcorechatx.command.storagefor inspection and backups: defaultopon Paper; grant it through the permission provider on Velocity. Migration/rollback changes remain console-only, including for operators. Velocity transitions require--all-scopes.Compatibility
- Paper and Velocity JARs include the MySQL runtime and JDBC driver. Install only the matching platform JAR; separate storage-module, HikariCP or Connector/J installs are unnecessary. YAML-only setups need no database.Migration
- **Before updating, stop the2026.2.6CoreChatX 2026.2.6Jul 26, 2026 CoreChatX 2026.2.6
Added
- Added/hidechannel <channel> [minutes]and/unhidechannel <channel>so players can hide an accessible channel permanently or for a positive number of minutes without receiving or accidentally sending messages there.Fixed
- Fixed Discord role-whitelist revocation: removing a linked member's final allowed role, or removing the member from the configured guild, now disconnects the online player on standalone Paper and Velocity and blocks reconnection until access is restored. Enable Discord's privileged Server Members Intent wheneveraccount-linking.required-play-rolesis active. - Fixed/chatsettingsusing repositories and menu services created before/corechatx reload, which could write preferences to obsolete runtime state. - Fixed/replyretaining direct and inverse conversation targets after a player leaves, preventing stale targets from carrying into a later session. - Fixed Velocity replay leaving an offline backend with an obsolete Discord link after an unlink aged out of the seven-day runtime cache or the proxy restarted; unlink tombstones are now durable and timestamp-ordered so newer relinks still win. - Fixed Discord player-list commands accessing Bukkit player and nickname state from JDA threads; Paper now captures an immutable player snapshot on the main thread before building the Discord response. - Fixed concurrent Discord link, unlink, pruning, and replay updates on Velocity so direct and inverse routing state remain consistent under simultaneous events.Permissions
- Addedcorechatx.command.hidechannelandcorechatx.command.unhidechannel, both enabled for players by default.2026.2.5CoreChatX 2026.2.5Jun 26, 2026 CoreChatX 2026.2.5
Added
- Added bStats metrics for Paper and Velocity. - Added configurable public-chat/ignorebehavior throughignore.public-chat-modeand per-channelchannels.<id>.ignore.public-chat-mode.Fixed
- Fixed public mention and custom-ping ignore handling sonotifications-onlyblocks notifications from ignored players while keeping their public chat messages visible. - Fixedhide-messagepublic-chat ignore mode so ignored players' public channel messages are not delivered to the viewer, including network and Discord bridge deliveries. - Fixed legacy formatting permission checks so denied nodes such ascorechatx.format.color.aquacan reliably block matching&color codes. - Fixed denied legacy formatting codes being converted anyway after a second formatting pass.Configuration
privacy.ymlnow supports:ignore: public-chat-mode: "notifications-only"channels.ymlnow supports per-channel overrides:
Valid public-chat ignore modes arechannels: global: ignore: public-chat-mode: "inherit"off,notifications-onlyandhide-message. Per-channel overrides also supportinherit.Permissions
- Addedcorechatx.format.color,corechatx.format.color.*,corechatx.format.styleandcorechatx.format.style.*as group permission nodes for player-authored legacy formatting.Technical
- Paper and Velocity jars now include bStats' MIT-licensed single-file implementation and license notices without adding shaded external library jars.2026.2.4CoreChatX 2026.2.4Jun 16, 2026 CoreChatX 2026.2.4
Added
- Added batched Discord console live logs for Paper and Velocity. CoreChatX now edits the latest bot log message until the configured size limit is reached, then sends a new silent message. - Added real Velocity proxy console live-log support throughdiscord.console.live-log. - Addednicknames.allow-special-characters, defaultfalse, to keep/nickvisible text limited toA-Z,a-z,0-9and_unless explicitly enabled. - Added per-event Discord mirror overrides underdiscord.event-messages.events.deathanddiscord.event-messages.events.advancement. - Added ChatItem snapshot references to cross-server private messages so/msgand/replycan carry inspectable ChatItem previews through Velocity.Changed
- Discord console live logs now usediscord.console.live-log-format.*formax-message-chars,monospace,line-prefix,date-formatandhour-format. -/msgand/replynow render configured ChatItem tokens such as[i],[item],[inv]and related aliases instead of sending them as plain text. - Discord item detail tooltips now resolve MiniMessage tags, including formatting and gradients, before the image renderer draws the tooltip text. -/msgtab completion now includes matching custom nicknames and avoids suggesting the sender's own real name or nickname. - Network chat completion entries now include plain custom nicknames, with support for@nicknamecompletions. - Velocity Discord nickname sync now includes the configured Minecraft nickname prefix when the player has a custom nickname, while keeping the real-name fallback unprefixed. - Velocity third-party library logs now use the CoreChatX startup banner style and summarize present, missing and downloaded libraries without duplicate status lines.Fixed
- Fixed Discord inbound messages after a restart sometimes reaching Minecraft without the linked player's LuckPerms prefix. CoreChatX now waits for async LuckPerms user data before final delivery. - Fixed linked Discord inbound permission checks for offline linked players by resolving channel send permission and mute-chat bypass through async LuckPerms checks. - Fixed private-message target lookup so custom nicknames can resolve to the real Minecraft username before local or cross-server delivery. - Fixed Velocity private-message ChatItem routing so remote preview requests can be forwarded back to the backend that owns the original snapshot. - Fixed Discord ChatItem selected-item actions so expired or unavailable previews return a Discord message instead of leaving the interaction pending. - Fixed Velocity Discord inbound fanout so a message that cannot be delivered to any backend in the CoreChatX group returns a clear failure instead of failing silently. - Fixed Velocity Discord console command replies so commands with no output no longer send the debug-styleCommand executed. No command output was captured.message, and translatable Velocity command output such as!glist allis rendered as readable text instead of raw translation keys. - Fixeddiscord.connection-messages.channelsfallback semantics so empty lists fall back todiscord.default-channel-id, and the configured values are treated as Discord channel IDs. - Fixed Velocity Discord inbound handling so route dispatch runs through the Velocity scheduler when the proxy runtime is available.Configuration
New or changed default keys: -config.yml -> nicknames.allow-special-characters-discord.yml -> discord.console.live-log-format.max-message-chars-discord.yml -> discord.console.live-log-format.monospace-discord.yml -> discord.console.live-log-format.line-prefix-discord.yml -> discord.console.live-log-format.date-format-discord.yml -> discord.console.live-log-format.hour-format-discord.yml -> discord.event-messages.events.death-discord.yml -> discord.event-messages.events.advancement-velocity-discord.yml -> discord.console.live-log-format.max-message-chars-velocity-discord.yml -> discord.console.live-log-format.monospace-velocity-discord.yml -> discord.console.live-log-format.line-prefix-velocity-discord.yml -> discord.console.live-log-format.date-format-velocity-discord.yml -> discord.console.live-log-format.hour-format-velocity-discord.yml -> discord.event-messages.events.death-velocity-discord.yml -> discord.event-messages.events.advancementCompatibility
- CoreChatX proxy protocol is now version27; update Paper and Velocity jars together. - Velocity third-party libraries are expected under the lowercase plugin data folder pathplugins/corechatx/libs.Migration
- Ifdiscord.connection-messages.channelsis configured, keep Discord channel IDs in that list. - If you customizeddeath-format,advancement-format,death-color,advancement-color,death-descriptionoradvancement-description, move those values into the matchingdiscord.event-messages.events.<event>section. - Reviewdiscord.console.live-log-format.*if Discord console logging is enabled, especially if you do not want monospace code blocks or timestamp prefixes.2026.2.3CoreChatX 2026.2.3Jun 4, 2026 CoreChatX 2026.2.3
Added
- Added channel command shortcuts throughchannels.<id>.shortcut. - Running/shortcutswitches the player to that CoreChatX channel. - Running/shortcut <message>sends one message to that channel without changing the player's active channel. - Added Discord nickname sync withaccount-linking.sync-mc-namefor both PaperSTANDALONEand VelocityPROXY. Linked Discord members can have their Discord nickname updated to the Minecraft nickname, falling back to the real player name when no custom nickname is set. - Added Discord event mirrors throughdiscord.event-messagesfor death and advancement messages. - PaperSTANDALONEcan send the event embeds directly. - VelocityPROXYcan send the accepted backend events once per CoreChatX group. - Added Discord server status embeds throughdiscord.server-status. - PaperSTANDALONEcan announce clean server startup/shutdown. - VelocityPROXYcan announce proxy startup/shutdown and backend online/offline state changes frombackend-groups.*. -proxy,default, andservers.<id>entries can override channels, titles, descriptions, colors, and enabled flags. - Added/corechatx itemcache <warmup|status|cancel>withcorechatx.command.itemcacheto pre-render Discord ChatItem item icons into cache. - Added ChatItem token placeholders for in-game token formats:{token},{name},{material}, and{amount}.{name}usescustom_name, thenitem_name, then the material fallback. - AddedLICENSEandTHIRD-PARTY-NOTICES.mdto document CoreChatX proprietary code and the third-party dependency notice summary.Changed
- Removed shaded jar packaging. Paper now declares external runtime libraries throughplugin.ymllibraries, while Velocity downloads its external third-party jars intoplugins/CoreChatX/libsand logs whether libraries were downloaded or already present. - Discord ChatItem renders now default todiscord-images.render.scale: 8,single-item-details-scale: 8, andsingle-item-details-icon-multiplier: 4. - Velocity PlaceholderAPI resolution throughPAPIProxyBridgenow times out after 3 seconds and falls back to the original text instead of waiting indefinitely.Fixed
- Fixed mentions and ping notifications for channels the target player cannot read. If the mentioned player cannot receive the channel, CoreChatX no longer pings them and no longer renders the name as an@mention. - Fixed Discord selected-item inspection hanging forever when the selected snapshot expired or the selected item could not be rendered. Discord now receives the configuredexpired-messageorunavailable-message. - Fixed intermittent missing Discord ChatItem previews inPROXYmode by sending preview packets on the server thread, allowing empty failure packets, retrying failed Discord image sends, and completing chunk transfers only once all chunks are available. - Fixed enchanted books in Discord item rendering by including stored enchantments fromEnchantmentStorageMeta, so stored enchants can appear in tooltip data and trigger enchanted rendering. - Fixed Velocity Discord inbound delivery so backend plugin-message send failures are caught and logged per backend instead of silently breaking delivery. - Fixed Velocity connection-message routing so proxy join/quit fanout handles backend send failures and keeps group join tracking consistent. - Fixed Velocity YAML default synchronization for keys that existed with anullvalue, so missing defaults can be restored more consistently.Configuration
New or changed default keys: -channels.<id>.shortcut-chatitems.yml -> tokens.item.token-formatplaceholders:{token},{name},{material},{amount}-chatitems.yml -> discord-images.render.scale: 8-chatitems.yml -> discord-images.render.single-item-details-scale: 8-chatitems.yml -> discord-images.render.single-item-details-icon-multiplier: 4-account-linking.sync-mc-name-discord.event-messages-discord.server-statusplugin.ymlnow includes: - Paper runtimelibraries-corechatx.command.itemcacheMigration
- Reviewdiscord.connection-messages.channelsif you enabled Discord join/quit mirrors. Values must now be Discord channel IDs, not CoreChatX channel IDs. - Reviewdiscord.server-status,discord.event-messages, andaccount-linking.sync-mc-namebefore enabling them, especially on Velocity networks. - Existing configs should receive missing default keys automatically, but server owners should still comparechannels.yml,chatitems.yml,discord.yml, andvelocity-discord.ymlwith the new defaults.2026.2.2CoreChatX 2026.2.2Jun 2, 2026 CoreChatX 2026.2.2
Added
- Added Discord image rendering for ChatItem tokens sent from Minecraft:[item],[i],[armor],[hotbar],[inventory],[inv],[enderchest],[ender],[ec], and shulker previews from[item]. - InSTANDALONE, Paper renders and sends the Discord attachment directly. - InPROXY, Paper renders the snapshot and Velocity sends the final Discord embed/attachment for the correct proxy group. - Added interactive Discord item inspection for non-[item]snapshots. Inventory-like renders can show dropdown menus; selecting an entry sends an ephemeral single-item preview to that Discord user. The menu expires with the same lifetime as the in-game ChatItem preview token. - Added Minecraft-style single item renders for Discord[item]previews. The generated image uses the Minecraft bitmap font, tooltip background, custom names, lore, enchantments, potion effects, attributes, armor trims, durability, and item icon rendering instead of plain Discord embed text. - Added Discord handling for inbound attachments. Discord images/files now appear in Minecraft as clickable[filename]components with hover text and an open-url click action; messages with only attachments are forwarded too. - Added Discord console support: -discord.consolein Paperdiscord.ymlcan run a standalone or per-backend console bot. -discord.consolein Velocityvelocity-discord.ymlcan run proxy console commands from Discord. -command-prefix: ""is allowed and makes every message in the console channel execute as a command. - Added Discordplayer-listcommand support for both PaperSTANDALONEand VelocityPROXY. - Text command default:!playerlist. - Slash command default:/playerlist. - Velocity resolves the target proxy group fromdiscord.inbound.channel-routes. - Added Discord text channel description updates throughdiscord.channel-description. - PaperSTANDALONE: updates standalone channel topics. - VelocityPROXY: updates text channel topics per configurednetwork-channel. - Internal placeholders:{online}and{online_in_group}. - PlaceholderAPI placeholders are supported on Paper; Velocity can resolve them throughPAPIProxyBridgewhen installed. - Added Velocity-owned join/quit/first-join announcements fordeployment.mode: PROXY. - Velocity now decides join/quit based on proxy group entry, group switch, and proxy disconnect. - Switching backend inside the same CoreChatX group does not announce join/quit. - Switching between groups sends quit to the old group and join to the new group. - Added group-wide broadcast routing inPROXYmode. Paper/broadcast <message>now fans out to the current Velocity group instead of only the local backend, and Velocity also provides/broadcast. - Added player head rendering support for name-only profile components such asminecraft:player_head[minecraft:profile="IceWolf23X"], in addition to heads that already contain texture properties.Changed
- ChatItem in-game previews now use more compact layouts for single/small snapshots: -[item]opens a 5-slot hopper preview with the item centered. -[armor]opens a 5-slot hopper preview with helmet, chestplate, leggings, boots, and offhand. -[inventory],[hotbar],[enderchest], and shulker previews keep their existing snapshot sizes. - Velocity Discord bridge output can resolve PlaceholderAPI placeholders through optionalPAPIProxyBridgefor Velocity-side formats such as player list rows, channel descriptions, join/quit messages, and fallback Discord formats. - Paperdiscord.ymlis now clearly split by runtime responsibility: -STANDALONEowns Discord bridge, account linking, login gates, player list, channel descriptions, and console. -PROXYkeeps bridge/account-linking/login gates on Velocity, while Paper can still run a console-only backend bot if configured.Fixed
- Fixed PlaceholderAPI placeholders staying unresolved in cross-server messages when the message had to be routed through Velocity. - Fixed proxy join/quit symptoms where quit messages could be missing, duplicated, or formatted differently depending on which backend still had players online. - Fixed Minecraft-to-Discord raw mention abuse. Players typing raw Discord mention syntax like<@...>, role mentions,@everyone, or@herecan now be blocked from pinging Discord users/roles. - Fixed Discord inbound attachment forwarding so attachment-only Discord messages are no longer dropped before reaching Minecraft. - Fixed config synchronization behavior so missing default keys are added back to Paper YAML configs and Velocity YAML/properties configs instead of requiring a clean file for every new option.Configuration
chatitems.ymlnow supports Discord image rendering and item menu configuration:
-discord-images: enabled: true max-images-per-message: 3 embed: title: item: "{item_name}" armor: "{player_nickname}'s armor" hotbar: "{player_nickname}'s hotbar" inventory: "{player_nickname}'s inventory" enderchest: "{player_nickname}'s ender chest" shulker: "{player_nickname}'s shulker" description: item: - "{enchantments}" - "{attributes}" - "{potion_effects}" - "{lore}" - "{armor_trim}" - "{banner_patterns}" - "{unbreakable}" - "{can_place_on}" - "{can_break}" - "{book_metadata}" - "{firework_data}" - "{durability_line}" armor: [] hotbar: [] inventory: [] enderchest: [] shulker: [] item-menu: enabled: true placeholder: "Inspect an item" label-format: "Slot {slot}: {item_display_name}" description-format: "x{amount} - {material}" expired-message: "This ChatItem preview has expired." unavailable-message: "That item preview is unavailable." render: scale: 5 single-item-details-scale: 5 single-item-details-icon-multiplier: 3 assets: minecraft-version: "auto" download-vanilla-assets: true resource-packs: []discord-images.embed.title.*: controls Discord embed titles; for[item], the title is rendered into the PNG tooltip panel. -discord-images.embed.description.item: controls single-item tooltip details. Empty metadata placeholders are skipped, so missing lore/enchantments/durability do not leave unwanted blank detail sections. -discord-images.item-menu.*: controls the Discord dropdown menu shown under multi-item snapshots. -discord-images.render.scale: pixel scale for inventory-like renders. -discord-images.render.single-item-details-scale: pixel scale for the single-item tooltip text/background. -discord-images.render.single-item-details-icon-multiplier: multiplier applied only to the item icon in the single-item details panel. -discord-images.assets.resource-packs: optional resource pack zip/folder paths used before vanilla fallback assets.discord.ymlandvelocity-discord.ymlnow include:
Velocitydiscord: prevent-mentions-from-minecraft: true connection-messages: enabled: false join-format: "" first-join-format: "" quit-format: "" embed: enabled: false join-color: "#57F287" first-join-color: "#57F287" quit-color: "#ED4245" join-description: "" first-join-description: "" quit-description: "" console: enabled: false channel-id: "" command-prefix: "!" player-list: enabled: false command: "!playerlist" register-slash-command: true slash-command-name: "playerlist" channel-description: enabled: false interval-seconds: 300 triggers: on-connection: true on-disconnection: true event-debounce-seconds: 5 entries: []velocity-discord.ymlalso supports group-aware options: ```yaml account-linking: required-play-roles: groups: # corechatx:survival: # e2026.2.1CoreChatX 2026.2.1May 26, 2026 CoreChatX 2026.2.1
Added
- Added Velocity-owned runtime data authority forPROXYdeployments. Player settings, nicknames, ignore lists, active channels, mutes, global state, first-join count, Discord links and pending link codes are stored per Velocitynetwork-channelgroup. - Added Velocity-side Discord bot ownership throughplugins/corechatx/velocity-discord.ymlfor proxy networks. InPROXY, Discord bridge I/O, Discord account linking, required-link-to-play and required-role-to-play are handled by Velocity. - Added group-specific Discord required role gates throughaccount-linking.required-play-roles.groups.<network-channel>, so separate CoreChatX proxy groups can require different Discord roles. - Added optional Paper backend Discord console-only bots inPROXYmode throughdiscord.yml -> discord.console.*, intended for per-backend console access with separate bot tokens. - Added configurable Discord join/quit/first-join mirrors with plain text or embed output, including separate join, first-join and quit descriptions and colors. - Added CoreChatX PlaceholderAPI values: -%corechatx_player_nickname%returns the same visual value as CoreChatX{player_nickname}. -%corechatx_first_join_date%returns the player's recorded first join date. -%corechatx_messages_count%returns the player's persisted public message count.Changed
- InPROXY, Paper backends act as runtime/cache clients for cross-server data and send writes to Velocity instead of persisting network runtime state locally. - Join, quit and first-join network announcements are coordinated through Velocity inPROXYmode, so backend switches inside the same CoreChatX group do not create extra connection messages. - Required Discord link/role checks can be decided before the player fully enters a backend when Velocity can resolve the target backend group throughbackend-groups.<velocity-server-name>. - Minecraft -> Discord messages in proxy mode are rendered by Paper, then delivered by the Velocity Discord bot. Discord -> Minecraft messages are read by Velocity and routed to the configured CoreChatX group/channel. - Minecraft-to-Discord bridge output can prevent raw Discord mention syntax from pinging users, roles,@everyoneor@here.Fixed
- Fixed the previous proxy limitation where a backend without online players could miss Discord link state and incorrectly kick a linked player after a server switch. - Fixed Velocity Discord link-state replay on backend switch so previously empty backends get delayed retry replays instead of an immediate failed replay warning while plugin messaging is not ready yet. - Fixed the previous Discord role-check limitation that required a backend authority server with an online player carrier. Velocity now checks Discord roles directly. - Fixed the first join after a proxy/backend restart sometimes using the real player name instead of the saved CoreChatX nickname in proxy-level connection messages. - Fixed duplicate Discord join/quit mirrors when multiple exported CoreChatX channels mapped to the same Discord target. - Fixed proxy runtime player-state cache reads re-sending unnecessaryGET_PLAYER_STATErequests after the state was already cached, reducing duplicate proxy data traffic during repeated settings/nickname lookups. - Fixed Discord and Telegram outbound bridge messages showing raw MiniMessage tags from formatted labels, bridge templates, nicknames or rank prefixes. Values like<color:#e8481D>[EXAMPLE]</color>now appear as[EXAMPLE]. - Fixed legacy and hex formatting leaking into external bridge output from identity fields. Values like&b&lIce,&3&lUserand&#ff0000Rankare now sent as plain text. - Fixeddeployment.modechanges during/corechatx reloadpartially switching storage authority without a full restart.Configuration
velocity-config.propertiessupports backend group pins for pre-backend login gates:network-channel=corechatx:survival,corechatx:minigames backend-groups.survival-1=corechatx:survival backend-groups.minigames-1=corechatx:minigamesvelocity-discord.ymlowns proxy Discord setup:account-linking: enabled: true require-linked-to-play: true required-play-roles: enabled: true guild-id: "123456789012345678" role-ids: - "234567890123456789" groups: "corechatx:survival": role-ids: - "345678901234567890" discord: enabled: true bot-token: "your-token" inbound: channel-routes: "456789012345678901": channel: "global" network-channel: "corechatx:survival"Safety
- Bridge formatting cleanup applies to labels and identity/template fragments. Player message content in{plain_text}is preserved, so normal text such asR&Dor links in angle brackets is not stripped.Compatibility
- Paper and Velocity CoreChatX jars must be updated together. The plugin-message protocol changed for the new proxy data authority and mixed-version Paper/Velocity networks are not supported.Migration
- A clean setup is recommended for2026.2.1, especially on existing Velocity networks. Regenerate fresh Paper and Velocity config files, then manually reapply values such asdeployment.*, channel formats, Discord token, Discord routes and required role IDs. - InPROXY, do not treat old Paper backend runtime YAML files as authoritative network data. Velocity now owns cross-server runtime/user state underplugins/corechatx/data/groups/<encoded-channel>/.2026.2.0CoreChatX 2026.2.0May 24, 2026 CoreChatX 2026.2.0
Added
- Added Velocity-owned runtime data authority forPROXYdeployments. Player settings, nicknames, ignore lists, active channels, mutes, global state, first-join count, Discord links and pending link codes are now stored per Velocitynetwork-channelgroup. - Added Velocity-side Discord bot support throughplugins/corechatx/velocity-discord.ymlfor proxy networks. InPROXY, Discord bridge I/O, Discord account linking, required-link-to-play and required-role-to-play are handled by Velocity. - Added group-specific Discord required role gates throughaccount-linking.required-play-roles.groups.<network-channel>, so separate CoreChatX proxy groups can require different Discord roles. - Added PlaceholderAPI placeholder%corechatx_player_nickname%, matching CoreChatX{player_nickname}output.Changed
- InPROXY, Paper backends now act as runtime/cache clients for cross-server data and send writes to Velocity instead of persisting network runtime state locally. - Required Discord link/role checks can now be decided before the player fully enters a backend when Velocity can resolve the target backend group throughbackend-groups.<velocity-server-name>. - Minecraft -> Discord messages in proxy mode are rendered by Paper, then delivered by the Velocity Discord bot. Discord -> Minecraft messages are read by Velocity and routed to the configured CoreChatX group/channel.Fixed
- Fixed the previous proxy limitation where a backend without online players could miss Discord link state and incorrectly kick a linked player after a server switch. - Fixed the previous Discord role-check limitation that required a backend authority server with an online player carrier. Velocity now checks Discord roles directly.Configuration
velocity-config.propertiesnow supports backend group pins for pre-backend login gates:network-channel=corechatx:survival,corechatx:minigames backend-groups.survival-1=corechatx:survival backend-groups.minigames-1=corechatx:minigamesvelocity-discord.ymlnow owns proxy Discord setup:account-linking: enabled: true require-linked-to-play: true required-play-roles: enabled: true guild-id: "123456789012345678" role-ids: - "234567890123456789" groups: "corechatx:survival": role-ids: - "345678901234567890" discord: enabled: true bot-token: "your-token" inbound: channel-routes: "456789012345678901": channel: "global" network-channel: "corechatx:survival"Compatibility
- Paper and Velocity CoreChatX jars must be updated together. The plugin-message protocol changed for the new proxy data authority and mixed-version Paper/Velocity networks are not supported.Migration
- A clean setup is recommended for2026.2.0, especially on existing Velocity networks. Regenerate fresh Paper and Velocity config files, then manually reapply values such asdeployment.*, channel formats, Discord token, Discord routes and required role IDs. - InPROXY, do not treat old Paper backend runtime YAML files as authoritative network data. Velocity now owns cross-server runtime/user state underplugins/corechatx/data/groups/<encoded-channel>/.2026.1.8CoreChatX 2026.1.8May 19, 2026 CoreChatX 2026.1.8
Added
- Added optional Discord-Minecraft account linking for Discord inbound chat, with Minecraft/discord link,/discord unlink,/discord linked, admin link override, Discord/link code:<code>, Discord/unlink, persistentdiscordlinks.yml, and same-proxy-group sync. - Added linked Discord inbound identity rendering: linked Discord users can be shown with their Minecraft real name, CoreChatX nickname, and Minecraft rank data instead of Discord-only identity. - Added optional linked-user enforcement for Discord inbound, including blocked unlinked messages, optional Discord message deletion, optional DM feedback, Minecraft mute checks, and CoreChatX channel send-permission checks. - Added optional Discord link-to-play enforcement. Whendiscord.inbound.account-linking.require-linked-to-playistrue, unlinked Minecraft players are kicked after joining with a temporary Discord/link code:<code>in the kick reason.Changed
- Player mention suggestions now include custom nicknames as well as real Minecraft usernames, including players online on other backends in the same Velocitynetwork-channelgroup. - Mention tokens now display the custom nickname when a tagged player has one, while still resolving the player identity safely. -/realname <nickname>tab completion now includes custom nicknames from the whole current proxy group, not only the current backend.Fixed
- Fixed settings updates such as PM toggles, GUI toggles, and locale changes so they preserve the saved custom nickname instead of clearing it. - Fixed Discord link sync ordering so stale remoteLINK,UNLINK, or pending-code packets cannot overwrite newer account-link state between backends in the same proxy group.Configuration
discord.ymlnow supports:discord: inbound: account-linking: enabled: false require-linked: false require-linked-to-play: false route-overrides: {}channels.ymlDiscord sections now support per-channel inbound account-link overrides:discord: require-linked-inbound: "inherit"messages.ymlnow supports the kick message shown to unlinked players:discord: link-required-kick: "<red>You must link your Discord account to play.</red>\n<gray>Use Discord command </gray><white>/link code:{code}</white><gray> within </gray><white>{minutes}</white><gray> minute(s).</gray>"Compatibility
- CoreChatX plugin-message protocol is now13. Paper and Velocity must both run2026.1.8; mixed proxy/backend versions are not supported.Safety
- Link-to-play joins do not publish normal join, first-join, state-sync, or quit messages for players that are immediately kicked for missing Discord linking.2026.1.7CoreChatX 2026.1.7May 17, 2026 CoreChatX 2026.1.7
Nicknames
- Split player display placeholders: -{player_name}always resolves to the real Minecraft username. -{player_nickname}resolves to the custom nickname when set, otherwise the real username. - Addednicknames.prefixinconfig.yml. - The prefix is included directly in{player_nickname}only when a custom nickname exists. - Updated default chat, group chat, join/quit, first-join, and ChatItem preview titles to use{player_nickname}where a display name is intended. - Added safe MiniMessage support to/nick. - Allowed: named colors, formats, hex colors, and gradients. - Legacy&codes and&#rrggbbhex still work. - Unsupported MiniMessage tags are stripped silently while keeping their text. - Added nickname permissions for hex and gradients: -corechatx.nick.color.hex-corechatx.nick.color.gradient-corechatx.nick.colorgrants both children. - Added duplicate nickname protection. - Custom plain nicknames cannot duplicate another custom nickname or another player's real username. - A player may still set their own real username as nickname text, useful for color-only setups. - Added/realname <nickname>. - Permission:corechatx.command.realname- Tab completion suggests only custom nickname plain text, without the configured prefix.Proxy State Sync
- Fixed cross-server nickname state propagation inside the same Velocity channel group. - Player state sync now fans out to the other registered backends in the same group, instead of only caching the update on the proxy. - Player state sync remains group-isolated and does not cross into othernetwork-channelgroups. - Stale or invalid state sync packets for players not currently online in the source group are ignored by Velocity.Network Compatibility
- The CoreChatX plugin-message protocol remains11. - Network chat packets carry real username and nickname separately. - Paper and Velocity should both run2026.1.7; mixed plugin/proxy versions are not supported for this release line.2026.1.6CoreChatX 2026.1.6May 16, 2026 CoreChatX 2026.1.6
Added
- Addedjoin-quit.modeinconfig.ymlto choose how join, first-join, and quit messages are delivered. -LOCALkeeps messages on the current Paper backend. -NETWORKforwards true network join/leave events through Velocity when proxy transport is available. - Added Velocity multi-channel proxy groups through the existingvelocity-config.properties -> network-channelkey. - Legacy single-channel format still works:network-channel=corechatx:main. - Multiple isolated groups use a comma-separated list:network-channel=corechatx:survival,corechatx:minigames. - Each Paper backend joins the group matching its ownconfig.yml -> deployment.network-channel. - Added persistent/nicksupport on Paper. -/nick <nickname>sets your nickname. -/nick off,/nick clear, and/nick resetclear it. -/nick <player> <nickname|off>lets permitted staff change another online player's nickname.Changed
- Velocity routing is now isolated per configured network channel. - Network chat, private messages, player directory, TAB/completions, state sync, ChatItem snapshot routing, and join/leave routing stay inside the source channel group. - Private message lookup now searches only players known inside the same proxy group, not the whole proxy. - ChatItem snapshot cache and pending routes are naturally isolated because each channel has its own router. - Velocity now learns backend group membership from plugin messages and a lightweight registration handshake. - Paper still does not need a new config field. - If a backend starts sending CoreChatX packets on another configured channel, Velocity moves it to that group and logs the change. - Network join/leave messages now understand group boundaries. - Moving between backend servers inside the same group does not emit fake quit/join announcements. - Moving between different CoreChatX proxy groups emits quit in the old group and join in the new group. - Proxy disconnect emits quit only in the player's last known group.Nicknames
- Nicknames are persisted in player data and synchronized through CoreChatX state sync in proxy mode. - Chat, PMs, spy output, broadcasts, join/quit/first-join messages, and network chat display the nickname when one is set. - Real player identity remains unchanged: lookup, replies, ignores, privacy, routing, and state sync still use UUIDs and real Minecraft names internally. - Added dedicated permissions: -corechatx.command.nick-corechatx.command.nick.others-corechatx.nick.color-corechatx.nick.format- Added per-code nickname permissions so server owners can allow specific colors or styles only. - Example color child:corechatx.nick.color.red- Example format child:corechatx.nick.format.bold- Addednicknames.change-only-colorsinconfig.yml. -falselets/nick IceWolfchange the visible text. -trueonly allows color/style changes while the visible text stays exactly the player's real Minecraft username.Configuration
config.ymlnow includes:nicknames: # false = /nick can change the visible name text and styling, for example IceWolf23X -> IceWolf. # true = /nick can only change allowed colors/styles; the visible text after removing formatting must stay exactly the real Minecraft username. # Example with true: IceWolf23X may use &cIceWolf23X, but not &cIceWolf. change-only-colors: false join-quit: # LOCAL = announce only on the current Paper backend. # NETWORK = in PROXY mode, announce true network join/leave through the Velocity module. mode: "LOCAL" join-enabled: true quit-enabled: truevelocity-config.propertiesnow supports a list:
Example multi-group setup:# Comma-separate values to split this proxy into isolated CoreChatX network groups. # Each Paper backend joins the group matching its deployment.network-channel. network-channel=corechatx:main
Paper backends still use:network-channel=corechatx:survival,corechatx:minigamesdeployment: network-channel: "corechatx:survival"Compatibility
- Existing single-channel Velocity installs keep their previous behavior. - Existing Paper configs do not need a new deployment key. - Existing nickname-free player data remains valid. - The player state sync decoder accepts the previous protocol shape for compatibility and treats missing nickname data as blank.2026.1.5CoreChatX 2026.1.5May 12, 2026 CoreChatX 2026.1.5
Fixed
- Discord -> Minecraft player mentions are now controlled by the target channel'sallow-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 emptydiscord-rolesnow stay as plain text when used from Discord and do not notify Minecraft players. - Minecraft custom pings still useuse-permission; existingreceive-permissionchecks still apply to Minecraft recipients. - Telegram inbound mentions are now controlled byallow-mentions.from-telegram. - Network chat from other Minecraft servers remains treated as Minecraft-originated and usesallow-mentions.from-minecraft.Configuration
channels.ymlnow uses source-specific mention gates:allow-mentions: from-minecraft: true from-discord: true from-telegram: truepings.ymlcustom pings now support Discord role allow-lists:
Emptycustom-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>"discord-roles: []means the ping cannot be activated from Discord.Migration
- Existing scalar values likeallow-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.2026.1.4CoreChatX 2026.1.4May 11, 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 fromdiscord.inbound.format. - Discord bridge formats can now be overridden per channel fromchannels.yml. - Telegram bridge formats can now be overridden per channel fromchannels.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 indiscord.formatfor Minecraft -> Discord messages. - Minecraft -> Discorddiscord.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:
Per-channel bridge formats can be set indiscord: inbound: format: "{channel_prefix}[Discord] {role_color}{rank_prefix}</role_color>{sender_name}: {plain_text}"channels.yml:
If a per-channel format is blank, CoreChatX falls back to the matching global bridge format. Available inbound tokens: -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}"{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:
Minecraft -> Discord formats can now use PlaceholderAPI placeholders anddiscord: 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>"{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.2026.1.3CoreChatX 2026.1.3May 11, 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 filelocales/en_us.ymlis also synchronized from bundled defaults. - Velocityvelocity-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 asplayerdata.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
- AddedDefaultConfigSynchronizeras the Paper-side central YAML loader/synchronizer. - Updated Paper config loading paths to use the synchronizer throughConfigurationService,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.2026.1.2CoreChatX 2026.1.2May 11, 2026 CoreChatX 2026.1.2
Fixed
- Discord -> Minecraft messages no longer force a hardcoded[Discord]sender prefix. - Discord -> Minecraft messages can now be fully formatted fromdiscord.inbound.format. - 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 Discord role color and can be used as a MiniMessage color tag. - PlaceholderAPI placeholders are now processed indiscord.formatfor Minecraft -> Discord messages. - Minecraft -> Discorddiscord.formatnow supports{rank_prefix}. - Telegram outbound formats also support{rank_prefix}if the token is used.Configuration
Discord -> Minecraft messages are now controlled by one format key:
Available Discord inbound tokens: -discord: inbound: format: "[Discord] {role_color}{rank_prefix}</role_color>{sender_name}: {plain_text}"{source}: display source name, for exampleDiscord-{source_type}: raw source id, for examplediscord-{sender_name}: Discord sender display name -{rank_prefix}: highest Discord role name -{role_color}: MiniMessage color tag from the highest Discord role color, orwhite-{plain_text}/{message}: sanitized message content Example with role-colored prefix and message:
Minecraft -> Discord formats can now use PlaceholderAPI placeholders anddiscord: inbound: format: "<dark_gray>[Discord]</dark_gray> {role_color}{rank_prefix}</role_color> <white>{sender_name}</white>: {role_color}{plain_text}</role_color>"{rank_prefix}:discord: format: "[{source_server}] [{channel_id}] {rank_prefix}{sender_name}: {plain_text}"2026.1.1CoreChatX 2026.1.1May 10, 2026 CoreChatX 2026.1.1
Fixed
- Fixed a chat formatting crash when PlaceholderAPI or other plugins returned legacy Minecraft formatting codes inside MiniMessage chat formats. - Added support for converting legacy&and§formatting codes into MiniMessage before rendering. - Added support for legacy hex color formats such as&#ffa200,&x&f&f&a&2&0&0, and§x§f§f§a§2§0§0. - Fixed compatibility with EssentialsX nicknames generated with legacy hex colors, which could previously cause public chat messages to fail rendering.Technical
- Added regression tests for legacy formatting conversion and Essentials-style hex nicknames. - Improved sanitization of legacy hex formatting in chat-related text paths.2026.1.0CoreChatX 2026.1.0May 6, 2026 Velocity Version upload to Modrinth
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta