mojira.dev
MC-87739

/setblock with signs missing Text tags kicks all players loading the sign

Warning: this bug is server-only.
Place a command block (Impulse, Unconditionnal, Needs Redstone).
Enter this command :

setblock ~ ~1 ~ standing_sign 0 replace {Text1:"[{\"text\":\"Hey\"}]"}

Place a redstone block next to this command block. Now everyone near this command_block is getting kicked from the server, with this error :

Internal Exeption: io.netty.handler.codec.DecoderExeption:
com.google.gson.JsonSyntaxExeption:
com.google.gson.stream.MalformedJsonExeption: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1

Here is the consol log :

TheMrZZ lost connection: TextComponent{text='Disconnected', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null, insertion=null}}

Happens when alimented with a lever, a button (stone & wood), a repeater, a comparator, a redstone wire (any kind of alimentation works).

BIGGEST PROBLEM : If you do this in a spawn chunk, you can't come back because it seems to instant-kick every player near the CM, except if someone put a command like /tp PLAYER @p in a repeating command block.

See Marcono1234's comment for a description of why this happens

Linked issues

Attachments

Comments

Torabi

You currently need to specify all four Text blocks, otherwise they will be filled incorrectly.

migrated

This bug still need to be resolved, but thanks for giving me a fix !

migrated

Fixed somewhere between 15w35e and 15w44b.

migrated

Not actually fixed, sorry.

marcono1234

Not fixed for 16w04a, please reopen

migrated

I tried this but. everything is fine

migrated

When you setblock/blockdata a colored sign on singleplayer everything works fine until you close the world and load it back up, then the sign is completely blank.

migrated

Absolutely not fix, sorry. I forgot that I needed to be on a server.

marcono1234

Please link to this comment in the description

The following is based on decompiled version of Minecraft 1.9 using MCP 9.24 beta. All method and class names are the names used in the decompiled version.

The reason why this is happening is very likely that null is sent as Text2, Text3 and Text4. The same solution provided for MC-87143 can be used to solve this.

migrated

The enviroment is supposed to contain pc details.

migrated

It works on every computer and server with minecraft 1.9. Why don't you actually test the bug for yourself so you can see for yourself. Even Slicedlime said in one of his videos about this stupid bug.

migrated

@unknown sorry, but I'm not going to thest now, the enviromentlittirally stated:

Minecraft 16w04a server. Vanilla - no command blocks running.

which is not what the enviroment is meant to state, the version is findable in the affected versions and vanilla and no command blocks is not needed to mentioned.

migrated

So in 1.9.2 the crash OP described is (not really) gone BUT. You seriously screwed up JSON in minecraft. This command wants lenient syntax, one doesn't care and the other one again cares.

So yes I can do this (non-lenient):

/blockdata 111 64 -13 {"Text1": "Hello","Text2": "hello", "Text3":"hello", "Text4":"asd"}

And it DOES update the block but then again, JSON screwup: It updates it so that I have a data tag with "Text1" AND just Text1 without quotes. Effectively not changing anything on the sign.

[22:17:40] [Server thread/INFO]: [2called_chaos: Block data updated to: {"Text1":"Hello",x:111,Text4:"{\"text\":\"\"}",y:64,Text3:"{\"text\":\"\"}",z:-13,Text2:"{\"text\":\"\"}",id:"Sign",Text1:"{\"text\":\"\"}"}]

With lenient syntax it still doesn't work:

/blockdata 111 64 -13 {Text1: "Hello",Text2: "hello", Text3:"hello",Text4:"asd"}
Client: "An unknown error occurred while attempting to perform this command"
Server: [EVENT] [22:25:09] [Server thread/WARN]: Couldn't process command: 'blockdata 111 64 -13 {Text1: "Hello", Text2: "hello", Text3:"hello", Text4:"asd"}'

Then if I try to use Text1: {} compound syntax:

/blockdata 111 64 -13 {Text1: {"text": "Hello"}, Text2: {"text": "hellooooo"}, Text3: {"text": "rly"}, Text4: {"text": "cmon"}}

Same thing as OP described (server crash + restart required)

Let's try it one more time with complete non-lenient and text compounds...

/blockdata 111 64 -13 {"Text1": {"text": "Hello"}, "Text2": {"text": "hellooooo"}, "Text3": {"text": "rly"}, "Text4": {"text": "cmon"}}

Same thing as before, no error but double data tags (with and without quotes)...

PS: By the way it doesn't matter if a user does this or a command block but due to all the required quotes you will almost always need a command block due to the ridiculous chat limitation (I get it for messages but allow longer commands or a command input chat thingy :>)

marcono1234

@unknown I think you are confusing NBT parsing and JSON parsing. The sign data is NBT which does not parsed quotes around the keys, which is why you get tags like "Text1" then instead of Text1. Quotes are needed for the JSON data of the lines because else the NBT parser would try to parse them (this is why "Text1: {} compound syntax" will not work). JSON parsing is in nearly no situation lenient anymore. NBT parsing is something different and has different rules (defined by Minecraft), but is sadly often confused with JSON.

migrated

@Marcono1234 Well I guess that is because there is no way (without knowing) what is NBT and what is JSON. The reason for that might be that lenient-JSON and NBT look the exact same. I just tested this here in 1.9.2 and it works (you were right though that I have to put the JSON as string with all quotes escaped):

/blockdata -231 72 213 {Text1:"{\"text\":\"hello\",\"color\":\"green\",\"bold\":true}"}

So I just guess it is intended now that you cannot use the shorthand syntax anymore (e.g. Text1: "just text")
I still think though that it is not intended that the server basically crashes when the command is wrong.

Erik Broes

Can someone confirm this is still happening in the latest 1.10 snapshot? the kind of packets changed since 1.9.3.

migrated

No longer appears to be an issue anymore in 16w20a, the sign gets placed (without text) and a message pops up saying:

An unknown error occurred while attempting to preform this command

Resolving as fixed for 16w20a.

migrated

Erik Broes

Confirmed

Minecraft 15w35d, Minecraft 15w35e, Minecraft 15w45a, Minecraft 15w51b, Minecraft 16w03a, ..., Minecraft 1.9.1, Minecraft 1.9.2, Minecraft 1.9.3 Pre-Release 1, Minecraft 1.9.3 Pre-Release 2, Minecraft 1.9.3 Pre-Release 3

Minecraft 16w03a, Minecraft 16w20a

Retrieved