pages235/src/connect.ts
2025-04-07 02:21:37 +03:00

89 lines
2.8 KiB
TypeScript

// import { versionsByMinecraftVersion } from 'minecraft-data'
// import minecraftInitialDataJson from '../generated/minecraft-initial-data.json'
import MinecraftData from 'minecraft-data'
import PrismarineBlock from 'prismarine-block'
import PrismarineItem from 'prismarine-item'
import pathfinder from 'mineflayer-pathfinder'
import { miscUiState } from './globalState'
import supportedVersions from './supportedVersions.mjs'
import { options } from './optionsStorage'
import { downloadSoundsIfNeeded } from './sounds/botSoundSystem'
import { AuthenticatedAccount } from './react/serversStorage'
export type ConnectOptions = {
server?: string
singleplayer?: any
username: string
proxy?: string
botVersion?: string
serverOverrides?
serverOverridesFlat?
peerId?: string
ignoreQs?: boolean
onSuccessfulPlay?: () => void
autoLoginPassword?: string
serverIndex?: string
authenticatedAccount?: AuthenticatedAccount | true
peerOptions?: any
viewerWsConnect?: string
saveServerToHistory?: boolean
/** Will enable local replay server */
worldStateFileContents?: string
connectEvents?: {
serverCreated?: () => void
// connect: () => void;
// disconnect: () => void;
// error: (err: any) => void;
// ready: () => void;
// end: () => void;
}
}
export const getVersionAutoSelect = (autoVersionSelect = options.serversAutoVersionSelect) => {
if (autoVersionSelect === 'auto') {
return '1.19.4'
}
if (autoVersionSelect === 'latest') {
return supportedVersions.at(-1)!
}
return autoVersionSelect
}
export const loadMinecraftData = async (version: string) => {
await window._LOAD_MC_DATA()
// setLoadingScreenStatus(`Loading data for ${version}`)
// // todo expose cache
// // const initialDataVersion = Object.keys(minecraftInitialDataJson)[0]!
// // if (version === initialDataVersion) {
// // // ignore cache hit
// // versionsByMinecraftVersion.pc[initialDataVersion]!.dataVersion!++
// // }
const mcData = MinecraftData(version)
window.PrismarineBlock = PrismarineBlock(mcData.version.minecraftVersion!)
window.PrismarineItem = PrismarineItem(mcData.version.minecraftVersion!)
window.loadedData = mcData
window.mcData = mcData
window.pathfinder = pathfinder
miscUiState.loadedDataVersion = version
}
export const downloadAllMinecraftData = async () => {
await window._LOAD_MC_DATA()
}
const loadFonts = async () => {
const FONT_FAMILY = 'mojangles'
if (!document.fonts.check(`1em ${FONT_FAMILY}`)) {
// todo instead re-render signs on load
await document.fonts.load(`1em ${FONT_FAMILY}`).catch(() => {
console.error('Failed to load font, signs wont be rendered correctly')
})
}
}
export const downloadOtherGameData = async () => {
await Promise.all([loadFonts(), downloadSoundsIfNeeded()])
}