mirror of
https://github.com/PaperMC/Paper.git
synced 2025-07-26 09:42:06 -07:00
Directly walk text component after converting from JSON
It's important to convert the ItemStack present inside the text component. The ItemStack nests TEXT_COMPONENT (written book pages, custom name, ...) which would otherwise not be walked since we have set a breakpoint at the version and moved the walker to the next version step. This fixes item names for hover events inside written book pages failing to convert to NBT. This issue is also present on DFU.
This commit is contained in:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user