Skip to content

Commit 78c5e2c

Browse files
committed
Convert hover events to legacy deep
1 parent e467c7c commit 78c5e2c

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

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

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import net.lenni0451.mcstructs.text.Style;
2929
import net.lenni0451.mcstructs.text.TextComponent;
3030
import net.lenni0451.mcstructs.text.components.StringComponent;
31+
import net.lenni0451.mcstructs.text.components.TranslationComponent;
3132
import net.lenni0451.mcstructs.text.events.hover.HoverEvent;
3233
import net.lenni0451.mcstructs.text.events.hover.impl.EntityHoverEvent;
3334
import net.lenni0451.mcstructs.text.events.hover.impl.ItemHoverEvent;
@@ -146,27 +147,39 @@ public static Tag trimStrings(final Tag input) {
146147
private static JsonElement convert(final SerializerVersion from, final SerializerVersion to, final TextComponent component) {
147148
if (from.ordinal() >= SerializerVersion.V1_16.ordinal() && to.ordinal() < SerializerVersion.V1_16.ordinal()) {
148149
// Convert hover event to legacy format
149-
final Style style = component.getStyle();
150-
final HoverEvent hoverEvent = style.getHoverEvent();
151-
if (hoverEvent instanceof EntityHoverEvent entityHoverEvent && entityHoverEvent.isModern()) {
152-
final EntityHoverEvent.ModernHolder entityData = entityHoverEvent.asModern();
153-
final CompoundTag tag = new CompoundTag();
154-
tag.putString("type", entityData.getType().get());
155-
tag.putString("id", entityData.getUuid().toString());
156-
tag.putString("name", to.toString(entityData.getName() != null ? entityData.getName() : new StringComponent("")));
157-
entityHoverEvent.setLegacyData(new StringComponent(to.toSNBT(tag)));
158-
} else if (hoverEvent instanceof ItemHoverEvent itemHoverEvent && itemHoverEvent.isModern()) {
159-
final ItemHoverEvent.ModernHolder itemData = itemHoverEvent.asModern();
160-
final CompoundTag tag = new CompoundTag();
161-
tag.putString("id", itemData.getId().get());
162-
tag.putByte("Count", (byte) itemData.getCount());
163-
if (itemData.getTag() != null) {
164-
tag.put("tag", itemData.getTag());
150+
component.forEach(c -> convertHoverToLegacy(to, c));
151+
}
152+
return to.toJson(component);
153+
}
154+
155+
private static void convertHoverToLegacy(final SerializerVersion to, final TextComponent component) {
156+
if (component instanceof TranslationComponent translationComponent) {
157+
for (final Object arg : translationComponent.getArgs()) {
158+
if (arg instanceof TextComponent componentArg) {
159+
convertHoverToLegacy(to, componentArg);
165160
}
166-
itemHoverEvent.setLegacyData(to.toSNBT(tag));
167161
}
168162
}
169-
return to.toJson(component);
163+
164+
final Style style = component.getStyle();
165+
final HoverEvent hoverEvent = style.getHoverEvent();
166+
if (hoverEvent instanceof EntityHoverEvent entityHoverEvent && entityHoverEvent.isModern()) {
167+
final EntityHoverEvent.ModernHolder entityData = entityHoverEvent.asModern();
168+
final CompoundTag tag = new CompoundTag();
169+
tag.putString("type", entityData.getType().get());
170+
tag.putString("id", entityData.getUuid().toString());
171+
tag.putString("name", to.toString(entityData.getName() != null ? entityData.getName() : new StringComponent("")));
172+
entityHoverEvent.setLegacyData(new StringComponent(to.toSNBT(tag)));
173+
} else if (hoverEvent instanceof ItemHoverEvent itemHoverEvent && itemHoverEvent.isModern()) {
174+
final ItemHoverEvent.ModernHolder itemData = itemHoverEvent.asModern();
175+
final CompoundTag tag = new CompoundTag();
176+
tag.putString("id", itemData.getId().get());
177+
tag.putByte("Count", (byte) itemData.getCount());
178+
if (itemData.getTag() != null) {
179+
tag.put("tag", itemData.getTag());
180+
}
181+
itemHoverEvent.setLegacyData(to.toSNBT(tag));
182+
}
170183
}
171184

172185
public static JsonElement legacyToJson(final String message) {

0 commit comments

Comments
 (0)