diff --git a/package-lock.json b/package-lock.json index 785a3ed6..53885bd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,14 @@ "resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.11.7.tgz", "integrity": "sha512-1N+krHwQpkmPCIqxxYL80NoOzZI1du12mX+d7dlYb8h7nfr4Rvv+ID5HTITxgCL1jVEN1DOMZK7swic2RuDivA==" }, + "@mcschema/java-1.15": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@mcschema/java-1.15/-/java-1.15-0.1.1.tgz", + "integrity": "sha512-NS65iqMiQyuywThJCBs4/zc5Fq5sbXb19n6c5pdx4KQlVP2V/fOB+MS0CvKEtVJKwFt9koBRdvK56BTlx9OK9w==", + "requires": { + "@mcschema/core": "^0.11.2" + } + }, "@mcschema/java-1.16": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@mcschema/java-1.16/-/java-1.16-0.5.15.tgz", diff --git a/package.json b/package.json index 9e5dc344..9c92b68d 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "license": "MIT", "dependencies": { "@mcschema/core": "^0.11.7", + "@mcschema/java-1.15": "^0.1.1", "@mcschema/java-1.16": "^0.5.15", "@mcschema/java-1.17": "^0.1.9", "@mcschema/locales": "^0.1.15", diff --git a/src/app/App.ts b/src/app/App.ts index 799c1c5f..a89a50c2 100644 --- a/src/app/App.ts +++ b/src/app/App.ts @@ -1,4 +1,5 @@ import { CollectionRegistry, DataModel, ObjectNode, SchemaRegistry } from '@mcschema/core'; +import * as java15 from '@mcschema/java-1.15' import * as java16 from '@mcschema/java-1.16' import * as java17 from '@mcschema/java-1.17' import { LocalStorageProperty } from './state/LocalStorageProperty'; @@ -19,6 +20,7 @@ const Versions: { getSchemas: (collections: CollectionRegistry) => SchemaRegistry, } } = { + '1.15': java15, '1.16': java16, '1.17': java17 } @@ -98,7 +100,7 @@ async function updateSchemas(version: string) { const schemas = Versions[version].getSchemas(collections) config.models .filter(m => m.schema) - .filter(m => checkVersion(App.version.get(), m.minVersion ?? config.versions[0].id)) + .filter(m => checkVersion(App.version.get(), m.minVersion)) .forEach(m => { const model = Models[m.id] const schema = schemas.get(m.schema!) @@ -120,10 +122,11 @@ async function updateLocale(language: string) { Locales[language] = data } -export function checkVersion(versionId: string, minVersionId: string) { +export function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) { const version = config.versions.findIndex(v => v.id === versionId) - const minVersion = config.versions.findIndex(v => v.id === minVersionId) - return minVersion <= version + const minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0 + const maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1 + return minVersion <= version && version <= maxVersion } document.addEventListener('keyup', (evt) => { diff --git a/src/app/RegistryFetcher.ts b/src/app/RegistryFetcher.ts index 1fad9ca5..1197f097 100644 --- a/src/app/RegistryFetcher.ts +++ b/src/app/RegistryFetcher.ts @@ -2,6 +2,13 @@ import { CollectionRegistry } from '@mcschema/core' import { checkVersion } from './App' import config from '../config.json' +type RegistryConfig = { + id: string + minVersion?: string + maxVersion?: string + path?: string +} + const localStorageCache = (version: string) => `cache_${version}` declare var __MCDATA_MASTER_HASH__: string; @@ -18,36 +25,62 @@ export const RegistryFetcher = async (target: CollectionRegistry, versionId: str const cacheValid = version.mcdata_ref !== 'master' || cache.mcdata_hash === __MCDATA_MASTER_HASH__ let cacheDirty = false - await Promise.all(config.registries.map(async r => { - const id = typeof r === 'string' ? r : r.id + if (checkVersion('1.15', versionId)) { + const url = `${baseUrl}/${version.mcdata_ref}/generated/reports/registries.json` + if (cacheValid && cache.registries) { + config.registries.forEach((r: string | RegistryConfig) => { + if (typeof r === 'string') r = { id: r } + if (!checkVersion(versionId, r.minVersion, r.maxVersion)) return - if (typeof r !== 'string' && r.minVersion) { - if (!checkVersion(versionId, r.minVersion)) return + target.register(r.id, cache.registries[r.id]) + }) + } else { + try { + const res = await fetch(url) + const data = await res.json() + config.registries.forEach(async (r: string | RegistryConfig) => { + if (typeof r === 'string') r = { id: r } + if (!checkVersion(versionId, r.minVersion, r.maxVersion)) return + + if (!cache.registries) cache.registries = {} + const values = Object.keys(data[`minecraft:${r.id}`].entries) + target.register(r.id, values) + cache.registries[r.id] = values + cacheDirty = true + }) + } catch (e) { + console.warn(`Error occurred while fetching registries for version ${versionId}`) + } } - - if (!cache.registries) { - cache.registries = {} - } - if (cacheValid && cache.registries?.[id]) { - target.register(id, cache.registries[id]) - return - } - - const url = typeof r !== 'string' && r.path - ? `${baseUrl}/${version.mcdata_ref}/${r.path}/data.min.json` - : mcdata(version.mcdata_ref, typeof r === 'string' ? r : r.id) - - try { - const res = await fetch(url) - const data = await res.json() - - target.register(id, data.values) - cache.registries[id] = data.values - cacheDirty = true - } catch (e) { - console.warn(`Error occurred while fetching registry "${id}":`, e) - } - })) + } else { + await Promise.all(config.registries.map(async (r: string | RegistryConfig) => { + if (typeof r === 'string') r = { id: r } + + if (r.minVersion && !checkVersion(versionId, r.minVersion)) return + if (r.maxVersion && !checkVersion(r.maxVersion, versionId)) return + + if (!cache.registries) cache.registries = {} + if (cacheValid && cache.registries?.[r.id]) { + target.register(r.id, cache.registries[r.id]) + return + } + + const url = r.path + ? `${baseUrl}/${version.mcdata_ref}/${r.path}/data.min.json` + : mcdata(version.mcdata_ref, typeof r === 'string' ? r : r.id) + + try { + const res = await fetch(url) + const data = await res.json() + + target.register(r.id, data.values) + cache.registries[r.id] = data.values + cacheDirty = true + } catch (e) { + console.warn(`Error occurred while fetching registry "${r.id}":`, e) + } + })) + } if (cacheDirty) { if (version.mcdata_ref === 'master') { diff --git a/src/app/Router.ts b/src/app/Router.ts index 2953d258..3f79429c 100644 --- a/src/app/Router.ts +++ b/src/app/Router.ts @@ -18,7 +18,7 @@ const router = async () => { let title = locale('title.home') if (urlParts.length === 0){ - App.model.set({ id: '', name: 'Data Pack', category: true}) + App.model.set({ id: '', name: 'Data Pack', category: true, minVersion: '1.15'}) target.innerHTML = Home(view) } else if (urlParts[0] === 'settings' && urlParts[1] === 'fields') { target.innerHTML = FieldSettings(view) diff --git a/src/app/components/panels/TreePanel.ts b/src/app/components/panels/TreePanel.ts index c8959949..63cffd0a 100644 --- a/src/app/components/panels/TreePanel.ts +++ b/src/app/components/panels/TreePanel.ts @@ -62,7 +62,7 @@ export const TreePanel = (view: View, model: DataModel) => {
${config.versions - .filter(v => checkVersion(v.id, App.model.get()!.minVersion ?? '1.16')) + .filter(v => checkVersion(v.id, App.model.get()!.minVersion ?? '1.15')) .reverse() .map(v => `