PropertyDispatch.java

net.minecraft.client.data.models.blockstates.PropertyDispatch

信息

  • 全限定名:net.minecraft.client.data.models.blockstates.PropertyDispatch
  • 类型:public abstract class
  • 包:net.minecraft.client.data.models.blockstates
  • 源码路径:src/main/java/net/minecraft/client/data/models/blockstates/PropertyDispatch.java
  • 起始行号:L19
  • 职责:

    TODO

字段/常量

  • values
    • 类型: Map<PropertyValueList,V>
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.data.models.blockstates.PropertyDispatch.C1

    • 类型: class
    • 修饰符: public static
    • 源码定位: L107
    • 说明:

      TODO

  • net.minecraft.client.data.models.blockstates.PropertyDispatch.C2

    • 类型: class
    • 修饰符: public static
    • 源码定位: L132
    • 说明:

      TODO

  • net.minecraft.client.data.models.blockstates.PropertyDispatch.C3

    • 类型: class
    • 修饰符: public static
    • 源码定位: L165
    • 说明:

      TODO

  • net.minecraft.client.data.models.blockstates.PropertyDispatch.C4

    • 类型: class
    • 修饰符: public static
    • 源码定位: L204
    • 说明:

      TODO

  • net.minecraft.client.data.models.blockstates.PropertyDispatch.C5

    • 类型: class
    • 修饰符: public static
    • 源码定位: L256
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

protected void putValue(PropertyValueList key, V variant) @ L22

  • 方法名:putValue
  • 源码定位:L22
  • 返回类型:void
  • 修饰符:protected

参数:

  • key: PropertyValueList
  • variant: V

说明:

TODO

Map<PropertyValueList,V> getEntries() @ L29

  • 方法名:getEntries
  • 源码定位:L29
  • 返回类型:Map<PropertyValueList,V>
  • 修饰符:package-private

参数:

说明:

TODO

private void verifyComplete() @ L34

  • 方法名:verifyComplete
  • 源码定位:L34
  • 返回类型:void
  • 修饰符:private

参数:

说明:

TODO

abstract List<Property<?>> getDefinedProperties() @ L48

  • 方法名:getDefinedProperties
  • 源码定位:L48
  • 返回类型:List<Property<?>>
  • 修饰符:abstract

参数:

说明:

TODO

public static <T1 extends Comparable<T1>> PropertyDispatch.C1<MultiVariant,T1> initial(Property<T1> property1) @ L50

  • 方法名:initial
  • 源码定位:L50
  • 返回类型:<T1 extends Comparable> PropertyDispatch.C1<MultiVariant,T1>
  • 修饰符:public static

参数:

  • property1: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>> PropertyDispatch.C2<MultiVariant,T1,T2> initial(Property<T1> property1, Property<T2> property2) @ L54

  • 方法名:initial
  • 源码定位:L54
  • 返回类型:<T1 extends Comparable,T2 extends Comparable> PropertyDispatch.C2<MultiVariant,T1,T2>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>,T3 extends Comparable<T3>> PropertyDispatch.C3<MultiVariant,T1,T2,T3> initial(Property<T1> property1, Property<T2> property2, Property<T3> property3) @ L60

  • 方法名:initial
  • 源码定位:L60
  • 返回类型:<T1 extends Comparable,T2 extends Comparable,T3 extends Comparable> PropertyDispatch.C3<MultiVariant,T1,T2,T3>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property
  • property3: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>,T3 extends Comparable<T3>,T4 extends Comparable<T4>> PropertyDispatch.C4<MultiVariant,T1,T2,T3,T4> initial(Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4) @ L66

  • 方法名:initial
  • 源码定位:L66
  • 返回类型:<T1 extends Comparable,T2 extends Comparable,T3 extends Comparable,T4 extends Comparable> PropertyDispatch.C4<MultiVariant,T1,T2,T3,T4>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property
  • property3: Property
  • property4: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>,T3 extends Comparable<T3>,T4 extends Comparable<T4>,T5 extends Comparable<T5>> PropertyDispatch.C5<MultiVariant,T1,T2,T3,T4,T5> initial(Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4, Property<T5> property5) @ L72

  • 方法名:initial
  • 源码定位:L72
  • 返回类型:<T1 extends Comparable,T2 extends Comparable,T3 extends Comparable,T4 extends Comparable,T5 extends Comparable> PropertyDispatch.C5<MultiVariant,T1,T2,T3,T4,T5>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property
  • property3: Property
  • property4: Property
  • property5: Property

说明:

TODO

public static <T1 extends Comparable<T1>> PropertyDispatch.C1<VariantMutator,T1> modify(Property<T1> property1) @ L78

  • 方法名:modify
  • 源码定位:L78
  • 返回类型:<T1 extends Comparable> PropertyDispatch.C1<VariantMutator,T1>
  • 修饰符:public static

参数:

  • property1: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>> PropertyDispatch.C2<VariantMutator,T1,T2> modify(Property<T1> property1, Property<T2> property2) @ L82

  • 方法名:modify
  • 源码定位:L82
  • 返回类型:<T1 extends Comparable,T2 extends Comparable> PropertyDispatch.C2<VariantMutator,T1,T2>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>,T3 extends Comparable<T3>> PropertyDispatch.C3<VariantMutator,T1,T2,T3> modify(Property<T1> property1, Property<T2> property2, Property<T3> property3) @ L88

  • 方法名:modify
  • 源码定位:L88
  • 返回类型:<T1 extends Comparable,T2 extends Comparable,T3 extends Comparable> PropertyDispatch.C3<VariantMutator,T1,T2,T3>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property
  • property3: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>,T3 extends Comparable<T3>,T4 extends Comparable<T4>> PropertyDispatch.C4<VariantMutator,T1,T2,T3,T4> modify(Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4) @ L94

  • 方法名:modify
  • 源码定位:L94
  • 返回类型:<T1 extends Comparable,T2 extends Comparable,T3 extends Comparable,T4 extends Comparable> PropertyDispatch.C4<VariantMutator,T1,T2,T3,T4>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property
  • property3: Property
  • property4: Property

说明:

TODO

public static <T1 extends Comparable<T1>,T2 extends Comparable<T2>,T3 extends Comparable<T3>,T4 extends Comparable<T4>,T5 extends Comparable<T5>> PropertyDispatch.C5<VariantMutator,T1,T2,T3,T4,T5> modify(Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4, Property<T5> property5) @ L100

  • 方法名:modify
  • 源码定位:L100
  • 返回类型:<T1 extends Comparable,T2 extends Comparable,T3 extends Comparable,T4 extends Comparable,T5 extends Comparable> PropertyDispatch.C5<VariantMutator,T1,T2,T3,T4,T5>
  • 修饰符:public static

参数:

  • property1: Property
  • property2: Property
  • property3: Property
  • property4: Property
  • property5: Property

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public abstract class PropertyDispatch<V> {
    private final Map<PropertyValueList, V> values = new HashMap<>();
 
    protected void putValue(PropertyValueList key, V variant) {
        V previous = this.values.put(key, variant);
        if (previous != null) {
            throw new IllegalStateException("Value " + key + " is already defined");
        }
    }
 
    Map<PropertyValueList, V> getEntries() {
        this.verifyComplete();
        return Map.copyOf(this.values);
    }
 
    private void verifyComplete() {
        List<Property<?>> properties = this.getDefinedProperties();
        Stream<PropertyValueList> valuesToCover = Stream.of(PropertyValueList.EMPTY);
 
        for (Property<?> property : properties) {
            valuesToCover = valuesToCover.flatMap(current -> property.getAllValues().map(current::extend));
        }
 
        List<PropertyValueList> undefinedCombinations = valuesToCover.filter(f -> !this.values.containsKey(f)).toList();
        if (!undefinedCombinations.isEmpty()) {
            throw new IllegalStateException("Missing definition for properties: " + undefinedCombinations);
        }
    }
 
    abstract List<Property<?>> getDefinedProperties();
 
    public static <T1 extends Comparable<T1>> PropertyDispatch.C1<MultiVariant, T1> initial(Property<T1> property1) {
        return new PropertyDispatch.C1<>(property1);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>> PropertyDispatch.C2<MultiVariant, T1, T2> initial(
        Property<T1> property1, Property<T2> property2
    ) {
        return new PropertyDispatch.C2<>(property1, property2);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> PropertyDispatch.C3<MultiVariant, T1, T2, T3> initial(
        Property<T1> property1, Property<T2> property2, Property<T3> property3
    ) {
        return new PropertyDispatch.C3<>(property1, property2, property3);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>> PropertyDispatch.C4<MultiVariant, T1, T2, T3, T4> initial(
        Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4
    ) {
        return new PropertyDispatch.C4<>(property1, property2, property3, property4);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>> PropertyDispatch.C5<MultiVariant, T1, T2, T3, T4, T5> initial(
        Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4, Property<T5> property5
    ) {
        return new PropertyDispatch.C5<>(property1, property2, property3, property4, property5);
    }
 
    public static <T1 extends Comparable<T1>> PropertyDispatch.C1<VariantMutator, T1> modify(Property<T1> property1) {
        return new PropertyDispatch.C1<>(property1);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>> PropertyDispatch.C2<VariantMutator, T1, T2> modify(
        Property<T1> property1, Property<T2> property2
    ) {
        return new PropertyDispatch.C2<>(property1, property2);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> PropertyDispatch.C3<VariantMutator, T1, T2, T3> modify(
        Property<T1> property1, Property<T2> property2, Property<T3> property3
    ) {
        return new PropertyDispatch.C3<>(property1, property2, property3);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>> PropertyDispatch.C4<VariantMutator, T1, T2, T3, T4> modify(
        Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4
    ) {
        return new PropertyDispatch.C4<>(property1, property2, property3, property4);
    }
 
    public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>> PropertyDispatch.C5<VariantMutator, T1, T2, T3, T4, T5> modify(
        Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4, Property<T5> property5
    ) {
        return new PropertyDispatch.C5<>(property1, property2, property3, property4, property5);
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class C1<V, T1 extends Comparable<T1>> extends PropertyDispatch<V> {
        private final Property<T1> property1;
 
        private C1(Property<T1> property1) {
            this.property1 = property1;
        }
 
        @Override
        public List<Property<?>> getDefinedProperties() {
            return List.of(this.property1);
        }
 
        public PropertyDispatch.C1<V, T1> select(T1 value1, V variants) {
            PropertyValueList key = PropertyValueList.of(this.property1.value(value1));
            this.putValue(key, variants);
            return this;
        }
 
        public PropertyDispatch<V> generate(Function<T1, V> generator) {
            this.property1.getPossibleValues().forEach(value1 -> this.select((T1)value1, generator.apply((T1)value1)));
            return this;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class C2<V, T1 extends Comparable<T1>, T2 extends Comparable<T2>> extends PropertyDispatch<V> {
        private final Property<T1> property1;
        private final Property<T2> property2;
 
        private C2(Property<T1> property1, Property<T2> property2) {
            this.property1 = property1;
            this.property2 = property2;
        }
 
        @Override
        public List<Property<?>> getDefinedProperties() {
            return List.of(this.property1, this.property2);
        }
 
        public PropertyDispatch.C2<V, T1, T2> select(T1 value1, T2 value2, V variants) {
            PropertyValueList key = PropertyValueList.of(this.property1.value(value1), this.property2.value(value2));
            this.putValue(key, variants);
            return this;
        }
 
        public PropertyDispatch<V> generate(BiFunction<T1, T2, V> generator) {
            this.property1
                .getPossibleValues()
                .forEach(
                    value1 -> this.property2
                        .getPossibleValues()
                        .forEach(value2 -> this.select((T1)value1, (T2)value2, generator.apply((T1)value1, (T2)value2)))
                );
            return this;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class C3<V, T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> extends PropertyDispatch<V> {
        private final Property<T1> property1;
        private final Property<T2> property2;
        private final Property<T3> property3;
 
        private C3(Property<T1> property1, Property<T2> property2, Property<T3> property3) {
            this.property1 = property1;
            this.property2 = property2;
            this.property3 = property3;
        }
 
        @Override
        public List<Property<?>> getDefinedProperties() {
            return List.of(this.property1, this.property2, this.property3);
        }
 
        public PropertyDispatch.C3<V, T1, T2, T3> select(T1 value1, T2 value2, T3 value3, V variants) {
            PropertyValueList key = PropertyValueList.of(this.property1.value(value1), this.property2.value(value2), this.property3.value(value3));
            this.putValue(key, variants);
            return this;
        }
 
        public PropertyDispatch<V> generate(Function3<T1, T2, T3, V> generator) {
            this.property1
                .getPossibleValues()
                .forEach(
                    value1 -> this.property2
                        .getPossibleValues()
                        .forEach(
                            value2 -> this.property3
                                .getPossibleValues()
                                .forEach(value3 -> this.select((T1)value1, (T2)value2, (T3)value3, generator.apply((T1)value1, (T2)value2, (T3)value3)))
                        )
                );
            return this;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class C4<V, T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>>
        extends PropertyDispatch<V> {
        private final Property<T1> property1;
        private final Property<T2> property2;
        private final Property<T3> property3;
        private final Property<T4> property4;
 
        private C4(Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4) {
            this.property1 = property1;
            this.property2 = property2;
            this.property3 = property3;
            this.property4 = property4;
        }
 
        @Override
        public List<Property<?>> getDefinedProperties() {
            return List.of(this.property1, this.property2, this.property3, this.property4);
        }
 
        public PropertyDispatch.C4<V, T1, T2, T3, T4> select(T1 value1, T2 value2, T3 value3, T4 value4, V variants) {
            PropertyValueList key = PropertyValueList.of(
                this.property1.value(value1), this.property2.value(value2), this.property3.value(value3), this.property4.value(value4)
            );
            this.putValue(key, variants);
            return this;
        }
 
        public PropertyDispatch<V> generate(Function4<T1, T2, T3, T4, V> generator) {
            this.property1
                .getPossibleValues()
                .forEach(
                    value1 -> this.property2
                        .getPossibleValues()
                        .forEach(
                            value2 -> this.property3
                                .getPossibleValues()
                                .forEach(
                                    value3 -> this.property4
                                        .getPossibleValues()
                                        .forEach(
                                            value4 -> this.select(
                                                (T1)value1, (T2)value2, (T3)value3, (T4)value4, generator.apply((T1)value1, (T2)value2, (T3)value3, (T4)value4)
                                            )
                                        )
                                )
                        )
                );
            return this;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class C5<V, T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>>
        extends PropertyDispatch<V> {
        private final Property<T1> property1;
        private final Property<T2> property2;
        private final Property<T3> property3;
        private final Property<T4> property4;
        private final Property<T5> property5;
 
        private C5(Property<T1> property1, Property<T2> property2, Property<T3> property3, Property<T4> property4, Property<T5> property5) {
            this.property1 = property1;
            this.property2 = property2;
            this.property3 = property3;
            this.property4 = property4;
            this.property5 = property5;
        }
 
        @Override
        public List<Property<?>> getDefinedProperties() {
            return List.of(this.property1, this.property2, this.property3, this.property4, this.property5);
        }
 
        public PropertyDispatch.C5<V, T1, T2, T3, T4, T5> select(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, V variants) {
            PropertyValueList key = PropertyValueList.of(
                this.property1.value(value1),
                this.property2.value(value2),
                this.property3.value(value3),
                this.property4.value(value4),
                this.property5.value(value5)
            );
            this.putValue(key, variants);
            return this;
        }
 
        public PropertyDispatch<V> generate(Function5<T1, T2, T3, T4, T5, V> generator) {
            this.property1
                .getPossibleValues()
                .forEach(
                    value1 -> this.property2
                        .getPossibleValues()
                        .forEach(
                            value2 -> this.property3
                                .getPossibleValues()
                                .forEach(
                                    value3 -> this.property4
                                        .getPossibleValues()
                                        .forEach(
                                            value4 -> this.property5
                                                .getPossibleValues()
                                                .forEach(
                                                    value5 -> this.select(
                                                        (T1)value1,
                                                        (T2)value2,
                                                        (T3)value3,
                                                        (T4)value4,
                                                        (T5)value5,
                                                        generator.apply((T1)value1, (T2)value2, (T3)value3, (T4)value4, (T5)value5)
                                                    )
                                                )
                                        )
                                )
                        )
                );
            return this;
        }
    }
}

引用的其他类