aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix2QuickNav.java
blob: 48dea0a7e1f0689829c1c9f7d8a98796d1ba5b86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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(Identifier.of(id.asString().getOrThrow()).toString())));
    }
}