minecraft-src/net/minecraft/client/telemetry/WorldSessionTelemetryManager.java
2025-07-04 01:41:11 +03:00

78 lines
2.9 KiB
Java

package net.minecraft.client.telemetry;
import java.time.Duration;
import java.util.UUID;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.client.telemetry.events.PerformanceMetricsEvent;
import net.minecraft.client.telemetry.events.WorldLoadEvent;
import net.minecraft.client.telemetry.events.WorldLoadTimesEvent;
import net.minecraft.client.telemetry.events.WorldUnloadEvent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public class WorldSessionTelemetryManager {
private final UUID worldSessionId = UUID.randomUUID();
private final TelemetryEventSender eventSender;
private final WorldLoadEvent worldLoadEvent;
private final WorldUnloadEvent worldUnloadEvent = new WorldUnloadEvent();
private final PerformanceMetricsEvent performanceMetricsEvent;
private final WorldLoadTimesEvent worldLoadTimesEvent;
public WorldSessionTelemetryManager(TelemetryEventSender sender, boolean newWorld, @Nullable Duration worldLoadDuration, @Nullable String minigameName) {
this.worldLoadEvent = new WorldLoadEvent(minigameName);
this.performanceMetricsEvent = new PerformanceMetricsEvent();
this.worldLoadTimesEvent = new WorldLoadTimesEvent(newWorld, worldLoadDuration);
this.eventSender = sender.decorate(builder -> {
this.worldLoadEvent.addProperties(builder);
builder.put(TelemetryProperty.WORLD_SESSION_ID, this.worldSessionId);
});
}
public void tick() {
this.performanceMetricsEvent.tick(this.eventSender);
}
public void onPlayerInfoReceived(GameType gameType, boolean isHardcore) {
this.worldLoadEvent.setGameMode(gameType, isHardcore);
this.worldUnloadEvent.onPlayerInfoReceived();
this.worldSessionStart();
}
public void onServerBrandReceived(String serverBrand) {
this.worldLoadEvent.setServerBrand(serverBrand);
this.worldSessionStart();
}
public void setTime(long time) {
this.worldUnloadEvent.setTime(time);
}
public void worldSessionStart() {
if (this.worldLoadEvent.send(this.eventSender)) {
this.worldLoadTimesEvent.send(this.eventSender);
this.performanceMetricsEvent.start();
}
}
public void onDisconnect() {
this.worldLoadEvent.send(this.eventSender);
this.performanceMetricsEvent.stop();
this.worldUnloadEvent.send(this.eventSender);
}
public void onAdvancementDone(Level level, AdvancementHolder advancement) {
ResourceLocation resourceLocation = advancement.id();
if (advancement.value().sendsTelemetryEvent() && "minecraft".equals(resourceLocation.getNamespace())) {
long l = level.getGameTime();
this.eventSender.send(TelemetryEventType.ADVANCEMENT_MADE, builder -> {
builder.put(TelemetryProperty.ADVANCEMENT_ID, resourceLocation.toString());
builder.put(TelemetryProperty.ADVANCEMENT_GAME_TIME, l);
});
}
}
}