diff --git a/index.html b/index.html index 0dab10b2..f3d1b381 100644 --- a/index.html +++ b/index.html @@ -11,13 +11,13 @@ - +
-
-
+
+
@@ -58,7 +58,7 @@
-
+
diff --git a/locales/en.json b/locales/en.json index 67c8ba9e..51423011 100644 --- a/locales/en.json +++ b/locales/en.json @@ -75,7 +75,8 @@ "damage_source.is_magic": "Magic", "damage_source.is_projectile": "Projectile", "damage_source.source_entity": "Source Entity", - "description": "Loot Table Generator for Minecraft", + "description.loot-table": "Loot Table Generator for Minecraft", + "description.predicate": "Predicate Generator for Minecraft", "dimension.overworld": "Overworld", "dimension.the_end": "The End", "dimension.the_nether": "The Nether", @@ -290,7 +291,8 @@ "tabs": "Tabs", "term_add": "Add Term", "term_remove": "Remove Term", - "title": "Loot Table Generator", + "title.loot-table": "Loot Table Generator", + "title.predicate": "Predicate Generator", "true": "True", "unset": "Unset" } diff --git a/locales/ru.json b/locales/ru.json index 97302168..fa056989 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -82,7 +82,7 @@ "damage_source.is_magic": "Магия", "damage_source.is_projectile": "Снаряд", "damage_source.source_entity": "Сущность-источник урона", - "description": "Генератор таблицы добычи для Minecraft", + "description.loot-table": "Генератор таблицы добычи для Minecraft", "dimension.overworld": "Обычный мир", "dimension.the_end": "Энд", "dimension.the_nether": "Незер", @@ -298,7 +298,7 @@ "tabs": "Табуляция", "term_add": "Добавить выражение", "term_remove": "Удалить выражение", - "title": "Генератор таблицы добычи", + "title.loot-table": "Генератор таблицы добычи", "true": "Да", "unset": "Не задано" } diff --git a/locales/zh-CN.json b/locales/zh-CN.json index b70a3023..19ee3d3f 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -82,7 +82,7 @@ "damage_source.is_magic": "魔法", "damage_source.is_projectile": "弹射物", "damage_source.source_entity": "根本来源实体", - "description": "Minecraft 战利品表生成器", + "description.loot-table": "Minecraft 战利品表生成器", "dimension.overworld": "主世界", "dimension.the_end": "末路之地", "dimension.the_nether": "下界", @@ -299,7 +299,7 @@ "tabs": "Tab 缩进", "term_add": "添加条件", "term_remove": "移除条件", - "title": "战利品表生成器", + "title.loot-table": "战利品表生成器", "true": "是", "unset": "未指定" } diff --git a/model.js b/model.js index b04b39e5..93680f25 100644 --- a/model.js +++ b/model.js @@ -148,7 +148,7 @@ function copySource(el) { function getPath(el) { let $node = $(el).closest('[data-index]'); let index = $node.attr('data-index'); - if (index === 'table') return []; + if (index === 'root') return []; let parent = getPath($node.parent()); parent = parent.concat(index.split('.')); return parent; diff --git a/schemas/1.13.json b/schemas/1.13.json index d4bc268b..3771403e 100644 --- a/schemas/1.13.json +++ b/schemas/1.13.json @@ -1,5 +1,6 @@ { "root": { + "id": "loot-table", "fields": [ { "id": "pools", diff --git a/schemas/1.14.json b/schemas/1.14.json index b95ec2fc..b4000f31 100644 --- a/schemas/1.14.json +++ b/schemas/1.14.json @@ -1,5 +1,6 @@ { "root": { + "id": "loot-table", "fields": [ { "id": "type", diff --git a/schemas/1.15.json b/schemas/1.15.json index e23e6899..95ad8067 100644 --- a/schemas/1.15.json +++ b/schemas/1.15.json @@ -1,29 +1,41 @@ { - "root": { - "fields": [ - { - "id": "type", - "type": "enum", - "translate": "table.type", - "translateValue": "table.type", - "default": "minecraft:generic", - "values": [ - "minecraft:empty", - "minecraft:entity", - "minecraft:block", - "minecraft:chest", - "minecraft:fishing", - "minecraft:generic" - ] - }, - { - "id": "pools", - "type": "array", - "translate": "pool", - "values": "pool" - } - ] - }, + "roots": [ + { + "id": "loot-table", + "title": "title.loot-table", + "description": "description.loot-table", + "fields": [ + { + "id": "type", + "type": "enum", + "translate": "table.type", + "translateValue": "table.type", + "default": "minecraft:generic", + "values": [ + "minecraft:empty", + "minecraft:entity", + "minecraft:block", + "minecraft:chest", + "minecraft:fishing", + "minecraft:generic" + ] + }, + { + "id": "pools", + "type": "array", + "translate": "pool", + "values": "pool" + } + ] + }, + { + "id": "predicate", + "title": "title.predicate", + "description": "description.predicate", + "type": "object", + "value": "condition" + } + ], "components": [ { "id": "pool", diff --git a/view.js b/view.js index 593ee93c..c15fd461 100644 --- a/view.js +++ b/view.js @@ -2,10 +2,16 @@ let structure; let components; let collections; -changeVersion('1.14'); +changeVersion('1.15'); function changeVersion(version) { $.getJSON('schemas/' + version + '.json', json => { - structure = json.root; + console.log(json); + if (json.root) { + structure = json.root; + } else if (json.roots) { + let id = window.location.pathname.replace(/\/$/, '').replace(/^\//, ''); + structure = json.roots.find(e => e.id === id); + } components = json.components; collections = json.collections; }).fail((jqXHR, textStatus, errorThrown) => { @@ -28,19 +34,31 @@ function changeVersion(version) { function updateView() { if (structure) { - let {out: tableOut, component: $table} = generateTable(table, structure); - $('#structure').append($table); + let {out: sourceOut, component: $component} = generateSourceAndView(table, structure); + $('#structure').removeClass('d-none').html(''); + $('#descriptionSpan').attr('data-i18n', structure.description); + $('title').attr('data-i18n', structure.title); + $('#structure').append($component); if (i18next.isInitialized) { $('html').localize(); } - $('#source').val(JSON.stringify(tableOut, null, indentation)); + $('#source').val(JSON.stringify(sourceOut, null, indentation)); + } +} + +function generateSourceAndView(data, struct) { + if (struct.id === 'loot-table') { + $('#lootTableToolbar').removeClass('d-none'); + $('#structure').attr('data-index', 'pools'); + return generateTable(data, struct); + } else { + return generateObject(data, struct, false); } } function generateTable(data, struct) { let out = {}; let $el = $('
'); - $('#structure').removeClass('d-none').html(''); let type = struct.fields.find(e => e.id === 'type'); if (type) {