diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/BlockItemPacketRewriter1_21_6.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/BlockItemPacketRewriter1_21_6.java index 8fa21768..53cb2c92 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/BlockItemPacketRewriter1_21_6.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/BlockItemPacketRewriter1_21_6.java @@ -22,6 +22,7 @@ import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter; import com.viaversion.viabackwards.protocol.v1_21_6to1_21_5.Protocol1_21_6To1_21_5; import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity; import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer; import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey; import com.viaversion.viaversion.api.minecraft.item.Item; @@ -40,6 +41,8 @@ import static com.viaversion.viaversion.protocols.v1_21_5to1_21_6.rewriter.BlockItemPacketRewriter1_21_6.upgradeItemData; public final class BlockItemPacketRewriter1_21_6 extends BackwardsStructuredItemRewriter { + private static final int SIGN_BOCK_ENTITY_ID = 7; + private static final int HANGING_SIGN_BOCK_ENTITY_ID = 8; public BlockItemPacketRewriter1_21_6(final Protocol1_21_6To1_21_5 protocol) { super(protocol); @@ -52,8 +55,8 @@ public void registerPackets() { blockRewriter.registerBlockUpdate(ClientboundPackets1_21_6.BLOCK_UPDATE); blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_21_6.SECTION_BLOCKS_UPDATE); blockRewriter.registerLevelEvent1_21(ClientboundPackets1_21_6.LEVEL_EVENT, 2001); - blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21_6.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_21_5::new); - blockRewriter.registerBlockEntityData(ClientboundPackets1_21_6.BLOCK_ENTITY_DATA); + blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21_6.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_21_5::new, this::handleBlockEntity); + blockRewriter.registerBlockEntityData(ClientboundPackets1_21_6.BLOCK_ENTITY_DATA, this::handleBlockEntity); protocol.registerClientbound(ClientboundPackets1_21_6.SET_CURSOR_ITEM, this::passthroughClientboundItem); registerSetPlayerInventory(ClientboundPackets1_21_6.SET_PLAYER_INVENTORY); @@ -149,4 +152,29 @@ protected void restoreBackupData(final Item item, final StructuredDataContainer )); } } + + private void handleBlockEntity(final UserConnection connection, final BlockEntity blockEntity) { + final CompoundTag tag = blockEntity.tag(); + if (tag == null) { + return; + } + + if (blockEntity.typeId() == SIGN_BOCK_ENTITY_ID || blockEntity.typeId() == HANGING_SIGN_BOCK_ENTITY_ID) { + updateSignMessages(connection, tag.getCompoundTag("front_text")); + updateSignMessages(connection, tag.getCompoundTag("back_text")); + } + } + + private void updateSignMessages(final UserConnection connection, final CompoundTag tag) { + if (tag == null) { + return; + } + + final ListTag messages = tag.getListTag("messages"); + protocol.getComponentRewriter().processTag(connection, messages); + final ListTag filteredMessages = tag.getListTag("filtered_messages"); + if (filteredMessages != null) { + protocol.getComponentRewriter().processTag(connection, filteredMessages); + } + } }