Skip to content

Commit af8cbaf

Browse files
Add item fixes to component rewriter in 1.21.x protocols as well (ViaVersion#4217)
Adds the rarity fix in 1.20.5->1.21 and the item/custom name fix in 1.21->1.21.2 to the component rewriters / chat items.
1 parent ad83d01 commit af8cbaf

File tree

3 files changed

+46
-10
lines changed

3 files changed

+46
-10
lines changed

common/src/main/java/com/viaversion/viaversion/protocols/v1_20_5to1_21/rewriter/ComponentRewriter1_21.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919

2020
import com.viaversion.nbt.tag.CompoundTag;
2121
import com.viaversion.nbt.tag.ListTag;
22+
import com.viaversion.nbt.tag.StringTag;
2223
import com.viaversion.viaversion.api.connection.UserConnection;
2324
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ClientboundPacket1_20_5;
2425
import com.viaversion.viaversion.protocols.v1_20_5to1_21.Protocol1_20_5To1_21;
2526
import com.viaversion.viaversion.rewriter.ComponentRewriter;
27+
import com.viaversion.viaversion.util.Key;
2628
import com.viaversion.viaversion.util.SerializerVersion;
2729
import com.viaversion.viaversion.util.TagUtil;
2830
import com.viaversion.viaversion.util.UUIDUtil;
@@ -34,8 +36,24 @@ public ComponentRewriter1_21(final Protocol1_20_5To1_21 protocol) {
3436
super(protocol, ReadType.NBT);
3537
}
3638

37-
private void convertAttributeModifiersComponent(final CompoundTag tag) {
38-
final CompoundTag attributeModifiers = TagUtil.getNamespacedCompoundTag(tag, "minecraft:attribute_modifiers");
39+
@Override
40+
protected void handleShowItem(final UserConnection connection, final CompoundTag itemTag, CompoundTag componentsTag) {
41+
super.handleShowItem(connection, itemTag, componentsTag);
42+
final String identifier = Key.stripMinecraftNamespace(itemTag.getString("id"));
43+
if (identifier.equals("trident") || identifier.equals("piglin_banner_pattern")) {
44+
if (componentsTag == null) {
45+
itemTag.put("components", componentsTag = new CompoundTag());
46+
}
47+
if (!TagUtil.containsNamespaced(componentsTag, "rarity")) {
48+
componentsTag.put("minecraft:rarity", new StringTag("common"));
49+
}
50+
}
51+
52+
if (componentsTag == null) {
53+
return;
54+
}
55+
56+
final CompoundTag attributeModifiers = TagUtil.getNamespacedCompoundTag(componentsTag, "attribute_modifiers");
3957
if (attributeModifiers == null) {
4058
return;
4159
}
@@ -48,14 +66,6 @@ private void convertAttributeModifiersComponent(final CompoundTag tag) {
4866
}
4967
}
5068

51-
@Override
52-
protected void handleShowItem(final UserConnection connection, final CompoundTag itemTag, final CompoundTag componentsTag) {
53-
super.handleShowItem(connection, itemTag, componentsTag);
54-
if (componentsTag != null) {
55-
convertAttributeModifiersComponent(componentsTag);
56-
}
57-
}
58-
5969
@Override
6070
protected SerializerVersion inputSerializerVersion() {
6171
return SerializerVersion.V1_20_5;

common/src/main/java/com/viaversion/viaversion/protocols/v1_21to1_21_2/rewriter/ComponentRewriter1_21_2.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
import com.viaversion.nbt.tag.CompoundTag;
2121
import com.viaversion.nbt.tag.ListTag;
2222
import com.viaversion.nbt.tag.StringTag;
23+
import com.viaversion.nbt.tag.Tag;
2324
import com.viaversion.viaversion.api.connection.UserConnection;
2425
import com.viaversion.viaversion.api.data.FullMappings;
2526
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPacket1_21;
2627
import com.viaversion.viaversion.protocols.v1_21to1_21_2.Protocol1_21To1_21_2;
2728
import com.viaversion.viaversion.rewriter.ComponentRewriter;
2829
import com.viaversion.viaversion.util.SerializerVersion;
2930
import com.viaversion.viaversion.util.TagUtil;
31+
import java.util.Collections;
3032
import java.util.Iterator;
3133

3234
public final class ComponentRewriter1_21_2 extends ComponentRewriter<ClientboundPacket1_21> {
@@ -62,6 +64,26 @@ protected void handleShowItem(final UserConnection connection, final CompoundTag
6264

6365
TagUtil.removeNamespaced(componentsTag, "fire_resistant");
6466
TagUtil.removeNamespaced(componentsTag, "lock");
67+
68+
final StringTag customName = TagUtil.getNamespacedStringTag(componentsTag, "custom_name");
69+
final StringTag itemName = TagUtil.getNamespacedStringTag(componentsTag, "item_name");
70+
if (customName != null || itemName == null) {
71+
return;
72+
}
73+
74+
final int identifier = protocol.getMappingData().getFullItemMappings().mappedId(itemTag.getString("id"));
75+
if (identifier == 952 || identifier == 1147 || identifier == 1039 || identifier == 1203 || identifier == 1200 || identifier == 1204 || identifier == 1202) {
76+
final var input = inputSerializerVersion();
77+
final var output = outputSerializerVersion();
78+
79+
final CompoundTag name = new CompoundTag();
80+
name.putBoolean("italic", false);
81+
name.putString("text", "");
82+
final Tag nameTag = input.toTag(input.toComponent(itemName.getValue()));
83+
name.put("extra", new ListTag<>(Collections.singletonList(nameTag)));
84+
85+
componentsTag.put("minecraft:custom_name", new StringTag(output.toString(output.toComponent(name))));
86+
}
6587
}
6688

6789
public static void convertAttributes(final CompoundTag componentsTag, final FullMappings mappings) {

common/src/main/java/com/viaversion/viaversion/util/TagUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ public static boolean removeNamespaced(final CompoundTag tag, final String key)
6060
return tag.remove(Key.namespaced(key)) != null || tag.remove(Key.stripMinecraftNamespace(key)) != null;
6161
}
6262

63+
public static boolean containsNamespaced(final CompoundTag tag, final String key) {
64+
return tag.contains(Key.namespaced(key)) || tag.contains(Key.stripMinecraftNamespace(key));
65+
}
66+
6367
public static @Nullable CompoundTag getNamespacedCompoundTag(final CompoundTag tag, final String key) {
6468
final CompoundTag compoundTag = tag.getCompoundTag(Key.namespaced(key));
6569
return compoundTag != null ? compoundTag : tag.getCompoundTag(Key.stripMinecraftNamespace(key));

0 commit comments

Comments
 (0)