Skip to content

Commit 24f994f

Browse files
Convert components in sign block entities in 1.12->1.11 (#845)
1 parent f4bc485 commit 24f994f

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package com.viaversion.viabackwards.protocol.v1_12to1_11_1.rewriter;
2020

21+
import com.viaversion.nbt.tag.StringTag;
2122
import com.viaversion.viabackwards.api.rewriters.LegacyBlockItemRewriter;
2223
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
2324
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.data.MapColorMappings1_11_1;
@@ -38,6 +39,9 @@
3839
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ServerboundPackets1_9_3;
3940
import java.util.Iterator;
4041
import java.util.Map;
42+
import com.viaversion.viaversion.util.ComponentUtil;
43+
import com.viaversion.viaversion.util.Key;
44+
import com.viaversion.viaversion.util.SerializerVersion;
4145
import org.checkerframework.checker.nullness.qual.Nullable;
4246

4347
public 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;

common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/Protocol1_9_3To1_9_1.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.viaversion.viaversion.api.minecraft.ClientWorld;
2525
import com.viaversion.viaversion.api.minecraft.BlockPosition;
2626
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
27-
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
2827
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
2928
import com.viaversion.viaversion.api.type.Types;
3029
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_9_1;
@@ -60,9 +59,9 @@ public void register() {
6059

6160
wrapper.setPacketType(ClientboundPackets1_9.UPDATE_SIGN);
6261
wrapper.write(Types.BLOCK_POSITION1_8, position); // Position
63-
for (int i = 1; i < 5; i++) {
62+
for (int i = 0; i < 4; i++) {
6463
// Should technically be written as COMPONENT, but left as String for simplification/to remove redundant wrapping for VR
65-
StringTag textTag = tag.getStringTag("Text" + i);
64+
StringTag textTag = tag.getStringTag("Text" + (i + 1));
6665
String line = textTag != null ? textTag.getValue() : "";
6766
wrapper.write(Types.STRING, line); // Sign line
6867
}
@@ -122,4 +121,4 @@ public void init(UserConnection userConnection) {
122121
userConnection.put(new ClientWorld());
123122
}
124123
}
125-
}
124+
}

0 commit comments

Comments
 (0)