package net.minecraft.util.datafix; import com.mojang.datafixers.DataFixUtils; import com.mojang.datafixers.OpticFinder; import com.mojang.datafixers.RewriteResult; import com.mojang.datafixers.TypeRewriteRule; import com.mojang.datafixers.Typed; import com.mojang.datafixers.View; import com.mojang.datafixers.functions.PointFreeRule; import com.mojang.datafixers.types.Type; import com.mojang.serialization.Dynamic; import com.mojang.serialization.DynamicOps; import java.util.BitSet; import java.util.Map; import java.util.Optional; import java.util.Map.Entry; import java.util.function.Function; import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.IntStream; import net.minecraft.Util; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; public class ExtraDataFixUtils { public static Dynamic fixBlockPos(Dynamic p_330445_) { Optional optional = p_330445_.get("X").asNumber().result(); Optional optional1 = p_330445_.get("Y").asNumber().result(); Optional optional2 = p_330445_.get("Z").asNumber().result(); return !optional.isEmpty() && !optional1.isEmpty() && !optional2.isEmpty() ? createBlockPos(p_330445_, optional.get().intValue(), optional1.get().intValue(), optional2.get().intValue()) : p_330445_; } public static Dynamic fixInlineBlockPos(Dynamic p_396332_, String p_394183_, String p_393393_, String p_396117_, String p_391755_) { Optional optional = p_396332_.get(p_394183_).asNumber().result(); Optional optional1 = p_396332_.get(p_393393_).asNumber().result(); Optional optional2 = p_396332_.get(p_396117_).asNumber().result(); return !optional.isEmpty() && !optional1.isEmpty() && !optional2.isEmpty() ? p_396332_.remove(p_394183_) .remove(p_393393_) .remove(p_396117_) .set(p_391755_, createBlockPos(p_396332_, optional.get().intValue(), optional1.get().intValue(), optional2.get().intValue())) : p_396332_; } public static Dynamic createBlockPos(Dynamic p_396037_, int p_393850_, int p_395203_, int p_393761_) { return p_396037_.createIntList(IntStream.of(p_393850_, p_395203_, p_393761_)); } public static Typed cast(Type p_332791_, Typed p_329826_) { return new Typed<>(p_332791_, p_329826_.getOps(), (R)p_329826_.getValue()); } public static Typed cast(Type p_397444_, Object p_396508_, DynamicOps p_394824_) { return new Typed<>(p_397444_, p_394824_, (T)p_396508_); } public static Type patchSubType(Type p_362193_, Type p_361959_, Type p_368313_) { return p_362193_.all(typePatcher(p_361959_, p_368313_), true, false).view().newType(); } private static TypeRewriteRule typePatcher(Type p_365721_, Type p_368008_) { RewriteResult rewriteresult = RewriteResult.create(View.create("Patcher", p_365721_, p_368008_, p_358817_ -> p_358825_ -> { throw new UnsupportedOperationException(); }), new BitSet()); return TypeRewriteRule.everywhere(TypeRewriteRule.ifSame(p_365721_, rewriteresult), PointFreeRule.nop(), true, true); } @SafeVarargs public static Function, Typed> chainAllFilters(Function, Typed>... p_343226_) { return p_344666_ -> { for (Function, Typed> function : p_343226_) { p_344666_ = function.apply(p_344666_); } return p_344666_; }; } public static Dynamic blockState(String p_364037_, Map p_363925_) { Dynamic dynamic = new Dynamic<>(NbtOps.INSTANCE, new CompoundTag()); Dynamic dynamic1 = dynamic.set("Name", dynamic.createString(p_364037_)); if (!p_363925_.isEmpty()) { dynamic1 = dynamic1.set( "Properties", dynamic.createMap( p_363925_.entrySet() .stream() .collect( Collectors.toMap(p_358821_ -> dynamic.createString(p_358821_.getKey()), p_358819_ -> dynamic.createString(p_358819_.getValue())) ) ) ); } return dynamic1; } public static Dynamic blockState(String p_365301_) { return blockState(p_365301_, Map.of()); } public static Dynamic fixStringField(Dynamic p_360869_, String p_368546_, UnaryOperator p_368245_) { return p_360869_.update( p_368546_, p_358824_ -> DataFixUtils.orElse(p_358824_.asString().map(p_368245_).map(p_360869_::createString).result(), p_358824_) ); } public static String dyeColorIdToName(int p_395989_) { return switch (p_395989_) { case 1 -> "orange"; case 2 -> "magenta"; case 3 -> "light_blue"; case 4 -> "yellow"; case 5 -> "lime"; case 6 -> "pink"; case 7 -> "gray"; case 8 -> "light_gray"; case 9 -> "cyan"; case 10 -> "purple"; case 11 -> "blue"; case 12 -> "brown"; case 13 -> "green"; case 14 -> "red"; case 15 -> "black"; default -> "white"; }; } public static Typed readAndSet(Typed p_391819_, OpticFinder p_391269_, Dynamic p_395267_) { return p_391819_.set(p_391269_, Util.readTypedOrThrow(p_391269_.type(), p_395267_, true)); } }