aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/config
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-05-15 16:34:24 -0400
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-05-15 16:34:24 -0400
commitc43c27493a0c3110bcdb6479da80c3641133ccee (patch)
tree12ab0a6c44a2c05f7c12403fabac8c0214a0f032 /src/main/java/de/hysky/skyblocker/config
parentfb4efbbabde2808d9c565e8f638791616c5eb473 (diff)
downloadSkyblocker-c43c27493a0c3110bcdb6479da80c3641133ccee.tar.gz
Skyblocker-c43c27493a0c3110bcdb6479da80c3641133ccee.tar.bz2
Skyblocker-c43c27493a0c3110bcdb6479da80c3641133ccee.zip
Add Quick Nav data fixer and refactor tabs
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/config')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java24
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java70
-rw-r--r--src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFix.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix1.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix2QuickNav.java38
7 files changed, 109 insertions, 55 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java
index 688b85aa..b7728030 100644
--- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java
+++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java
@@ -26,7 +26,7 @@ import java.lang.StackWalker.Option;
import java.nio.file.Path;
public class SkyblockerConfigManager {
- public static final int CONFIG_VERSION = 2;
+ public static final int CONFIG_VERSION = 3;
private static final Path CONFIG_FILE = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json");
private static final ConfigClassHandler<SkyblockerConfig> HANDLER = ConfigClassHandler.createBuilder(SkyblockerConfig.class)
.serializer(config -> GsonConfigSerializerBuilder.create(config)
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java
index acf5b94e..98e5511c 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java
@@ -8,7 +8,9 @@ import dev.isxander.yacl3.api.Option;
import dev.isxander.yacl3.api.OptionDescription;
import dev.isxander.yacl3.api.OptionGroup;
import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.ItemControllerBuilder;
import dev.isxander.yacl3.api.controller.StringControllerBuilder;
+import net.minecraft.item.Item;
import net.minecraft.text.Text;
public class QuickNavigationCategory {
@@ -54,26 +56,26 @@ public class QuickNavigationCategory {
newValue -> button.render = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
- .option(Option.<String>createBuilder()
+ .option(Option.<Item>createBuilder()
.name(Text.translatable("skyblocker.config.quickNav.button.item.itemName"))
- .binding(defaultButton.item.id,
- () -> button.item.id,
- newValue -> button.item.id = newValue)
- .controller(StringControllerBuilder::create)
+ .binding(defaultButton.itemData.item,
+ () -> button.itemData.item,
+ newValue -> button.itemData.item = newValue)
+ .controller(ItemControllerBuilder::create)
.build())
.option(Option.<Integer>createBuilder()
.name(Text.translatable("skyblocker.config.quickNav.button.item.count"))
- .binding(defaultButton.item.count,
- () -> button.item.count,
- newValue -> button.item.count = newValue)
+ .binding(defaultButton.itemData.count,
+ () -> button.itemData.count,
+ newValue -> button.itemData.count = newValue)
.controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 99))
.build())
.option(Option.<String>createBuilder()
.name(Text.translatable("skyblocker.config.quickNav.button.item.components"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.components.@Tooltip")))
- .binding(defaultButton.item.components,
- () -> button.item.components,
- newValue -> button.item.components = newValue)
+ .binding(defaultButton.itemData.components,
+ () -> button.itemData.components,
+ newValue -> button.itemData.components = newValue)
.controller(StringControllerBuilder::create)
.build())
.option(Option.<String>createBuilder()
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java
index e4ecfc54..548354c7 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java
@@ -1,6 +1,9 @@
package de.hysky.skyblocker.config.configs;
import dev.isxander.yacl3.config.v2.api.SerialEntry;
+import net.minecraft.item.Item;
+import net.minecraft.registry.Registries;
+import net.minecraft.util.Identifier;
public class QuickNavigationConfig {
@SerialEntry
@@ -24,14 +27,13 @@ public class QuickNavigationConfig {
* " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)"
*/
@SerialEntry
- public QuickNavItem button4 = new QuickNavItem(true,
- new ItemData("leather_chestplate", 1, "[minecraft:dyed_color={rgb:8991416}]"), "Wardrobe \\([12]/2\\)",
- "/wardrobe");
+ public QuickNavItem button4 = new QuickNavItem(true, new ItemData("leather_chestplate", 1, "[minecraft:dyed_color={rgb:8991416}]"), "Wardrobe \\([12]/2\\)", "/wardrobe");
@SerialEntry
- public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1,
- "[minecraft:profile={id:[I;-2081424676,-57521078,-2073572414,158072763],name:\"\",properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}]"),
- "Sack of Sacks", "/sacks");
+ public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1, "[minecraft:profile={id:[I;-2081424676,-57521078,-2073572414,158072763],name:\"\",properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}]"), "Sack of Sacks", "/sacks");
+
+ @SerialEntry
+ public QuickNavItem button6 = new QuickNavItem(true, new ItemData("player_head", 1, "[\"minecraft:profile\":{\"name\":\"5da6bec64bd942bc\",\"id\":[1571208902,1272529596,-1566400349,-679283814],\"properties\":[{\"name\":\"textures\",\"value\":\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTYxYTkxOGMwYzQ5YmE4ZDA1M2U1MjJjYjkxYWJjNzQ2ODkzNjdiNGQ4YWEwNmJmYzFiYTkxNTQ3MzA5ODVmZiJ9fX0\\u003d\"}]}]"), "Accessory Bag(?: \\(\\d/\\d\\))?", "/accessories");
/* REGEX Explanation
* "(?:Rift )?" : optional match on the non-capturing group "Rift "
@@ -39,54 +41,42 @@ public class QuickNavigationConfig {
* "(?: \\([12]\\/2\\))?" : optional match on the non-capturing group " (1/2)" or " (2/2)"
*/
@SerialEntry
- public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"),
- "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage");
+ public QuickNavItem button7 = new QuickNavItem(true, new ItemData("ender_chest"), "(?:Rift )?Storage(?: \\(\\d/\\d\\))?", "/storage");
@SerialEntry
- public QuickNavItem button7 = new QuickNavItem(true, new ItemData("player_head", 1,
- "[minecraft:profile={id:[I;-300151517,-631415889,-1193921967,-1821784279],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}]"),
- "none", "/hub");
+ public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, "[\"minecraft:profile\":{\"name\":\"421a8ef40eff47f4\",\"id\":[1109036788,251611124,-2126904485,-130621758],\"properties\":[{\"name\":\"textures\",\"value\":\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0\\u003d\"}]}]"), "", "/is");
@SerialEntry
- public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1,
- "[minecraft:profile={id:[I;1605800870,415127827,-1236127084,15358548],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}]"),
- "none", "/warp dungeon_hub");
+ public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1, "[\"minecraft:profile\":{\"name\":\"e30e30d02878417c\",\"id\":[-485609264,678969724,-1929747597,-718202427],\"properties\":[{\"name\":\"textures\",\"value\":\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ4ODBkMmMxZTdiODZlODc1MjJlMjA4ODI2NTZmNDViYWZkNDJmOTQ5MzJiMmM1ZTBkNmVjYWE0OTBjYjRjIn19fQ\\u003d\\u003d\"}]}]"), "", "/warp garden");
@SerialEntry
- public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1,
- "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjVkZjU1NTkyNjQzMGQ1ZDc1YWRlZDIxZGQ5NjE5Yjc2YzViN2NhMmM3ZjU0MDE0NDA1MjNkNTNhOGJjZmFhYiJ9fX0=\"}]}]"),
- "Visit prtl", "/visit prtl");
+ public QuickNavItem button10 = new QuickNavItem(true, new ItemData("player_head", 1, "[minecraft:profile={id:[I;-300151517,-631415889,-1193921967,-1821784279],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}]"), "none", "/hub");
@SerialEntry
- public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item",
- "/etable");
-
+ public QuickNavItem button11 = new QuickNavItem(true, new ItemData("player_head", 1, "[minecraft:profile={id:[I;1605800870,415127827,-1236127084,15358548],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}]"), "none", "/warp dungeon_hub");
@SerialEntry
- public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil");
-
- @SerialEntry
- public QuickNavItem button12 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft");
+ public QuickNavItem button12 = new QuickNavItem(true, new ItemData("gold_block"), "", "/ah");
@SerialEntry
public QuickNavItem button13 = new QuickNavItem(true, new ItemData("player_head", 1, "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmZlMmRjZGE0MWVjM2FmZjhhZjUwZjI3MmVjMmUwNmE4ZjUwOWUwZjgwN2YyMzU1YTFmNWEzM2MxYjY2ZTliNCJ9fX0=\"}]}]"), "Bazaar .*", "/bz");
@SerialEntry
- public QuickNavItem button14 = new QuickNavItem(true, new ItemData("player_head", 1, "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzFlNDBmNDAyOTgxMzAzZmM4NTA4ZDkyMThkNGE3MzdhYzkzMTc2NmI4NTI4MWY5NDg5ZGI1OTA4OTU3ZGMyMiJ9fX0=\"}]}]"), "Auction House", "/ah");
+ public QuickNavItem button14 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft");
public static class QuickNavItem {
public QuickNavItem(Boolean render, ItemData itemData, String uiTitle, String clickEvent) {
this.render = render;
- this.item = itemData;
+ this.itemData = itemData;
this.clickEvent = clickEvent;
this.uiTitle = uiTitle;
}
@SerialEntry
- public Boolean render;
+ public boolean render;
@SerialEntry
- public ItemData item;
+ public ItemData itemData;
@SerialEntry
public String uiTitle;
@@ -96,20 +86,26 @@ public class QuickNavigationConfig {
}
public static class ItemData {
- public ItemData(String id, int count, String components) {
- this.id = id;
- this.count = count;
- this.components = components;
+ public ItemData(String item) {
+ this(item, 1, "[]");
}
- public ItemData(String id) {
- this.id = id;
- this.count = 1;
- this.components = "[]";
+ public ItemData(String item, int count, String components) {
+ this(Registries.ITEM.get(new Identifier(item)), count, components);
+ }
+
+ public ItemData(Item item) {
+ this(item, 1, "[]");
+ }
+
+ public ItemData(Item item, int count, String components) {
+ this.item = item;
+ this.count = count;
+ this.components = components;
}
@SerialEntry
- public String id;
+ public Item item;
@SerialEntry
public int count;
diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFix.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFix.java
new file mode 100644
index 00000000..9ec0e2b8
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFix.java
@@ -0,0 +1,16 @@
+package de.hysky.skyblocker.config.datafixer;
+
+import com.mojang.datafixers.DataFix;
+import com.mojang.datafixers.DataFixUtils;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.serialization.Dynamic;
+
+public abstract class ConfigDataFix extends DataFix {
+ public ConfigDataFix(Schema outputSchema, boolean changesType) {
+ super(outputSchema, changesType);
+ }
+
+ protected <T> Dynamic<T> fixVersion(Dynamic<T> dynamic) {
+ return dynamic.set("version", dynamic.createInt(DataFixUtils.getVersion(getVersionKey())));
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java
index 97261c76..f4e4aad1 100644
--- a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java
+++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java
@@ -47,9 +47,13 @@ public class ConfigDataFixer {
}
public static JsonObject apply(JsonObject oldConfig) {
+ return apply(oldConfig, SkyblockerConfigManager.CONFIG_VERSION);
+ }
+
+ public static JsonObject apply(JsonObject oldConfig, int newVersion) {
long start = System.currentTimeMillis();
- JsonObject newConfig = build().update(CONFIG_TYPE, new Dynamic<>(JsonOps.INSTANCE, oldConfig), JsonHelper.getInt(oldConfig, "version").orElse(1), SkyblockerConfigManager.CONFIG_VERSION).getValue().getAsJsonObject();
+ JsonObject newConfig = build().update(CONFIG_TYPE, new Dynamic<>(JsonOps.INSTANCE, oldConfig), JsonHelper.getInt(oldConfig, "version").orElse(1), newVersion).getValue().getAsJsonObject();
long end = System.currentTimeMillis();
LOGGER.info("[Skyblocker Config Data Fixer] Applied datafixers in {} ms!", end - start);
@@ -62,6 +66,8 @@ public class ConfigDataFixer {
builder.addSchema(1, ConfigSchema::new);
Schema schema2 = builder.addSchema(2, Schema::new);
builder.addFixer(new ConfigFix1(schema2, true));
+ Schema schema3 = builder.addSchema(3, Schema::new);
+ builder.addFixer(new ConfigFix2QuickNav(schema3, true));
return builder.buildUnoptimized();
}
diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix1.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix1.java
index 405a2781..e8198d77 100644
--- a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix1.java
+++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix1.java
@@ -14,7 +14,7 @@ import net.minecraft.nbt.StringNbtReader;
import java.util.Locale;
-public class ConfigFix1 extends DataFix {
+public class ConfigFix1 extends ConfigDataFix {
public ConfigFix1(Schema outputSchema, boolean changesType) {
super(outputSchema, changesType);
}
@@ -32,10 +32,6 @@ public class ConfigFix1 extends DataFix {
return fixMisc(fixQuickNav(fixChat(fixSlayers(fixOtherLocations(fixFarming(fixMining(fixCrimsonIsle(fixDungeons(fixHelpers(fixUIAndVisuals(fixGeneral(fixVersion(dynamic)))))))))))));
}
- private <T> Dynamic<T> fixVersion(Dynamic<T> dynamic) {
- return dynamic.set("version", dynamic.createInt(DataFixUtils.getVersion(getVersionKey())));
- }
-
private static <T> Dynamic<T> fixGeneral(Dynamic<T> dynamic) {
return dynamic.update("general", general -> general.update("itemTooltip", itemTooltip -> itemTooltip.setFieldIfPresent("dungeonQuality", general.get("dungeonQuality").result())).remove("dungeonQuality"));
}
diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix2QuickNav.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix2QuickNav.java
new file mode 100644
index 00000000..bd67b1b0
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix2QuickNav.java
@@ -0,0 +1,38 @@
+package de.hysky.skyblocker.config.datafixer;
+
+import com.mojang.datafixers.DSL;
+import com.mojang.datafixers.TypeRewriteRule;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.serialization.Dynamic;
+import net.minecraft.util.Identifier;
+
+public class ConfigFix2QuickNav extends ConfigDataFix {
+ public ConfigFix2QuickNav(Schema outputSchema, boolean changesType) {
+ super(outputSchema, changesType);
+ }
+
+ @Override
+ protected TypeRewriteRule makeRule() {
+ return fixTypeEverywhereTyped(
+ "ConfigFix2QuickNav",
+ getInputSchema().getType(ConfigDataFixer.CONFIG_TYPE),
+ typed -> typed.update(DSL.remainderFinder(), this::fix)
+ );
+ }
+
+ private <T> Dynamic<T> fix(Dynamic<T> dynamic) {
+ return fixVersion(dynamic).update("quickNav", quickNav -> quickNav
+ .renameField("button12", "button13")
+ .renameField("button11", "button12")
+ .renameField("button10", "button11")
+ .renameField("button9", "button10")
+ .renameField("button8", "button9")
+ .renameField("button7", "button8")
+ .updateMapValues(button -> button.getFirst().asString().getOrThrow().startsWith("button") ? button.mapSecond(this::fixButton) : button)
+ );
+ }
+
+ private <T> Dynamic<T> fixButton(Dynamic<T> button) {
+ return button.renameAndFixField("item", "itemData", itemData -> itemData.renameAndFixField("id", "item", id -> id.createString(new Identifier(id.asString().getOrThrow()).toString())));
+ }
+}