From 2c0b99ffdbd6f6edcff84bdb6d0176f2b41efc4e Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 18 Dec 2024 10:23:58 +0300 Subject: [PATCH] fix wrong cache hit on local dev --- src/connect.ts | 24 ++++++++++++++++++++++++ src/index.ts | 19 ++----------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/connect.ts b/src/connect.ts index 40a47669..09ee1542 100644 --- a/src/connect.ts +++ b/src/connect.ts @@ -1,4 +1,9 @@ +import { versionsByMinecraftVersion } from 'minecraft-data' +import minecraftInitialDataJson from '../generated/minecraft-initial-data.json' import { AuthenticatedAccount } from './react/ServersListProvider' +import { setLoadingScreenStatus } from './utils' +import { downloadSoundsIfNeeded } from './soundSystem' +import { miscUiState } from './globalState' export type ConnectOptions = { server?: string @@ -17,3 +22,22 @@ export type ConnectOptions = { authenticatedAccount?: AuthenticatedAccount | true peerOptions?: any } + +export const downloadNeededDataOnConnect = async (version: string) => { + // todo expose cache + const initialDataVersion = Object.keys(minecraftInitialDataJson)[0]! + if (version === initialDataVersion) { + // ignore cache hit + versionsByMinecraftVersion.pc[initialDataVersion]!.dataVersion!++ + } + setLoadingScreenStatus(`Loading data for ${version}`) + if (!document.fonts.check('1em mojangles')) { + // todo instead re-render signs on load + await document.fonts.load('1em mojangles').catch(() => { + console.error('Failed to load font, signs wont be rendered correctly') + }) + } + await window._MC_DATA_RESOLVER.promise // ensure data is loaded + await downloadSoundsIfNeeded() + miscUiState.loadedDataVersion = version +} diff --git a/src/index.ts b/src/index.ts index 93bbe6b9..a1fa8e3b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -93,7 +93,7 @@ import { saveToBrowserMemory } from './react/PauseScreen' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' import './devReload' import './water' -import { ConnectOptions } from './connect' +import { ConnectOptions, downloadNeededDataOnConnect } from './connect' import { ref, subscribe } from 'valtio' import { signInMessageState } from './react/SignInMessageProvider' import { updateAuthenticatedAccountData, updateLoadedServerData } from './react/ServersListProvider' @@ -395,22 +395,7 @@ async function connect (connectOptions: ConnectOptions) { throw new Error('Microsoft authentication is only supported on 1.19.4 - 1.20.6 (at least for now)') } - // todo expose cache - const lastVersion = supportedVersions.at(-1) - if (version === lastVersion) { - // ignore cache hit - versionsByMinecraftVersion.pc[lastVersion]!['dataVersion']!++ - } - setLoadingScreenStatus(`Loading data for ${version}`) - if (!document.fonts.check('1em mojangles')) { - // todo instead re-render signs on load - await document.fonts.load('1em mojangles').catch(() => { - console.error('Failed to load font, signs wont be rendered correctly') - }) - } - await window._MC_DATA_RESOLVER.promise // ensure data is loaded - await downloadSoundsIfNeeded() - miscUiState.loadedDataVersion = version + await downloadNeededDataOnConnect(version) try { await resourcepackReload(version) } catch (err) {