diff --git a/paper-server/patches/features/0015-Rewrite-dataconverter-system.patch b/paper-server/patches/features/0015-Rewrite-dataconverter-system.patch index e61722d801..e9a7bb8123 100644 --- a/paper-server/patches/features/0015-Rewrite-dataconverter-system.patch +++ b/paper-server/patches/features/0015-Rewrite-dataconverter-system.patch @@ -24851,10 +24851,10 @@ index 0000000000000000000000000000000000000000..7d09c4218d0db8119d1681bf95900be8 +} diff --git a/ca/spottedleaf/dataconverter/minecraft/versions/V4290.java b/ca/spottedleaf/dataconverter/minecraft/versions/V4290.java new file mode 100644 -index 0000000000000000000000000000000000000000..ca9e3667b420f54f42b358068c102fe0cae4102d +index 0000000000000000000000000000000000000000..d5dfa9a64e2d3f9a37a5bdde60b92ed93bd89aed --- /dev/null +++ b/ca/spottedleaf/dataconverter/minecraft/versions/V4290.java -@@ -0,0 +1,247 @@ +@@ -0,0 +1,312 @@ +package ca.spottedleaf.dataconverter.minecraft.versions; + +import ca.spottedleaf.dataconverter.converters.DataConverter; @@ -24997,6 +24997,70 @@ index 0000000000000000000000000000000000000000..ca9e3667b420f54f42b358068c102fe0 + } + } + ++ private static void directWalkComponentList(final ListType list, final long fromVersion, final long toVersion) { ++ for (int i = 0, len = list.size(); i < len; ++i) { ++ directWalkComponent(list.getGeneric(i), fromVersion, toVersion); ++ } ++ } ++ ++ private static void directWalkComponent(final Object input, final long fromVersion, final long toVersion) { ++ if (input instanceof ListType listType) { ++ directWalkComponentList(listType, fromVersion, toVersion); ++ } else if (input instanceof MapType root) { ++ final ListType extra = root.getListUnchecked("extra"); ++ if (extra != null) { ++ directWalkComponentList(extra, fromVersion, toVersion); ++ } ++ ++ final Object separator = root.getGeneric("separator"); ++ if (separator != null) { ++ directWalkComponent(separator, fromVersion, toVersion); ++ } ++ ++ final MapType clickEvent = root.getMap("clickEvent"); ++ if (clickEvent != null) { ++ switch (clickEvent.getString("action", "")) { ++ case "run_command": ++ case "suggest_command": { ++ WalkerUtils.convert(MCTypeRegistry.DATACONVERTER_CUSTOM_TYPE_COMMAND, clickEvent, "value", fromVersion, toVersion); ++ break; ++ } ++ } ++ } ++ ++ final MapType hoverEvent = root.getMap("hoverEvent"); ++ if (hoverEvent != null) { ++ switch (hoverEvent.getString("action", "")) { ++ case "show_text": { ++ final Object contents = hoverEvent.getGeneric("contents"); ++ if (contents != null) { ++ directWalkComponent(contents, fromVersion, toVersion); ++ } ++ break; ++ } ++ case "show_item": { ++ if (hoverEvent.hasKey("contents", ObjectType.STRING)) { ++ WalkerUtils.convert(MCTypeRegistry.ITEM_NAME, hoverEvent, "contents", fromVersion, toVersion); ++ } else { ++ WalkerUtils.convert(MCTypeRegistry.ITEM_STACK, hoverEvent, "contents", fromVersion, toVersion); ++ } ++ break; ++ } ++ case "show_entity": { ++ WalkerUtils.convert(MCTypeRegistry.ENTITY_NAME, hoverEvent, "type", fromVersion, toVersion); ++ ++ final Object name = hoverEvent.getGeneric("name"); ++ if (name != null) { ++ directWalkComponent(name, fromVersion, toVersion); ++ } ++ break; ++ } ++ // default: do nothing ++ } ++ } ++ } // else: should only be string ++ } ++ + public static void register() { + MCTypeRegistry.TEXT_COMPONENT.addStructureConverter(new DataConverter<>(VERSION) { + @Override @@ -25043,6 +25107,7 @@ index 0000000000000000000000000000000000000000..ca9e3667b420f54f42b358068c102fe0 + }; + + convertNested(ret); ++ directWalkComponent(ret, sourceVersion, toVersion); + return ret; + } + } catch (final JsonParseException ex) {