1818
1919package com .viaversion .viabackwards .protocol .v1_12to1_11_1 .rewriter ;
2020
21+ import com .viaversion .nbt .tag .StringTag ;
2122import com .viaversion .viabackwards .api .rewriters .LegacyBlockItemRewriter ;
2223import com .viaversion .viabackwards .protocol .v1_12to1_11_1 .Protocol1_12To1_11_1 ;
2324import com .viaversion .viabackwards .protocol .v1_12to1_11_1 .data .MapColorMappings1_11_1 ;
3839import com .viaversion .viaversion .protocols .v1_9_1to1_9_3 .packet .ServerboundPackets1_9_3 ;
3940import java .util .Iterator ;
4041import java .util .Map ;
42+ import com .viaversion .viaversion .util .ComponentUtil ;
43+ import com .viaversion .viaversion .util .Key ;
44+ import com .viaversion .viaversion .util .SerializerVersion ;
4145import org .checkerframework .checker .nullness .qual .Nullable ;
4246
4347public class BlockItemPacketRewriter1_12 extends LegacyBlockItemRewriter <ClientboundPackets1_12 , ServerboundPackets1_9_3 , Protocol1_12To1_11_1 > {
@@ -133,6 +137,15 @@ public void register() {
133137 Chunk chunk = wrapper .passthrough (type );
134138
135139 handleChunk (chunk );
140+ for (final CompoundTag tag : chunk .getBlockEntities ()) {
141+ final String id = tag .getString ("id" );
142+ if (id == null ) {
143+ continue ;
144+ }
145+ if (Key .stripMinecraftNamespace (id ).equals ("sign" )) {
146+ handleSignText (tag );
147+ }
148+ }
136149 });
137150
138151 protocol .registerClientbound (ClientboundPackets1_12 .BLOCK_ENTITY_DATA , new PacketHandlers () {
@@ -143,9 +156,14 @@ public void register() {
143156 map (Types .NAMED_COMPOUND_TAG ); // 2 - NBT
144157
145158 handler (wrapper -> {
146- // Remove bed color
147- if (wrapper .get (Types .UNSIGNED_BYTE , 0 ) == 11 )
159+ final short type = wrapper .get (Types .UNSIGNED_BYTE , 0 );
160+ if (type == 9 ) {
161+ final CompoundTag tag = wrapper .get (Types .NAMED_COMPOUND_TAG , 0 );
162+ handleSignText (tag );
163+ } else if (type == 11 ) {
164+ // Remove bed color
148165 wrapper .cancel ();
166+ }
149167 });
150168 }
151169 });
@@ -170,6 +188,18 @@ public void register() {
170188 });
171189 }
172190
191+ private void handleSignText (final CompoundTag tag ) {
192+ // Push signs through component conversion, fixes https://github.com/ViaVersion/ViaBackwards/issues/835
193+ for (int i = 0 ; i < 4 ; i ++) {
194+ final StringTag lineTag = tag .getStringTag ("Text" + (i + 1 ));
195+ if (lineTag == null ) {
196+ continue ;
197+ }
198+
199+ lineTag .setValue (ComponentUtil .convertJsonOrEmpty (lineTag .getValue (), SerializerVersion .V1_12 , SerializerVersion .V1_9 ).toString ());
200+ }
201+ }
202+
173203 @ Override
174204 public @ Nullable Item handleItemToClient (UserConnection connection , Item item ) {
175205 if (item == null ) return null ;
0 commit comments