diff --git a/src/extension.ts b/src/extension.ts index cd72c29..26e4340 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -77,10 +77,10 @@ export function activate(context: vscode.ExtensionContext) { async () => { const fileUri = await vscode.window.showOpenDialog({ canSelectMany: false, - openLabel: 'Select diagnostics capture to replay', + openLabel: 'Open', filters: { - 'MC Stats files': ['mcstats'], - 'All files': ['*'], + 'MC Stats Files': ['mcstats'], + 'All Files': ['*'], }, }); if (!fileUri || fileUri.length === 0) { diff --git a/src/panels/home-view-provider.ts b/src/panels/home-view-provider.ts index 9a84ecc..4cc619f 100644 --- a/src/panels/home-view-provider.ts +++ b/src/panels/home-view-provider.ts @@ -129,7 +129,6 @@ export class HomeViewProvider implements vscode.WebviewViewProvider { private _refreshProfilerCaptures(capturesBasePath: string, newCaptureFileName?: string) { if (!capturesBasePath) { - console.error('Captures path is invalid.'); return; } fs.readdir(capturesBasePath, (err, files) => { diff --git a/src/panels/minecraft-diagnostics.ts b/src/panels/minecraft-diagnostics.ts index ae97d5b..90cc183 100644 --- a/src/panels/minecraft-diagnostics.ts +++ b/src/panels/minecraft-diagnostics.ts @@ -91,6 +91,9 @@ export class MinecraftDiagnosticsPanel { }; this._panel.webview.postMessage(message); }, + onNotification: (message: string) => { + window.showInformationMessage(message); + }, }; this._statsTracker.addStatListener(this._statsCallback); diff --git a/src/stats/replay-stats-provider.test.ts b/src/stats/replay-stats-provider.test.ts new file mode 100644 index 0000000..41d4435 --- /dev/null +++ b/src/stats/replay-stats-provider.test.ts @@ -0,0 +1,72 @@ +import { describe, it, expect } from 'vitest'; +import { ReplayStatsProvider } from './replay-stats-provider'; +import { StatData, StatsListener } from './stats-provider'; +import path from 'path'; + +describe('ReplayStatsProvider', () => { + it('should load base64-gzip encoded replay data and trigger events', async () => { + const replayFilePath = path.resolve('./test/diagnostics-replay-compressed.mcstats'); + const replay = new ReplayStatsProvider(replayFilePath); + let statCount = 0; + let statsCallback: StatsListener = { + onStatUpdated: (stat: StatData) => { + statCount++; + expect(stat).toBeDefined(); + }, + }; + replay.addStatListener(statsCallback); + let results = await replay.start(); + expect(results.statLinesRead).toBe(3); + expect(results.statEventsSent).toBe(3); + expect(statCount).toBeGreaterThan(0); // no idea how many are in there + }); + + it('should load uncompressed replay and trigger events', async () => { + const replayFilePath = path.resolve('./test/diagnostics-replay-uncompressed.mcstats'); + const replay = new ReplayStatsProvider(replayFilePath); + let statCount = 0; + let statsCallback: StatsListener = { + onStatUpdated: (stat: StatData) => { + statCount++; + expect(stat).toBeDefined(); + }, + }; + replay.addStatListener(statsCallback); + let results = await replay.start(); + expect(results.statLinesRead).toBe(3); + expect(results.statEventsSent).toBe(3); + expect(statCount).toBeGreaterThan(0); + }); + + it('should load no-header uncompressed replay and trigger events', async () => { + const replayFilePath = path.resolve('./test/diagnostics-replay-uncompressed-no-header.mcstats'); + const replay = new ReplayStatsProvider(replayFilePath); + let statCount = 0; + let statsCallback: StatsListener = { + onStatUpdated: (stat: StatData) => { + statCount++; + expect(stat).toBeDefined(); + }, + }; + replay.addStatListener(statsCallback); + let results = await replay.start(); + expect(results.statLinesRead).toBe(3); + expect(results.statEventsSent).toBe(3); + expect(statCount).toBeGreaterThan(0); + }); + + it('should fire notification on invalid file read', async () => { + const replayFilePath = './not-a-real-file.mcstats'; + const replay = new ReplayStatsProvider(replayFilePath); + let notification = ''; + let statsCallback: StatsListener = { + onNotification: (message: string) => { + notification = message; + }, + }; + replay.addStatListener(statsCallback); + let results = await replay.start(); + expect(results.statLinesRead).toBe(0); + expect(notification).toBe('Failed to read replay file.'); + }); +}); diff --git a/src/stats/replay-stats-provider.ts b/src/stats/replay-stats-provider.ts index 5380555..c04caab 100644 --- a/src/stats/replay-stats-provider.ts +++ b/src/stats/replay-stats-provider.ts @@ -3,8 +3,18 @@ import * as fs from 'fs'; import * as readline from 'readline'; import * as path from 'path'; +import * as zlib from 'zlib'; import { StatMessageModel, StatsProvider, StatsListener } from './stats-provider'; +interface ReplayStatMessageHeader { + encoding?: string; +} + +export class ReplayResults { + statLinesRead: number = 0; + statEventsSent: number = 0; +} + export class ReplayStatsProvider extends StatsProvider { private _replayFilePath: string; private _replayStreamReader: readline.Interface | null; @@ -12,12 +22,19 @@ export class ReplayStatsProvider extends StatsProvider { private _simTickPeriod: number; private _simTickCurrent: number; private _simTimeoutId: NodeJS.Timeout | null; + private _replayHeader: ReplayStatMessageHeader | undefined; + private _base64Gzipped: boolean; private _pendingStats: StatMessageModel[]; + private _replayResults: ReplayResults; + private _onComplete: ((results: ReplayResults) => void) | undefined; // resume stream when lines drop below this threshold private static readonly PENDING_STATS_BUFFER_MIN = 256; // pause stream when lines exceed this threshold private static readonly PENDING_STATS_BUFFER_MAX = ReplayStatsProvider.PENDING_STATS_BUFFER_MIN * 2; + // supported encodings + private readonly ENCODING_BASE64_GZIP = 'base64-gzip'; + private readonly ENCODING_UTF8 = 'utf8'; // ticks per second (frequency) private readonly MILLIS_PER_SECOND = 1000; @@ -33,10 +50,13 @@ export class ReplayStatsProvider extends StatsProvider { this._simTickPeriod = this._calcSimPeriod(this._simTickFreqency); this._simTickCurrent = 0; this._simTimeoutId = null; + this._base64Gzipped = false; this._pendingStats = []; + this._replayResults = new ReplayResults(); + this._onComplete = undefined; } - public override start() { + public override start(): Promise { this.stop(); const fileStream = fs.createReadStream(this._replayFilePath); @@ -44,27 +64,39 @@ export class ReplayStatsProvider extends StatsProvider { input: fileStream, crlfDelay: Infinity, }); - - this._replayStreamReader.on('line', line => this._onReadNextStatMessage(line)); - this._replayStreamReader.on('close', () => this._onCloseStream()); + this._replayStreamReader.on('line', line => this._onReadNextLineFromReplayStream(line)); + this._replayStreamReader.on('close', () => this._onCloseReplayStream()); + this._replayStreamReader.on('error', () => this._errorCloseReplayStream('Failed to read replay file.')); // begin simulation this._simTimeoutId = setTimeout(() => this._updateSim(), this._simTickPeriod); this._fireSpeedChanged(); this._firePauseChanged(); + + return new Promise(resolve => { + this._onComplete = resolve; + }); } public override stop() { + this._fireStopped(); if (this._simTimeoutId) { clearTimeout(this._simTimeoutId); } - this._replayStreamReader?.close(); + if (this._onComplete) { + this._onComplete(this._replayResults); + this._onComplete = undefined; + } + if (this._replayStreamReader) { + this._replayStreamReader.close(); + this._replayStreamReader = null; + } this._simTickFreqency = this.DEFAULT_SPEED; this._simTickPeriod = this._calcSimPeriod(this._simTickFreqency); this._simTickCurrent = 0; this._simTimeoutId = null; + this._base64Gzipped = false; this._pendingStats = []; - this._firePauseChanged(); } public override pause() { @@ -127,6 +159,7 @@ export class ReplayStatsProvider extends StatsProvider { } else if (nextStatsMessage.tick === this._simTickCurrent) { // process and remove the message, then increment sim tick this.setStats(nextStatsMessage); + this._replayResults.statEventsSent++; this._pendingStats.shift(); this._simTickCurrent++; } @@ -138,37 +171,95 @@ export class ReplayStatsProvider extends StatsProvider { // schedule next update as long as we have pending data to process or there's still a stream to read if (this._replayStreamReader || this._pendingStats.length > 0) { this._simTimeoutId = setTimeout(() => this._updateSim(), this._simTickPeriod); + } else { + // no more data to process + this.stop(); } } - private _onReadNextStatMessage(line: string) { - const statsMessageJson = JSON.parse(line); - // seed sim tick with first message - if (this._simTickCurrent === 0) { - this._simTickCurrent = statsMessageJson.tick; + private _onReadNextLineFromReplayStream(rawLine: string) { + if (this._replayHeader === undefined) { + try { + const headerJson = JSON.parse(rawLine); + if (headerJson.tick) { + this._replayHeader = {}; // no header, fall through to process this line as stat data + } else { + // first line was header, set encoding and return + this._replayHeader = headerJson as ReplayStatMessageHeader; + const encoding = this._replayHeader.encoding ?? this.ENCODING_UTF8; + this._base64Gzipped = encoding === this.ENCODING_BASE64_GZIP; + return; + } + } catch (error) { + this._errorCloseReplayStream('Failed to parse replay header.'); + return; + } + } + + let decodedLine = rawLine; + if (this._base64Gzipped) { + try { + const buffer = Buffer.from(rawLine, 'base64'); + decodedLine = zlib.gunzipSync(buffer).toString('utf-8'); + } catch (error) { + this._errorCloseReplayStream('Failed to decode replay data.'); + return; + } + } + + try { + const jsonLine = JSON.parse(decodedLine); + const statMessage = jsonLine as StatMessageModel; + // seed sim tick with first message + if (this._simTickCurrent === 0) { + this._simTickCurrent = statMessage.tick; + } + this._replayResults.statLinesRead++; + // add stats messages to queue + this._pendingStats.push(statMessage); + // pause stream reader if we've got enough data for now + if (this._pendingStats.length > ReplayStatsProvider.PENDING_STATS_BUFFER_MAX) { + this._replayStreamReader?.pause(); + } + } catch (error) { + this._errorCloseReplayStream('Failed to process replay data.'); } - // add stats messages to queue - this._pendingStats.push(statsMessageJson as StatMessageModel); - // pause stream reader if we've got enough data for now - if (this._pendingStats.length > ReplayStatsProvider.PENDING_STATS_BUFFER_MAX) { - this._replayStreamReader?.pause(); + } + + private _errorCloseReplayStream(message: string) { + if (this._replayStreamReader) { + this._replayStreamReader.close(); + this._replayStreamReader = null; } + this._fireNotification(message); } - private _onCloseStream() { + private _onCloseReplayStream() { this._replayStreamReader = null; } private _fireSpeedChanged() { this._statListeners.forEach((listener: StatsListener) => { - listener.onSpeedUpdated(this._simTickFreqency); + listener.onSpeedUpdated?.(this._simTickFreqency); }); } private _firePauseChanged() { this._statListeners.forEach((listener: StatsListener) => { // paused if no timeout id - listener.onPauseUpdated(this._simTimeoutId == null); + listener.onPauseUpdated?.(this._simTimeoutId == null); + }); + } + + private _fireStopped() { + this._statListeners.forEach((listener: StatsListener) => { + listener.onStopped?.(); + }); + } + + private _fireNotification(message: string) { + this._statListeners.forEach((listener: StatsListener) => { + listener.onNotification?.(message); }); } diff --git a/src/stats/stats-provider.ts b/src/stats/stats-provider.ts index df40380..5394931 100644 --- a/src/stats/stats-provider.ts +++ b/src/stats/stats-provider.ts @@ -24,9 +24,11 @@ export interface StatMessageModel { } export interface StatsListener { - onStatUpdated: (stat: StatData) => void; - onSpeedUpdated: (speed: number) => void; - onPauseUpdated: (paused: boolean) => void; + onStatUpdated?: (stat: StatData) => void; + onSpeedUpdated?: (speed: number) => void; + onPauseUpdated?: (paused: boolean) => void; + onStopped?: () => void; + onNotification?: (message: string) => void; } export class StatsProvider { @@ -89,7 +91,7 @@ export class StatsProvider { values: stat.values ?? [], tick: tick, }; - listener.onStatUpdated(statData); + listener.onStatUpdated?.(statData); if (stat.children) { stat.children.forEach((child: StatDataModel) => { diff --git a/test/diagnostics-replay-compressed.mcstats b/test/diagnostics-replay-compressed.mcstats new file mode 100644 index 0000000..6005544 --- /dev/null +++ b/test/diagnostics-replay-compressed.mcstats @@ -0,0 +1,4 @@ +{"encoding":"base64-gzip"} +H4sIAAAAAAAACq2RMQvCMBCF/0q5ORRaULSbQ3EVlDqIyJEebTBeS3JVRPzvJg4iiIPS8fE+vntwNxCjj1BM5rNsMs0VyLUnKGAtKOWZWHJQ4EPwUOxuwHiKbYtcWzrobuBQKNCtsbUjfmcaYnIonUuEvHyBShYj11Ce0Q4Ub2T5/r6/qxdRIRtrMVmGuAkinyxs3+J4vhGXVdnfsi06j5cRVjny3eA0rVAfU6oHjWI6TpvQxj+kT+w3+bueImPIf1IP7xkEAUoCAAA= +H4sIAAAAAAAACq2SzWrDMBCEX8XoLEzkn6TxLYfQa6ElPRQTtvJiq5ElI61dQsi7V84hGIyhLbkIlhl9O1rthZGSJ1bk2yeRr1PO6NwhK9grAe0HNJQwznwoPCs+LsxAO6oNmErjUdreBIEz2ShdOTRTT40GHZB1EaGnBdPekKJzEAfQPY49RFJeyyu/Ow5glNYQPYfyLYB8tNNdA4/jPTDZQfwb9g7Ow/cDUjn0tncSX0CeYqx6CaSsieugjv8Q32x/g0/xHt2A7jguTThaZeqlqBoH1DfjlJjlK8EzscnL+6q1SjrrUVpTeTZtJZ3qaEbYrNZ8vc1+ff/Lfs4YQohkxZM0Txc500fjOBiFfj6aH/azqd4/AwAA +H4sIAAAAAAAACq2RQQuCQBCF/4rMWQSlorx1kK5BUYeQGNZBl7YxdsdCxP/e2iGE6FB4fLyPbx5MB6LVBdL5ahnPF7MQpL0RpLATlOxOLAmE4HxwkJ46YLwObYVcGDqrumFfhKAqbQpLPGZKYrIotQ2EnHyBMhYtrS/vaBoabsRJ3ud9+CYOyNoYDDY+7r3IBWtzq3A634TLDvHfsiNah48JVllydWMVbVFdIioahaJrjkrfDn+IXthv8rGeBkaT+6SeqVlmQ0oCAAA= diff --git a/test/diagnostics-replay-uncompressed-no-header.mcstats b/test/diagnostics-replay-uncompressed-no-header.mcstats new file mode 100644 index 0000000..9ff66d5 --- /dev/null +++ b/test/diagnostics-replay-uncompressed-no-header.mcstats @@ -0,0 +1,3 @@ +{"tick":6058319,"type":"StatEvent2","stats":[{"name":"app_memory","children":[{"name":"used","values":[3358515200],"type":"bytes"},{"name":"free","values":[140724564729856],"type":"bytes"}]},{"name":"chunks","children":[{"name":"Overworld","children":[{"name":"ticking","values":[57]},{"name":"loaded","values":[2726]},{"name":"loading","values":[1014]}]}]},{"name":"dynamic_properties","children":[{"name":"total_memory_used","values":[0],"type":"bytes"},{"name":"save_velocity","values":[0],"type":"bytes"}]},{"name":"runtime_memory","children":[{"name":"allocated","values":[14507741],"type":"bytes"},{"name":"used","values":[13145056],"type":"bytes"}]},{"name":"handle_counts","children":[{"name":"generator test","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests V1","children":[{"name":"Entity","values":[14]}]},{"name":"Warsaw GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"Entity","values":[14]}]}]},{"name":"server_tick_timings","children":[{"name":"level_tick","values":[4790,3687],"type":"microseconds"},{"name":"script_tick","values":[581,677],"type":"microseconds"},{"name":"script_job_tick","values":[23549,23571],"type":"microseconds"}]},{"name":"entities","values":[14]},{"name":"fine_grained_subscribers","children":[{"name":"generator test","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[0]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[1]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"Vanilla GameTests","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"Vanilla GameTests V1","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[0]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"Warsaw GameTests","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]}]}]} +{"tick":6058320,"type":"StatEvent2","stats":[{"name":"handle_counts","children":[{"name":"generator test","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests V1","children":[{"name":"Entity","values":[14]}]},{"name":"Warsaw GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"Entity","values":[14]}]}]},{"name":"entities","values":[14]}]} +{"tick":6058321,"type":"StatEvent2","stats":[{"name":"handle_counts","children":[{"name":"generator test","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests V1","children":[{"name":"Entity","values":[14]}]},{"name":"Warsaw GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"Entity","values":[14]}]}]},{"name":"server_tick_timings","children":[{"name":"level_tick","values":[4328,4214],"type":"microseconds"},{"name":"script_tick","values":[988,577],"type":"microseconds"},{"name":"script_job_tick","values":[23511,23503],"type":"microseconds"}]},{"name":"entities","values":[14]}]} diff --git a/test/diagnostics-replay-uncompressed.mcstats b/test/diagnostics-replay-uncompressed.mcstats new file mode 100644 index 0000000..85fef52 --- /dev/null +++ b/test/diagnostics-replay-uncompressed.mcstats @@ -0,0 +1,4 @@ +{"encoding":""} +{"tick":6058319,"type":"StatEvent2","stats":[{"name":"app_memory","children":[{"name":"used","values":[3358515200],"type":"bytes"},{"name":"free","values":[140724564729856],"type":"bytes"}]},{"name":"chunks","children":[{"name":"Overworld","children":[{"name":"ticking","values":[57]},{"name":"loaded","values":[2726]},{"name":"loading","values":[1014]}]}]},{"name":"dynamic_properties","children":[{"name":"total_memory_used","values":[0],"type":"bytes"},{"name":"save_velocity","values":[0],"type":"bytes"}]},{"name":"runtime_memory","children":[{"name":"allocated","values":[14507741],"type":"bytes"},{"name":"used","values":[13145056],"type":"bytes"}]},{"name":"handle_counts","children":[{"name":"generator test","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests V1","children":[{"name":"Entity","values":[14]}]},{"name":"Warsaw GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"Entity","values":[14]}]}]},{"name":"server_tick_timings","children":[{"name":"level_tick","values":[4790,3687],"type":"microseconds"},{"name":"script_tick","values":[581,677],"type":"microseconds"},{"name":"script_job_tick","values":[23549,23571],"type":"microseconds"}]},{"name":"entities","values":[14]},{"name":"fine_grained_subscribers","children":[{"name":"generator test","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[0]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[1]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"Vanilla GameTests","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"Vanilla GameTests V1","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[0]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"Warsaw GameTests","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"ChatSendBeforeEvent","values":[0]},{"name":"ExplosionBeforeEvent","values":[0]},{"name":"ItemUseBeforeEvent","values":[0]},{"name":"ItemUseOnBeforeEvent","values":[0]},{"name":"PlayerBreakBlockBeforeEvent","values":[0]},{"name":"PlayerPlaceBlockBeforeEvent","values":[0]},{"name":"EntityRemoveBeforeEvent","values":[0]},{"name":"PlayerInteractWithBlockBeforeEvent","values":[0]},{"name":"PlayerInteractWithEntityBeforeEvent","values":[0]},{"name":"PlayerLeaveBeforeEvent","values":[0]},{"name":"PlayerGameModeChangeBeforeEvent","values":[0]},{"name":"EffectAddBeforeEvent","values":[0]},{"name":"WeatherChangeBeforeEvent","values":[0]},{"name":"WorldInitializeBeforeEvent","values":[0]},{"name":"WorldInitializeAfterEvent","values":[0]},{"name":"WorldLoadAfterEvent","values":[0]},{"name":"GameRuleChangeAfterEvent","values":[0]},{"name":"MessageReceiveAfterEvent","values":[0]},{"name":"WeatherChangeAfterEvent","values":[0]},{"name":"ChatSendAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"ButtonPushAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"LeverActionAfterEvent","values":[0]},{"name":"PlayerPlaceBlockAfterEvent","values":[0]},{"name":"BlockExplodeAfterEvent","values":[0]},{"name":"ExplosionAfterEvent","values":[0]},{"name":"PlayerBreakBlockAfterEvent","values":[0]},{"name":"EntityLoadAfterEvent","values":[0]},{"name":"EntitySpawnAfterEvent","values":[0]},{"name":"DataDrivenEntityTriggerAfterEvent","values":[0]},{"name":"EffectAddAfterEvent","values":[0]},{"name":"ProjectileHitEntityAfterEvent","values":[0]},{"name":"ProjectileHitBlockAfterEvent","values":[0]},{"name":"EntityHitEntityAfterEvent","values":[0]},{"name":"EntityHitBlockAfterEvent","values":[0]},{"name":"EntityHurtAfterEvent","values":[0]},{"name":"EntityHealthChangedAfterEvent","values":[0]},{"name":"EntityDieAfterEvent","values":[0]},{"name":"EntityRemoveAfterEvent","values":[0]},{"name":"ItemStartUseOnAfterEvent","values":[0]},{"name":"ItemUseOnAfterEvent","values":[0]},{"name":"ItemUseAfterEvent","values":[0]},{"name":"ItemStopUseOnAfterEvent","values":[0]},{"name":"ItemStartUseAfterEvent","values":[0]},{"name":"ItemCompleteUseAfterEvent","values":[0]},{"name":"ItemReleaseUseAfterEvent","values":[0]},{"name":"ItemStopUseAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerJoinAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerSpawnAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerLeaveAfterEvent","values":[0]},{"name":"PlayerGameModeChangeAfterEvent","values":[0]},{"name":"PlayerDimensionChangeAfterEvent","values":[0]},{"name":"PlayerInputModeChangeAfterEvent","values":[0]},{"name":"PlayerInputPermissionCategoryChangeAfterEvent","values":[0]},{"name":"PlayerInteractWithEntityAfterEvent","values":[0]},{"name":"PlayerInteractWithBlockAfterEvent","values":[0]},{"name":"PistonActivateAfterEvent","values":[0]},{"name":"PressurePlatePushAfterEvent","values":[0]},{"name":"PressurePlatePopAfterEvent","values":[0]},{"name":"TargetBlockHitAfterEvent","values":[0]},{"name":"TripWireTripAfterEvent","values":[0]},{"name":"PlayerEmoteAfterEvent","values":[0]},{"name":"PlayerButtonInputAfterEvent","values":[0]},{"name":"WatchdogTerminateBeforeEvent","values":[1]},{"name":"StartupEvent","values":[0]},{"name":"ScriptEventCommandMessageAfterEvent","values":[0]}]}]}]} +{"tick":6058320,"type":"StatEvent2","stats":[{"name":"handle_counts","children":[{"name":"generator test","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests V1","children":[{"name":"Entity","values":[14]}]},{"name":"Warsaw GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"Entity","values":[14]}]}]},{"name":"entities","values":[14]}]} +{"tick":6058321,"type":"StatEvent2","stats":[{"name":"handle_counts","children":[{"name":"generator test","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests Alpha","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"Vanilla GameTests V1","children":[{"name":"Entity","values":[14]}]},{"name":"Warsaw GameTests","children":[{"name":"Entity","values":[14]}]},{"name":"resourcePack.education.gametest.name","children":[{"name":"Entity","values":[14]}]}]},{"name":"server_tick_timings","children":[{"name":"level_tick","values":[4328,4214],"type":"microseconds"},{"name":"script_tick","values":[988,577],"type":"microseconds"},{"name":"script_job_tick","values":[23511,23503],"type":"microseconds"}]},{"name":"entities","values":[14]}]}