mirror of
https://github.com/misode/misode.github.io.git
synced 2026-04-23 07:10:41 +00:00
Change some EnumNodes to ResourceNodes
This commit is contained in:
@@ -37,6 +37,6 @@ export class NumberNode extends AbstractNode<number> implements StateNode<number
|
||||
|
||||
renderRaw(path: Path, value: number, view: TreeView, options?: RenderOptions) {
|
||||
return `${options?.hideLabel ? `` : `<label>${path.last()}</label>`}
|
||||
<input value="${value ?? ''}"></input>`
|
||||
<input value="${value ?? ''}">`
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,6 @@ export class StringNode extends AbstractNode<string> implements StateNode<string
|
||||
|
||||
renderRaw(path: Path, value: string, view: TreeView, options?: RenderOptions) {
|
||||
return `${options?.hideLabel ? `` : `<label>${path.last()}</label>`}
|
||||
<input value="${value ?? ''}"></input>`
|
||||
<input value="${value ?? ''}">`
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,19 +54,19 @@ export class RangeNode extends AbstractNode<IRange> implements StateNode<IRange>
|
||||
let input = ''
|
||||
if (value === undefined || typeof value === 'number') {
|
||||
curType = 'exact'
|
||||
input = `<input value=${value === undefined ? '' : value}></input>`
|
||||
input = `<input value=${value === undefined ? '' : value}>`
|
||||
} else if (value.type === 'binomial') {
|
||||
curType = 'binomial'
|
||||
input = `<label>n</label>
|
||||
<input value=${value.n === undefined ? '' : value.n}></input>
|
||||
<input value=${value.n === undefined ? '' : value.n}>
|
||||
<label>p</label>
|
||||
<input value=${value.p === undefined ? '' : value.p}></input>`
|
||||
<input value=${value.p === undefined ? '' : value.p}>`
|
||||
} else {
|
||||
curType = 'range'
|
||||
input = `<label>Min</label>
|
||||
<input value=${value.min === undefined ? '' : value.min}></input>
|
||||
<input value=${value.min === undefined ? '' : value.min}>
|
||||
<label>Max</label>
|
||||
<input value=${value.max === undefined ? '' : value.max}></input>`
|
||||
<input value=${value.max === undefined ? '' : value.max}>`
|
||||
}
|
||||
const id = view.register(el => {
|
||||
(el as HTMLInputElement).value = curType
|
||||
|
||||
@@ -1,12 +1,44 @@
|
||||
import { NodeMods, RenderOptions } from '../AbstractNode'
|
||||
import { StringNode } from '../StringNode'
|
||||
import { EnumNode } from '../EnumNode'
|
||||
import { Path } from '../../model/Path'
|
||||
import { DataModel } from '../../model/DataModel'
|
||||
import { TreeView, getId } from '../../view/TreeView'
|
||||
|
||||
export class ResourceNode extends StringNode {
|
||||
constructor(mods?: NodeMods<string>) {
|
||||
super({
|
||||
export interface ResourceNodeMods extends NodeMods<string> {
|
||||
options?: string[]
|
||||
registry?: string
|
||||
additional?: boolean
|
||||
}
|
||||
|
||||
export class ResourceNode extends EnumNode {
|
||||
additional: boolean
|
||||
|
||||
constructor(mods?: ResourceNodeMods) {
|
||||
const options = mods?.options ?? [] // TODO: Support registry using `github.com/Arcensoth/mcdata`
|
||||
super(options, {
|
||||
transform: (v) => {
|
||||
if (v === undefined) return undefined
|
||||
return v.startsWith('minecraft:') ? v : 'minecraft:' + v
|
||||
}, ...mods})
|
||||
this.additional = mods?.additional ?? false
|
||||
}
|
||||
}
|
||||
|
||||
getState(el: Element) {
|
||||
if (this.additional) {
|
||||
return el.querySelector('input')!.value
|
||||
} else {
|
||||
return super.getState(el)
|
||||
}
|
||||
}
|
||||
|
||||
renderRaw(path: Path, value: string, view: TreeView, options?: RenderOptions) {
|
||||
if (this.additional) {
|
||||
const id = `datalist-${getId()}`
|
||||
return `${options?.hideLabel ? `` : `<label>${path.last()}</label>`}
|
||||
<input list=${id} value="${value ?? ''}">
|
||||
<datalist id=${id}>${this.options.map(o => `<option value="${o}">`).join('')}</datalist>`
|
||||
} else {
|
||||
return super.renderRaw(path, value, view, options)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import './Predicates'
|
||||
const entitySources = ['this', 'killer', 'killer_player']
|
||||
|
||||
export const ConditionSchema = SchemaRegistry.register('condition', new ObjectNode({
|
||||
condition: new EnumNode(conditions, 'random_chance'),
|
||||
condition: new ResourceNode({options: conditions, default: () => 'random_chance'}),
|
||||
[Switch]: 'condition',
|
||||
[Case]: {
|
||||
'alternative': {
|
||||
@@ -25,7 +25,7 @@ export const ConditionSchema = SchemaRegistry.register('condition', new ObjectNo
|
||||
)
|
||||
},
|
||||
'block_state_property': {
|
||||
block: new ResourceNode(),
|
||||
block: new ResourceNode({registry: 'minecraft:block'}),
|
||||
properties: new MapNode(
|
||||
new StringNode(),
|
||||
new StringNode()
|
||||
@@ -76,7 +76,7 @@ export const ConditionSchema = SchemaRegistry.register('condition', new ObjectNo
|
||||
name: new StringNode()
|
||||
},
|
||||
'table_bonus': {
|
||||
enchantment: new EnumNode(enchantments),
|
||||
enchantment: new ResourceNode({options: enchantments}),
|
||||
chances: new ListNode(
|
||||
new NumberNode({min: 0, max: 1})
|
||||
)
|
||||
|
||||
@@ -20,7 +20,7 @@ import {
|
||||
} from './Collections'
|
||||
|
||||
SchemaRegistry.register('item-predicate', new ObjectNode({
|
||||
item: new ResourceNode(),
|
||||
item: new ResourceNode({registry: 'minecraft:item'}),
|
||||
tag: new StringNode(),
|
||||
count: new RangeNode(),
|
||||
durability: new RangeNode(),
|
||||
@@ -32,12 +32,12 @@ SchemaRegistry.register('item-predicate', new ObjectNode({
|
||||
}))
|
||||
|
||||
SchemaRegistry.register('enchantment-predicate', new ObjectNode({
|
||||
enchantment: new EnumNode(enchantments),
|
||||
enchantment: new ResourceNode({options: enchantments}),
|
||||
levels: new RangeNode()
|
||||
}))
|
||||
|
||||
SchemaRegistry.register('block-predicate', new ObjectNode({
|
||||
block: new ResourceNode(),
|
||||
block: new ResourceNode({registry: 'minecraft:block'}),
|
||||
tag: new StringNode(),
|
||||
nbt: new StringNode(),
|
||||
state: new MapNode(
|
||||
@@ -47,7 +47,7 @@ SchemaRegistry.register('block-predicate', new ObjectNode({
|
||||
}))
|
||||
|
||||
SchemaRegistry.register('fluid-predicate', new ObjectNode({
|
||||
fluid: new ResourceNode(),
|
||||
fluid: new ResourceNode({registry: 'minecraft:fluid'}),
|
||||
tag: new StringNode(),
|
||||
nbt: new StringNode(),
|
||||
state: new MapNode(
|
||||
@@ -62,9 +62,9 @@ SchemaRegistry.register('location-predicate', new ObjectNode({
|
||||
y: new RangeNode(),
|
||||
z: new RangeNode()
|
||||
}),
|
||||
biome: new EnumNode(biomes),
|
||||
biome: new ResourceNode({options: biomes}),
|
||||
feature: new EnumNode(structures),
|
||||
dimension: new EnumNode(dimensions),
|
||||
dimension: new ResourceNode({options: dimensions, additional: true}),
|
||||
light: new ObjectNode({
|
||||
light: new RangeNode()
|
||||
}),
|
||||
@@ -134,7 +134,7 @@ SchemaRegistry.register('entity-predicate', new ObjectNode({
|
||||
in_open_water: new BooleanNode()
|
||||
}),
|
||||
effects: new MapNode(
|
||||
new EnumNode(statusEffects),
|
||||
new ResourceNode({options: statusEffects}),
|
||||
new ReferenceNode('status-effect-predicate')
|
||||
)
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user