1818package com .viaversion .viabackwards .protocol .v1_21_9to1_21_7 .rewriter ;
1919
2020import com .viaversion .nbt .tag .CompoundTag ;
21+ import com .viaversion .nbt .tag .ListTag ;
2122import com .viaversion .viabackwards .api .rewriters .BackwardsStructuredItemRewriter ;
2223import com .viaversion .viabackwards .protocol .v1_21_9to1_21_7 .Protocol1_21_9To1_21_7 ;
2324import com .viaversion .viabackwards .protocol .v1_21_9to1_21_7 .storage .DimensionScaleStorage ;
2425import com .viaversion .viaversion .api .connection .UserConnection ;
2526import com .viaversion .viaversion .api .data .entity .EntityTracker ;
2627import com .viaversion .viaversion .api .minecraft .ResolvableProfile ;
28+ import com .viaversion .viaversion .api .minecraft .blockentity .BlockEntity ;
29+ import com .viaversion .viaversion .api .minecraft .chunks .Chunk ;
2730import com .viaversion .viaversion .api .minecraft .data .StructuredDataContainer ;
2831import com .viaversion .viaversion .api .minecraft .data .StructuredDataKey ;
2932import com .viaversion .viaversion .api .minecraft .item .Item ;
4245import static com .viaversion .viaversion .protocols .v1_21_7to1_21_9 .rewriter .BlockItemPacketRewriter1_21_9 .upgradeData ;
4346
4447public final class BlockItemPacketRewriter1_21_9 extends BackwardsStructuredItemRewriter <ClientboundPacket1_21_9 , ServerboundPacket1_21_6 , Protocol1_21_9To1_21_7 > {
48+ private static final int SIGN_BOCK_ENTITY_ID = 7 ;
49+ private static final int HANGING_SIGN_BOCK_ENTITY_ID = 8 ;
4550
4651 public BlockItemPacketRewriter1_21_9 (final Protocol1_21_9To1_21_7 protocol ) {
4752 super (protocol );
@@ -54,8 +59,8 @@ public void registerPackets() {
5459 blockRewriter .registerBlockUpdate (ClientboundPackets1_21_9 .BLOCK_UPDATE );
5560 blockRewriter .registerSectionBlocksUpdate1_20 (ClientboundPackets1_21_9 .SECTION_BLOCKS_UPDATE );
5661 blockRewriter .registerLevelEvent1_21 (ClientboundPackets1_21_9 .LEVEL_EVENT , 2001 );
57- blockRewriter .registerLevelChunk1_19 (ClientboundPackets1_21_9 .LEVEL_CHUNK_WITH_LIGHT , ChunkType1_21_5 ::new );
58- blockRewriter .registerBlockEntityData (ClientboundPackets1_21_9 .BLOCK_ENTITY_DATA );
62+ blockRewriter .registerLevelChunk1_19 (ClientboundPackets1_21_9 .LEVEL_CHUNK_WITH_LIGHT , ChunkType1_21_5 ::new , this :: handleBlockEntity );
63+ blockRewriter .registerBlockEntityData (ClientboundPackets1_21_9 .BLOCK_ENTITY_DATA , this :: handleBlockEntity );
5964
6065 registerSetCursorItem (ClientboundPackets1_21_9 .SET_CURSOR_ITEM );
6166 registerSetPlayerInventory (ClientboundPackets1_21_9 .SET_PLAYER_INVENTORY );
@@ -131,6 +136,31 @@ protected void restoreBackupData(final Item item, final StructuredDataContainer
131136 }
132137 }
133138
139+ private void handleBlockEntity (final UserConnection connection , final BlockEntity blockEntity ) {
140+ final CompoundTag tag = blockEntity .tag ();
141+ if (tag == null ) {
142+ return ;
143+ }
144+
145+ if (blockEntity .typeId () == SIGN_BOCK_ENTITY_ID || blockEntity .typeId () == HANGING_SIGN_BOCK_ENTITY_ID ) {
146+ updateSignMessages (connection , tag .getCompoundTag ("front_text" ));
147+ updateSignMessages (connection , tag .getCompoundTag ("back_text" ));
148+ }
149+ }
150+
151+ private void updateSignMessages (final UserConnection connection , final CompoundTag tag ) {
152+ if (tag == null ) {
153+ return ;
154+ }
155+
156+ final ListTag <?> messages = tag .getListTag ("messages" );
157+ protocol .getComponentRewriter ().processTag (connection , messages );
158+ final ListTag <?> filteredMessages = tag .getListTag ("filtered_messages" );
159+ if (filteredMessages != null ) {
160+ protocol .getComponentRewriter ().processTag (connection , filteredMessages );
161+ }
162+ }
163+
134164 private void updateBorderCenter (final PacketWrapper wrapper ) {
135165 double centerX = wrapper .read (Types .DOUBLE );
136166 double centerZ = wrapper .read (Types .DOUBLE );
0 commit comments