Add item modifiers, fix problems with version switcher

This commit is contained in:
Misode
2020-11-11 22:30:17 +01:00
parent d1c5760aca
commit f2057d4d19
5 changed files with 85 additions and 37 deletions

21
package-lock.json generated
View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@mcschema/core": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.11.2.tgz",
"integrity": "sha512-Y5jKXDesEkwwM/USwSQFoNaokAfZZDopb2bjIz77RppSFsa4f7zJuHPn+A+Wohn4ZZAmizkXx7P6slUj4rvc6Q=="
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.11.3.tgz",
"integrity": "sha512-15CTjCGeZPW123NYnjnG7jwtK9IVydFPSIas/QIKO9WGXlbLC+zRflOhcVVkHEprJuuFdGGmH9cfnUeFyZbDRQ=="
},
"@mcschema/java-1.16": {
"version": "0.5.14",
@@ -18,11 +18,18 @@
}
},
"@mcschema/java-1.17": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@mcschema/java-1.17/-/java-1.17-0.1.3.tgz",
"integrity": "sha512-YQ0zxBAS2MFk6YWOTYip2/eZo/WXHBWxh/CuZEyibYoRMqEwryj0IR71d5Q/mgFZlhm4S8MI05ucuwfRk+X27A==",
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@mcschema/java-1.17/-/java-1.17-0.1.4.tgz",
"integrity": "sha512-N3Et4Uz+VlmdpM2dAUEKoOS2HJIid1DlFWJIFK9NDRXLRqEFz9uNO5Coise2AM+0p/fJqapxVQCRgAwlEtd02g==",
"requires": {
"@mcschema/core": "^0.11.2"
"@mcschema/core": "^0.11.3"
},
"dependencies": {
"@mcschema/core": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.11.3.tgz",
"integrity": "sha512-15CTjCGeZPW123NYnjnG7jwtK9IVydFPSIas/QIKO9WGXlbLC+zRflOhcVVkHEprJuuFdGGmH9cfnUeFyZbDRQ=="
}
}
},
"@mcschema/locales": {

View File

@@ -14,7 +14,7 @@
"dependencies": {
"@mcschema/core": "^0.11.2",
"@mcschema/java-1.16": "^0.5.14",
"@mcschema/java-1.17": "^0.1.3",
"@mcschema/java-1.17": "^0.1.4",
"@mcschema/locales": "^0.1.11",
"@types/google.analytics": "0.0.40",
"@types/split.js": "^1.4.0",

View File

@@ -12,6 +12,14 @@ import { BiomeNoiseVisualizer } from './visualization/BiomeNoiseVisualizer'
import { Mounter } from './Mounter'
import { getLanguage, hasLocale, locale, registerLocale, setLanguage } from './locales'
type ModelConfig = {
id: string
name: string
schema?: string
minVersion?: string
children?: ModelConfig[]
}
const versionSchemas: {
[versionId: string]: {
getCollections: () => CollectionRegistry,
@@ -30,6 +38,8 @@ const publicPath = '/';
const modelFromPath = (p: string) => p.replace(publicPath, '').replace(/\/$/, '')
const modelConfig = (id: string): ModelConfig => config.models.find(m => m.id === id) ?? config.models.filter(m => m.children).reduce((acc: any, cur: any) => [...acc, ...cur.children], []).find(m => m.id === id)
const addChecked = (el: HTMLElement) => {
el.classList.add('check')
setTimeout(() => {
@@ -174,7 +184,10 @@ Promise.all([
let models: { [key: string]: DataModel } = {}
const buildModel = (model: any) => {
if (model.schema) {
models[model.id] = new DataModel(SCHEMAS.get(model.schema))
const schema = SCHEMAS.get(model.schema)
if (schema) {
models[model.id] = new DataModel(schema)
}
} else if (model.children) {
model.children.forEach(buildModel)
}
@@ -199,6 +212,21 @@ Promise.all([
document.querySelectorAll('[data-i18n]').forEach(el => {
el.textContent = locale(el.attributes.getNamedItem('data-i18n')!.value)
})
treeVersionMenu.innerHTML = ''
const m = modelConfig(selected)
const minVersion = config.versions.findIndex(v => v.id === (m?.minVersion ?? '1.16'))
config.versions.forEach((v, i) => {
if (i > minVersion) return
const entry = document.createElement('button')
entry.classList.add('btn')
entry.textContent = v.id
entry.addEventListener('click', () => {
updateVersion(v.id)
ga('send', 'event', 'Generator', 'set-version', version)
})
treeVersionMenu.append(entry)
})
}
const updateLanguage = (id: string, store = false) => {
@@ -228,30 +256,38 @@ Promise.all([
}
}
const updateVersion = (id: string) => {
const updateVersion = async (id: string) => {
localStorage.setItem(LOCAL_STORAGE_VERSION, id)
if (id === version) return
const newCollections = versionSchemas[id].getCollections()
RegistryFetcher(newCollections, id).then(() => {
await RegistryFetcher(newCollections, id)
const newSchemas = versionSchemas[id].getSchemas(newCollections)
const newSchemas = versionSchemas[id].getSchemas(newCollections)
const fixModel = (model: any) => {
if (model.schema) {
models[model.id].schema = newSchemas.get(model.schema)
const fixModel = (model: ModelConfig) => {
if (model.schema) {
const minVersion = config.versions.findIndex(v => v.id === (model.minVersion ?? '1.16'))
const targetVersion = config.versions.findIndex(v => v.id === id)
if (minVersion >= targetVersion) {
const schema = newSchemas.get(model.schema)
if (models[model.id] === undefined) {
models[model.id] = new DataModel(schema)
} else {
models[model.id].schema = schema
}
models[model.id].validate()
models[model.id].invalidate()
} else if (model.children) {
model.children.forEach(fixModel)
} else {
delete models[model.id]
}
} else if (model.children) {
model.children.forEach(fixModel)
}
config.models.forEach(fixModel)
treeVersionLabel.textContent = id
version = id
ga('set', 'dimension3', version);
})
}
config.models.forEach(fixModel)
treeVersionLabel.textContent = id
version = id
ga('set', 'dimension3', version);
}
homeLink.addEventListener('click', evt => {
@@ -355,17 +391,6 @@ Promise.all([
}, { capture: true, once: true })
})
config.versions.forEach(v => {
const entry = document.createElement('button')
entry.classList.add('btn')
entry.textContent = v.id
entry.addEventListener('click', () => {
updateVersion(v.id)
ga('send', 'event', 'Generator', 'set-version', version)
})
treeVersionMenu.append(entry)
})
treeControlsReset.addEventListener('click', evt => {
models[selected].reset(models[selected].schema.default(), true)
addChecked(treeControlsReset)
@@ -427,7 +452,7 @@ Promise.all([
const params = new URLSearchParams(window.location.search);
const panels = [treeViewEl, sourceViewEl, errorsViewEl]
if (models[selected] === undefined) {
if (['', 'worldgen'].includes(selected)) {
homeViewEl.style.display = '';
(document.querySelector('.gutter') as HTMLElement).style.display = 'none';
(document.querySelector('.content') as HTMLElement).style.overflowY = 'initial'
@@ -454,7 +479,16 @@ Promise.all([
homeViewEl.style.display = 'none';
(document.querySelector('.gutter') as HTMLElement).style.display = ''
panels.forEach(v => v.style.display = '')
if (models[selected] === undefined) {
const m = modelConfig(selected)
const loadedVersion = config.versions.findIndex(v => v.id === version)
const minVersion = config.versions.findIndex(v => v.id === m.minVersion)
if (minVersion < loadedVersion) {
updateVersion(m.minVersion!).then(() => {
updateModel()
})
}
}
if (params.has('q')) {
const data = atob(params.get('q')!)
models[selected].reset(JSON.parse(data))

View File

@@ -62,6 +62,12 @@
"name": "Predicate",
"schema": "predicate"
},
{
"id": "item-modifier",
"name": "Item Modifier",
"schema": "item_modifier",
"minVersion": "1.17"
},
{
"id": "advancement",
"name": "Advancement",

View File

@@ -4,6 +4,7 @@
"dimension-type": "Dimension Type",
"dimension": "Dimension",
"download": "Download",
"item-modifier": "Item Modifier",
"language": "Language",
"loot-table": "Loot Table",
"predicate": "Predicate",