feat: add player-input preprocessor
YAML:chat: pre-processor: # Enables the pre-processor system. # When disabled, player messages are passed to the serializer as-is. enabled: false # Template applied to the player's raw input before serialization. # Parsed using the player-input-serializer — output is NOT trusted. # Use {message} as the placeholder for the player's original input. # PlaceholderAPI placeholders are supported (e.g. %player_name%). # # Note: players CAN break tags defined here (e.g. </red>), since the # template is merged with their input before parsing. This is expected. # # Good uses: # <gray>{message} # <gray>[Global]</gray> {message} # <gray>%player_prefix% {message} # # Not suitable for strict/unbreakable formatting or security boundaries. player-input: "<red>{message}"
fix: player with chat formatting permission could inject click events into
their messages, potentially executing commands on other players' clients
fix: inline tags ([inv], [item], [ec], etc.) displaying as raw placeholder
text when combined with gradient or rainbow formatting in the same message
feat: newplayer-input-serializerconfig option to control the serializer
applied to player-written messages, defaults to LIMITED_MINI_MESSAGE
YAML:settings: # Format engine used to parse and render the chat format template. # This serializer processes server-defined elements such as the player # name, separator, prefix, and the 'text' field of each format element. # Interactive tags (click, hover) are always available here since this # input is server-controlled. # Options: # - MINI_MESSAGE : <gray>, <bold>, <gradient:...> # - LEGACY_AMPERSAND : &a, &b, &l, etc. serializer: "MINI_MESSAGE" # Format engine used to parse player-written chat messages. # This serializer controls what formatting players can use in their messages. # Options: # - MINI_MESSAGE : <gray>, <bold>, <gradient:...> # Note: use LIMITED_MINI_MESSAGE instead to prevent # players from injecting click/hover events. # - LIMITED_MINI_MESSAGE : same as MINI_MESSAGE but strips interactive tags # (click, hover, insertion), preventing exploit vectors # where players could execute commands on other clients. # - LEGACY_AMPERSAND : &a, &b, &l, etc. # Interactive tags are not supported in this engine, # so no restriction is needed. player-input-serializer: "LIMITED_MINI_MESSAGE"
- Added [enderchest] tag for displaying ender chest inventory
YAML:chat: tags: ender-chest: # Enables the [ec] or [ender] tag to show a clickable # Ender Chest preview of the target player. enabled: true # Text displayed for the Ender Chest preview link. display-text: '[Ender Chest]' # Color of the Ender Chest link text. display-color: 'LIGHT_PURPLE' # Title of the Ender Chest preview GUI. # Variables: # - [player_name] : The real, exact name of the player. preview-title: 'Ender Chest of [player_name]' # Maximum number of times the Ender Chest link can be clicked. max-clicks: 10 # Duration (in seconds) before the Ender Chest link expires. expiration-seconds: 3600
- Added new interactive chat tags system
- Added new global chat mute command
YAML:chat: tags: # Enables the tag resolution system. # When disabled, tags like [item], [inv], [armor] will not be processed. enabled: true # Maximum number of total tags a player can use in a single message. # Set to -1 for unlimited. max-tags-per-message: 1 item: # Enables the {item} tag to show the item in the player's main hand. enabled: true # Format displayed when the player's hand is empty. empty-hand-text: '[Empty Hand]' # Color of the empty hand text. # Options: GRAY, RED, YELLOW, etc. empty-hand-color: 'GRAY' inventory: # Enables the {inv} tag to show a clickable inventory preview. enabled: true # Text displayed for the inventory link. display-text: '[Inventory]' # Color of the inventory link text. display-color: 'AQUA' # Title of the inventory preview GUI. preview-title: 'Inventory of a{player_name}' # Maximum number of times the inventory link can be clicked. max-clicks: 10 # Duration (in seconds) before the inventory link expires. # After this time, clicking the link will no longer work. expiration-seconds: 70 armor: # Enables the {armor} tag to show a clickable armor/equipment preview. enabled: true # Text displayed for the armor inventory link. display-text: '[Armor Inventory]' # Color of the armor inventory link text. display-color: 'AQUA' # Title of the armor preview GUI. preview-title: 'Armor of {player_name}' # Maximum number of times the armor link can be clicked. max-clicks: 10 # Duration (in seconds) before the armor link expires. expiration-seconds: 3600
- Added new player mentions system
YAML:chat: # Enables ByteChat’s chat system. mentions: # Enables the mention system. # When disabled, no mentions will be detected, # and messages will be sent without highlight or sound. enabled: true # Character that triggers a player mention. # Must be a visible, non-whitespace ASCII character. # Typical options: '@', '!', '#', etc. trigger-char: '@' # Format applied when a mention is detected. # Variables available: # - input_name : The name typed by the user (raw, case as written) # - player_name : The real, exact in-game player name (with correct casing) # # NOTE: Mentions are case-insensitive, but the resolved player_name # will always use the player's real capitalization. format: '<yellow>@{player_name}</yellow>' # Whether players are allowed to mention themselves. # If false, "@PlayerName" written by that same player will NOT trigger. allow-self-mention: true # Whether the mention sound should also play when a player mentions themselves. # Only applies if 'allow-self-mention = true'. self-mention-sound: true sound: # Sound played ONLY to the mentioned player. # Set key: "" to disable sound. # # Recommended values: # "entity.player.levelup" # "block.note_block.pling" key: "entity.player.levelup" # Volume from 0.0 to 1.0+ volume: 1.0 # Pitch from 0.5 to 2.0 pitch: 2.0
