TelemetryEventType.java

net.minecraft.client.telemetry.TelemetryEventType

信息

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

    TODO

字段/常量

  • REGISTRY

    • 类型: Map<String,TelemetryEventType>
    • 修饰符: private static final
    • 源码定位: L20
    • 说明:

      TODO

  • CODEC

    • 类型: Codec<TelemetryEventType>
    • 修饰符: public static final
    • 源码定位: L21
    • 说明:

      TODO

  • GLOBAL_PROPERTIES

    • 类型: List<TelemetryProperty<?>>
    • 修饰符: private static final
    • 源码定位: L25
    • 说明:

      TODO

  • WORLD_SESSION_PROPERTIES

    • 类型: List<TelemetryProperty<?>>
    • 修饰符: private static final
    • 源码定位: L37
    • 说明:

      TODO

  • WORLD_LOADED

    • 类型: TelemetryEventType
    • 修饰符: public static final
    • 源码定位: L41
    • 说明:

      TODO

  • PERFORMANCE_METRICS

    • 类型: TelemetryEventType
    • 修饰符: public static final
    • 源码定位: L46
    • 说明:

      TODO

  • WORLD_LOAD_TIMES

    • 类型: TelemetryEventType
    • 修饰符: public static final
    • 源码定位: L56
    • 说明:

      TODO

  • WORLD_UNLOADED

    • 类型: TelemetryEventType
    • 修饰符: public static final
    • 源码定位: L62
    • 说明:

      TODO

  • ADVANCEMENT_MADE

    • 类型: TelemetryEventType
    • 修饰符: public static final
    • 源码定位: L67
    • 说明:

      TODO

  • GAME_LOAD_TIMES

    • 类型: TelemetryEventType
    • 修饰符: public static final
    • 源码定位: L73
    • 说明:

      TODO

  • id

    • 类型: String
    • 修饰符: private final
    • 源码定位: L81
    • 说明:

      TODO

  • exportKey

    • 类型: String
    • 修饰符: private final
    • 源码定位: L82
    • 说明:

      TODO

  • properties

    • 类型: List<TelemetryProperty<?>>
    • 修饰符: private final
    • 源码定位: L83
    • 说明:

      TODO

  • isOptIn

    • 类型: boolean
    • 修饰符: private final
    • 源码定位: L84
    • 说明:

      TODO

  • codec

    • 类型: MapCodec<TelemetryEventInstance>
    • 修饰符: private final
    • 源码定位: L85
    • 说明:

      TODO

内部类/嵌套类型

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

      TODO

构造器

private TelemetryEventType(String id, String exportKey, List<TelemetryProperty<?>> properties, boolean isOptIn) @ L87

  • 构造器名:TelemetryEventType
  • 源码定位:L87
  • 修饰符:private

参数:

  • id: String
  • exportKey: String
  • properties: List<TelemetryProperty<?>>
  • isOptIn: boolean

说明:

TODO

方法

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

public static TelemetryEventType.Builder builder(String id, String exportKey) @ L95

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

参数:

  • id: String
  • exportKey: String

说明:

TODO

public String id() @ L99

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

参数:

说明:

TODO

public List<TelemetryProperty<?>> properties() @ L103

  • 方法名:properties
  • 源码定位:L103
  • 返回类型:List<TelemetryProperty<?>>
  • 修饰符:public

参数:

说明:

TODO

public MapCodec<TelemetryEventInstance> codec() @ L107

  • 方法名:codec
  • 源码定位:L107
  • 返回类型:MapCodec
  • 修饰符:public

参数:

说明:

TODO

public boolean isOptIn() @ L111

  • 方法名:isOptIn
  • 源码定位:L111
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public TelemetryEvent export(TelemetrySession session, TelemetryPropertyMap input) @ L115

  • 方法名:export
  • 源码定位:L115
  • 返回类型:TelemetryEvent
  • 修饰符:public

参数:

  • session: TelemetrySession
  • input: TelemetryPropertyMap

说明:

TODO

public <T> boolean contains(TelemetryProperty<T> property) @ L125

  • 方法名:contains
  • 源码定位:L125
  • 返回类型: boolean
  • 修饰符:public

参数:

  • property: TelemetryProperty

说明:

TODO

public String toString() @ L129

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

参数:

说明:

TODO

public MutableComponent title() @ L134

  • 方法名:title
  • 源码定位:L134
  • 返回类型:MutableComponent
  • 修饰符:public

参数:

说明:

TODO

public MutableComponent description() @ L138

  • 方法名:description
  • 源码定位:L138
  • 返回类型:MutableComponent
  • 修饰符:public

参数:

说明:

TODO

private MutableComponent makeTranslation(String suffix) @ L142

  • 方法名:makeTranslation
  • 源码定位:L142
  • 返回类型:MutableComponent
  • 修饰符:private

参数:

  • suffix: String

说明:

TODO

public static List<TelemetryEventType> values() @ L146

  • 方法名:values
  • 源码定位:L146
  • 返回类型:List
  • 修饰符:public static

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class TelemetryEventType {
    private static final Map<String, TelemetryEventType> REGISTRY = new Object2ObjectLinkedOpenHashMap<>();
    public static final Codec<TelemetryEventType> CODEC = Codec.STRING.comapFlatMap(key -> {
        TelemetryEventType type = REGISTRY.get(key);
        return type != null ? DataResult.success(type) : DataResult.error(() -> "No TelemetryEventType with key: '" + key + "'");
    }, TelemetryEventType::id);
    private static final List<TelemetryProperty<?>> GLOBAL_PROPERTIES = List.of(
        TelemetryProperty.USER_ID,
        TelemetryProperty.CLIENT_ID,
        TelemetryProperty.MINECRAFT_SESSION_ID,
        TelemetryProperty.GAME_VERSION,
        TelemetryProperty.OPERATING_SYSTEM,
        TelemetryProperty.PLATFORM,
        TelemetryProperty.CLIENT_MODDED,
        TelemetryProperty.LAUNCHER_NAME,
        TelemetryProperty.EVENT_TIMESTAMP_UTC,
        TelemetryProperty.OPT_IN
    );
    private static final List<TelemetryProperty<?>> WORLD_SESSION_PROPERTIES = Stream.concat(
            GLOBAL_PROPERTIES.stream(), Stream.of(TelemetryProperty.WORLD_SESSION_ID, TelemetryProperty.SERVER_MODDED, TelemetryProperty.SERVER_TYPE)
        )
        .toList();
    public static final TelemetryEventType WORLD_LOADED = builder("world_loaded", "WorldLoaded")
        .defineAll(WORLD_SESSION_PROPERTIES)
        .define(TelemetryProperty.GAME_MODE)
        .define(TelemetryProperty.REALMS_MAP_CONTENT)
        .register();
    public static final TelemetryEventType PERFORMANCE_METRICS = builder("performance_metrics", "PerformanceMetrics")
        .defineAll(WORLD_SESSION_PROPERTIES)
        .define(TelemetryProperty.FRAME_RATE_SAMPLES)
        .define(TelemetryProperty.RENDER_TIME_SAMPLES)
        .define(TelemetryProperty.USED_MEMORY_SAMPLES)
        .define(TelemetryProperty.NUMBER_OF_SAMPLES)
        .define(TelemetryProperty.RENDER_DISTANCE)
        .define(TelemetryProperty.DEDICATED_MEMORY_KB)
        .optIn()
        .register();
    public static final TelemetryEventType WORLD_LOAD_TIMES = builder("world_load_times", "WorldLoadTimes")
        .defineAll(WORLD_SESSION_PROPERTIES)
        .define(TelemetryProperty.WORLD_LOAD_TIME_MS)
        .define(TelemetryProperty.NEW_WORLD)
        .optIn()
        .register();
    public static final TelemetryEventType WORLD_UNLOADED = builder("world_unloaded", "WorldUnloaded")
        .defineAll(WORLD_SESSION_PROPERTIES)
        .define(TelemetryProperty.SECONDS_SINCE_LOAD)
        .define(TelemetryProperty.TICKS_SINCE_LOAD)
        .register();
    public static final TelemetryEventType ADVANCEMENT_MADE = builder("advancement_made", "AdvancementMade")
        .defineAll(WORLD_SESSION_PROPERTIES)
        .define(TelemetryProperty.ADVANCEMENT_ID)
        .define(TelemetryProperty.ADVANCEMENT_GAME_TIME)
        .optIn()
        .register();
    public static final TelemetryEventType GAME_LOAD_TIMES = builder("game_load_times", "GameLoadTimes")
        .defineAll(GLOBAL_PROPERTIES)
        .define(TelemetryProperty.LOAD_TIME_TOTAL_TIME_MS)
        .define(TelemetryProperty.LOAD_TIME_PRE_WINDOW_MS)
        .define(TelemetryProperty.LOAD_TIME_BOOTSTRAP_MS)
        .define(TelemetryProperty.LOAD_TIME_LOADING_OVERLAY_MS)
        .optIn()
        .register();
    private final String id;
    private final String exportKey;
    private final List<TelemetryProperty<?>> properties;
    private final boolean isOptIn;
    private final MapCodec<TelemetryEventInstance> codec;
 
    private TelemetryEventType(String id, String exportKey, List<TelemetryProperty<?>> properties, boolean isOptIn) {
        this.id = id;
        this.exportKey = exportKey;
        this.properties = properties;
        this.isOptIn = isOptIn;
        this.codec = TelemetryPropertyMap.createCodec(properties).xmap(map -> new TelemetryEventInstance(this, map), TelemetryEventInstance::properties);
    }
 
    public static TelemetryEventType.Builder builder(String id, String exportKey) {
        return new TelemetryEventType.Builder(id, exportKey);
    }
 
    public String id() {
        return this.id;
    }
 
    public List<TelemetryProperty<?>> properties() {
        return this.properties;
    }
 
    public MapCodec<TelemetryEventInstance> codec() {
        return this.codec;
    }
 
    public boolean isOptIn() {
        return this.isOptIn;
    }
 
    public TelemetryEvent export(TelemetrySession session, TelemetryPropertyMap input) {
        TelemetryEvent output = session.createNewEvent(this.exportKey);
 
        for (TelemetryProperty<?> property : this.properties) {
            property.export(input, output);
        }
 
        return output;
    }
 
    public <T> boolean contains(TelemetryProperty<T> property) {
        return this.properties.contains(property);
    }
 
    @Override
    public String toString() {
        return "TelemetryEventType[" + this.id + "]";
    }
 
    public MutableComponent title() {
        return this.makeTranslation("title");
    }
 
    public MutableComponent description() {
        return this.makeTranslation("description");
    }
 
    private MutableComponent makeTranslation(String suffix) {
        return Component.translatable("telemetry.event." + this.id + "." + suffix);
    }
 
    public static List<TelemetryEventType> values() {
        return List.copyOf(REGISTRY.values());
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class Builder {
        private final String id;
        private final String exportKey;
        private final List<TelemetryProperty<?>> properties = new ArrayList<>();
        private boolean isOptIn;
 
        private Builder(String id, String exportKey) {
            this.id = id;
            this.exportKey = exportKey;
        }
 
        public TelemetryEventType.Builder defineAll(List<TelemetryProperty<?>> properties) {
            this.properties.addAll(properties);
            return this;
        }
 
        public <T> TelemetryEventType.Builder define(TelemetryProperty<T> property) {
            this.properties.add(property);
            return this;
        }
 
        public TelemetryEventType.Builder optIn() {
            this.isOptIn = true;
            return this;
        }
 
        public TelemetryEventType register() {
            TelemetryEventType type = new TelemetryEventType(this.id, this.exportKey, List.copyOf(this.properties), this.isOptIn);
            if (TelemetryEventType.REGISTRY.putIfAbsent(this.id, type) != null) {
                throw new IllegalStateException("Duplicate TelemetryEventType with key: '" + this.id + "'");
            } else {
                return type;
            }
        }
    }
}

引用的其他类