diff --git a/src/app/Utils.ts b/src/app/Utils.ts index aeca880f..653b56fc 100644 --- a/src/app/Utils.ts +++ b/src/app/Utils.ts @@ -80,7 +80,7 @@ export function getSearchParams(url: string) { return new Map() } -export function setSeachParams(modifications: Record) { +export function setSeachParams(modifications: Record, newPath?: string) { const url = getCurrentUrl() const searchParams = getSearchParams(url) Object.entries(modifications).forEach(([key, value]) => { @@ -89,7 +89,7 @@ export function setSeachParams(modifications: Record }) const search = Array.from(searchParams).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) - route(`${getPath(url)}${search.length === 0 ? '' : `?${search.join('&')}`}`, true) + route(`${newPath ? cleanUrl(newPath) : getPath(url)}${search.length === 0 ? '' : `?${search.join('&')}`}`, true) } export function stringToColor(str: string): [number, number, number] { diff --git a/src/app/components/Octicon.tsx b/src/app/components/Octicon.tsx index bfb568aa..e271eff6 100644 --- a/src/app/components/Octicon.tsx +++ b/src/app/components/Octicon.tsx @@ -22,6 +22,7 @@ export const Octicon = { issue_opened: , kebab_horizontal: , link: , + link_external: , mark_github: , moon: , play: , diff --git a/src/app/pages/Generator.tsx b/src/app/pages/Generator.tsx index f08dc985..e9fd5c48 100644 --- a/src/app/pages/Generator.tsx +++ b/src/app/pages/Generator.tsx @@ -123,7 +123,6 @@ export function Generator({ lang, changeTitle, version, changeVersion }: Generat const loadPreset = async (id: string) => { Analytics.generatorEvent('load-preset', id) - console.log('load preset', version, gen.id, id) try { const preset = await fetchPreset(version, gen.path ?? gen.id, id) const seed = model?.get(new Path(['generator', 'seed'])) diff --git a/src/app/schema/renderHtml.tsx b/src/app/schema/renderHtml.tsx index e738e4f8..850d3717 100644 --- a/src/app/schema/renderHtml.tsx +++ b/src/app/schema/renderHtml.tsx @@ -3,6 +3,7 @@ import { DataModel, ListNode, MapNode, ModelPath, ObjectNode, Path, relativePath import type { ComponentChildren, JSX } from 'preact' import { memo } from 'preact/compat' import { useState } from 'preact/hooks' +import config from '../../config.json' import { Btn, Octicon } from '../components' import { useFocus } from '../hooks' import { locale } from '../Locales' @@ -19,6 +20,10 @@ const nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text const fixedLists = ['generator_biome.parameters.temperature', 'generator_biome.parameters.humidity', 'generator_biome.parameters.continentalness', 'generator_biome.parameters.erosion', 'generator_biome.parameters.depth', 'generator_biome.parameters.weirdness', 'feature.end_spike.crystal_beam_target', 'feature.end_gateway.exit', 'decorator.block_filter.offset', 'block_predicate.matching_blocks.offset', 'block_predicate.matching_fluids.offset', 'model_element.from', 'model_element.to', 'model_element.rotation.origin', 'model_element.faces.uv', 'item_transform.rotation', 'item_transform.translation', 'item_transform.scale'] const collapsedFields = ['noise_settings.surface_rule', 'noise_settings.noise.terrain_shaper'] +const findGenerator = (id: string) => { + return config.generators.find(g => g.id === id.replace(/^\$/, '')) +} + /** * Secondary model used to remember the keys of a map */ @@ -383,14 +388,16 @@ function StringSuffix({ path, getValues, config, node, value, lang, states }: No } const values = getValues() const context = path.getContext().join('.') + const id = !isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string' ? config.params.pool : undefined + if (nbtFields.includes(context)) { return } else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) { let context = new Path([]) if (isEnum(config) && typeof config.enum === 'string') { context = context.contextPush(config.enum) - } else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') { - context = context.contextPush(config.params.pool) + } else if (id) { + context = context.contextPush(id) } else if (isEnum(config)) { context = path } @@ -408,12 +415,16 @@ function StringSuffix({ path, getValues, config, node, value, lang, states }: No } else { const datalistId = hexId() + const gen = id ? findGenerator(id) : undefined + console.log(id, gen) return <> {if (evt.key === 'Enter') onChange(evt)}} list={values.length > 0 ? datalistId : ''} /> {values.length > 0 && {values.map(v => } + {gen && values.includes(value) && value.startsWith('minecraft:') && + {Octicon.link_external}} } } diff --git a/src/locales/en.json b/src/locales/en.json index 1fa007db..62050d4d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -25,6 +25,7 @@ "expand_all": "Hold %0% to expand all", "feature.decorated.decorators": "Decorators", "feature.decorated.decorators.entry": "Decorator", + "follow_reference": "Follow reference", "format.json": "JSON", "format.yaml": "YAML", "fields": "Fields", diff --git a/src/styles/nodes.css b/src/styles/nodes.css index 7a1083dc..8fc4d060 100644 --- a/src/styles/nodes.css +++ b/src/styles/nodes.css @@ -149,6 +149,18 @@ background-color: var(--node-background-hover); } +.node-header a { + display: flex; + align-items: center; + font-size: 18px; + padding: 0 9px; + white-space: nowrap; + user-select: none; + cursor: pointer; + fill: var(--node-text); + background-color: var(--node-background-input); +} + .object-node > .node-header > .collapse { cursor: pointer; }