TelemetryPropertyMap.java

net.minecraft.client.telemetry.TelemetryPropertyMap

信息

  • 全限定名:net.minecraft.client.telemetry.TelemetryPropertyMap
  • 类型:public class
  • 包:net.minecraft.client.telemetry
  • 源码路径:src/main/java/net/minecraft/client/telemetry/TelemetryPropertyMap.java
  • 起始行号:L18
  • 职责:

    TODO

字段/常量

  • entries
    • 类型: Map<TelemetryProperty<?>,Object>
    • 修饰符: private final
    • 源码定位: L19
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.telemetry.TelemetryPropertyMap.Builder
    • 类型: class
    • 修饰符: public static
    • 源码定位: L90
    • 说明:

      TODO

构造器

private TelemetryPropertyMap(Map<TelemetryProperty<?>,Object> entries) @ L21

  • 构造器名:TelemetryPropertyMap
  • 源码定位:L21
  • 修饰符:private

参数:

  • entries: Map<TelemetryProperty<?>,Object>

说明:

TODO

方法

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

public static TelemetryPropertyMap.Builder builder() @ L25

  • 方法名:builder
  • 源码定位:L25
  • 返回类型:TelemetryPropertyMap.Builder
  • 修饰符:public static

参数:

说明:

TODO

public static MapCodec<TelemetryPropertyMap> createCodec(List<TelemetryProperty<?>> properties) @ L29

  • 方法名:createCodec
  • 源码定位:L29
  • 返回类型:MapCodec
  • 修饰符:public static

参数:

  • properties: List<TelemetryProperty<?>>

说明:

TODO

public <T> T get(TelemetryProperty<T> property) @ L76

  • 方法名:get
  • 源码定位:L76
  • 返回类型: T
  • 修饰符:public

参数:

  • property: TelemetryProperty

说明:

TODO

public String toString() @ L80

  • 方法名:toString
  • 源码定位:L80
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public Set<TelemetryProperty<?>> propertySet() @ L85

  • 方法名:propertySet
  • 源码定位:L85
  • 返回类型:Set<TelemetryProperty<?>>
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class TelemetryPropertyMap {
    private final Map<TelemetryProperty<?>, Object> entries;
 
    private TelemetryPropertyMap(Map<TelemetryProperty<?>, Object> entries) {
        this.entries = entries;
    }
 
    public static TelemetryPropertyMap.Builder builder() {
        return new TelemetryPropertyMap.Builder();
    }
 
    public static MapCodec<TelemetryPropertyMap> createCodec(List<TelemetryProperty<?>> properties) {
        return new MapCodec<TelemetryPropertyMap>() {
            public <T> RecordBuilder<T> encode(TelemetryPropertyMap input, DynamicOps<T> ops, RecordBuilder<T> prefix) {
                RecordBuilder<T> result = prefix;
 
                for (TelemetryProperty<?> property : properties) {
                    result = this.encodeProperty(input, result, property);
                }
 
                return result;
            }
 
            private <T, V> RecordBuilder<T> encodeProperty(TelemetryPropertyMap input, RecordBuilder<T> result, TelemetryProperty<V> property) {
                V value = input.get(property);
                return value != null ? result.add(property.id(), value, property.codec()) : result;
            }
 
            @Override
            public <T> DataResult<TelemetryPropertyMap> decode(DynamicOps<T> ops, MapLike<T> input) {
                DataResult<TelemetryPropertyMap.Builder> result = DataResult.success(new TelemetryPropertyMap.Builder());
 
                for (TelemetryProperty<?> property : properties) {
                    result = this.decodeProperty(result, ops, input, property);
                }
 
                return result.map(TelemetryPropertyMap.Builder::build);
            }
 
            private <T, V> DataResult<TelemetryPropertyMap.Builder> decodeProperty(
                DataResult<TelemetryPropertyMap.Builder> result, DynamicOps<T> ops, MapLike<T> input, TelemetryProperty<V> property
            ) {
                T value = input.get(property.id());
                if (value != null) {
                    DataResult<V> parse = property.codec().parse(ops, value);
                    return result.apply2stable((b, v) -> b.put(property, (V)v), parse);
                } else {
                    return result;
                }
            }
 
            @Override
            public <T> Stream<T> keys(DynamicOps<T> ops) {
                return properties.stream().map(TelemetryProperty::id).map(ops::createString);
            }
        };
    }
 
    public <T> @Nullable T get(TelemetryProperty<T> property) {
        return (T)this.entries.get(property);
    }
 
    @Override
    public String toString() {
        return this.entries.toString();
    }
 
    public Set<TelemetryProperty<?>> propertySet() {
        return this.entries.keySet();
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class Builder {
        private final Map<TelemetryProperty<?>, Object> entries = new Reference2ObjectOpenHashMap<>();
 
        private Builder() {
        }
 
        public <T> TelemetryPropertyMap.Builder put(TelemetryProperty<T> property, T value) {
            this.entries.put(property, value);
            return this;
        }
 
        public <T> TelemetryPropertyMap.Builder putIfNotNull(TelemetryProperty<T> property, @Nullable T value) {
            if (value != null) {
                this.entries.put(property, value);
            }
 
            return this;
        }
 
        public TelemetryPropertyMap.Builder putAll(TelemetryPropertyMap properties) {
            this.entries.putAll(properties.entries);
            return this;
        }
 
        public TelemetryPropertyMap build() {
            return new TelemetryPropertyMap(this.entries);
        }
    }
}

引用的其他类