Skip to content

Commit 44819ea

Browse files
committed
Move block entity handling to block rewriter
Also fixes double handling in 1.21.5->1.21.4
1 parent a839cb0 commit 44819ea

File tree

15 files changed

+374
-283
lines changed

15 files changed

+374
-283
lines changed

common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878

7979
public interface ViaBackwardsPlatform {
8080

81-
String MINIMUM_VV_VERSION = "5.7.0";
81+
String MINIMUM_VV_VERSION = "5.7.1";
8282

8383
default void init(final File configFile) {
8484
init(new ViaBackwardsConfig(configFile, getLogger()));

common/src/main/java/com/viaversion/viabackwards/protocol/template/BlockItemPacketRewriter1_99.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
3131
import com.viaversion.viaversion.rewriter.BlockRewriter;
3232
import com.viaversion.viaversion.rewriter.RecipeDisplayRewriter;
33+
import com.viaversion.viaversion.rewriter.block.BlockRewriter1_21_5;
3334

3435
// To replace if needed:
3536
// ChunkType1_21_5
@@ -43,7 +44,7 @@ public BlockItemPacketRewriter1_99(final Protocol1_99To1_98 protocol) {
4344

4445
@Override
4546
public void registerPackets() {
46-
final BlockRewriter<ClientboundPacket1_21_2> blockRewriter = BlockRewriter.for1_20_2(protocol);
47+
final BlockRewriter<ClientboundPacket1_21_2> blockRewriter = new BlockRewriter1_21_5<>(protocol);
4748
blockRewriter.registerBlockEvent(ClientboundPackets1_21_2.BLOCK_EVENT);
4849
blockRewriter.registerBlockUpdate(ClientboundPackets1_21_2.BLOCK_UPDATE);
4950
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_21_2.SECTION_BLOCKS_UPDATE);

common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_3to1_20_2/rewriter/BlockItemPacketRewriter1_20_3.java

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,20 @@
1717
*/
1818
package com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.rewriter;
1919

20-
import com.viaversion.nbt.tag.CompoundTag;
21-
import com.viaversion.nbt.tag.StringTag;
2220
import com.viaversion.viabackwards.api.rewriters.BackwardsItemRewriter;
2321
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
24-
import com.viaversion.viaversion.api.Via;
25-
import com.viaversion.viaversion.api.connection.UserConnection;
2622
import com.viaversion.viaversion.api.data.ParticleMappings;
27-
import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity;
2823
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
2924
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
3025
import com.viaversion.viaversion.api.type.Types;
3126
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
3227
import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
33-
import com.viaversion.viaversion.libs.gson.JsonElement;
3428
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPacket1_20_3;
3529
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPackets1_20_3;
3630
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.rewriter.RecipeRewriter1_20_3;
3731
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPacket1_20_2;
3832
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPackets1_20_2;
3933
import com.viaversion.viaversion.rewriter.BlockRewriter;
40-
import com.viaversion.viaversion.util.ComponentUtil;
41-
import com.viaversion.viaversion.util.SerializerVersion;
42-
import com.viaversion.viaversion.util.StringUtil;
43-
import java.util.logging.Level;
4434

4535
public final class BlockItemPacketRewriter1_20_3 extends BackwardsItemRewriter<ClientboundPacket1_20_3, ServerboundPacket1_20_2, Protocol1_20_3To1_20_2> {
4636

@@ -50,13 +40,13 @@ public BlockItemPacketRewriter1_20_3(final Protocol1_20_3To1_20_2 protocol) {
5040

5141
@Override
5242
public void registerPackets() {
53-
final BlockRewriter<ClientboundPacket1_20_3> blockRewriter = BlockRewriter.for1_20_2(protocol);
43+
final BlockRewriter<ClientboundPacket1_20_3> blockRewriter = new BlockPacketRewriter1_20_3(protocol);
5444
blockRewriter.registerBlockEvent(ClientboundPackets1_20_3.BLOCK_EVENT);
5545
blockRewriter.registerBlockUpdate(ClientboundPackets1_20_3.BLOCK_UPDATE);
5646
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_20_3.SECTION_BLOCKS_UPDATE);
5747
blockRewriter.registerLevelEvent(ClientboundPackets1_20_3.LEVEL_EVENT, 1010, 2001);
58-
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_20_3.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new, this::updateBlockEntity);
59-
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA, this::updateBlockEntity);
48+
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_20_3.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
49+
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA);
6050

6151
registerCooldown(ClientboundPackets1_20_3.COOLDOWN);
6252
registerSetContent1_17_1(ClientboundPackets1_20_3.CONTAINER_SET_CONTENT);
@@ -166,25 +156,4 @@ public void handleCraftingShaped(final PacketWrapper wrapper) {
166156
wrapper.read(Types.OPTIONAL_FLOAT); // Sound range
167157
});
168158
}
169-
170-
private void updateBlockEntity(final UserConnection connection, final BlockEntity blockEntity) {
171-
final CompoundTag tag = blockEntity.tag();
172-
if (tag == null) {
173-
return;
174-
}
175-
176-
final StringTag customName = tag.getStringTag("CustomName");
177-
if (customName == null) {
178-
return;
179-
}
180-
181-
try {
182-
final JsonElement updatedComponent = ComponentUtil.convertJson(customName.getValue(), SerializerVersion.V1_20_3, SerializerVersion.V1_19_4);
183-
customName.setValue(updatedComponent.toString());
184-
} catch (final Exception e) {
185-
if (!Via.getConfig().isSuppressTextComponentConversionWarnings()) {
186-
protocol.getLogger().log(Level.SEVERE, "Error during custom name conversion: " + StringUtil.forLogging(customName.getValue()), e);
187-
}
188-
}
189-
}
190159
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
3+
* Copyright (C) 2016-2026 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.rewriter;
19+
20+
import com.viaversion.nbt.tag.CompoundTag;
21+
import com.viaversion.nbt.tag.StringTag;
22+
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
23+
import com.viaversion.viaversion.api.Via;
24+
import com.viaversion.viaversion.api.connection.UserConnection;
25+
import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity;
26+
import com.viaversion.viaversion.api.type.Types;
27+
import com.viaversion.viaversion.libs.gson.JsonElement;
28+
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPacket1_20_3;
29+
import com.viaversion.viaversion.rewriter.BlockRewriter;
30+
import com.viaversion.viaversion.util.ComponentUtil;
31+
import com.viaversion.viaversion.util.SerializerVersion;
32+
import com.viaversion.viaversion.util.StringUtil;
33+
import java.util.logging.Level;
34+
35+
public final class BlockPacketRewriter1_20_3 extends BlockRewriter<ClientboundPacket1_20_3> {
36+
37+
public BlockPacketRewriter1_20_3(final Protocol1_20_3To1_20_2 protocol) {
38+
super(protocol, Types.BLOCK_POSITION1_14, Types.COMPOUND_TAG);
39+
}
40+
41+
@Override
42+
public void handleBlockEntity(final UserConnection connection, final BlockEntity blockEntity) {
43+
final CompoundTag tag = blockEntity.tag();
44+
if (tag == null) {
45+
return;
46+
}
47+
48+
final StringTag customName = tag.getStringTag("CustomName");
49+
if (customName == null) {
50+
return;
51+
}
52+
53+
try {
54+
final JsonElement updatedComponent = ComponentUtil.convertJson(customName.getValue(), SerializerVersion.V1_20_3, SerializerVersion.V1_19_4);
55+
customName.setValue(updatedComponent.toString());
56+
} catch (final Exception e) {
57+
if (Via.getConfig().logTextComponentConversionErrors()) {
58+
protocol.getLogger().log(Level.SEVERE, "Error during custom name conversion: " + StringUtil.forLogging(customName.getValue()), e);
59+
}
60+
}
61+
}
62+
}

common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java

Lines changed: 3 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
package com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.rewriter;
1919

2020
import com.viaversion.nbt.tag.CompoundTag;
21-
import com.viaversion.nbt.tag.IntArrayTag;
2221
import com.viaversion.nbt.tag.ListTag;
23-
import com.viaversion.nbt.tag.StringTag;
2422
import com.viaversion.nbt.tag.Tag;
2523
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
2624
import com.viaversion.viabackwards.api.rewriters.StructuredEnchantmentRewriter;
@@ -45,11 +43,9 @@
4543
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ServerboundPackets1_20_3;
4644
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.rewriter.RecipeRewriter1_20_3;
4745
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.Protocol1_20_3To1_20_5;
48-
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.data.BannerPatterns1_20_5;
4946
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ClientboundPacket1_20_5;
5047
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ClientboundPackets1_20_5;
5148
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.rewriter.StructuredDataConverter;
52-
import com.viaversion.viaversion.rewriter.BlockRewriter;
5349
import com.viaversion.viaversion.util.Key;
5450
import org.checkerframework.checker.nullness.qual.Nullable;
5551

@@ -66,17 +62,17 @@ public BlockItemPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 protocol) {
6662

6763
@Override
6864
public void registerPackets() {
69-
final BlockRewriter<ClientboundPacket1_20_5> blockRewriter = BlockRewriter.for1_20_2(protocol);
65+
final BlockPacketRewriter1_20_5 blockRewriter = new BlockPacketRewriter1_20_5(protocol);
7066
blockRewriter.registerBlockEvent(ClientboundPackets1_20_5.BLOCK_EVENT);
7167
blockRewriter.registerBlockUpdate(ClientboundPackets1_20_5.BLOCK_UPDATE);
7268
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_20_5.SECTION_BLOCKS_UPDATE);
7369
blockRewriter.registerLevelEvent(ClientboundPackets1_20_5.LEVEL_EVENT, 1010, 2001);
74-
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_20_5.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new, (user, blockEntity) -> updateBlockEntityTag(user, blockEntity.tag()));
70+
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_20_5.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
7571
protocol.registerClientbound(ClientboundPackets1_20_5.BLOCK_ENTITY_DATA, wrapper -> {
7672
wrapper.passthrough(Types.BLOCK_POSITION1_14); // Position
7773
wrapper.passthrough(Types.VAR_INT); // Block entity type
7874
final CompoundTag tag = wrapper.passthrough(Types.COMPOUND_TAG);
79-
updateBlockEntityTag(wrapper.user(), tag);
75+
blockRewriter.updateBlockEntityTag(tag);
8076
});
8177

8278
registerCooldown(ClientboundPackets1_20_5.COOLDOWN);
@@ -220,76 +216,6 @@ public void registerPackets() {
220216
});
221217
}
222218

223-
private void updateBlockEntityTag(final UserConnection connection, final CompoundTag tag) {
224-
if (tag == null) {
225-
return;
226-
}
227-
228-
final Tag profileTag = tag.remove("profile");
229-
if (profileTag instanceof StringTag) {
230-
tag.put("SkullOwner", profileTag);
231-
} else if (profileTag instanceof CompoundTag) {
232-
updateProfileTag(tag, (CompoundTag) profileTag);
233-
}
234-
235-
final ListTag<CompoundTag> patternsTag = tag.getListTag("patterns", CompoundTag.class);
236-
if (patternsTag != null) {
237-
for (final CompoundTag patternTag : patternsTag) {
238-
final String pattern = patternTag.getString("pattern", "");
239-
final String color = patternTag.getString("color");
240-
final String compactIdentifier = BannerPatterns1_20_5.fullIdToCompact(Key.stripMinecraftNamespace(pattern));
241-
if (compactIdentifier == null || color == null) {
242-
continue;
243-
}
244-
245-
patternTag.remove("pattern");
246-
patternTag.remove("color");
247-
patternTag.putString("Pattern", compactIdentifier);
248-
patternTag.putInt("Color", colorId(color));
249-
}
250-
251-
tag.remove("patterns");
252-
tag.put("Patterns", patternsTag);
253-
}
254-
}
255-
256-
private void updateProfileTag(final CompoundTag tag, final CompoundTag profileTag) {
257-
final CompoundTag skullOwnerTag = new CompoundTag();
258-
tag.put("SkullOwner", skullOwnerTag);
259-
260-
final String name = profileTag.getString("name");
261-
if (name != null) {
262-
skullOwnerTag.putString("Name", name);
263-
}
264-
265-
final IntArrayTag idTag = profileTag.getIntArrayTag("id");
266-
if (idTag != null) {
267-
skullOwnerTag.put("Id", idTag);
268-
}
269-
270-
final ListTag<CompoundTag> propertiesListTag = profileTag.getListTag("properties", CompoundTag.class);
271-
if (propertiesListTag == null) {
272-
return;
273-
}
274-
275-
final CompoundTag propertiesTag = new CompoundTag();
276-
for (final CompoundTag propertyTag : propertiesListTag) {
277-
final String property = propertyTag.getString("name", "");
278-
final String value = propertyTag.getString("value", "");
279-
final String signature = propertyTag.getString("signature");
280-
281-
final ListTag<CompoundTag> list = new ListTag<>(CompoundTag.class);
282-
final CompoundTag updatedPropertyTag = new CompoundTag();
283-
updatedPropertyTag.putString("Value", value);
284-
if (signature != null) {
285-
updatedPropertyTag.putString("Signature", signature);
286-
}
287-
list.add(updatedPropertyTag);
288-
propertiesTag.put(property, list);
289-
}
290-
skullOwnerTag.put("Properties", propertiesTag);
291-
}
292-
293219
private void cleanInput(@Nullable final Item item) {
294220
// Try to maybe hopefully get the tag matching to what the client will try to input by removing default data
295221
if (item == null || item.tag() == null) {
@@ -326,27 +252,6 @@ private void removeEmptyList(final CompoundTag tag, final String key) {
326252
}
327253
}
328254

329-
private static int colorId(final String color) {
330-
return switch (color) {
331-
case "orange" -> 1;
332-
case "magenta" -> 2;
333-
case "light_blue" -> 3;
334-
case "yellow" -> 4;
335-
case "lime" -> 5;
336-
case "pink" -> 6;
337-
case "gray" -> 7;
338-
case "light_gray" -> 8;
339-
case "cyan" -> 9;
340-
case "purple" -> 10;
341-
case "blue" -> 11;
342-
case "brown" -> 12;
343-
case "green" -> 13;
344-
case "red" -> 14;
345-
case "black" -> 15;
346-
default -> 0;
347-
};
348-
}
349-
350255
@Override
351256
public @Nullable Item handleItemToClient(final UserConnection connection, Item item) {
352257
if (item.isEmpty()) {

0 commit comments

Comments
 (0)