43 lines
2.4 KiB
Java
43 lines
2.4 KiB
Java
package net.minecraft.util.datafix.fixes;
|
|
|
|
import java.util.Objects;
|
|
import java.util.function.Function;
|
|
import com.mojang.datafixers.util.Pair;
|
|
import com.mojang.datafixers.OpticFinder;
|
|
import com.mojang.datafixers.types.Type;
|
|
import com.mojang.datafixers.DSL;
|
|
import com.mojang.datafixers.types.templates.List;
|
|
import com.mojang.datafixers.Typed;
|
|
import com.mojang.datafixers.schemas.Schema;
|
|
|
|
public class VillagerTradeFix extends NamedEntityFix {
|
|
public VillagerTradeFix(final Schema schema, final boolean boolean2) {
|
|
super(schema, boolean2, "Villager trade fix", References.ENTITY, "minecraft:villager");
|
|
}
|
|
|
|
@Override
|
|
protected Typed<?> fix(final Typed<?> typed) {
|
|
final OpticFinder<?> opticFinder3 = typed.getType().findField("Offers");
|
|
final OpticFinder<?> opticFinder4 = opticFinder3.type().findField("Recipes");
|
|
final Type<?> type5 = opticFinder4.type();
|
|
if (!(type5 instanceof List.ListType)) {
|
|
throw new IllegalStateException("Recipes are expected to be a list.");
|
|
}
|
|
final List.ListType<?> listType6 = type5;
|
|
final Type<?> type6 = listType6.getElement();
|
|
final OpticFinder<?> opticFinder5 = DSL.typeFinder((Type)type6);
|
|
final OpticFinder<?> opticFinder6 = type6.findField("buy");
|
|
final OpticFinder<?> opticFinder7 = type6.findField("buyB");
|
|
final OpticFinder<?> opticFinder8 = type6.findField("sell");
|
|
final OpticFinder<Pair<String, String>> opticFinder9 = (OpticFinder<Pair<String, String>>)DSL.fieldFinder("id", DSL.named(References.ITEM_NAME.typeName(), DSL.namespacedString()));
|
|
final Function<Typed<?>, Typed<?>> function13 = (Function<Typed<?>, Typed<?>>)(typed -> this.updateItemStack(opticFinder9, typed));
|
|
final OpticFinder opticFinder10;
|
|
final Function function14;
|
|
return typed.updateTyped((OpticFinder)opticFinder3, typed -> typed.updateTyped((OpticFinder)opticFinder4, typed -> typed.updateTyped((OpticFinder)opticFinder5, typed -> typed.updateTyped(opticFinder10, function14).updateTyped((OpticFinder)opticFinder7, function14).updateTyped((OpticFinder)opticFinder8, function14))));
|
|
}
|
|
|
|
private Typed<?> updateItemStack(final OpticFinder<Pair<String, String>> opticFinder, final Typed<?> typed) {
|
|
return typed.update((OpticFinder)opticFinder, pair -> pair.mapSecond(string -> Objects.equals(string, "minecraft:carved_pumpkin") ? "minecraft:pumpkin" : string));
|
|
}
|
|
}
|