File size: 3,716 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package net.minecraft.util.datafix;

import com.mojang.datafixers.DataFixUtils;
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.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;

public class ExtraDataFixUtils {
    public static Dynamic<?> fixBlockPos(Dynamic<?> p_330445_) {
        Optional<Number> optional = p_330445_.get("X").asNumber().result();
        Optional<Number> optional1 = p_330445_.get("Y").asNumber().result();
        Optional<Number> optional2 = p_330445_.get("Z").asNumber().result();
        return !optional.isEmpty() && !optional1.isEmpty() && !optional2.isEmpty()
            ? p_330445_.createIntList(IntStream.of(optional.get().intValue(), optional1.get().intValue(), optional2.get().intValue()))
            : p_330445_;
    }

    public static <T, R> Typed<R> cast(Type<R> p_332791_, Typed<T> p_329826_) {
        return new Typed<>(p_332791_, p_329826_.getOps(), (R)p_329826_.getValue());
    }

    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 <A, B> TypeRewriteRule typePatcher(Type<A> p_365721_, Type<B> p_368008_) {
        RewriteResult<A, B> 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 <T> Function<Typed<?>, Typed<?>> chainAllFilters(Function<Typed<?>, Typed<?>>... p_343226_) {
        return p_344666_ -> {
            for (Function<Typed<?>, Typed<?>> function : p_343226_) {
                p_344666_ = function.apply(p_344666_);
            }

            return p_344666_;
        };
    }

    public static Dynamic<?> blockState(String p_364037_, Map<String, String> p_363925_) {
        Dynamic<Tag> dynamic = new Dynamic<>(NbtOps.INSTANCE, new CompoundTag());
        Dynamic<Tag> 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<String> 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_)
        );
    }
}