Skip to content

MiniMessage Head tag allows for illegal spaces in player names #1347

@aerulion

Description

@aerulion

Expected behavior

The "Head" tag working properly and discarding illegal format.

Observed/Actual behavior

The message results in a RuntimeException because of Player name contained disallowed characters: 'aerulion '

View Exception
[14:00:50 ERROR]: Error sending packet clientbound/minecraft:system_chat
io.netty.handler.codec.EncoderException: Failed to encode packet 'clientbound/minecraft:system_chat'
	at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:62) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:13) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:27) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:12) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[netty-codec-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:113) ~[netty-codec-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.ChannelOutboundHandlerAdapter.write(ChannelOutboundHandlerAdapter.java:113) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at net.minecraft.network.Connection$2.write(Connection.java:718) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:956) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:969) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:310) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at net.minecraft.network.Connection.doSendPacket(Connection.java:493) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.Connection.lambda$sendPacket$13(Connection.java:475) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[netty-common-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) ~[netty-common-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) ~[netty-common-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) ~[netty-common-4.1.118.Final.jar:4.1.118.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.118.Final.jar:4.1.118.Final]
	at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.RuntimeException: Failed to encode adventure Component: ObjectComponentImpl{contents=PlayerHeadObjectContentsImpl{name="aerulion ", id=null, profileProperties=[], hat=true, texture=null}, style=StyleImpl{obfuscated=not_set, bold=not_set, strikethrough=not_set, underlined=not_set, italic=not_set, color=null, shadowColor=null, clickEvent=null, hoverEvent=null, insertion=null, font=null}, children=[]}; Player name contained disallowed characters: 'aerulion '
	at io.papermc.paper.adventure.WrapperAwareSerializer.lambda$serialize$2(WrapperAwareSerializer.java:38) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at com.mojang.serialization.DataResult$Error.getOrThrow(DataResult.java:287) ~[datafixerupper-8.0.16.jar:?]
	at io.papermc.paper.adventure.WrapperAwareSerializer.serialize(WrapperAwareSerializer.java:38) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
Caused by: java.lang.RuntimeException: Failed to encode adventure Component: ObjectComponentImpl{contents=PlayerHeadObjectContentsImpl{name="aerulion ", id=null, profileProperties=[], hat=true, texture=null}, style=StyleImpl{obfuscated=not_set, bold=not_set, strikethrough=not_set, underlined=not_set, italic=not_set, color=null, shadowColor=null, clickEvent=null, hoverEvent=null, insertion=null, font=null}, children=[]}; Player name contained disallowed characters: 'aerulion '

	at io.papermc.paper.adventure.WrapperAwareSerializer.serialize(WrapperAwareSerializer.java:13) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at io.papermc.paper.adventure.AdventureComponent.deepConverted(AdventureComponent.java:26) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at io.papermc.paper.adventure.AdventureComponent.getContents(AdventureComponent.java:46) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.chat.Component.tryCollapseToString(Component.java:68) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.chat.ComponentSerialization.lambda$createCodec$9(ComponentSerialization.java:178) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at com.mojang.serialization.Encoder$1.encode(Encoder.java:25) ~[datafixerupper-8.0.16.jar:?]
	at com.mojang.serialization.Codec$2.encode(Codec.java:80) ~[datafixerupper-8.0.16.jar:?]
	at com.mojang.serialization.Codec$RecursiveCodec.encode(Codec.java:217) ~[datafixerupper-8.0.16.jar:?]
	at com.mojang.serialization.Encoder.encodeStart(Encoder.java:14) ~[datafixerupper-8.0.16.jar:?]
	at net.minecraft.network.chat.ComponentSerialization$1.encode(ComponentSerialization.java:57) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.chat.ComponentSerialization$1.encode(ComponentSerialization.java:44) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.codec.StreamCodec$8.encode(StreamCodec.java:150) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.codec.StreamCodec$5.encode(StreamCodec.java:92) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.codec.StreamCodec$5.encode(StreamCodec.java:82) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:57) ~[paper-1.21.10.jar:1.21.10-91-9934c17]
	... 30 more

What makes this issue more annoying is that when using this in the Chat Renderer context to allow for mini-messages in chat, the message won't be sent. This results in all connected players being kicked once the player chats again due to the chat message order check.

Steps/models to reproduce

Send a Messsage to a player using something like
player.sendMessage(MiniMessage.miniMessage().deserialize("<head:aerulion >"));
or
player.sendMessage(MiniMessage.miniMessage().deserialize("<head:aeru lion>"));

Plugin and Datapack List

None, just a test plugin to send the message.

Paper version

This server is running Paper version 1.21.10-91-main@9934c17 (2025-10-27T18:27:20Z) (Implementing API version 1.21.10-R0.1-SNAPSHOT)
You are running the latest version

Other

I wasn't sure whether to report it here or in the Adventure repository. If it is more appropriate there, please let me know and I will open a new issue.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions