package net.minecraft.util.datafix; import com.mojang.datafixers.Typed; import com.mojang.datafixers.types.Type; import com.mojang.serialization.Dynamic; import java.util.Optional; import java.util.function.Function; import java.util.stream.IntStream; public class ExtraDataFixUtils { public static Dynamic fixBlockPos(Dynamic data) { Optional optional = data.get("X").asNumber().result(); Optional optional2 = data.get("Y").asNumber().result(); Optional optional3 = data.get("Z").asNumber().result(); return !optional.isEmpty() && !optional2.isEmpty() && !optional3.isEmpty() ? data.createIntList( IntStream.of(new int[]{((Number)optional.get()).intValue(), ((Number)optional2.get()).intValue(), ((Number)optional3.get()).intValue()}) ) : data; } public static Typed cast(Type type, Typed data) { return new Typed<>(type, data.getOps(), (R)data.getValue()); } @SafeVarargs public static Function, Typed> chainAllFilters(Function, Typed>... filters) { return typed -> { for (Function, Typed> function : filters) { typed = (Typed)function.apply(typed); } return typed; }; } }