let structure; let components; let collections; changeVersion('1.14'); function changeVersion(version) { $.getJSON('schemas/' + version + '.json', json => { $('#versionLabel').text(version); structure = json.root; components = json.components; collections = json.collections; updateView(); }); } function updateView() { if (structure) { generateTable(); if (i18next.isInitialized) { $('html').localize(); } } $('#source').val(JSON.stringify(table, null, indentation)); } function generateTable() { $('#structure').removeClass('d-none').html(''); if (!table.type) { table.type = 'minecraft:empty'; } $('#tableType').val(table.type); if (table.pools) { $table = generateComponent(table.pools, structure.fields.find(e => e.id === 'pools')); $('#structure').append($table); } $('#luck-based').attr('checked', luckBased); } function generateComponent(data, struct) { switch (struct.type) { case 'string': return generateString(data, struct); case 'int': return generateString(data, struct); case 'float': return generateString(data, struct); case 'boolean': return generateBoolean(data, struct); case 'random': return generateRandom(data, struct); case 'range': return generateRange(data, struct); case 'boundary': return generateBoundary(data, struct); case 'enum': return generateEnum(data, struct); case 'set': return generateSet(data, struct); case 'json': return generateJson(data, struct); case 'json-list': return generateJsonList(data, struct); case 'nbt': return generateNbt(data, struct); case 'array': return generateArray(data, struct); case 'object': return generateObject(data, struct, false); default: return generateError('Unknown component type "' + struct.type + '"')}; } function generateString(data, struct) { let $el = $('#components').find('[data-type="string"]').clone(); $el.attr('data-field', struct.id); $el.find('[data-name]').attr('data-i18n', struct.id); $el.find('input').val(data); return $el; } function generateBoolean(data, struct) { let $el = $('#components').find('[data-type="boolean"]').clone(); $el.attr('data-field', struct.id); $el.find('[data-name]').attr('data-i18n', struct.id); if (data === true) { $el.find('[value="true"]').addClass('active'); } else if (data === false) { $el.find('[value="false"]').addClass('active'); } return $el; } function generateRandom(data, struct) { let $el = $('#components').find('[data-type="random"]').clone(); $el.attr('data-field', struct.id); $el.find('[data-name]').attr('data-i18n', struct.id); if (typeof data === 'object') { if (data.type && data.type.match(/(minecraft:)?binomial/)) { $el.find('.binomial').removeClass('d-none'); $el.find('.binomial.n').val(data.n); $el.find('.binomial.p').val(data.p); } else { $el.find('.range').removeClass('d-none'); $el.find('.range.min').val(data.min); $el.find('.range.max').val(data.max); } } else { $el.find('.exact').removeClass('d-none'); $el.find('.exact').val(data); } return $el; } function generateRange(data, struct) { let $el = $('#components').find('[data-type="range"]').clone(); $el.attr('data-field', struct.id); $el.find('[data-name]').attr('data-i18n', struct.id); if (typeof data === 'object') { $el.find('.range').removeClass('d-none'); $el.find('.range.min').val(data.min); $el.find('.range.max').val(data.max); } else { $el.find('.exact').removeClass('d-none'); $el.find('.exact').val(data); } return $el; } function generateBoundary(data, struct) { let $el = $('#components').find('[data-type="boundary"]').clone(); $el.attr('data-field', struct.id); $el.find('[data-name]').attr('data-i18n', struct.id); if (data) { $el.find('.range.min').val(data.min); $el.find('.range.max').val(data.max); } return $el; } function generateEnum(data, struct) { let $el = $('#components').find('[data-type="enum"]').clone(); $el.attr('data-field', struct.id); $el.find('[data-name]').attr('data-i18n', struct.id); let collection = struct.values; if (typeof struct.values === 'string') { collection = collections[struct.values].slice(); } if (struct.unset) { collection.splice(0, 0, 'unset'); } for (let value of collection) { $el.find('select').append(setValueAndName($('