|
28 | 28 | import net.lenni0451.mcstructs.text.Style; |
29 | 29 | import net.lenni0451.mcstructs.text.TextComponent; |
30 | 30 | import net.lenni0451.mcstructs.text.components.StringComponent; |
| 31 | +import net.lenni0451.mcstructs.text.components.TranslationComponent; |
31 | 32 | import net.lenni0451.mcstructs.text.events.hover.HoverEvent; |
32 | 33 | import net.lenni0451.mcstructs.text.events.hover.impl.EntityHoverEvent; |
33 | 34 | import net.lenni0451.mcstructs.text.events.hover.impl.ItemHoverEvent; |
@@ -146,27 +147,39 @@ public static Tag trimStrings(final Tag input) { |
146 | 147 | private static JsonElement convert(final SerializerVersion from, final SerializerVersion to, final TextComponent component) { |
147 | 148 | if (from.ordinal() >= SerializerVersion.V1_16.ordinal() && to.ordinal() < SerializerVersion.V1_16.ordinal()) { |
148 | 149 | // 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); |
165 | 160 | } |
166 | | - itemHoverEvent.setLegacyData(to.toSNBT(tag)); |
167 | 161 | } |
168 | 162 | } |
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 | + } |
170 | 183 | } |
171 | 184 |
|
172 | 185 | public static JsonElement legacyToJson(final String message) { |
|
0 commit comments