diff --git a/src/app/services/Spyglass.ts b/src/app/services/Spyglass.ts index c2604fa8..1f61ddfe 100644 --- a/src/app/services/Spyglass.ts +++ b/src/app/services/Spyglass.ts @@ -20,6 +20,11 @@ import type { VersionMeta } from './DataFetcher.js' import { fetchBlockStates, fetchRegistries, fetchVanillaMcdoc, fetchVersions, getVersionChecksum } from './DataFetcher.js' import type { VersionId } from './Versions.js' +const builtinMcdoc = ` +use ::java::server::util::text::Text +dispatch minecraft:resource[text_component] to Text +` + interface ClientDocument { doc: TextDocument undoStack: string[] @@ -194,7 +199,12 @@ export class SpyglassService { defaultConfig: core.ConfigService.merge(core.VanillaConfig, { env: { gameVersion: version.ref ?? version.id, - dependencies: ['@vanilla-mcdoc'], + dependencies: ['@vanilla-mcdoc', '@misode-mcdoc'], + customResources: { + text_component: { + category: 'text_component', + }, + }, }, lint: { idOmitDefaultNamespace: false, @@ -227,6 +237,14 @@ async function decompressBall(buffer: Uint8Array, options?: { stripLevel?: numbe })) } +async function compressBall(files: [string, string][]): Promise { + const writer = new zip.ZipWriter(new zip.Uint8ArrayWriter()) + await Promise.all(files.map(async ([name, data]) => { + await writer.add(name, new zip.TextReader(data)) + })) + return await writer.close() +} + const initialize: core.ProjectInitializer = async (ctx) => { const { config, logger, meta, externals, cacheRoot } = ctx @@ -237,6 +255,13 @@ const initialize: core.ProjectInitializer = async (ctx) => { return { info: { startDepth: 1 }, uri } }) + meta.registerDependencyProvider('@misode-mcdoc', async () => { + const uri: string = new core.Uri('downloads/misode-mcdoc.tar.gz', cacheRoot).toString() + const buffer = await compressBall([['builtin.mcdoc', builtinMcdoc]]) + await core.fileUtil.writeFile(externals, uri, buffer) + return { uri } + }) + const versions = await fetchVersions() const release = config.env.gameVersion as ReleaseVersion const version = siteConfig.versions.find(v => {