package net.minecraft.util.datafix.fixes; import com.mojang.datafixers.Typed; import net.minecraft.util.datafix.schemas.NamespacedSchema; import com.mojang.datafixers.types.Type; import java.util.Optional; import com.mojang.datafixers.DataFixUtils; import com.mojang.datafixers.Dynamic; import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.Objects; import com.mojang.datafixers.util.Pair; import java.util.List; import com.mojang.datafixers.OpticFinder; import com.mojang.datafixers.types.templates.CompoundList; import com.mojang.datafixers.DSL; import com.mojang.datafixers.TypeRewriteRule; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.DataFix; public class NewVillageFix extends DataFix { public NewVillageFix(final Schema schema, final boolean boolean2) { super(schema, boolean2); } protected TypeRewriteRule makeRule() { final CompoundList.CompoundListType compoundListType2 = DSL.compoundList(DSL.string(), this.getInputSchema().getType(References.STRUCTURE_FEATURE)); final OpticFinder>> opticFinder3 = compoundListType2.finder(); return this.cap(compoundListType2); } private TypeRewriteRule cap(final CompoundList.CompoundListType compoundListType) { final Type type3 = this.getInputSchema().getType(References.CHUNK); final Type type4 = this.getInputSchema().getType(References.STRUCTURE_FEATURE); final OpticFinder opticFinder5 = type3.findField("Level"); final OpticFinder opticFinder6 = opticFinder5.type().findField("Structures"); final OpticFinder opticFinder7 = opticFinder6.type().findField("Starts"); final OpticFinder>> opticFinder8 = (OpticFinder>>)compoundListType.finder(); final Optional> optional2; return TypeRewriteRule.seq(this.fixTypeEverywhereTyped("NewVillageFix", (Type)type3, typed -> typed.updateTyped((OpticFinder)opticFinder5, typed -> typed.updateTyped((OpticFinder)opticFinder6, typed -> typed.updateTyped((OpticFinder)opticFinder7, typed -> typed.update((OpticFinder)opticFinder8, list -> list.stream().filter(pair -> !Objects.equals(pair.getFirst(), "Village")).map(pair -> pair.mapFirst(string -> string.equals("New_Village") ? "Village" : string)).collect(Collectors.toList()))).update(DSL.remainderFinder(), dynamic -> dynamic.update("References", dynamic -> { optional2 = dynamic.get("New_Village").get(); return ((Dynamic)DataFixUtils.orElse((Optional)optional2.map(dynamic2 -> dynamic.remove("New_Village").merge(dynamic.createString("Village"), dynamic2)), dynamic)).remove("Village"); }))))), this.fixTypeEverywhereTyped("NewVillageStartFix", (Type)type4, typed -> typed.update(DSL.remainderFinder(), dynamic -> dynamic.update("id", dynamic -> Objects.equals(NamespacedSchema.ensureNamespaced(dynamic.asString("")), "minecraft:new_village") ? dynamic.createString("minecraft:village") : dynamic)))); } }