diff --git a/404.html b/404.html index e76a8faf..4f72f821 100644 --- a/404.html +++ b/404.html @@ -20,9 +20,9 @@ 404 - + - +
diff --git a/advancement/index.html b/advancement/index.html index b9915dc6..3bc1e547 100644 --- a/advancement/index.html +++ b/advancement/index.html @@ -20,9 +20,9 @@ Advancement Generator Minecraft 1.15, 1.16, 1.17 - + - +
diff --git a/assets/index.532ff40b.js b/assets/index.532ff40b.js deleted file mode 100644 index c3ddb2cf..00000000 --- a/assets/index.532ff40b.js +++ /dev/null @@ -1,2 +0,0 @@ -var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,i=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,s=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&i(e,n,t[n]);if(o)for(var n of o(t))a.call(t,n)&&i(e,n,t[n]);return e},l=(e,o)=>t(e,n(o));import{y as c,a as d,s as u,l as h,L as m,g,b as p,c as f,d as v,j as _,e as w,f as y,q as b,N as $,R as k}from"./vendor.5f8b9a3f.js";var x;function z({type:e,id:t}){return c((()=>{var e;null==(e=document.getElementById("ad-placeholder"))||e.remove(),"ethicalads"in window&ðicalads.load()}),[]),d("div",{"data-ea-publisher":"misode-github-io","data-ea-type":e,class:"ad dark flat",id:t})}function E({icon:e,label:t,active:n,class:o,onClick:r}){return d("div",{class:`btn${n?" active":""}${o?` ${o}`:""}`,onClick:r},e&&H[e],t&&d("span",null,t))}function M({icon:e,label:t,large:n,type:o,doSelect:r,value:a,onChange:i}){const s=void 0===i?()=>{}:e=>{const t=e.target.value;"number"===o&&(t.endsWith(".")||isNaN(Number(t)))||null==i||i(t)},l=u(null);return c((()=>{r&&l.current&&l.current.select()}),[r]),d("div",{class:"btn btn-input "+(n?"large-input":""),onClick:e=>e.stopPropagation()},e&&H[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:a,onKeyUp:s}))}function A({icon:e,label:t,relative:n,children:o}){const[r,a]=h(!1),i=()=>{a(!1)};return c((()=>(r&&document.body.addEventListener("click",i),()=>{document.body.removeEventListener("click",i)})),[r]),d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(E,{icon:e,label:t,onClick:()=>a(!0)}),r&&d("div",{class:"btn-group"},o))}function C({error:e}){return d("div",{class:"error"},d("h3",null,e),d("p",null,"You can report this as a bug ",d("a",{href:"https://github.com/misode/misode.github.io/issues/new",target:"_blank"},"on GitHub")))}!function(e){const t="Site",n="Generator";function o(e,t,n){ga("send","event",e,t,n)}function r(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){r(4,e),o(t,"set-language",e)},e.setTheme=function(e){r(1,e),o(t,"set-theme",e)},e.setVersion=function(e){r(3,e),o(n,"set-version",e)},e.setPreview=function(e){r(5,e),o(n,"set-preview",e)},e.generatorEvent=function(e,t){o(n,e,t)}}(x||(x={}));var j=JSON.parse('{"languages":[{"code":"de","name":"Deutsch"},{"code":"en","name":"English"},{"code":"fr","name":"Français"},{"code":"it","name":"Italiano"},{"code":"ja","name":"日本語"},{"code":"pl","name":"Polski"},{"code":"pt","name":"Português"},{"code":"ru","name":"Русский"},{"code":"sk","name":"Slovenčina","schemas":false},{"code":"zh-cn","name":"简体中文"},{"code":"zh-tw","name":"正體中文"}],"versions":[{"id":"1.15","refs":{"mcdata_master":"13355f7"}},{"id":"1.16","refs":{"mcdata_master":"1.16.4","vanilla_datapack_data":"1.16.4-data","vanilla_datapack_summary":"1.16.4-summary"}},{"id":"1.17","refs":{"mcdata_master":"master","vanilla_datapack_data":"data","vanilla_datapack_summary":"summary"},"dynamic":true}],"models":[{"id":"loot-table","name":"Loot Table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","name":"Predicate","path":"predicates","schema":"predicate"},{"id":"item-modifier","name":"Item Modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","name":"Advancement","path":"advancements","schema":"advancement"},{"id":"dimension","name":"Dimension","path":"dimension","schema":"dimension","minVersion":"1.16"},{"id":"dimension-type","name":"Dimension Type","path":"dimension_type","schema":"dimension_type","minVersion":"1.16"},{"id":"world","name":"World Settings","schema":"world_settings","minVersion":"1.16"},{"id":"worldgen","name":"Worldgen","category":true,"minVersion":"1.16"},{"id":"worldgen/biome","name":"Biome","path":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/carver","name":"Carver","path":"worldgen/configured_carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/feature","name":"Feature","path":"worldgen/configured_feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/noise-settings","name":"Noise Settings","path":"worldgen/noise_settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/structure-feature","name":"Structure Feature","path":"worldgen/configured_structure_feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16"},{"id":"worldgen/surface-builder","name":"Surface Builder","path":"worldgen/configured_surface_builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16"},{"id":"worldgen/processor-list","name":"Processor List","path":"worldgen/processor_list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template-pool","name":"Template Pool","path":"worldgen/template_pool","category":"worldgen","schema":"template_pool","minVersion":"1.16"}],"registries":[{"id":"advancement","dynamic":true},{"id":"attribute","minVersion":"1.16"},{"id":"block"},{"id":"dimension","dynamic":true},{"id":"dimension_type","dynamic":true},{"id":"enchantment"},{"id":"entity_type"},{"id":"fluid"},{"id":"function","dynamic":true},{"id":"float_provider_type","minVersion":"1.17"},{"id":"item"},{"id":"int_provider_type","minVersion":"1.17"},{"id":"height_provider_type","minVersion":"1.17"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_function_type","minVersion":"1.16"},{"id":"loot_nbt_provider_type","minVersion":"1.17"},{"id":"loot_number_provider_type","minVersion":"1.17"},{"id":"loot_pool_entry_type","minVersion":"1.16"},{"id":"loot_score_provider_type","minVersion":"1.17"},{"id":"loot_table","dynamic":true},{"id":"mob_effect"},{"id":"pos_rule_test","minVersion":"1.16"},{"id":"potion","minVersion":"1.15"},{"id":"predicate","dynamic":true},{"id":"recipe","dynamic":true},{"id":"rule_test","minVersion":"1.16"},{"id":"sound_event"},{"id":"stat_type"},{"id":"structure","dynamic":true},{"id":"tag/block","dynamic":true},{"id":"tag/entity_type","dynamic":true},{"id":"tag/fluid","dynamic":true},{"id":"tag/function","dynamic":true},{"id":"tag/item","dynamic":true},{"id":"worldgen/biome","dynamic":true},{"id":"worldgen/block_state_provider_type","minVersion":"1.16"},{"id":"worldgen/block_placer_type","minVersion":"1.16"},{"id":"worldgen/biome_source","minVersion":"1.16"},{"id":"worldgen/carver","minVersion":"1.16"},{"id":"worldgen/chunk_generator","minVersion":"1.16"},{"id":"worldgen/configured_carver","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_decorator","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_structure_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_surface_builder","minVersion":"1.16","dynamic":true},{"id":"worldgen/decorator","minVersion":"1.16"},{"id":"worldgen/feature","minVersion":"1.16"},{"id":"worldgen/feature_size_type","minVersion":"1.16"},{"id":"worldgen/foliage_placer_type","minVersion":"1.16"},{"id":"worldgen/noise_settings","minVersion":"1.16","dynamic":true},{"id":"worldgen/processor_list","minVersion":"1.16","dynamic":true},{"id":"worldgen/structure_feature","minVersion":"1.16"},{"id":"worldgen/structure_pool_element","minVersion":"1.16"},{"id":"worldgen/structure_processor","minVersion":"1.16"},{"id":"worldgen/surface_builder","minVersion":"1.16"},{"id":"worldgen/template_pool","minVersion":"1.16","dynamic":true},{"id":"worldgen/tree_decorator_type","minVersion":"1.16"},{"id":"worldgen/trunk_placer_type","minVersion":"1.16"},{"id":"biome","maxVersion":"1.15"},{"id":"worldgen/biome","minVersion":"1.16","path":"processed/reports/biomes"}]}');let V;const L={},P=function(e,t){if(!t)return e();if(void 0===V){const e=document.createElement("link").relList;V=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in L)return;L[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":V,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};var I=JSON.parse('{"advancement":"Advancement","button.add":"Add","button.collapse":"Collapse","button.expand":"Expand","button.remove":"Remove","copy":"Copy","dimension-type":"Dimension Type","dimension":"Dimension","download":"Download","fields":"Fields","github":"GitHub","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.tabs":"Tabs","item-modifier":"Item Modifier","language":"Language","loot-table":"Loot Table","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","predicate":"Predicate","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","presets":"Presets","preview":"Visualize","preview.scale":"Scale","preview.depth":"Depth","preview.width":"Width","source_placeholder":"Paste JSON content here","undo":"Undo","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/carver":"Carver","worldgen/feature":"Feature","worldgen/noise-settings":"Noise Settings","worldgen/processor-list":"Processor List","worldgen/structure-feature":"Structure Feature","worldgen/surface-builder":"Surface Builder","worldgen/template-pool":"Template Pool"}'),D=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:I});const S={fallback:I};function O(e,t,...n){var o,r,a,i,s;return function(e,t){return e.replace(/%\d+%/g,(e=>{const n=parseInt(e.slice(1,-1));return void 0!==(null==t?void 0:t[n])?t[n]:e}))}(null!=(s=null!=(i=null!=(a=null==(o=S[e])?void 0:o[t])?a:null==(r=S.en)?void 0:r[t])?i:S.fallback[t])?s:t,n)}async function N(e){const t=j.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return P((()=>import("./de.a632fd27.js")),void 0);case"../locales/en.json":return P((()=>Promise.resolve().then((function(){return D}))),void 0);case"../locales/fr.json":return P((()=>import("./fr.ea70bc04.js")),void 0);case"../locales/it.json":return P((()=>import("./it.772fd5c1.js")),void 0);case"../locales/ja.json":return P((()=>import("./ja.ed039f93.js")),void 0);case"../locales/pl.json":return P((()=>import("./pl.ea3084e3.js")),void 0);case"../locales/pt.json":return P((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return P((()=>import("./ru.4f4928c9.js")),void 0);case"../locales/sk.json":return P((()=>import("./sk.dcbe99ef.js")),void 0);case"../locales/zh-cn.json":return P((()=>import("./zh-cn.d626787e.js")),void 0);case"../locales/zh-tw.json":return P((()=>import("./zh-tw.2f743133.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),o=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return P((()=>import("./de.ba8c635a.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return P((()=>import("./en.6ae73cdb.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return P((()=>import("./fr.c1ebc76d.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return P((()=>import("./it.288ea523.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return P((()=>import("./ja.d68f1cee.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return P((()=>import("./pl.2f8b352f.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return P((()=>import("./pt.98ad9b62.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return P((()=>import("./ru.61de7e2f.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return P((()=>import("./zh-cn.655950f4.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return P((()=>import("./zh-tw.a8f28612.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);S[e]=s(s({},n.default),o.default)}const T={system:"device_desktop",dark:"moon",light:"sun"};function R({lang:e,title:t,theme:n,changeTheme:o,language:r,changeLanguage:a}){const i=O.bind(null,e);return d("header",null,d("div",{class:"header-title"},d(m,{class:"home-link",href:g().match(/^\/worldgen\/.+/)?"/worldgen/":"/"},H.three_bars),d("h2",null,t)),d("nav",null,d("ul",null,d("li",null,d(A,{icon:"globe"},j.languages.map((({code:e,name:t})=>d(E,{label:t,active:e===r,onClick:()=>a(e)}))))),d("li",null,d(A,{icon:T[n]},Object.entries(T).map((([e,t])=>d(E,{icon:t,label:i(`theme.${e}`),active:e===n,onClick:()=>o(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",title:i("github")},H.mark_github)))))}const H={archive:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"})),arrow_left:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"})),arrow_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"})),chevron_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"})),clippy:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"})),code:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"})),dash:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"})),device_desktop:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"})),download:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),eye:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"})),eye_closed:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"})),gear:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"})),globe:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"})),history:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"})),kebab_horizontal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"})),link:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"})),mark_github:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})),moon:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"})),play:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"})),plus:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"})),search:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"})),sun:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"})),sync:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"})),tag:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"})),three_bars:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"})),unfold:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"})),upload:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),x_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"}))};function B(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),n.invalidated(),()=>{null==e||e.removeListener(n)})),[e])}function F(e,t){if(!e)return;const n=u(),o=u(),r=u([0,0]);c((()=>{const a=e=>{o.current=[e.offsetX,e.offsetY]},i=e=>{if(void 0===o.current)return;const a=e.offsetX-o.current[0],i=e.offsetY-o.current[1];0===a&&0===i||(cancelAnimationFrame(n.current),r.current=[r.current[0]+a,r.current[1]+i],n.current=requestAnimationFrame((()=>{t(...r.current),r.current=[0,0]}))),o.current=[e.offsetX,e.offsetY]},s=e=>{o.current=void 0};return e.addEventListener("mousedown",a),e.addEventListener("mousemove",i),document.body.addEventListener("mouseup",s),()=>{e.removeEventListener("mousedown",a),e.removeEventListener("mousemove",i),document.body.removeEventListener("mouseup",s)}}),[e])}const W=e=>("0"+e.toString(16)).substr(-2);function G(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,W).join("")}function q(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function J(e){return`/${e}/`.replaceAll("//","/")}function Y(e){const t=Math.abs(function(e){let t=0;for(let n=0;n>8)%256,(t>>16)%256]}function U(e,t,n){return Math.max(e,Math.min(t,n))}function X(e,t,n){return n<0?e:n>1?t:K(n,e,t)}function K(e,t,n){return t+e*(n-t)}function Q(e,t,n,o,r,a){return K(t,K(e,n,o),K(e,r,a))}function Z(e){return e*e*e*(e*(6*e-15)+10)}const ee=class{constructor(e){this.xo=256*e(),this.yo=256*e(),this.zo=256*e(),this.p=Array(256);for(let t=0;t<256;t+=1)this.p[t]=t;for(let t=0;t<256;t+=1){const n=e.int32()%(256-t),o=this.p[t];this.p[t]=this.p[t+n],this.p[t+n]=o}}noise(e,t,n,o,r){const a=e+this.xo,i=t+this.yo,s=n+this.zo,l=Math.floor(a),c=Math.floor(i),d=Math.floor(s),u=a-l,h=i-c,m=s-d,g=Z(u),p=Z(h),f=Z(m);let v=0;return 0!==o&&(v=Math.floor(Math.min(r,h)/o)*o),this.sampleAndLerp(l,c,d,u,h-v,m,g,p,f)}gradDot(e,t,n,o){const r=ee.GRADIENT[15&e];return r[0]*t+r[1]*n+r[2]*o}P(e){return 255&this.p[255&e]}sampleAndLerp(e,t,n,o,r,a,i,s,l){const c=this.P(e)+t,d=this.P(c)+n,u=this.P(c+1)+n,h=this.P(e+1)+t,m=this.P(h)+n,g=this.P(h+1)+n;return function(e,t,n,o,r,a,i,s,l,c,d){return K(n,Q(e,t,o,r,a,i),Q(e,t,s,l,c,d))}(i,s,l,this.gradDot(this.P(d),o,r,a),this.gradDot(this.P(m),o-1,r,a),this.gradDot(this.P(u),o,r-1,a),this.gradDot(this.P(g),o-1,r-1,a),this.gradDot(this.P(d+1),o,r,a-1),this.gradDot(this.P(m+1),o-1,r,a-1),this.gradDot(this.P(u+1),o,r-1,a-1),this.gradDot(this.P(g+1),o-1,r-1,a-1))}};let te=ee;te.GRADIENT=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1],[1,1,0],[0,-1,1],[-1,1,0],[0,-1,-1]];class ne{constructor(e,t,n){this.amplitudes=n,this.noiseLevels=Array(this.amplitudes.length);for(let o=0;o{const r=e[`${t}_noise`];return new oe(n.seed+o,r.firstOctave,r.amplitudes)})),a={};e.biomes.forEach((e=>{a[e.biome]=ie(e.biome,n.biomeColors)}));const i=t.data,s=-n.offset[0]-100+n.res/2,l=-n.offset[1]-100+n.res/2,c=4*t.width/n.res,d=4/n.res;for(let u=0;u<200;u+=n.res)for(let t=0;t<200;t+=n.res){const h=t*c+u*d,m=(u+s)*n.scale,g=(t+l)*n.scale,p=se(r,e.biomes,m,g),f=null!=(o=a[p])?o:[128,128,128];i[h]=f[0],i[h+1]=f[1],i[h+2]=f[2],i[h+3]=255}}(e,t,n);case"fixed":return function(e,t,n){const o=t.data,r=ie(e.biome,n.biomeColors),a=4*t.width/n.res,i=4/n.res;for(let s=0;s<200;s+=n.res)for(let e=0;e<200;e+=n.res){const t=e*a+s*i;o[t]=r[0],o[t+1]=r[1],o[t+2]=r[2],o[t+3]=255}}(e,t,n);case"checkerboard":return function(e,t,n){var o,r,a,i,s,l;const c={};null==(o=e.biomes)||o.forEach((e=>{c[e]=ie(e,n.biomeColors)}));const d=t.data,u=-n.offset[0]-100+n.res/2,h=-n.offset[1]-100+n.res/2,m=4*t.width/n.res,g=4/n.res,p=(null!=(r=e.scale)?r:2)+2,f=null!=(i=null==(a=e.biomes)?void 0:a.length)?i:0;for(let v=0;v<200;v+=n.res)for(let t=0;t<200;t+=n.res){const o=t*m+v*g,r=((((v+u)*n.scale>>p)+((t+h)*n.scale>>p))%f+f)%f,a=null==(s=e.biomes)?void 0:s[r],i=null!=(l=c[a])?l:[128,128,128];d[o]=i[0],d[o+1]=i[1],d[o+2]=i[2],d[o+3]=255}}(e,t,n)}}function ie(e,t){var n;if(!e)return[128,128,128];const o=null!=(n=t[e])?n:ce[e];return void 0===o?Y(e):o}function se(e,t,n,o){if(!Array.isArray(t)||0===t.length)return"";const r=e.map((e=>e.getValue(n,o,0)));let a=1/0,i="";for(const s of t){const e=le(s.parameters,{altitude:r[0],temperature:r[1],humidity:r[2],weirdness:r[3],offset:0});e{_e(t,null==e?void 0:e.decorator,n).forEach((t=>ve(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{ve(t,n.random()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var o,r;for(const a of null!=(o=null==e?void 0:e.features)?o:[])if(n.random()<(null!=(r=null==a?void 0:a.chance)?r:0))return void ve(t,a.feature,n);ve(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var o,r,a;ve(t,null==(a=null==e?void 0:e.features)?void 0:a[ge(null!=(r=null==(o=null==e?void 0:e.features)?void 0:o.length)?r:0,n)],n)}},ye={chance:(e,t,n)=>{var o;return n.random()<1/(null!=(o=null==e?void 0:e.chance)?o:1)?[t]:[]},count:(e,t,n)=>{var o;return new Array(pe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t)},count_extra:(e,t,n)=>{var o,r;let a=null!=(o=null==e?void 0:e.count)?o:1;return n.random(){var o;return new Array(pe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t).map((e=>[e[0]+ge(16,n),e[1],e[2]+ge(16,n)]))},count_noise:(e,t,n)=>{const o=n.biomeInfoNoise.getValue(t[0]/200,0,t[2]/200){var o;const r=Math.max(1,e.noise_factor),a=n.biomeInfoNoise.getValue(t[0]/r,0,t[2]/r),i=Math.max(0,Math.ceil((a+(null!=(o=e.noise_offset)?o:0))*e.noise_to_count_ratio));return new Array(i).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,o)=>{const r=4*Math.floor(o/4)+1+ge(3,n)+t[0];return[r,Math.max(n.seaLevel,de[U(0,63,r)]),4*Math.floor(o%4)+1+ge(3,n)+t[2]]})),decorated:(e,t,n)=>_e(t,null==e?void 0:e.outer,n).flatMap((t=>_e(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var o,r,a,i;return me(t,ge(null!=(o=null==e?void 0:e.spread)?o:0,n)+ge(null!=(r=null==e?void 0:e.spread)?r:0,n)-(null!=(a=e.spread)?a:0)+(null!=(i=null==e?void 0:e.baseline)?i:0))},emerald_ore:(e,t,n)=>{const o=3+ge(6,n);return[...new Array(o)].map((()=>[t[0]+ge(16,n),4+ge(28,n),t[2]+ge(16,n)]))},fire:(e,t,n)=>{const o=1+ge(ge(pe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+ge(16,n),ge(128,n),t[2]+ge(16,n)]))},glowstone:(e,t,n)=>{const o=ge(1+ge(pe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+ge(16,n),ge(128,n),t[2]+ge(16,n)]))},heightmap:(e,t,n)=>me(t,Math.max(n.seaLevel,de[U(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>me(t,ge(2*Math.max(n.seaLevel,de[U(0,63,t[0])]),n)),heightmap_world_surface:(e,t,n)=>me(t,Math.max(n.seaLevel,de[U(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+ge(8,n),t[1],t[2]+4+ge(8,n)]],lava_lake:(e,t,n)=>{var o,r;if(0===ge((null!=(o=e.chance)?o:1)/10,n)){const o=ge(ge(248,n)+8,n);if(o[t],range:(e,t,n)=>{var o,r,a;return me(t,ge((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(a=null==e?void 0:e.bottom_offset)?a:0))},range_biased:(e,t,n)=>{var o,r,a;return me(t,ge(ge((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(a=null==e?void 0:e.bottom_offset)?a:0),n))},range_very_biased:(e,t,n)=>{var o,r,a,i;return me(t,ge(ge(ge((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(a=null==e?void 0:e.bottom_offset)?a:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n))},spread_32_above:(e,t,n)=>me(t,ge(t[1]+32,n)),top_solid_heightmap:(e,t)=>me(t,de[U(0,63,t[0])]),magma:(e,t,n)=>me(t,ge(t[1]+32,n)),square:(e,t,n)=>[[t[0]+ge(16,n),t[1],t[2]+ge(16,n)]],water_lake:(e,t,n)=>{var o;return 0===ge(null!=(o=e.chance)?o:1,n)?[[t[0]+ge(16,n),ge(256,n),t[2]+ge(16,n)]]:[]}};class be{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0,this.minLimitPerlinNoise=ne.fromRange(e+"djfqnqd",-15,0),this.maxLimitPerlinNoise=ne.fromRange(e+"gowdnqs",-15,0),this.mainPerlinNoise=ne.fromRange(e+"afiwmco",-7,0),this.depthNoise=ne.fromRange(e+"qphnmeo",-15,0)}reset(e,t,n,o,r){this.settings=e,this.chunkWidth=4*e.size_horizontal,this.chunkHeight=4*e.size_vertical,this.chunkCountY=Math.floor(e.height/this.chunkHeight),e.amplified&&t>0&&(t=1+2*t,n=1+4*n),this.biomeDepth=.265625*(.5*t-.125),this.biomeScale=96/(.9*n+.1),this.noiseColumnCache=Array(r).fill(null),this.xOffset=o}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),o=Math.floor(e%this.chunkWidth)/this.chunkWidth,r=this.fillNoiseColumn(n),a=this.fillNoiseColumn(n+1);for(let i=this.chunkCountY-1;i>=0;i-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[i*this.chunkHeight+e]=Q(n,o,r[i],r[i+1],a[i],a[i+1])}return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),o=684.412*this.settings.sampling.xz_scale,r=684.412*this.settings.sampling.y_scale,a=o/this.settings.sampling.xz_factor,i=r/this.settings.sampling.y_factor,s=this.settings.random_density_offset?this.getRandomDensity(e):0;for(let l=0;l<=this.chunkCountY;l+=1){let t=this.sampleAndClampNoise(e,l,this.mainPerlinNoise.getOctaveNoise(0).zo,o,r,a,i);const c=((1-2*l/this.chunkCountY+s)*this.settings.density_factor+this.settings.density_offset+this.biomeDepth)*this.biomeScale;t+=c*(c>0?4:1),this.settings.top_slide.size>0&&(t=X(this.settings.top_slide.target,t,(this.chunkCountY-l-this.settings.top_slide.offset)/this.settings.top_slide.size)),this.settings.bottom_slide.size>0&&(t=X(this.settings.bottom_slide.target,t,(l-this.settings.bottom_slide.offset)/this.settings.bottom_slide.size)),n[l]=t}return this.noiseColumnCache[e-this.xOffset]=n,n}getRandomDensity(e){const t=this.depthNoise.getValue(200*e,10,this.depthNoise.getOctaveNoise(0).zo,1,0,!0),n=24.575625*(t<0?.3*-t:t)-2;return n<0?.009486607142857142*n:.006640625*Math.min(n,1)}sampleAndClampNoise(e,t,n,o,r,a,i){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=ne.wrap(e*o*d),m=ne.wrap(t*r*d),g=ne.wrap(n*o*d),p=r*d,f=this.minLimitPerlinNoise.getOctaveNoise(u);f&&(s+=f.noise(h,m,g,p,t*p)/d);const v=this.maxLimitPerlinNoise.getOctaveNoise(u);if(v&&(l+=v.noise(h,m,g,p,t*p)/d),u<8){const o=this.mainPerlinNoise.getOctaveNoise(u);o&&(c+=o.noise(ne.wrap(e*a*d),ne.wrap(t*i*d),ne.wrap(n*a*d),i*d,t*i*d)/d)}d/=2}return X(s/512,l/512,(c/10+1)/2)}}function $e(e,t){return e[t]>0?0:e[t+1]>0?150:255}const ke=["dimension","worldgen/noise-settings","worldgen/feature"],xe=[{id:"biome-noise",generator:"dimension",path:new v.Path(["generator","biome_source"]),predicate:e=>e.get(new v.Path(["generator","type"])).endsWith("noise"),preview:({data:e,shown:t})=>{var n;const[o,r]=h(2),[a,i]=h(G()),[s,l]=h(void 0),m=null==(n=e.type)?void 0:n.replace(/^minecraft:/,""),g=u(null),p=u([0,0]),v=u(void 0),_=u(),w=u();c((()=>{_.current=(t=4)=>{"multi_noise"!==m&&(t=1);const n=g.current.getContext("2d");g.current.width=200/t,g.current.height=200/t;const r=n.createImageData(g.current.width,g.current.height);ae(e,r,{biomeColors:{},offset:p.current,scale:o,seed:a,res:t}),n.putImageData(r,0,0),1!==t&&(clearTimeout(v.current),v.current=setTimeout((()=>_.current(1)),150))},w.current=(t,n)=>{const r=200*t/g.current.clientWidth,i=200*n/g.current.clientHeight,s=function(e,t,n,o){var r,a,i,s,l;const[c,d]=function([e,t],n){return[(e-n.offset[0]-100+n.res/2)*n.scale,(t-n.offset[1]-100+n.res/2)*n.scale]}([t,n],o);switch(null==(r=null==e?void 0:e.type)?void 0:r.replace(/^minecraft:/,"")){case"multi_noise":return se(re.map(((t,n)=>{const r=e[`${t}_noise`];return new oe(o.seed+n,r.firstOctave,r.amplitudes)})),e.biomes,c,d);case"fixed":return e.biome;case"checkerboard":const t=(null!=(a=e.scale)?a:2)+2,n=null!=(s=null==(i=e.biomes)?void 0:i.length)?s:0,r=(((c>>t)+(d>>t))%n+n)%n;return null==(l=e.biomes)?void 0:l[r]}}(e,r,i,{biomeColors:{},offset:p.current,scale:o,seed:a,res:1});l(s)}})),F(g.current,((e,t)=>{const n=200*e/g.current.clientWidth,o=200*t/g.current.clientHeight;p.current=[p.current[0]+n,p.current[1]+o],_.current()})),function(e,t){if(!e)return;const n=e=>{t(e.offsetX,e.offsetY)},o=()=>{t(void 0,void 0)};c((()=>(e.addEventListener("mousemove",n),e.addEventListener("mouseleave",o),()=>{e.removeEventListener("mousemove",n),e.removeEventListener("mouseleave",o)})),[e])}(g.current,((e,t)=>{void 0===e||void 0===t?l(void 0):w.current(e,t)}));const y=JSON.stringify(e);c((()=>{t&&_.current()}),[y,o,a,t]);const b=e=>{p.current[0]*=o/e,p.current[1]*=o/e,r(e)};return d(f,null,d("div",{class:"controls"},s&&d(E,{label:s,class:"no-pointer"}),("multi_noise"===m||"checkerboard"===m)&&d(f,null,d(E,{icon:"dash",onClick:()=>b(1.5*o)}),d(E,{icon:"plus",onClick:()=>b(o/1.5)})),"multi_noise"===m&&d(E,{icon:"sync",onClick:()=>i(G())})),d("canvas",{ref:g,width:"200",height:"200"}))}},{id:"noise-settings",generator:"worldgen/noise-settings",path:new v.Path(["noise"]),predicate:()=>!0,preview:({lang:e,data:t,shown:n})=>{const o=O.bind(null,e),[r,a]=h(G()),[i,s]=h(.1),[l,m]=h(.2),g=u(null),p=u(0),v=u();c((()=>{v.current=()=>{const e=g.current.getContext("2d"),n=t.height;g.current.width=n,g.current.height=n;const o=e.createImageData(g.current.width,g.current.height);!function(e,t,n){const o=new be(n.seed);o.reset(e,n.biomeDepth,n.biomeScale,n.offset,200);const r=t.data,a=4*t.width;for(let i=0;i{const t=e*g.current.width/g.current.clientWidth;p.current=p.current+t,v.current()}));const _=JSON.stringify(t);return c((()=>{n&&v.current()}),[_,i,l,r,n]),d(f,null,d("div",{class:"controls"},d(A,{icon:"gear"},d(M,{type:"number",label:o("preview.depth"),value:`${i}`,onChange:e=>s(Number(e))}),d(M,{type:"number",label:o("preview.scale"),value:`${l}`,onChange:e=>m(Number(e))})),d(E,{icon:"sync",onClick:()=>a(G())})),d("canvas",{ref:g,width:"200",height:t.height}))}},{id:"decorator",generator:"worldgen/feature",path:new v.Path([]),predicate:()=>!0,preview:({data:e,version:t,shown:n})=>{const[o,r]=h(4),[a,i]=h(G()),s=u(null),l=u();c((()=>{l.current=()=>{const n=s.current.getContext("2d");s.current.width=16*o,s.current.height=16*o;const r=n.createImageData(s.current.width,s.current.height);!function(e,t,n){const o={placements:[],features:[],random:p(n.seed),biomeInfoNoise:new ne(n.seed+"frwynup",0,[1]),seaLevel:63,version:n.version};for(let a=0;a=n.size[0]||a[1]>=n.size[1]||a[2]>=n.size[2])continue;const e=a[2]*(4*t.width)+4*a[0],s=i{n&&setTimeout((()=>l.current()))}),[m,o,a,n]),d(f,null,d("div",{class:"controls"},d(E,{icon:"dash",onClick:()=>r(Math.min(16,o+1))}),d(E,{icon:"plus",onClick:()=>r(Math.max(1,o-1))}),d(E,{icon:"sync",onClick:()=>i(G())})),d("canvas",{ref:s,width:"64",height:"64"}))}}];function ze({lang:e,model:t,version:n,id:o,shown:r}){const[,a]=h(0);return B(t,(()=>{a((e=>e+1))})),d(f,null,xe.filter((e=>e.generator===o)).map((o=>{const a=null==t?void 0:t.get(o.path);return t&&void 0!==a&&o.predicate(t)?o.preview({lang:e,model:t,data:a,version:n,shown:r}):d(f,null)})))}const Ee={base:({},e,t)=>t,choice({switchNode:e},t,n,o){return e.hook(this,t,n,o)},list({children:e},t,n,o){return Array.isArray(n)?n.map(((n,r)=>e.hook(this,t.push(r),n,o))):n},map({children:e,config:t},n,o,r){var a,i;if(void 0===o)return;const s="block_state_map"===(null==(a=t.validation)?void 0:a.validator)?null==(i=r.blockStates)?void 0:i[v.relativePath(n,t.validation.params.id).get()]:null,l={};return Object.keys(o).forEach((t=>{s&&!Object.keys(s.properties).includes(t)||(l[t]=e.hook(this,n.push(t),o[t],r))})),l},object({getActiveFields:e},t,n,o){if(null==n||"object"!=typeof n)return n;const r={},a=e(t);return Object.keys(a).filter((e=>a[e].enabled(t))).forEach((e=>{r[e]=a[e].hook(this,t.push(e),n[e],o)})),r}};["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const Me="https://raw.githubusercontent.com/Arcensoth/mcdata",Ae="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",Ce=[{id:"mcdata_master",hash:"836e6c1a1c85b56940f8a238906420486d810d45",url:Me},{id:"vanilla_datapack_summary",hash:"8a2f8022eb88840e6871ff6a72f63d6e64afc323",url:Ae}];async function je(e,t,n){const o=j.versions.find((t=>t.id===e));o?(console.debug(`[fetchData] ${JSON.stringify(o)}`),o.dynamic&&await Promise.all(Ce.filter((e=>localStorage.getItem(`cached_${e.id}`)!==e.hash)).map((async e=>{console.debug(`[deleteMatching] ${e.id} '${localStorage.getItem(`cached_${e.id}`)}' < '${e.hash}' ${e.url}/${o.refs[e.id]}`),await async function(e){try{const t=await caches.open("misode-v1");console.debug("[deleteMatching] Opened cache misode-v1");const n=[];for(const o of await t.keys())e(o.url)&&n.push(t.delete(o));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${t.message}`)}}((t=>t.startsWith(`${e.url}/${o.refs[e.id]}`))),console.debug(`[deleteMatching] Done! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`),localStorage.setItem(`cached_${e.id}`,e.hash),console.debug(`[deleteMatching] Set! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`)}))),await Promise.all([Ve(o,t),Le(o,n),Pe(o,t)])):console.error(`[fetchData] Unknown version ${o} in ${JSON.stringify(j.versions)}`)}async function Ve(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=j.registries.filter((e=>!e.dynamic)).filter((t=>Re(e.id,t.minVersion,t.maxVersion)));if(Re(e.id,void 0,"1.15")){const r=`${Me}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await Ie(r,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var o;t.register(n.id,null!=(o=e[n.id])?o:[])}))}catch(o){console.warn("Error occurred while fetching registries:",o)}}else await Promise.all(n.map((async n=>{try{const o=n.path?`${Me}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${Me}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await Ie(o,(e=>e.values)))}catch(o){console.warn(`Error occurred while fetching registry ${n.id}:`,o)}})))}async function Le(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),Re(e.id,void 0,"1.16")){const o=Re(e.id,void 0,"1.15")?`${Me}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${Me}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await Ie(o,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n]={properties:e[n].properties,default:e[n].states.find((e=>e.default)).properties}})),t}));Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}else{const o=`${Me}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await Ie(o);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}}async function Pe(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=j.registries.filter((e=>e.dynamic)).filter((t=>Re(e.id,t.minVersion,t.maxVersion)));if(Re(e.id,"1.16")){const r=`${Ae}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await Ie(r);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(o){console.warn("Error occurred while fetching dynamic registries:",o)}}}async function Ie(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const o=await n.match(e);if(o&&o.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await o.json();console.debug(`[getData] fetching data ${e}`);const r=await fetch(e),a=t(await r.json());return await n.put(e,new Response(JSON.stringify(a))),a}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${n.message}`),console.debug(`[getData] fetching data ${e}`);const o=await fetch(e);return t(await o.json())}}const De=["1.15","1.16","1.17"],Se={},Oe={},Ne={1.15:_,1.16:w,1.17:y};async function Te(e){return Se[e]||(Se[e]=(async()=>{try{const t=Ne[e].getCollections(),n={};await je(e,t,n);const o=Ne[e].getSchemas(t);return Se[e]={collections:t,schemas:o,blockStates:n},Se[e]}catch(t){throw new Error(`Cannot get version "${e}": ${t.message}`)}})()),Se[e]}function Re(e,t,n){const o=j.versions.findIndex((t=>t.id===e)),r=t?j.versions.findIndex((e=>e.id===t)):0,a=n?j.versions.findIndex((e=>e.id===n)):j.versions.length-1;return r<=o&&o<=a}var He,Be;(Be=He||(He={})).ID_LANGUAGE="language",Be.ID_THEME="theme",Be.ID_VERSION="schema_version",Be.ID_INDENT="indentation",Be.getLanguage=function(){var e;return null!=(e=localStorage.getItem(Be.ID_LANGUAGE))?e:"en"},Be.getTheme=function(){var e;return null!=(e=localStorage.getItem(Be.ID_THEME))?e:"dark"},Be.getVersion=function(){const e=localStorage.getItem(Be.ID_VERSION);return e&&De.includes(e)?e:"1.17"},Be.getIndent=function(){var e;return null!=(e=localStorage.getItem(Be.ID_INDENT))?e:"2_spaces"},Be.setLanguage=function(e){e&&localStorage.setItem(Be.ID_LANGUAGE,e)},Be.setTheme=function(e){e&&localStorage.setItem(Be.ID_THEME,e)},Be.setVersion=function(e){e&&localStorage.setItem(Be.ID_VERSION,e)},Be.setIndent=function(e){e&&localStorage.setItem(Be.ID_INDENT,e)};const Fe={"2_spaces":2,"4_spaces":4,tabs:"\t"};function We({lang:e,name:t,model:n,blockStates:o,doCopy:r,doDownload:a,doImport:i,onError:s}){const l=O.bind(null,e),[m,g]=h(He.getIndent()),p=u(null),_=u(null),w=u();c((()=>{w.current=()=>{if(n&&o)try{const e={blockStates:null!=o?o:{}},t=n.schema.hook(Ee,new v.ModelPath(n),n.data,e);p.current.value=JSON.stringify(t,null,Fe[m])+"\n"}catch(e){s(`Error getting JSON output: ${e.message}`),console.error(e),p.current.value=""}}})),B(n,(()=>{w.current()})),c((()=>{w.current()}),[m]);c((()=>{r&&p.current&&(p.current.select(),document.execCommand("copy"))}),[r]),c((()=>{if(a&&p.current&&_.current){const e=encodeURIComponent(p.current.value);_.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),_.current.setAttribute("download",`${t}.json`),_.current.click()}}),[a]),c((()=>{i&&p.current&&(p.current.value="",p.current.select())}),[i]);return d(f,null,d("div",{class:"controls"},d(A,{icon:"gear"},Object.entries(Fe).map((([e])=>d(E,{label:l(`indentation.${e}`),active:m===e,onClick:()=>{return t=e,He.setIndent(t),void g(t);var t}}))))),d("textarea",{ref:p,class:"source",onChange:()=>{try{const e=JSON.parse(p.current.value);null==n||n.reset(e,!1)}catch(e){}},spellcheck:!1,autocorrect:"off",placeholder:l("source_placeholder")}),d("a",{ref:_,style:"display: none;"}))}class Ge{constructor(){this.registry={}}register(e){const t=G();return this.registry[t]=e,t}on(e,t){return this.register((n=>{n.addEventListener(e,(e=>{t(n),e.stopPropagation()}))}))}onChange(e){return this.on("change",e)}onClick(e){return this.on("click",e)}mounted(e){e.querySelectorAll("[data-id]").forEach((e=>{var t,n;const o=e.getAttribute("data-id");null==(n=(t=this.registry)[o])||n.call(t,e)})),this.registry={}}}const qe={clippy:'',info:'',issue_opened:'',plus_circle:'',trashcan:''},Je=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","carver.type","feature.type","decorator.type","feature.tree.minimum_size.type","block_state_provider.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","int_provider.type","float_provider.type","height_provider.type","structure_feature.type","surface_builder.type","processor.processor_type","rule_test.predicate_type","pos_rule_test.predicate_type","template_element.element_type","block_placer.type"],Ye=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],Ue=["feature.config","decorator.config","int_provider.value","float_provider.value","block_state_provider.simple_state_provider.state","block_state_provider.rotated_block_provider.state","block_state_provider.weighted_state_provider.entries.entry.data","rule_test.block_state","structure_feature.config","surface_builder.config","template_pool.elements.entry.element"],Xe=["loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","feature.type","decorator.type","block_state_provider.type","feature.tree.minimum_size.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","block_placer.type","rule_test.predicate_type","processor.processor_type","template_element.element_type"],Ke=new v.DataModel(v.MapNode(v.StringNode(),v.StringNode()),{historyMax:0}),Qe={base:()=>["","",""],boolean({node:e},t,n,o){const r=o.mounter.onClick((()=>{t.model.set(t,!(!e.optional()||!1!==n)&&void 0)})),a=o.mounter.onClick((()=>{t.model.set(t,!e.optional()||!0!==n||void 0)}));return["",`${q(o.loc("false"))}\n\t\t\t${q(o.loc("true"))}`,""]},choice({choices:e,config:t,switchNode:n},o,r,a){const i=n.activeCase(o,!0),s=(null==t?void 0:t.context)?new v.ModelPath(o.getModel(),new v.Path(o.getArray(),[t.context])):o,l=(null==t?void 0:t.choiceContext)?new v.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new v.Path([],[t.context]):o,[c,d,u]=i.node.hook(this,s,r,a);if(1===e.length)return[c,d,u];return[c,``+d,u]},list({children:e},t,n,o){const r=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[e.default(),...n])})),a=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[...n,e.default()])})),i=``;let s="";return Array.isArray(n)&&(s=n.map(((n,r)=>{const a=o.mounter.onClick((()=>t.model.set(t.push(r),void 0))),i=t.push(r).contextPush("entry"),s=e.category(i),[l,c,d]=e.hook(this,i,n,o);return`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${nt(o.loc,i,o.mounter)}\n\t\t\t\t\t\t${ot(o.loc,i,o.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${l}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${c}\n\t\t\t\t\t
\n\t\t\t\t\t${d?`
${d}
`:""}\n\t\t\t\t\t
\n\t\t\t\t
`})).join(""),n.length>2&&(s+=`
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`)),["",i,s]},map({children:e,keys:t,config:n},o,r,a){var i,s,l,c;const d=new v.ModelPath(Ke,new v.Path([et(o.toString())])),u=a.mounter.onClick((()=>{const t=d.get();o.model.set(o.push(t),e.default())})),h="block_state_map"===(null==(i=n.validation)?void 0:i.validator)?null==(s=a.blockStates)?void 0:s[v.relativePath(o,n.validation.params.id).get()]:null,m=((null==h?void 0:h.properties)?v.StringNode(null,{enum:Object.keys(null!=(l=h.properties)?l:{})}):t).hook(this,d,null!=(c=d.get())?c:"",a)[1]+``;if(h&&"Properties"===o.last()){"object"!=typeof r&&(r={});const e=Object.entries(h.properties).map((([e,t])=>[e,v.StringNode(null,{enum:t})]));return Object.entries(h.properties).forEach((([e,t])=>{"string"!=typeof r[e]?o.model.errors.add(o.push(e),"error.expected_string"):t.includes(r[e])||o.model.errors.add(o.push(e),"error.invalid_enum_option",r[e])})),v.ObjectNode(Object.fromEntries(e)).hook(this,o,r,a)}let g="";return"object"==typeof r&&void 0!==r&&(g=Object.keys(r).map((t=>{var n;const i=a.mounter.onClick((()=>o.model.set(o.push(t),void 0))),s=o.modelPush(t),l=e.category(s),c=h?v.StringNode(null,{enum:null!=(n=h.properties[t])?n:[]}):e;(null==h?void 0:h.properties[t])&&!h.properties[t].includes(r[t])&&o.model.errors.add(s,"error.invalid_enum_option",r[t]);const[d,u,m]=c.hook(this,s,r[t],a);return`
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${nt(a.loc,s,a.mounter)}\n\t\t\t\t\t\t\t${ot(a.loc,s,a.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${d}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${u}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${m?`
${m}
`:""}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`})).join("")),["",m,g]},number({integer:e,config:t},n,o,{mounter:r}){var a;const i=r.onChange((o=>{const r=o.value,a=(null==t?void 0:t.color)?parseInt(r.slice(1),16):e?parseInt(r):parseFloat(r);n.model.set(n,a)}));if(null==t?void 0:t.color){return["",``,""]}return["",``,""]},object({node:e,getActiveFields:t,getChildModelPath:n},o,r,a){let i="",s="";e.optional()&&(s=void 0===r?``:``);let l="";if("object"==typeof r&&void 0!==r&&(!e.optional()||void 0!==r)){const e=t(o);l=Object.keys(e).filter((t=>e[t].enabled(o))).map((t=>{const l=e[t],c=n(o,t),d=c.getContext().join(".");if(Ye.includes(d))return"";const u=l.category(c),[h,m,g]=l.hook(this,c,r[t],a);if(0===h.length&&0===m.length&&0===g.length)return"";const p="object"===l.type(c)&&Ue.includes(d),f=Xe.includes(d);return p||f?(i+=`${nt(a.loc,c,a.mounter)}${ot(a.loc,c,a.mounter)}${h}`,s+=m,p?g:""):`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${nt(a.loc,c,a.mounter)}\n\t\t\t\t\t\t${ot(a.loc,c,a.mounter)}\n\t\t\t\t\t\t${h}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${m}\n\t\t\t\t\t
\n\t\t\t\t\t${g?`
${g}
`:""}\n\t\t\t\t
`})).join("")}return[i,s,l]},string({node:e,getValues:t,config:n},o,r,a){var i,s;const l=a.mounter.register((e=>{e.value=null!=r?r:"",e.addEventListener("change",(t=>{const n=e.value;o.model.set(o,0===n.length?void 0:n),t.stopPropagation()}))}));let c;const d=t();if(Ze(n)&&!n.additional||Je.includes(o.getContext().join("."))){let t=new v.Path([]);Ze(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):Ze(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool||(t=t.contextPush(n.params.pool)),c=``}else if(Ze(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=G();c=`\n\t\t\t\t${0===d.length?"":`\n\t\t\t\t\t\t\t\t${d.map((e=>``}`}else{const e=null==(i=a.blockStates)?void 0:i[v.relativePath(o,n.params.id).get()];c=``}return["",c,""]}};function Ze(e){return!!(null==e?void 0:e.enum)}function et(e){var t,n=0;for(t=0;t`
{e.getElementsByTagName("span")[0].classList.remove("show")}),{capture:!0,once:!0})}))}">\n\t\t${qe[t]}\n\t\t${n}\n\t
`,at=(e,t,n)=>`data-id="${n.register((n=>{const o=()=>{var o;const r=document.createElement("div");r.classList.add("node-menu");const a=e(t.contextPush("help").getContext().join("."));a.endsWith(".help")||r.insertAdjacentHTML("beforeend",`${a}`);const i=t.getContext().join(".");r.insertAdjacentHTML("beforeend",`\n\t\t\t\t`),null==(o=r.querySelector(".menu-item .btn"))||o.addEventListener("click",(()=>{const e=document.createElement("input");e.value=i,n.appendChild(e),e.select(),document.execCommand("copy"),n.removeChild(e)})),n.appendChild(r),document.body.addEventListener("click",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0}),document.body.addEventListener("contextmenu",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0})};n.addEventListener("contextmenu",(e=>{o(),e.preventDefault()}));let r=null;n.addEventListener("touchstart",(()=>{r=setTimeout((()=>{o(),r=null}),800)})),n.addEventListener("touchend",(()=>{r&&(clearTimeout(r),r=null)}))}))}"`;function it({lang:e,model:t,version:n,blockStates:o,onError:r}){const a=u(null),i=u();return c((()=>{i.current=()=>{if(t&&o)try{const r=new Ge,i={loc:O.bind(null,e),version:n,mounter:r,blockStates:o},s=new v.ModelPath(t),l=t.schema.hook(Qe,s,t.data,i),c=t.schema.category(s),d=t.schema.type(s);let u=l[2];l[1]&&(u=`
\n\t\t\t\t\t\t
${l[0]}${l[1]}
\n\t\t\t\t\t\t
${l[2]}
\n\t\t\t\t\t
`),a.current.innerHTML=u,r.mounted(a.current)}catch(i){r(`Error rendering the tree: ${i.message}`),console.error(i),a.current.innerHTML=""}}})),B(t,(()=>{i.current()})),c((()=>{i.current()}),[e,t,o]),d("div",{ref:a,class:"tree"})}function st({lang:e}){const t=O.bind(null,e);return d("main",null,d("div",{class:"settings"},d("p",null,t("settings.fields.description")),d("ul",{class:"field-list"})))}function lt({lang:e,changeTitle:t,version:n,onChangeVersion:o,category:r,generator:a}){var i,u,m;const g=O.bind(null,e),[p,_]=h(""),[w]=b();if(w)return d("main",null,d(C,{error:`Something went wrong rendering the generator: ${w.message}`}));const y=r?`${r}/${a}`:null!=a?a:"",$=j.models.find((e=>e.id===y));if(!$)return d("main",null,d(C,{error:`Cannot find generator "${y}"`}));const k=null!=(u=null==(i=j.models.find((e=>e.id===y)))?void 0:i.minVersion)?u:"1.15",V=j.versions.filter((e=>Re(e.id,k))).map((e=>e.id));t(g("title.generator",g(y)),V);const[L,P]=h(null),[I,D]=h(null);c((()=>{P(null),async function(e){return(await Te(e)).blockStates}(n).then((e=>D(e))),async function(e,t){var n;if(!Oe[t]||Oe[t].version!==e){const r=await Te(e),a=null==(n=j.models.find((e=>e.id===t)))?void 0:n.schema;if(!a)throw new Error(`Cannot find model ${t}`);try{const n=r.schemas.get(a),o=new v.DataModel(n);Oe[t]?o.reset(Oe[t].model.data,!1):(o.validate(!0),o.history=[JSON.stringify(o.data)]),Oe[t]={model:o,version:e}}catch(o){throw new Error(`Cannot get generator "${t}" for version "${e}": ${o.message}`)}}return Oe[t].model}(n,y).then((e=>P(e))).catch((e=>_(e.message)))}),[n,r,a]);const S=e=>{e.ctrlKey&&"z"===e.key?(x.generatorEvent("undo","Hotkey"),null==L||L.undo()):e.ctrlKey&&"y"===e.key&&(x.generatorEvent("redo","Hotkey"),null==L||L.redo())};c((()=>(document.addEventListener("keyup",S),()=>{document.removeEventListener("keyup",S)})),[L]);const[N,T]=h(""),[R,B]=h([]),F=($.category?$.category+"/":"")+$.schema;c((()=>{$.path&&async function(e){return(await Te(e)).collections}(n).then((e=>{const t=(null!=N?N:"").trim().split(" "),n=e.get(F).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&B(n)})).catch((e=>_(e.message)))}),[n,r,a,N]);const W=e=>{x.generatorEvent("load-preset",e),async function(e,t,n){console.debug(`[fetchPreset] ${n} ${t} ${n}`);const o=j.versions.find((t=>t.id===e));try{const e=await fetch(`${Ae}/${o.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`);return await e.json()}catch(r){console.warn(`Error occurred while fetching ${t} preset ${n}:`,r)}}(n,$.path,e).then((e=>{null==L||L.reset(e,!1)}))},[G,q]=h(window.innerWidth>820),[J,Y]=h(0),[U,X]=h(0),[K,Q]=h(0),[Z,ee]=h(!1),te=ke.includes(y);let ne=1;te&&(ne+=1),G&&(ne+=2);return d(f,null,d("main",{class:Z?"has-preview":""},d(z,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(E,{icon:"upload",label:g("import"),onClick:()=>{x.generatorEvent("import"),q(!0),Q(K+1)}}),$.path&&d(A,{icon:"archive",label:g("presets"),relative:!1},d(M,{icon:"search",large:!0,value:N,onChange:T,doSelect:1}),d("div",{class:"result-list"},R.map((e=>d(E,{label:e,onClick:()=>W(e)})))),0===R.length&&d(E,{label:g("no_presets")})),d(A,{icon:"tag",label:n},V.reverse().map((e=>d(E,{label:e,active:e===n,onClick:()=>o(e)})))),d(A,{icon:"kebab_horizontal"},d(E,{icon:"history",label:g("reset"),onClick:()=>{x.generatorEvent("reset"),null==L||L.reset(L.schema.default(),!0)}}),d(E,{icon:"arrow_left",label:g("undo"),onClick:e=>{e.stopPropagation(),x.generatorEvent("undo","Menu"),null==L||L.undo()}}),d(E,{icon:"arrow_right",label:g("redo"),onClick:e=>{e.stopPropagation(),x.generatorEvent("redo","Menu"),null==L||L.redo()}}))),p&&d(C,{error:p}),d(it,l(s({},{lang:e,model:L,version:n,blockStates:I}),{onError:_}))),d("div",{class:"popup-actions",style:`--offset: -${10+50*ne}px;`},d("div",{class:"popup-action action-preview"+(te?" shown":""),onClick:()=>{x.generatorEvent("toggle-preview",Z?"hidden":"visible"),ee(!Z)}},Z?H.x_circle:H.play),d("div",{class:"popup-action action-download"+(G?" shown":""),onClick:()=>{x.generatorEvent("download"),X(U+1)}},H.download),d("div",{class:"popup-action action-copy"+(G?" shown":""),onClick:()=>{x.generatorEvent("copy"),Y(J+1)}},H.clippy),d("div",{class:"popup-action action-code shown",onClick:()=>{x.generatorEvent("toggle-output",G?"hidden":"visible"),q(!G),Y(0),X(0),Q(0)}},G?H.chevron_right:H.code)),d("div",{class:"popup-preview"+(Z?" shown":"")},d(ze,l(s({},{lang:e,model:L,version:n,id:y}),{shown:Z,onError:_}))),d("div",{class:"popup-source"+(G?" shown":"")},d(We,l(s({},{lang:e,model:L,blockStates:I,doCopy:J,doDownload:U,doImport:K}),{name:null!=(m=$.schema)?m:"data",onError:_}))))}function ct({lang:e,changeTitle:t,category:n}){const o=O.bind(null,e);return t(n?o("title.generator_category",o(n)):o("title.home")),d("main",null,d("div",{class:"home"},d("div",{class:"generator-picker"},d("ul",{class:"generators-list"},j.models.filter((e=>"string"!=typeof e.category)).map((e=>d("li",null,d(m,{class:"generators-card"+(!0===e.category&&e.id===n?" selected":""),href:J(e.id)},o(e.id),e.category&&H.chevron_right))))),n&&j.models.some((e=>e.category===n))&&d("ul",{class:"generators-list"},j.models.filter((e=>e.category===n)).map((e=>d("li",null,d(m,{class:"generators-card",href:J(e.id)},o(e.id)))))))))}function dt(){const[e,t]=h("en");c((()=>{(async()=>{const e=He.getLanguage();await Promise.all([N("en"),..."en"!==e?[N(e)]:[]]),t(e)})()}),[]);const[n,o]=h(He.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const[r,a]=h(He.getVersion()),i=e=>{x.setVersion(e),He.setVersion(e),a(e)},[u,m]=h(O(e,"title.home")),g=(e,t=["1.15","1.16","1.17"])=>{document.title=`${e} Minecraft ${t.join(", ")}`,m(e)};return d(f,null,d(R,s({},{lang:e,title:u,theme:n,language:e,changeLanguage:async e=>{S[e]||await N(e),x.setLanguage(e),He.setLanguage(e),t(e)},changeTheme:e=>{x.setTheme(e),He.setTheme(e),o(e)}})),d(k,{onChange:e=>{setTimeout((()=>x.pageview(J(e.url))))}},d(ct,s({path:"/"},{lang:e,changeTitle:g})),d(st,s({path:"/settings/fields"},{lang:e,changeTitle:g})),d(ct,s({path:"/worldgen",category:"worldgen"},{lang:e,changeTitle:g})),d(lt,l(s({path:"/:generator"},{lang:e,version:r,changeTitle:g}),{onChangeVersion:i})),d(lt,l(s({path:"/worldgen/:generator",category:"worldgen"},{lang:e,version:r,changeTitle:g}),{onChangeVersion:i}))))}$(d(dt,null),document.body); -//# sourceMappingURL=index.532ff40b.js.map diff --git a/assets/index.532ff40b.js.map b/assets/index.532ff40b.js.map deleted file mode 100644 index 65331fdd..00000000 --- a/assets/index.532ff40b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.532ff40b.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/components/BtnMenu.tsx","../../src/app/components/ErrorPanel.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/components/Header.tsx","../../src/app/components/Octicon.tsx","../../src/app/hooks/useModel.ts","../../src/app/hooks/useOnDrag.ts","../../src/app/Utils.ts","../../src/app/previews/noise/ImprovedNoise.ts","../../src/app/previews/noise/PerlinNoise.ts","../../src/app/previews/noise/NormalNoise.ts","../../src/app/previews/BiomeSource.ts","../../src/app/previews/Decorator.ts","../../src/app/previews/noise/NoiseChunkGenerator.ts","../../src/app/previews/NoiseSettings.ts","../../src/app/components/PreviewPanel.tsx","../../src/app/components/previews/BiomeSourcePreview.tsx","../../src/app/hooks/useOnHover.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/schema/transformOutput.ts","../../src/app/DataFetcher.ts","../../src/app/Schemas.ts","../../src/app/Store.ts","../../src/app/components/SourcePanel.tsx","../../src/app/schema/Mounter.ts","../../src/app/schema/Octicon.ts","../../src/app/schema/renderHtml.ts","../../src/app/components/Tree.tsx","../../src/app/pages/FieldSettings.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/Main.tsx"],"sourcesContent":["export namespace Analytics {\n\tconst ID_SITE = 'Site'\n\tconst ID_GENERATOR = 'Generator'\n\n\tconst DIM_THEME = 1\n\tconst DIM_VERSION = 3\n\tconst DIM_LANGUAGE = 4\n\tconst DIM_PREVIEW = 5\n\n\tfunction event(category: string, action: string, label?: string) {\n\t\tga('send', 'event', category, action, label)\n\t}\n\n\tfunction dimension(index: number, value: string) {\n\t\tga('set', `dimension${index}`, value)\n\t}\n\n\texport function pageview(page: string) {\n\t\tga('set', 'page', page)\n\t\tga('send', 'pageview')\n\t}\n\n\texport function setLanguage(language: string) {\n\t\tdimension(DIM_LANGUAGE, language)\n\t\tevent(ID_SITE, 'set-language', language)\n\t}\n\n\texport function setTheme(theme: string) {\n\t\tdimension(DIM_THEME, theme)\n\t\tevent(ID_SITE, 'set-theme', theme)\n\t}\n\n\texport function setVersion(version: string) {\n\t\tdimension(DIM_VERSION, version)\n\t\tevent(ID_GENERATOR, 'set-version', version)\n\t}\n\n\texport function setPreview(preview: string) {\n\t\tdimension(DIM_PREVIEW, preview)\n\t\tevent(ID_GENERATOR, 'set-preview', preview)\n\t}\n\n\texport function generatorEvent(action: string, label?: string) {\n\t\tevent(ID_GENERATOR, action, label)\n\t}\n}\n","import { useEffect } from 'preact/hooks'\n\ndeclare const ethicalads: any\n\ntype AdProps = {\n\ttype: 'text' | 'image',\n\tid: string,\n}\nexport function Ad({ type, id }: AdProps) {\n\tuseEffect(() => {\n\t\tdocument.getElementById('ad-placeholder')?.remove()\n\t\tif ('ethicalads' in window) {\n\t\t\tethicalads.load()\n\t\t}\n\t}, [])\n\n\treturn
\n}\n","import { Octicon } from '.'\n\ntype BtnProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tactive?: boolean,\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: class_, onClick }: BtnProps) {\n\treturn
\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t
\n}\n","import { useEffect, useRef } from 'preact/hooks'\nimport { Octicon } from '.'\n\ntype BtnInputProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tlarge?: boolean,\n\ttype?: 'number' | 'text',\n\tdoSelect?: number,\n\tvalue?: string,\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, type, doSelect, value, onChange }: BtnInputProps) {\n\tconst onKeyUp = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tif (type !== 'number' || (!value.endsWith('.') && !isNaN(Number(value)))) {\n\t\t\tonChange?.(value)\n\t\t}\n\t}\n\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tif (doSelect && ref.current) {\n\t\t\tref.current.select()\n\t\t}\n\t}, [doSelect])\n\n\treturn
e.stopPropagation()}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t\t\n\t
\n}\n","import type { ComponentChildren } from 'preact'\nimport { useEffect, useState } from 'preact/hooks'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\n\ntype BtnMenuProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu({ icon, label, relative, children }: BtnMenuProps) {\n\tconst [active, setActive] = useState(false)\n\n\tconst hider = () => {\n\t\tsetActive(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active) {\n\t\t\tdocument.body.addEventListener('click', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t}\n\t}, [active])\n\n\treturn
\n\t\t setActive(true)} />\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export function ErrorPanel({ error }: { error: string }) {\n\treturn
\n\t\t

{error}

\n\t\t

You can report this as a bug on GitHub

\n\t
\n}\n","let scriptRel;const seen = {};export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps) {\n return baseModule();\n }\n // @ts-ignore\n if (scriptRel === undefined) {\n // @ts-ignore\n const relList = document.createElement('link').relList;\n // @ts-ignore\n scriptRel =\n relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload';\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","import config from '../config.json'\nimport English from '../locales/en.json'\n\nexport type Localize = (key: string, ...params: string[]) => string\n\ninterface Locale {\n\t[key: string]: string\n}\n\nexport const Locales: {\n\t[key: string]: Locale,\n} = {\n\tfallback: English,\n}\n\nfunction resolveLocaleParams(value: string, params?: string[]): string {\n\treturn value.replace(/%\\d+%/g, match => {\n\t\tconst index = parseInt(match.slice(1, -1))\n\t\treturn params?.[index] !== undefined ? params[index] : match\n\t})\n}\n\nexport function locale(language: string, key: string, ...params: string[]): string {\n\tconst value: string | undefined = Locales[language]?.[key]\n\t\t?? Locales.en?.[key] ?? Locales.fallback[key] ?? key\n\treturn resolveLocaleParams(value, params)\n}\n\nexport async function loadLocale(language: string) {\n\tconst langConfig = config.languages.find(lang => lang.code === language)\n\tif (!langConfig) return\n\tconst data = await import(`../locales/${language}.json`)\n\tconst schema = langConfig.schemas !== false\n\t\t&& await import(`../../node_modules/@mcschema/locales/src/${language}.json`)\n\tLocales[language] = { ...data.default, ...schema.default }\n}\n","import { getCurrentUrl, Link } from 'preact-router'\nimport { Btn, BtnMenu, Octicon } from '.'\nimport config from '../../config.json'\nimport { locale } from '../Locales'\n\nconst Themes: Record = {\n\tsystem: 'device_desktop',\n\tdark: 'moon',\n\tlight: 'sun',\n}\n\ntype HeaderProps = {\n\tlang: string,\n\ttitle: string,\n\ttheme: string,\n\tchangeTheme: (theme: string) => unknown,\n\tlanguage: string,\n\tchangeLanguage: (language: string) => unknown,\n}\nexport function Header({ lang, title, theme, changeTheme, language, changeLanguage }: HeaderProps) {\n\tconst loc = locale.bind(null, lang)\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\t{Octicon.three_bars}\n\t\t\t\n\t\t\t

{title}

\n\t\t
\n\t\t\n\t
\n}\n","export const Octicon = {\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tchevron_right: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tsearch: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tthree_bars: ,\n\tunfold: ,\n\tupload: ,\n\tx_circle: ,\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect } from 'preact/hooks'\n\nexport function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown) {\n\tconst listener = {\n\t\tinvalidated() {\n\t\t\tif (model) {\n\t\t\t\tinvalidated(model)\n\t\t\t}\n\t\t},\n\t}\n\n\tuseEffect(() => {\n\t\tmodel?.addListener(listener)\n\t\tlistener.invalidated()\n\t\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import { useEffect, useRef } from 'preact/hooks'\n\nexport function useOnDrag(element: HTMLElement, drag: (dx: number, dy: number) => unknown) {\n\tif (!element) return\n\n\tconst request = useRef()\n\tconst dragStart = useRef<[number, number] | undefined>()\n\tconst pending = useRef<[number, number]>([0, 0])\n\n\tuseEffect(() => {\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (dragStart.current === undefined) return\n\t\t\tconst dx = e.offsetX - dragStart.current[0]\n\t\t\tconst dy = e.offsetY - dragStart.current[1]\n\t\t\tif (!(dx === 0 && dy === 0)) {\n\t\t\t\tcancelAnimationFrame(request.current)\n\t\t\t\tpending.current = [pending.current[0] + dx, pending.current[1] + dy]\n\t\t\t\trequest.current = requestAnimationFrame(() => {\n\t\t\t\t\tdrag(...pending.current)\n\t\t\t\t\tpending.current = [0, 0]\n\t\t\t\t})\n\t\t\t}\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseUp = (_e: MouseEvent) => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\n\t\telement.addEventListener('mousedown', onMouseDown)\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousedown', onMouseDown)\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [element])\n}\n","export function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nconst dec2hex = (dec: number) => ('0' + dec.toString(16)).substr(-2)\n\nexport function hexId(length = 12) {\n\tvar arr = new Uint8Array(length / 2)\n\twindow.crypto.getRandomValues(arr)\n\treturn Array.from(arr, dec2hex).join('')\n}\n\nexport function htmlEncode(str: string) {\n\treturn str.replace(/&/g, '&').replace(//g, '>')\n\t\t.replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/')\n}\n\nexport function hashString(s: string) {\n\tlet h = 0\n\tfor(let i = 0; i < s.length; i++)\n\t\th = Math.imul(31, h) + s.charCodeAt(i) | 0\n\treturn h\n}\n\nexport function cleanUrl(url: string) {\n\treturn `/${url}/`.replaceAll('//', '/')\n}\n\nexport function stringToColor(str: string): [number, number, number] {\n\tconst h = Math.abs(hashString(str))\n\treturn [h % 256, (h >> 8) % 256, (h >> 16) % 256]\n}\n\nexport function clamp(a: number, b: number, c: number) {\n\treturn Math.max(a, Math.min(b, c))\n}\n\nexport function clampedLerp(a: number, b: number, c: number): number {\n\tif (c < 0) {\n\t\treturn a\n\t} else if (c > 1) {\n\t\treturn b\n\t} else {\n\t\treturn lerp(c, a, b)\n\t}\n}\n\nexport function lerp(a: number, b: number, c: number): number {\n\treturn b + a * (c - b)\n}\n\nexport function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {\n\treturn lerp(b, lerp(a, c, d), lerp(a, e, f))\n}\n\nexport function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {\n\treturn lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))\n}\n\nexport function smoothstep(x: number): number {\n\treturn x * x * x * (x * (x * 6 - 15) + 10)\n}\n","import type seedrandom from 'seedrandom'\nimport { lerp3, smoothstep } from '../../Utils'\n\nexport class ImprovedNoise {\n\tprivate static readonly GRADIENT = [[1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0], [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1], [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1], [1, 1, 0], [0, -1, 1], [-1, 1, 0], [0, -1, -1]]\n\tprivate readonly p: number[]\n\tpublic readonly xo: number\n\tpublic readonly yo: number\n\tpublic readonly zo: number\n\n\tconstructor(random: seedrandom.prng) {\n\t\tthis.xo = random() * 256\n\t\tthis.yo = random() * 256\n\t\tthis.zo = random() * 256\n\t\tthis.p = Array(256)\n\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tthis.p[i] = i\n\t\t}\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tconst n = random.int32() % (256 - i)\n\t\t\tconst b = this.p[i]\n\t\t\tthis.p[i] = this.p[i + n]\n\t\t\tthis.p[i + n] = b\n\t\t}\n\t}\n\n\tpublic noise(x: number, y: number, z: number, a: number, b: number) {\n\t\tconst x2 = x + this.xo\n\t\tconst y2 = y + this.yo\n\t\tconst z2 = z + this.zo\n\t\tconst x3 = Math.floor(x2)\n\t\tconst y3 = Math.floor(y2)\n\t\tconst z3 = Math.floor(z2)\n\t\tconst x4 = x2 - x3\n\t\tconst y4 = y2 - y3\n\t\tconst z4 = z2 - z3\n\t\tconst x5 = smoothstep(x4)\n\t\tconst y5 = smoothstep(y4)\n\t\tconst z5 = smoothstep(z4)\n\n\t\tlet y6 = 0\n\t\tif (a !== 0) {\n\t\t\ty6 = Math.floor(Math.min(b, y4) / a) * a\n\t\t}\n\n\t\treturn this.sampleAndLerp(x3, y3, z3, x4, y4 - y6, z4, x5, y5, z5)\n\t}\n\n\tprivate gradDot(a: number, b: number, c: number, d: number) {\n\t\tconst grad = ImprovedNoise.GRADIENT[a & 15]\n\t\treturn grad[0] * b + grad[1] * c + grad[2] * d\n\t}\n\n\tprivate P(i: number) {\n\t\treturn this.p[i & 255] & 255\n\t}\n\n\tpublic sampleAndLerp(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) {\n\t\tconst j = this.P(a) + b\n\t\tconst k = this.P(j) + c\n\t\tconst l = this.P(j + 1) + c\n\t\tconst m = this.P(a + 1) + b\n\t\tconst n = this.P(m) + c\n\t\tconst o = this.P(m + 1) + c\n\n\t\tconst p = this.gradDot(this.P(k), d, e, f)\n\t\tconst q = this.gradDot(this.P(n), d - 1, e, f)\n\t\tconst r = this.gradDot(this.P(l), d, e - 1, f)\n\t\tconst s = this.gradDot(this.P(o), d - 1, e - 1, f)\n \n\t\tconst t = this.gradDot(this.P(k + 1), d, e, f - 1)\n\t\tconst u = this.gradDot(this.P(n + 1), d - 1, e, f - 1)\n\t\tconst v = this.gradDot(this.P(l + 1), d, e - 1, f - 1)\n\t\tconst w = this.gradDot(this.P(o + 1), d - 1, e - 1, f - 1)\n\n\t\treturn lerp3(g, h, i, p, q, r, s, t, u, v, w)\n\t}\n}\n","import seedrandom from 'seedrandom'\nimport { ImprovedNoise } from './ImprovedNoise'\n\nexport class PerlinNoise {\n\tprivate readonly noiseLevels: ImprovedNoise[]\n\tprivate readonly amplitudes: number[]\n\tprivate readonly lowestFreqValueFactor: number\n\tprivate readonly lowestFreqInputFactor: number\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.amplitudes = amplitudes\n\n\t\tthis.noiseLevels = Array(this.amplitudes.length)\n\t\tfor (let i = 0; i < this.amplitudes.length; i += 1) {\n\t\t\tthis.noiseLevels[i] = new ImprovedNoise(seedrandom(seed))\n\t\t}\n \n\t\tthis.lowestFreqInputFactor = Math.pow(2, firstOctave)\n\t\tthis.lowestFreqValueFactor = Math.pow(2, (amplitudes.length - 1)) / (Math.pow(2, amplitudes.length) - 1)\n\t}\n\n\tpublic static fromRange(seed: string, min: number, max: number) {\n\t\treturn new PerlinNoise(seed, min, Array(max - min + 1).fill(1))\n\t}\n\n\tpublic getValue(x: number, y: number, z: number, a = 0, b = 0, fixY = false) {\n\t\tlet value = 0\n\t\tlet inputF = this.lowestFreqInputFactor\n\t\tlet valueF = this.lowestFreqValueFactor\n\t\tfor (let i = 0; i < this.noiseLevels.length; i += 1) {\n\t\t\tconst noise = this.noiseLevels[i]\n\t\t\tif (noise) {\n\t\t\t\tvalue += this.amplitudes[i] * noise.noise(\n\t\t\t\t\tPerlinNoise.wrap(x * inputF),\n\t\t\t\t\tfixY ? -noise.yo : PerlinNoise.wrap(y * inputF),\n\t\t\t\t\tPerlinNoise.wrap(z * inputF),\n\t\t\t\t\ta * inputF,\n\t\t\t\t\tb * inputF\n\t\t\t\t) * valueF\n\t\t\t}\n\t\t\tinputF *= 2\n\t\t\tvalueF /= 2\n\t\t}\n\t\treturn value\n\t}\n\n\tpublic getOctaveNoise(i: number) {\n\t\treturn this.noiseLevels[this.noiseLevels.length - 1 - i]\n\t}\n\n\tpublic static wrap(value: number) {\n\t\treturn value - Math.floor(value / 3.3554432E7 + 0.5) * 3.3554432E7\n\t}\n}\n","import { PerlinNoise } from './PerlinNoise'\n\nexport class NormalNoise {\n\tprivate readonly valueFactor: number\n\tprivate readonly first: PerlinNoise\n\tprivate readonly second: PerlinNoise\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.first = new PerlinNoise(seed, firstOctave, amplitudes)\n\t\tthis.second = new PerlinNoise(seed + 'a', firstOctave, amplitudes)\n\n\t\tlet min = +Infinity\n\t\tlet max = -Infinity\n\t\tfor (let i = 0; i < amplitudes.length; i += 1) {\n\t\t\tif (amplitudes[i] !== 0) {\n\t\t\t\tmin = Math.min(min, i)\n\t\t\t\tmax = Math.max(max, i)\n\t\t\t}\n\t\t}\n\n\t\tconst expectedDeviation = 0.1 * (1 + 1 / (max - min + 1))\n\t\tthis.valueFactor = (1/6) / expectedDeviation\n\t}\n\n\tgetValue(x: number, y: number, z: number) {\n\t\tconst x2 = x * 1.0181268882175227\n\t\tconst y2 = y * 1.0181268882175227\n\t\tconst z2 = z * 1.0181268882175227\n\t\treturn (this.first.getValue(x, y, z) + this.second.getValue(x2, y2, z2)) * this.valueFactor\n\t}\n}\n","import { stringToColor } from '../Utils'\nimport { NormalNoise } from './noise/NormalNoise'\n\nexport type BiomeColors =Record\nexport type BiomeSourceOptions = {\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: string,\n}\n\nexport const NoiseMaps = ['altitude', 'temperature', 'humidity', 'weirdness']\n\nexport function biomeSource(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise': return multiNoise(state, img, options)\n\t\tcase 'fixed': return fixed(state, img, options)\n\t\tcase 'checkerboard': return checkerboard(state, img, options)\n\t}\n}\n\nfunction fixed(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst data = img.data\n\tconst color = getBiomeColor(state.biome, options.biomeColors)\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction checkerboard(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes?.forEach((b: string) => {\n\t\tbiomeColorCache[b] = getBiomeColor(b, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tconst shift = (state.scale ?? 2) + 2\n\tconst numBiomes = state.biomes?.length ?? 0\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\tconst b = state.biomes?.[j]\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction multiNoise(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst noise = NoiseMaps.map((id, i) => {\n\t\tconst config = state[`${id}_noise`]\n\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t})\n\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes.forEach((b: any) => {\n\t\tbiomeColorCache[b.biome] = getBiomeColor(b.biome, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst b = closestBiome(noise, state.biomes, xx, yy)\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport function getBiome(state: any, x: number, y: number, options: BiomeSourceOptions): string | undefined {\n\tconst [xx, yy] = toWorld([x, y], options)\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise':\n\t\t\tconst noise = NoiseMaps.map((id, i) => {\n\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t\t\t})\n\t\t\treturn closestBiome(noise, state.biomes, xx, yy)\n\t\tcase 'fixed': return state.biome\n\t\tcase 'checkerboard':\n\t\t\tconst shift = (state.scale ?? 2) + 2\n\t\t\tconst numBiomes = state.biomes?.length ?? 0\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\treturn state.biomes?.[j]\n\t}\n\treturn undefined\n}\n\nexport function getBiomeColor(biome: string, biomeColors: BiomeColors) {\n\tif (!biome) {\n\t\treturn [128, 128, 128]\n\t}\n\tconst color = biomeColors[biome] ?? VanillaColors[biome]\n\tif (color === undefined) {\n\t\treturn stringToColor(biome)\n\t}\n\treturn color\n}\n\nfunction toWorld([x, y]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst yy = (y - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, yy]\n}\n\nfunction closestBiome(noise: NormalNoise[], biomes: any[], x: number, y: number): string {\n\tif (!Array.isArray(biomes) || biomes.length === 0) return ''\n\tconst n = noise.map(n => n.getValue(x, y, 0))\n\tlet minDist = Infinity\n\tlet minBiome = ''\n\tfor (const b of biomes) {\n\t\tconst dist = fitness(b.parameters, {altitude: n[0], temperature: n[1], humidity: n[2], weirdness: n[3], offset: 0})\n\t\tif (dist < minDist) {\n\t\t\tminDist = dist\n\t\t\tminBiome = b.biome\n\t\t}\n\t}\n\treturn minBiome\n}\n\nfunction fitness(a: any, b: any) {\n\treturn (a.altitude - b.altitude) * (a.altitude - b.altitude) + (a.temperature - b.temperature) * (a.temperature - b.temperature) + (a.humidity - b.humidity) * (a.humidity - b.humidity) + (a.weirdness - b.weirdness) * (a.weirdness - b.weirdness) + (a.offset - b.offset) * (a.offset - b.offset)\n}\n\nconst VanillaColors: Record = {\n\t'minecraft:badlands': [217,69,21],\n\t'minecraft:badlands_plateau': [202,140,101],\n\t'minecraft:bamboo_jungle': [118,142,20],\n\t'minecraft:bamboo_jungle_hills': [59,71,10],\n\t'minecraft:basalt_deltas': [64,54,54],\n\t'minecraft:beach': [250,222,85],\n\t'minecraft:birch_forest': [48,116,68],\n\t'minecraft:birch_forest_hills': [31,95,50],\n\t'minecraft:cold_ocean': [32,32,112],\n\t'minecraft:crimson_forest': [221,8,8],\n\t'minecraft:dark_forest': [64,81,26],\n\t'minecraft:dark_forest_hills': [104,121,66],\n\t'minecraft:deep_cold_ocean': [32,32,56],\n\t'minecraft:deep_frozen_ocean': [64,64,144],\n\t'minecraft:deep_lukewarm_ocean': [0,0,64],\n\t'minecraft:deep_ocean': [0,0,48],\n\t'minecraft:deep_warm_ocean': [0,0,80],\n\t'minecraft:desert': [250,148,24],\n\t'minecraft:desert_hills': [210,95,18],\n\t'minecraft:desert_lakes': [255,188,64],\n\t'minecraft:end_barrens': [128,128,255],\n\t'minecraft:end_highlands': [128,128,255],\n\t'minecraft:end_midlands': [128,128,255],\n\t'minecraft:eroded_badlands': [255,109,61],\n\t'minecraft:flower_forest': [45,142,73],\n\t'minecraft:forest': [5,102,33],\n\t'minecraft:frozen_ocean': [112,112,214],\n\t'minecraft:frozen_river': [160,160,255],\n\t'minecraft:giant_spruce_taiga': [129,142,121],\n\t'minecraft:giant_spruce_taiga_hills': [109,119,102],\n\t'minecraft:giant_tree_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:ice_spikes': [180,220,220],\n\t'minecraft:jungle': [83,123,9],\n\t'minecraft:jungle_edge': [98,139,23],\n\t'minecraft:jungle_hills': [44,66,5],\n\t'minecraft:lukewarm_ocean': [0,0,144],\n\t'minecraft:modified_badlands_plateau': [242,180,141],\n\t'minecraft:modified_gravelly_mountains': [120,152,120],\n\t'minecraft:modified_jungle': [123,163,49],\n\t'minecraft:modified_jungle_edge': [138,179,63],\n\t'minecraft:modified_wooded_badlands_plateau': [216,191,141],\n\t'minecraft:mountain_edge': [114,120,154],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:mushroom_field_shore': [160,0,255],\n\t'minecraft:mushroom_fields': [255,0,255],\n\t'minecraft:nether_wastes': [191,59,59],\n\t'minecraft:ocean': [0,0,112],\n\t'minecraft:plains': [141,179,96],\n\t'minecraft:river': [0,0,255],\n\t'minecraft:savanna': [189,178,95],\n\t'minecraft:savanna_plateau': [167,157,100],\n\t'minecraft:shattered_savanna': [229,218,135],\n\t'minecraft:shattered_savanna_plateau': [207,197,140],\n\t'minecraft:small_end_islands': [128,128,255],\n\t'minecraft:snowy_beach': [250,240,192],\n\t'minecraft:snowy_mountains': [160,160,160],\n\t'minecraft:snowy_taiga': [49,85,74],\n\t'minecraft:snowy_taiga_hills': [36,63,54],\n\t'minecraft:snowy_taiga_mountains': [89,125,114],\n\t'minecraft:snowy_tundra': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:sunflower_plains': [181,219,136],\n\t'minecraft:swamp': [7,249,178],\n\t'minecraft:swamp_hills': [47,255,218],\n\t'minecraft:taiga': [11,102,89],\n\t'minecraft:taiga_hills': [22,57,51],\n\t'minecraft:taiga_mountains': [51,142,129],\n\t'minecraft:tall_birch_forest': [88,156,108],\n\t'minecraft:tall_birch_hills': [71,135,90],\n\t'minecraft:the_end': [128,128,255],\n\t'minecraft:the_void': [0,0,0],\n\t'minecraft:warm_ocean': [0,0,172],\n\t'minecraft:warped_forest': [73,144,123],\n\t'minecraft:wooded_badlands_plateau': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n}\n","import seedrandom from 'seedrandom'\nimport type { VersionId } from '../Schemas'\nimport { clamp, stringToColor } from '../Utils'\nimport { PerlinNoise } from './noise/PerlinNoise'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: seedrandom.prng,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n}\n\nconst terrain = [50, 50, 51, 51, 52, 52, 53, 54, 56, 57, 57, 58, 58, 59, 60, 60, 60, 59, 59, 59, 60, 61, 61, 62, 63, 63, 64, 64, 64, 65, 65, 66, 66, 65, 65, 66, 66, 67, 67, 67, 68, 69, 71, 73, 74, 76, 79, 80, 81, 81, 82, 83, 83, 82, 82, 81, 81, 80, 80, 80, 81, 81, 82, 82] \n\nconst featureColors = [\n\t[255, 77, 54], // red\n\t[59, 118, 255], // blue\n\t[91, 207, 25], // green\n\t[217, 32, 245], // magenta\n\t[255, 209, 41], // yellow\n\t[52, 204, 209], // cyan\n]\n\nexport type DecoratorOptions = {\n\tsize: [number, number, number],\n\tseed: string,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = seedrandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(options.seed + 'frwynup', 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t}\n\n\tfor (let x = 0; x < options.size[0] / 16; x += 1) {\n\t\tfor (let z = 0; z < options.size[2] / 16; z += 1) {\n\t\t\tgetPlacements([x * 16, 0, z * 16], state, ctx)\n\t\t}\n\t}\n\n\tconst data = img.data\n\timg.data.fill(255)\n\n\tfor (const [pos, feature] of ctx.placements) {\n\t\tif (pos[0] < 0 || pos[1] < 0 || pos[2] < 0 || pos[0] >= options.size[0] || pos[1] >= options.size[1] || pos[2] >= options.size[2]) continue\n\t\tconst i = (pos[2] * (img.width * 4)) + (pos[0] * 4)\n\t\tconst color = feature < featureColors.length ? featureColors[feature] : stringToColor(ctx.features[feature])\n\t\tdata[i] = clamp(50, 205, color[0])\n\t\tdata[i + 1] = clamp(50, 205, color[1])\n\t\tdata[i + 2] = clamp(50, 205, color[2])\n\t\tdata[i + 3] = 255\n\t}\n\n\tfor (let x = 0; x < options.size[0]; x += 1) {\n\t\tfor (let y = 0; y < options.size[2]; y += 1) {\n\t\t\tif ((Math.floor(x / 16) + Math.floor(y / 16)) % 2 === 0) continue\n\t\t\tconst i = (y * (img.width * 4)) + (x * 4)\n\t\t\tfor (let j = 0; j < 3; j += 1) {\n\t\t\t\tdata[i + j] = 0.85 * data[i + j] \n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction normalize(id: string) {\n\treturn id.startsWith('minecraft:') ? id.slice(10) : id\n}\n\nfunction decorateY(pos: BlockPos, y: number): BlockPos[] {\n\treturn [[ pos[0], y, pos[2] ]]\n}\n\nfunction nextInt(max: number, ctx: PlacementContext): number {\n\treturn Math.floor(ctx.random() * max)\n}\n\nfunction sampleInt(value: any, ctx: PlacementContext): number {\n\tif (typeof value === 'number') {\n\t\treturn value\n\t} else if (value.base) {\n\t\treturn value.base ?? 1 + nextInt(1 + (value.spread ?? 0), ctx)\n\t} else {\n\t\tswitch (normalize(value.type)) {\n\t\t\tcase 'constant': return value.value\n\t\t\tcase 'uniform': return value.value.min_inclusive + nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + nextInt(nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx) + 1, ctx)\n\t\t\tcase 'clamped': return Math.max(value.value.min_inclusive, Math.min(value.value.max_inclusive, sampleInt(value.value.source, ctx)))\n\t\t}\n\t\treturn 1\n\t}\n}\n\nfunction useFeature(s: string, ctx: PlacementContext) {\n\tconst i = ctx.features.indexOf(s)\n\tif (i != -1) return i\n\tctx.features.push(s)\n\treturn ctx.features.length - 1\n}\n\nfunction getPlacements(pos: BlockPos, feature: any, ctx: PlacementContext): void {\n\tif (typeof feature === 'string') {\n\t\tctx.placements.push([pos, useFeature(feature, ctx)])\n\t\treturn\n\t}\n\tconst type = normalize(feature?.type ?? 'no_op')\n\tconst featureFn = Features[type]\n\tif (featureFn) {\n\t\tfeatureFn(feature.config, pos, ctx)\n\t} else {\n\t\tctx.placements.push([pos, useFeature(JSON.stringify(feature), ctx)])\n\t}\n}\n\nfunction getPositions(pos: BlockPos, decorator: any, ctx: PlacementContext): BlockPos[] {\n\tconst type = normalize(decorator?.type ?? 'nope')\n\tconst decoratorFn = Decorators[type]\n\tif (!decoratorFn) {\n\t\treturn [pos]\n\t}\n\treturn decoratorFn(decorator?.config, pos, ctx)\n}\n\nconst Features: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => void,\n} = {\n\tdecorated: (config, pos, ctx) => {\n\t\tconst positions = getPositions(pos, config?.decorator, ctx)\n\t\tpositions.forEach(p => getPlacements(p, config?.feature, ctx))\n\t},\n\trandom_boolean_selector: (config, pos, ctx) => {\n\t\tconst feature = ctx.random() < 0.5 ? config?.feature_true : config?.feature_false\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n\trandom_selector: (config, pos, ctx) => {\n\t\tfor (const f of config?.features ?? []) {\n\t\t\tif (ctx.random() < (f?.chance ?? 0)) {\n\t\t\t\tgetPlacements(pos, f.feature, ctx)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tgetPlacements(pos, config?.default, ctx)\n\t},\n\tsimple_random_selector: (config, pos, ctx) => {\n\t\tconst feature = config?.features?.[nextInt(config?.features?.length ?? 0, ctx)]\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n}\n\nconst Decorators: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tchance: (config, pos, ctx) => {\n\t\treturn ctx.random() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.random() < config.extra_chance ?? 0){\n\t\t\tcount += config.extra_count ?? 0\n\t\t}\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_multilayer: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + nextInt(16, ctx),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + nextInt(16, ctx),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < config.noise_level ? config.below_noise : config.above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_noise_biased: (config, pos, ctx) => {\n\t\tconst factor = Math.max(1, config.noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (config.noise_offset ?? 0)) * config.noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tdark_oak_tree: (_config, pos, ctx) => {\n\t\treturn [...new Array(16)].map((_, i) => {\n\t\t\tconst x = Math.floor(i / 4) * 4 + 1 + nextInt(3, ctx) + pos[0]\n\t\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, x)])\n\t\t\tconst z = Math.floor(i % 4) * 4 + 1 + nextInt(3, ctx) + pos[2]\n\t\t\treturn [x, y, z]\n\t\t})\n\t},\n\tdecorated: (config, pos, ctx) => {\n\t\treturn getPositions(pos, config?.outer, ctx).flatMap(p => {\n\t\t\treturn getPositions(p, config?.inner, ctx)\n\t\t})\n\t},\n\tdepth_average: (config, pos, ctx) => {\n\t\tconst y = nextInt(config?.spread ?? 0, ctx) + nextInt(config?.spread ?? 0, ctx) - (config.spread ?? 0) + (config?.baseline ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\temerald_ore: (_config, pos, ctx) => {\n\t\tconst count = 3 + nextInt(6, ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t4 + nextInt(28, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + nextInt(nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = nextInt(1 + nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\theightmap: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\theightmap_spread_double: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, nextInt(y * 2, ctx))\n\t},\n\theightmap_world_surface: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\ticeberg: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + 4 + nextInt(8, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + nextInt(8, ctx),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (nextInt((config.chance ?? 1) / 10, ctx) === 0) {\n\t\t\tconst y = nextInt(nextInt(256 - 8, ctx) + 8, ctx)\n\t\t\tif (y < ctx.seaLevel || nextInt((config?.chance ?? 1) / 8, ctx) == 0) {\n\t\t\t\tconst x = nextInt(16, ctx) + pos[0]\n\t\t\t\tconst z = nextInt(16, ctx) + pos[2]\n\t\t\t\treturn [[x, y, z]]\n\t\t\t}\n\t\t}\n\t\treturn []\n\t},\n\tnope: (_config, pos) => {\n\t\treturn [pos]\n\t},\n\trange: (config, pos, ctx) => {\n\t\tconst y = nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\ttop_solid_heightmap: (_config, pos) => {\n\t\tconst y = terrain[clamp(0, 63, pos[0])]\n\t\treturn decorateY(pos, y)\n\t},\n\tmagma: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t]]\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (nextInt(config.chance ?? 1, ctx) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t\tnextInt(256, ctx),\n\t\t\t\tpos[2] + nextInt(16, ctx),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n","import { clampedLerp, lerp2 } from '../../Utils'\nimport { PerlinNoise } from './PerlinNoise'\n\nexport class NoiseChunkGenerator {\n\tprivate readonly minLimitPerlinNoise: PerlinNoise\n\tprivate readonly maxLimitPerlinNoise: PerlinNoise\n\tprivate readonly mainPerlinNoise: PerlinNoise\n\tprivate readonly depthNoise: PerlinNoise\n\n\tprivate settings: any = {}\n\tprivate chunkWidth: number = 4\n\tprivate chunkHeight: number = 4\n\tprivate chunkCountY: number = 32\n\tprivate biomeDepth: number = 0.1\n\tprivate biomeScale: number = 0.2\n\n\tprivate noiseColumnCache: (number[] | null)[] = []\n\tprivate xOffset: number = 0\n\n\tconstructor(seed: string) {\n\t\tthis.minLimitPerlinNoise = PerlinNoise.fromRange(seed + 'djfqnqd', -15, 0)\n\t\tthis.maxLimitPerlinNoise = PerlinNoise.fromRange(seed + 'gowdnqs', -15, 0)\n\t\tthis.mainPerlinNoise = PerlinNoise.fromRange(seed + 'afiwmco', -7, 0)\n\t\tthis.depthNoise = PerlinNoise.fromRange(seed + 'qphnmeo', -15, 0)\n\t}\n\n\tpublic reset(settings: any, depth: number, scale: number, xOffset: number, width: number) {\n\t\tthis.settings = settings\n\t\tthis.chunkWidth = settings.size_horizontal * 4\n\t\tthis.chunkHeight = settings.size_vertical * 4\n\t\tthis.chunkCountY = Math.floor(settings.height / this.chunkHeight)\n\n\t\tif (settings.amplified && depth > 0) {\n\t\t\tdepth = 1 + depth * 2\n\t\t\tscale = 1 + scale * 4\n\t\t}\n\t\tthis.biomeDepth = 0.265625 * (depth * 0.5 - 0.125)\n\t\tthis.biomeScale = 96.0 / (scale * 0.9 + 0.1)\n\n\t\tthis.noiseColumnCache = Array(width).fill(null)\n\t\tthis.xOffset = xOffset\n\t}\n \n\tpublic iterateNoiseColumn(x: number): number[] {\n\t\tconst data = Array(this.chunkCountY * this.chunkHeight)\n\t\tconst cx = Math.floor(x / this.chunkWidth)\n\t\tconst ox = Math.floor(x % this.chunkWidth) / this.chunkWidth\n\t\tconst noise1 = this.fillNoiseColumn(cx)\n\t\tconst noise2 = this.fillNoiseColumn(cx + 1)\n\n\t\tfor (let y = this.chunkCountY - 1; y >= 0; y -= 1) {\n\t\t\tfor (let yy = this.chunkHeight; yy >= 0; yy -= 1) {\n\t\t\t\tconst oy = yy / this.chunkHeight\n\t\t\t\tconst i = y * this.chunkHeight + yy\n\t\t\t\tdata[i] = lerp2(oy, ox, noise1[y], noise1[y+1], noise2[y], noise2[y+1])\n\t\t\t}\n\t\t}\n\t\treturn data\n\t}\n\n\tprivate fillNoiseColumn(x: number): number[] {\n\t\tconst cachedColumn = this.noiseColumnCache[x - this.xOffset]\n\t\tif (cachedColumn) return cachedColumn\n\n\t\tconst data = Array(this.chunkCountY + 1)\n\n\t\tconst xzScale = 684.412 * this.settings.sampling.xz_scale\n\t\tconst yScale = 684.412 * this.settings.sampling.y_scale\n\t\tconst xzFactor = xzScale / this.settings.sampling.xz_factor\n\t\tconst yFactor = yScale / this.settings.sampling.y_factor\n\t\tconst randomDensity = this.settings.random_density_offset ? this.getRandomDensity(x) : 0\n\n\t\tfor (let y = 0; y <= this.chunkCountY; y += 1) {\n\t\t\tlet noise = this.sampleAndClampNoise(x, y, this.mainPerlinNoise.getOctaveNoise(0).zo, xzScale, yScale, xzFactor, yFactor)\n\t\t\tconst yOffset = 1 - y * 2 / this.chunkCountY + randomDensity\n\t\t\tconst density = yOffset * this.settings.density_factor + this.settings.density_offset\n\t\t\tconst falloff = (density + this.biomeDepth) * this.biomeScale\n\t\t\tnoise += falloff * (falloff > 0 ? 4 : 1)\n\n\t\t\tif (this.settings.top_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.top_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(this.chunkCountY - y - (this.settings.top_slide.offset)) / (this.settings.top_slide.size)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.settings.bottom_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.bottom_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(y - (this.settings.bottom_slide.offset)) / (this.settings.bottom_slide.size)\n\t\t\t\t)\n\t\t\t}\n\t\t\tdata[y] = noise\n\t\t}\n\n\t\tthis.noiseColumnCache[x - this.xOffset] = data\n\t\treturn data\n\t}\n\n\tprivate getRandomDensity(x: number): number {\n\t\tconst noise = this.depthNoise.getValue(x * 200, 10, this.depthNoise.getOctaveNoise(0).zo, 1, 0, true)\n\t\tconst a = (noise < 0) ? -noise * 0.3 : noise\n\t\tconst b = a * 24.575625 - 2\n\t\treturn (b < 0) ? b * 0.009486607142857142 : Math.min(b, 1) * 0.006640625\n\t}\n\n\tprivate sampleAndClampNoise(x: number, y: number, z: number, xzScale: number, yScale: number, xzFactor: number, yFactor: number): number {\n\t\tlet a = 0\n\t\tlet b = 0\n\t\tlet c = 0\n\t\tlet d = 1\n\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst x2 = PerlinNoise.wrap(x * xzScale * d)\n\t\t\tconst y2 = PerlinNoise.wrap(y * yScale * d)\n\t\t\tconst z2 = PerlinNoise.wrap(z * xzScale * d)\n\t\t\tconst e = yScale * d\n\n\t\t\tconst minLimitNoise = this.minLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (minLimitNoise) {\n\t\t\t\ta += minLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tconst maxLimitNoise = this.maxLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (maxLimitNoise) {\n\t\t\t\tb += maxLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tif (i < 8) {\n\t\t\t\tconst mainNoise = this.mainPerlinNoise.getOctaveNoise(i)\n\t\t\t\tif (mainNoise) {\n\t\t\t\t\tc += mainNoise.noise(\n\t\t\t\t\t\tPerlinNoise.wrap(x * xzFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(y * yFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(z * xzFactor * d),\n\t\t\t\t\t\tyFactor * d,\n\t\t\t\t\t\ty * yFactor * d \n\t\t\t\t\t) / d\n\t\t\t\t}\n\t\t\t}\n\n\t\t\td /= 2\n\t\t}\n\n\t\treturn clampedLerp(a / 512, b / 512, (c / 10 + 1) / 2)\n\t}\n}\n","import { NoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiomeScale: number,\n\tbiomeDepth: number,\n\toffset: number,\n\twidth: number,\n\tseed: string,\n}\n\nexport function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tconst generator = new NoiseChunkGenerator(options.seed)\n\tgenerator.reset(state, options.biomeDepth, options.biomeScale, options.offset, 200)\n\tconst data = img.data\n\tconst row = img.width * 4\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tconst noise = generator.iterateNoiseColumn(x - options.offset).reverse()\n\t\tfor (let y = 0; y < state.height; y += 1) {\n\t\t\tconst i = y * row + x * 4\n\t\t\tconst color = getColor(noise, y)\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction getColor(noise: number[], y: number): number {\n\tif (noise[y] > 0) {\n\t\treturn 0\n\t}\n\tif (noise[y+1] > 0) {\n\t\treturn 150\n\t}\n\treturn 255\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport type { FunctionalComponent } from 'preact'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport type { VersionId } from '../Schemas'\nimport { BiomeSourcePreview, DecoratorPreview, NoiseSettingsPreview } from './previews'\n\nexport const HasPreview = ['dimension', 'worldgen/noise-settings', 'worldgen/feature']\n\nexport const Previews: {\n\tid: string,\n\tgenerator: string,\n\tpath: Path,\n\tpredicate: (model: DataModel) => boolean,\n\tpreview: FunctionalComponent<{\n\t\tlang: string,\n\t\tmodel: DataModel,\n\t\tdata: any,\n\t\tversion: VersionId,\n\t\tshown: boolean,\n\t}>,\n}[] = [\n\t{\n\t\tid: 'biome-noise',\n\t\tgenerator: 'dimension',\n\t\tpath: new Path(['generator', 'biome_source']),\n\t\tpredicate: model => model.get(new Path(['generator', 'type'])).endsWith('noise'),\n\t\tpreview: BiomeSourcePreview,\n\t},\n\t{\n\t\tid: 'noise-settings',\n\t\tgenerator: 'worldgen/noise-settings',\n\t\tpath: new Path(['noise']),\n\t\tpredicate: () => true,\n\t\tpreview: NoiseSettingsPreview,\n\t},\n\t{\n\t\tid: 'decorator',\n\t\tgenerator: 'worldgen/feature',\n\t\tpath: new Path([]),\n\t\tpredicate: () => true,\n\t\tpreview: DecoratorPreview,\n\t},\n]\n\ntype PreviewProps = {\n\tlang: string,\n\tmodel: DataModel | null,\n\tversion: VersionId,\n\tid: string,\n\tshown: boolean,\n\tonError: (message: string) => unknown,\n}\nexport function PreviewPanel({ lang, model, version, id, shown }: PreviewProps) {\n\tconst [, setCount] = useState(0)\n\n\tuseModel(model, () => {\n\t\tsetCount(count => count + 1)\n\t})\n\n\treturn <>\n\t\t{Previews.filter(p => p.generator === id).map(p => {\n\t\t\tconst data = model?.get(p.path)\n\t\t\tif (!model || data === undefined || !p.predicate(model)) {\n\t\t\t\treturn <>\n\t\t\t}\n\t\t\treturn p.preview({ lang, model: model!, data, version, shown })\n\t\t})}\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { useOnDrag, useOnHover } from '../../hooks'\nimport { biomeSource, getBiome } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype BiomeSourceProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const BiomeSourcePreview = ({ data, shown }: BiomeSourceProps) => {\n\tconst [scale, setScale] = useState(2)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [focused, setFocused] = useState(undefined)\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst redrawTimeout = useRef(undefined)\n\tconst redraw = useRef()\n\tconst refocus = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = (res = 4) => {\n\t\t\tif (type !== 'multi_noise') res = 1\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = 200 / res\n\t\t\tcanvas.current.height = 200 / res\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tbiomeSource(data, img, { biomeColors: {}, offset: offset.current, scale, seed, res })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t\tif (res !== 1) {\n\t\t\t\tclearTimeout(redrawTimeout.current)\n\t\t\t\tredrawTimeout.current = setTimeout(() => redraw.current(1), 150) as any\n\t\t\t}\n\t\t}\n\t\trefocus.current = (x: number, y: number) => {\n\t\t\tconst x2 = x * 200 / canvas.current.clientWidth\n\t\t\tconst y2 = y * 200 / canvas.current.clientHeight\n\t\t\tconst biome = getBiome(data, x2, y2, { biomeColors: {}, offset: offset.current, scale, seed, res: 1 })\n\t\t\tsetFocused(biome)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx, dy) => {\n\t\tconst x = dx * 200 / canvas.current.clientWidth\n\t\tconst y = dy * 200 / canvas.current.clientHeight\n\t\toffset.current = [offset.current[0] + x, offset.current[1] + y]\n\t\tredraw.current()\n\t})\n\n\tuseOnHover(canvas.current, (x, y) => {\n\t\tif (x === undefined || y === undefined) {\n\t\t\tsetFocused(undefined)\n\t\t} else {\n\t\t\trefocus.current(x, y)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] *= scale / newScale\n\t\toffset.current[1] *= scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t{focused && }\n\t\t\t{(type === 'multi_noise' || type === 'checkerboard') && <>\n\t\t\t\t changeScale(scale * 1.5)} />\n\t\t\t\t changeScale(scale / 1.5)} />\n\t\t\t}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t setSeed(hexId())} />}\n\t\t
\n\t\t\n\t\n}\n","import { useEffect } from 'preact/hooks'\n\nexport function useOnHover(element: HTMLElement, hover: (x: number | undefined, y: number | undefined) => unknown) {\n\tif (!element) return\n\n\tconst onMouseMove = (e: MouseEvent) => {\n\t\thover(e.offsetX, e.offsetY)\n\t}\n\tconst onMouseLeave = () => {\n\t\thover(undefined, undefined)\n\t}\n\n\tuseEffect(() => {\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\telement.addEventListener('mouseleave', onMouseLeave)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\telement.removeEventListener('mouseleave', onMouseLeave)\n\t\t}\n\t}, [element])\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useOnDrag } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { noiseSettings } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype NoiseSettingsProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const NoiseSettingsPreview = ({ lang, data, shown }: NoiseSettingsProps) => {\n\tconst loc = locale.bind(null, lang)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef(0)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tconst size = data.height\n\t\t\tcanvas.current.width = size\n\t\t\tcanvas.current.height = size\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tnoiseSettings(data, img, { biomeDepth, biomeScale, offset: offset.current, width: size, seed })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx) => {\n\t\tconst x = dx * canvas.current.width / canvas.current.clientWidth\n\t\toffset.current = offset.current + x\n\t\tredraw.current()\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, biomeDepth, biomeScale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t\t setBiomeDepth(Number(v))} />\n\t\t\t\t setBiomeScale(Number(v))} />\n\t\t\t\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { decorator } from '../../previews'\nimport type { VersionId } from '../../Schemas'\nimport { hexId } from '../../Utils'\n\ntype DecoratorProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tversion: VersionId,\n\tshown: boolean,\n}\nexport const DecoratorPreview = ({ data, version, shown }: DecoratorProps) => {\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(hexId())\n\n\tconst canvas = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = scale * 16\n\t\t\tcanvas.current.height = scale * 16\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tsetTimeout(() => redraw.current())\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t setScale(Math.min(16, scale + 1))} />\n\t\t\t setScale(Math.max(1, scale - 1))} />\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { Hook } from '@mcschema/core'\nimport { relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../Schemas'\n\nexport type OutputProps = {\n\tblockStates: BlockStateRegistry,\n}\nexport const transformOutput: Hook<[any, OutputProps], any> = {\n\tbase({}, _, value) {\n\t\treturn value\n\t},\n\n\tchoice({ switchNode }, path, value, props) {\n\t\treturn switchNode.hook(this, path, value, props)\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tif (!Array.isArray(value)) return value\n\t\treturn value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj, props)\n\t\t)\n\t},\n\n\tmap({ children, config }, path, value, props) {\n\t\tif (value === undefined) return undefined\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst res: any = {}\n\t\tObject.keys(value).forEach(f => {\n\t\t\tif (blockState) {\n\t\t\t\tif (!Object.keys(blockState.properties).includes(f)) return\n\t\t\t}\n\t\t\tres[f] = children.hook(this, path.push(f), value[f], props)\n\t\t})\n\t\treturn res\n\t},\n\n\tobject({ getActiveFields }, path, value, props) {\n\t\tif (value === undefined || value === null || typeof value !== 'object') {\n\t\t\treturn value\n\t\t}\n\t\tconst res: any = {}\n\t\tconst activeFields = getActiveFields(path)\n\t\tObject.keys(activeFields)\n\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\t.forEach(f => {\n\t\t\t\tres[f] = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t})\n\t\treturn res\n\t},\n}\n","import type { CollectionRegistry } from '@mcschema/core'\nimport config from '../config.json'\nimport type { BlockStateRegistry, VersionId } from './Schemas'\nimport { checkVersion } from './Schemas'\n\n['1.15', '1.16', '1.17'].forEach(v => localStorage.removeItem(`cache_${v}`))\n\nconst CACHE_NAME = 'misode-v1'\n\ntype VersionRef = 'mcdata_master' | 'vanilla_datapack_summary' | 'vanilla_datapack_data'\n\ntype Version = {\n\tid: string,\n\trefs: Partial<{ [key in VersionRef]: string }>,\n\tdynamic?: boolean,\n}\n\ndeclare var __MCDATA_MASTER_HASH__: string\ndeclare var __VANILLA_DATAPACK_SUMMARY_HASH__: string\n\nconst mcdataUrl = 'https://raw.githubusercontent.com/Arcensoth/mcdata'\nconst vanillaDatapackUrl = 'https://raw.githubusercontent.com/SPGoding/vanilla-datapack'\n\nconst refs: {\n\tid: VersionRef,\n\thash: string,\n\turl: string,\n}[] = [\n\t{\n\t\tid: 'mcdata_master',\n\t\thash: __MCDATA_MASTER_HASH__,\n\t\turl: mcdataUrl,\n\t},\n\t{\n\t\tid: 'vanilla_datapack_summary',\n\t\thash: __VANILLA_DATAPACK_SUMMARY_HASH__,\n\t\turl: vanillaDatapackUrl,\n\t},\n]\n\nexport async function fetchData(versionId: string, collectionTarget: CollectionRegistry, blockStateTarget: BlockStateRegistry) {\n\tconst version = config.versions.find(v => v.id === versionId) as Version | undefined\n\tif (!version) {\n\t\tconsole.error(`[fetchData] Unknown version ${version} in ${JSON.stringify(config.versions)}`)\n\t\treturn\n\t}\n\tconsole.debug(`[fetchData] ${JSON.stringify(version)}`)\n\n\tif (version.dynamic) {\n\t\tawait Promise.all(refs\n\t\t\t.filter(r => localStorage.getItem(`cached_${r.id}`) !== r.hash)\n\t\t\t.map(async r => {\n\t\t\t\tconsole.debug(`[deleteMatching] ${r.id} '${localStorage.getItem(`cached_${r.id}`)}' < '${r.hash}' ${r.url}/${version.refs[r.id]}`)\n\t\t\t\tawait deleteMatching(url => url.startsWith(`${r.url}/${version.refs[r.id]}`))\n\t\t\t\tconsole.debug(`[deleteMatching] Done! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t\tlocalStorage.setItem(`cached_${r.id}`, r.hash)\n\t\t\t\tconsole.debug(`[deleteMatching] Set! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t}))\n\t}\n\n\tawait Promise.all([\n\t\tfetchRegistries(version, collectionTarget),\n\t\tfetchBlockStateMap(version, blockStateTarget),\n\t\tfetchDynamicRegistries(version, collectionTarget),\n\t])\n}\n\nasync function fetchRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => !r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, undefined, '1.15')) {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/registries.json`\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: {[id: string]: string[]} = {}\n\t\t\t\tObject.keys(data).forEach(k => {\n\t\t\t\t\tres[k.slice(10)] = Object.keys(data[k].entries)\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id] ?? [])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching registries:', e)\n\t\t}\n\t} else {\n\t\tawait Promise.all(registries.map(async r => {\n\t\t\ttry {\n\t\t\t\tconst url = r.path\n\t\t\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/${r.path}/data.min.json`\n\t\t\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/registries/${r.id}/data.min.json`\n\t\t\t\ttarget.register(r.id, await getData(url, v => v.values))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`Error occurred while fetching registry ${r.id}:`, e)\n\t\t\t}\n\t\t}))\n\t}\n}\n\nasync function fetchBlockStateMap(version: Version, target: BlockStateRegistry) {\n\tconsole.debug(`[fetchBlockStateMap] ${version.id}`)\n\tif (checkVersion(version.id, undefined, '1.16')) {\n\t\tconst url = (checkVersion(version.id, undefined, '1.15'))\n\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/blocks.json`\n\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/data.min.json`\n\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: BlockStateRegistry = {}\n\t\t\t\tObject.keys(data).forEach(b => {\n\t\t\t\t\tres[b] = {\n\t\t\t\t\t\tproperties: data[b].properties,\n\t\t\t\t\t\tdefault: data[b].states.find((s: any) => s.default).properties,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t} else {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t}\n}\n\nasync function fetchDynamicRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchDynamicRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, '1.16')) {\n\t\tconst url = `${vanillaDatapackUrl}/${version.refs.vanilla_datapack_summary}/summary/flattened.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching dynamic registries:', e)\n\t\t}\n\t}\n}\n\nexport async function fetchPreset(version: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${id} ${registry} ${id}`)\n\tconst versionData = config.versions.find(v => v.id === version)!\n\ttry {\n\t\tconst res = await fetch(`${vanillaDatapackUrl}/${versionData.refs.vanilla_datapack_data}/data/minecraft/${registry}/${id}.json`)\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tconsole.warn(`Error occurred while fetching ${registry} preset ${id}:`, e)\n\t}\n}\n\nasync function getData(url: string, fn: (v: any) => T = (v: any) => v): Promise {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[getData] Opened cache ${CACHE_NAME} ${url}`)\n\t\tconst cacheResponse = await cache.match(url)\n \n\t\tif (cacheResponse && cacheResponse.ok) {\n\t\t\tconsole.debug(`[getData] Retrieving cached data ${url}`)\n\t\t\treturn await cacheResponse.json()\n\t\t}\n \n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\tawait cache.put(url, new Response(JSON.stringify(responseData)))\n\t\treturn responseData\n\t} catch (e) {\n\t\tconsole.warn(`[getData] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\treturn responseData\n\t}\n}\n\nasync function deleteMatching(matches: (url: string) => boolean) {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[deleteMatching] Opened cache ${CACHE_NAME}`)\n\t\tconst promises: Promise[] = []\n \n\t\tfor (const request of await cache.keys()) {\n\t\t\tif (matches(request.url)) {\n\t\t\t\tpromises.push(cache.delete(request))\n\t\t\t}\n\t\t}\n\t\tconsole.debug(`[deleteMatching] Removing ${promises.length} cache objects...`)\n\t\tawait Promise.all(promises)\n\t} catch (e) {\n\t\tconsole.warn(`[deleteMatching] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\t}\n}\n","import type { CollectionRegistry, SchemaRegistry } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\nimport * as java15 from '@mcschema/java-1.15'\nimport * as java16 from '@mcschema/java-1.16'\nimport * as java17 from '@mcschema/java-1.17'\nimport config from '../config.json'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17'] as const\nexport type VersionId = typeof VersionIds[number]\n\nexport type BlockStateRegistry = {\n\t[block: string]: {\n\t\tproperties: {\n\t\t\t[key: string]: string[],\n\t\t},\n\t\tdefault: {\n\t\t\t[key: string]: string,\n\t\t},\n\t},\n}\n\ntype VersionData = {\n\tcollections: CollectionRegistry,\n\tschemas: SchemaRegistry,\n\tblockStates: BlockStateRegistry,\n}\nconst Versions: Record> = {}\n\ntype ModelData = {\n\tmodel: DataModel,\n\tversion: VersionId,\n}\nconst Models: Record = {}\n\nconst versionGetter: {\n\t[versionId in VersionId]: {\n\t\tgetCollections: () => CollectionRegistry,\n\t\tgetSchemas: (collections: CollectionRegistry) => SchemaRegistry,\n\t}\n} = {\n\t1.15: java15,\n\t1.16: java16,\n\t1.17: java17,\n}\n\nasync function getVersion(id: VersionId): Promise {\n\tif (!Versions[id]) {\n\t\tVersions[id] = (async () => {\n\t\t\ttry {\n\t\t\t\tconst collections = versionGetter[id].getCollections()\n\t\t\t\tconst blockStates: BlockStateRegistry = {}\n\t\t\t\tawait fetchData(id, collections, blockStates)\n\t\t\t\tconst schemas = versionGetter[id].getSchemas(collections)\n\t\t\t\tVersions[id] = { collections, schemas, blockStates }\n\t\t\t\treturn Versions[id]\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`Cannot get version \"${id}\": ${e.message}`)\n\t\t\t}\n\t\t})()\n\t\treturn Versions[id]\n\t}\n\treturn Versions[id]\n}\n\nexport async function getModel(version: VersionId, id: string): Promise {\n\tif (!Models[id] || Models[id].version !== version) {\n\t\tconst versionData = await getVersion(version)\n\t\tconst schemaName = config.models.find(m => m.id === id)?.schema\n\t\tif (!schemaName) {\n\t\t\tthrow new Error(`Cannot find model ${id}`)\n\t\t}\n\t\ttry {\n\t\t\tconst schema = versionData.schemas.get(schemaName)\n\t\t\tconst model = new DataModel(schema)\n\t\t\tif (Models[id]) {\n\t\t\t\tmodel.reset(Models[id].model.data, false)\n\t\t\t} else {\n\t\t\t\tmodel.validate(true)\n\t\t\t\tmodel.history = [JSON.stringify(model.data)]\n\t\t\t}\n\t\t\tModels[id] = { model, version }\n\t\t} catch (e) {\n\t\t\tthrow new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${e.message}`)\n\t\t}\n\t}\n\treturn Models[id].model\n}\n\nexport async function getCollections(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.collections\n}\n\nexport async function getBlockStates(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.blockStates\n}\n\nexport function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) {\n\tconst version = config.versions.findIndex(v => v.id === versionId)\n\tconst minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0\n\tconst maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1\n\treturn minVersion <= version && version <= maxVersion\n}\n","import type { VersionId } from './Schemas'\nimport { VersionIds } from './Schemas'\n\nexport namespace Store {\n\texport const ID_LANGUAGE = 'language'\n\texport const ID_THEME = 'theme'\n\texport const ID_VERSION = 'schema_version'\n\texport const ID_INDENT = 'indentation'\n\n\texport function getLanguage() {\n\t\treturn localStorage.getItem(ID_LANGUAGE) ?? 'en'\n\t}\n\n\texport function getTheme() {\n\t\treturn localStorage.getItem(ID_THEME) ?? 'dark'\n\t}\n\n\texport function getVersion(): VersionId {\n\t\tconst version = localStorage.getItem(ID_VERSION)\n\t\tif (version && VersionIds.includes(version as VersionId)) {\n\t\t\treturn version as VersionId\n\t\t}\n\t\treturn '1.17'\n\t}\n\n\texport function getIndent() {\n\t\treturn localStorage.getItem(ID_INDENT) ?? '2_spaces'\n\t}\n\n\texport function setLanguage(language: string | undefined) {\n\t\tif (language) localStorage.setItem(ID_LANGUAGE, language)\n\t}\n\n\texport function setTheme(theme: string | undefined) {\n\t\tif (theme) localStorage.setItem(ID_THEME, theme)\n\t}\n\n\texport function setVersion(version: VersionId | undefined) {\n\t\tif (version) localStorage.setItem(ID_VERSION, version)\n\t}\n\n\texport function setIndent(indent: string) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnMenu } from '.'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { transformOutput } from '../schema/transformOutput'\nimport type { BlockStateRegistry } from '../Schemas'\nimport { Store } from '../Store'\n\nconst INDENT: Record = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n}\n\ntype SourcePanelProps = {\n\tlang: string,\n\tname: string,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tdoCopy?: number,\n\tdoDownload?: number,\n\tdoImport?: number,\n\tonError: (message: string) => unknown,\n}\nexport function SourcePanel({ lang, name, model, blockStates, doCopy, doDownload, doImport, onError }: SourcePanelProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst source = useRef(null)\n\tconst download = useRef(null)\n\tconst retransform = useRef()\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst props = { blockStates: blockStates ?? {} }\n\t\t\t\tconst data = model.schema.hook(transformOutput, new ModelPath(model), model.data, props)\n\t\t\t\tsource.current.value = JSON.stringify(data, null, INDENT[indent]) + '\\n'\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error getting JSON output: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\tsource.current.value = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tretransform.current()\n\t})\n\n\tuseEffect(() => {\n\t\tretransform.current()\n\t}, [indent])\n\n\tconst onImport = () => {\n\t\ttry {\n\t\t\tconst data = JSON.parse(source.current.value)\n\t\t\tmodel?.reset(data, false)\n\t\t} catch (e) {\n\t\t\t// TODO\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (doCopy && source.current) {\n\t\t\tsource.current.select()\n\t\t\tdocument.execCommand('copy')\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && source.current && download.current) {\n\t\t\tconst content = encodeURIComponent(source.current.value)\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.json`)\n\t\t\tdownload.current.click()\n\t\t}\n\t}, [doDownload])\n\n\tuseEffect(() => {\n\t\tif (doImport && source.current) {\n\t\t\tsource.current.value = ''\n\t\t\tsource.current.select()\n\t\t}\n\t}, [doImport])\n\n\tconst changeIndent = (value: string) => {\n\t\tStore.setIndent(value)\n\t\tsetIndent(value)\n\t}\n\n\treturn <> \n\t\t
\n\t\t\t\n\t\t\t\t{Object.entries(INDENT).map(([key]) =>\n\t\t\t\t\t changeIndent(key)}/>\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t\t\n\t\t\n\t\n}\n","import { hexId } from '../Utils'\n\nexport class Mounter {\n\tprivate registry: { [id: string]: (el: Element) => void } = {}\n\n\tregister(callback: (el: Element) => void): string {\n\t\tconst id = hexId()\n\t\tthis.registry[id] = callback\n\t\treturn id\n\t}\n\n\ton(type: string, callback: (el: Element) => void): string {\n\t\treturn this.register(el => {\n\t\t\tel.addEventListener(type, evt => {\n\t\t\t\tcallback(el)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t}\n\n\tonChange(callback: (el: Element) => void): string {\n\t\treturn this.on('change', callback)\n\t}\n\n\tonClick(callback: (el: Element) => void): string {\n\t\treturn this.on('click', callback)\n\t}\n\n\tmounted(el: Element): void {\n\t\tel.querySelectorAll('[data-id]').forEach(el => {\n\t\t\tconst id = el.getAttribute('data-id')!\n\t\t\tthis.registry[id]?.(el)\n\t\t})\n\t\tthis.registry = {}\n\t}\n}\n","export const Octicon = {\n\tclippy: '',\n\tinfo: '',\n\tissue_opened: '',\n\tplus_circle: '',\n\ttrashcan: '',\n}\n","import type { EnumOption, Hook, ValidationOption } from '@mcschema/core'\nimport { DataModel, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { Localize } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { hexId, htmlEncode } from '../Utils'\nimport type { Mounter } from './Mounter'\nimport { Octicon } from './Octicon'\n\nexport type TreeProps = {\n\tloc: Localize,\n\tmounter: Mounter,\n\tversion: VersionId,\n\tblockStates: BlockStateRegistry,\n}\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'carver.type', 'feature.type', 'decorator.type', 'feature.tree.minimum_size.type', 'block_state_provider.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'int_provider.type', 'float_provider.type', 'height_provider.type', 'structure_feature.type', 'surface_builder.type', 'processor.processor_type', 'rule_test.predicate_type', 'pos_rule_test.predicate_type', 'template_element.element_type', 'block_placer.type']\nconst hiddenFields = ['number_provider.type', 'score_provider.type', 'nbt_provider.type', 'int_provider.type', 'float_provider.type', 'height_provider.type']\nconst flattenedFields = ['feature.config', 'decorator.config', 'int_provider.value', 'float_provider.value', 'block_state_provider.simple_state_provider.state', 'block_state_provider.rotated_block_provider.state', 'block_state_provider.weighted_state_provider.entries.entry.data', 'rule_test.block_state', 'structure_feature.config', 'surface_builder.config', 'template_pool.elements.entry.element']\nconst inlineFields = ['loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'feature.type', 'decorator.type', 'block_state_provider.type', 'feature.tree.minimum_size.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'block_placer.type', 'rule_test.predicate_type', 'processor.processor_type', 'template_element.element_type']\n\n/**\n * Secondary model used to remember the keys of a map\n */\nconst keysModel = new DataModel(MapNode(\n\tStringNode(),\n\tStringNode()\n), { historyMax: 0 })\n\n/**\n * Renders the node and handles events to update the model\n * @returns string HTML representation of this node using the given data\n */\nexport const renderHtml: Hook<[any, TreeProps], [string, string, string]> = {\n\tbase() {\n\t\treturn ['', '', '']\n\t},\n\n\tboolean({ node }, path, value, props) {\n\t\tconst onFalse = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === false ? undefined : false)\n\t\t})\n\t\tconst onTrue = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === true ? undefined : true)\n\t\t})\n\t\treturn ['', `${htmlEncode(props.loc('false'))}\n\t\t\t${htmlEncode(props.loc('true'))}`, '']\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, props) {\n\t\tconst choice = switchNode.activeCase(path, true)\n\t\tconst pathWithContext = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst pathWithChoiceContext = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, pathWithContext, value, props)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = choice.type\n\t\t\tel.addEventListener('change', () => {\n\t\t\t\tconst c = choices.find(c => c.type === (el as HTMLSelectElement).value) ?? choice\n\t\t\t\tpath.model.set(path, c.change ? c.change(value) : c.node.default())\n\t\t\t})\n\t\t})\n\t\tconst inject = ``\n\n\t\treturn [prefix, inject + suffix, body]\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [children.default(), ...value])\n\t\t})\n\t\tconst onAddBottom = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [...value, children.default()])\n\t\t})\n\t\tconst suffix = ``\n\n\t\tlet body = ''\n\t\tif (Array.isArray(value)) {\n\t\t\tbody = value.map((childValue, index) => {\n\t\t\t\tconst removeId = props.mounter.onClick(() => path.model.set(path.push(index), undefined))\n\t\t\t\tconst childPath = path.push(index).contextPush('entry')\n\t\t\t\tconst category = children.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = children.hook(this, childPath, childValue, props)\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}).join('')\n\t\t\tif (value.length > 2) {\n\t\t\t\tbody += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, props) {\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), children.default())\n\t\t})\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst keysSchema = blockState?.properties\n\t\t\t? StringNode(null!, { enum: Object.keys(blockState.properties ?? {}) })\n\t\t\t: keys\n\t\tconst keyRendered = keysSchema.hook(this, keyPath, keyPath.get() ?? '', props)\n\t\tconst suffix = keyRendered[1] + ``\n\t\tif (blockState && path.last() === 'Properties') {\n\t\t\tif (typeof value !== 'object') value = {}\n\t\t\tconst properties = Object.entries(blockState.properties)\n\t\t\t\t.map(([key, values]) => [key, StringNode(null!, { enum: values })])\n\t\t\tObject.entries(blockState.properties).forEach(([key, values]) => {\n\t\t\t\tif (typeof value[key] !== 'string') {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.expected_string')\n\t\t\t\t} else if (!values.includes(value[key])) {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.invalid_enum_option', value[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn ObjectNode(Object.fromEntries(properties)).hook(this, path, value, props)\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined) {\n\t\t\tbody = Object.keys(value)\n\t\t\t\t.map(key => {\n\t\t\t\t\tconst onRemove = props.mounter.onClick(() => path.model.set(path.push(key), undefined))\n\t\t\t\t\tconst childPath = path.modelPush(key)\n\t\t\t\t\tconst category = children.category(childPath)\n\t\t\t\t\tconst childrenSchema = blockState\n\t\t\t\t\t\t? StringNode(null!, { enum: blockState.properties[key] ?? [] })\n\t\t\t\t\t\t: children\n\t\t\t\t\tif (blockState?.properties[key] && !blockState.properties[key].includes(value[key])) {\n\t\t\t\t\t\tpath.model.errors.add(childPath, 'error.invalid_enum_option', value[key])\n\t\t\t\t\t}\n\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = childrenSchema.hook(this, childPath, value[key], props)\n\t\t\t\t\treturn `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tnumber({ integer, config }, path, value, { mounter }) {\n\t\tconst onChange = mounter.onChange(el => {\n\t\t\tconst value = (el as HTMLInputElement).value\n\t\t\tconst parsed = config?.color\n\t\t\t\t? parseInt(value.slice(1), 16)\n\t\t\t\t: integer ? parseInt(value) : parseFloat(value)\n\t\t\tpath.model.set(path, parsed)\n\t\t})\n\t\tif (config?.color) {\n\t\t\tconst hex = (value?.toString(16).padStart(6, '0') ?? '000000')\n\t\t\treturn ['', ``, '']\n\t\t}\n\t\treturn ['', ``, '']\n\t},\n\n\tobject({ node, getActiveFields, getChildModelPath }, path, value, props) {\n\t\tlet prefix = ''\n\t\tlet suffix = ''\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tsuffix = ``\n\t\t\t} else {\n\t\t\t\tsuffix = ``\n\t\t\t}\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined && (!(node.optional() && value === undefined))) {\n\t\t\tconst activeFields = getActiveFields(path)\n\t\t\tconst activeKeys = Object.keys(activeFields)\n\t\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\tbody = activeKeys.map(k => {\n\t\t\t\tconst field = activeFields[k]\n\t\t\t\tconst childPath = getChildModelPath(path, k)\n\t\t\t\tconst context = childPath.getContext().join('.')\n\t\t\t\tif (hiddenFields.includes(context)) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst category = field.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = field.hook(this, childPath, value[k], props)\n\t\t\t\tif (cPrefix.length === 0 && cSuffix.length === 0 && cBody.length === 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst isFlattened = field.type(childPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\tprefix += `${error(props.loc, childPath, props.mounter)}${help(props.loc, childPath, props.mounter)}${cPrefix}`\n\t\t\t\t\tsuffix += cSuffix\n\t\t\t\t\treturn isFlattened ? cBody : ''\n\t\t\t\t}\n\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t
`\n\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring({ node, getValues, config }, path, value, props) {\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = value ?? ''\n\t\t\tel.addEventListener('change', evt => {\n\t\t\t\tconst newValue = (el as HTMLSelectElement).value\n\t\t\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t\tlet suffix\n\t\tconst values = getValues()\n\t\tif ((isEnum(config) && !config.additional)\n\t\t\t|| selectRegistries.includes(path.getContext().join('.'))\t) {\n\t\t\tlet context = new Path([])\n\t\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\t\tcontext = context.contextPush(config.enum)\n\t\t\t} else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') {\n\t\t\t\tcontext = context.contextPush(config.params.pool)\n\t\t\t}\n\t\t\tsuffix = ``\n\t\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\t\tconst blockState = props.blockStates?.[relativePath(path, config.params.id).get()]\n\t\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\t\tsuffix = ``\n\t\t} else {\n\t\t\tconst datalistId = hexId()\n\t\t\tsuffix = `\n\t\t\t\t${values.length === 0 ? '' :\n\t\t`\n\t\t\t\t\t\t\t\t${values.map(v =>\n\t\t``}`\n\t\t}\n\t\treturn ['', suffix, '']\n\t},\n}\n\nfunction isEnum(value?: ValidationOption | EnumOption): value is EnumOption {\n\treturn !!(value as any)?.enum\n}\n\nfunction hashString(str: string) {\n\tvar hash = 0, i, chr\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t\thash |= 0\n\t}\n\treturn hash\n}\n\nfunction pathLocale(loc: Localize, path: Path, ...params: string[]) {\n\tconst ctx = path.getContext()\n\tfor (let i = 0; i < ctx.length; i += 1) {\n\t\tconst key = ctx.slice(i).join('.')\n\t\tconst result = loc(key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn htmlEncode(ctx[ctx.length - 1])\n}\n\nfunction error(loc: Localize, path: ModelPath, mounter: Mounter) {\n\tconst e = path.model.errors.get(path, true)\n\tif (e.length === 0) return ''\n\tconst message = e[0].params ? loc(e[0].error, ...e[0].params) : loc(e[0].error)\n\treturn popupIcon('node-error', 'issue_opened', htmlEncode(message), mounter)\n}\n\nfunction help(loc: Localize, path: Path, mounter: Mounter) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = loc(key)\n\tif (message === key) return ''\n\treturn popupIcon('node-help', 'info', htmlEncode(message), mounter)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string, mounter: Mounter) => {\n\tconst onClick = mounter.onClick(el => {\n\t\tel.getElementsByTagName('span')[0].classList.add('show')\n\t\tdocument.body.addEventListener('click', () => {\n\t\t\tel.getElementsByTagName('span')[0].classList.remove('show')\n\t\t}, { capture: true, once: true })\n\t})\n\treturn `
\n\t\t${Octicon[icon]}\n\t\t${popup}\n\t
`\n}\n\nconst contextMenu = (loc: Localize, path: ModelPath, mounter: Mounter) => {\n\tconst id = mounter.register(el => {\n\t\tconst openMenu = () => {\n\t\t\tconst popup = document.createElement('div')\n\t\t\tpopup.classList.add('node-menu')\n\n\t\t\tconst message = loc(path.contextPush('help').getContext().join('.'))\n\t\t\tif (!message.endsWith('.help')) {\n\t\t\t\tpopup.insertAdjacentHTML('beforeend', `${message}`)\n\t\t\t}\n\n\t\t\tconst context = path.getContext().join('.')\n\t\t\tpopup.insertAdjacentHTML('beforeend', `\n\t\t\t\t
\n\t\t\t\t\t${Octicon.clippy}\n\t\t\t\t\tContext: \n\t\t\t\t\t${context}\n\t\t\t\t
`)\n\t\t\tpopup.querySelector('.menu-item .btn')?.addEventListener('click', () => {\n\t\t\t\tconst inputEl = document.createElement('input')\n\t\t\t\tinputEl.value = context\n\t\t\t\tel.appendChild(inputEl) \n\t\t\t\tinputEl.select()\n\t\t\t\tdocument.execCommand('copy')\n\t\t\t\tel.removeChild(inputEl)\n\t\t\t})\n\n\t\t\tel.appendChild(popup)\n\t\t\tdocument.body.addEventListener('click', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t\tdocument.body.addEventListener('contextmenu', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t}\n\t\tel.addEventListener('contextmenu', evt => {\n\t\t\topenMenu()\n\t\t\tevt.preventDefault()\n\t\t})\n\t\tlet timer: any = null\n\t\tel.addEventListener('touchstart', () => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\topenMenu()\n\t\t\t\ttimer = null\n\t\t\t}, 800)\n\t\t})\n\t\tel.addEventListener('touchend', () => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer)\n\t\t\t\ttimer = null\n\t\t\t}\n\t\t})\n\t})\n\treturn `data-id=\"${id}\"`\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { Mounter } from '../schema/Mounter'\nimport { renderHtml } from '../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\n\ntype TreePanelProps = {\n\tlang: string,\n\tversion: VersionId,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tonError: (message: string) => unknown,\n}\nexport function Tree({ lang, model, version, blockStates, onError }: TreePanelProps) {\n\tconst tree = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst mounter = new Mounter()\n\t\t\t\tconst props = { loc: locale.bind(null, lang), version, mounter, blockStates }\n\t\t\t\tconst path = new ModelPath(model)\n\t\t\t\tconst rendered = model.schema.hook(renderHtml, path, model.data, props)\n\t\t\t\tconst category = model.schema.category(path)\n\t\t\t\tconst type = model.schema.type(path)\n\t\t\t\tlet html = rendered[2]\n\t\t\t\tif (rendered[1]) {\n\t\t\t\t\thtml = `
\n\t\t\t\t\t\t
${rendered[0]}${rendered[1]}
\n\t\t\t\t\t\t
${rendered[2]}
\n\t\t\t\t\t
`\n\t\t\t\t}\n\t\t\t\ttree.current.innerHTML = html\n\t\t\t\tmounter.mounted(tree.current)\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\ttree.current.innerHTML = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tredraw.current()\n\t})\n\n\tuseEffect(() => {\n\t\tredraw.current()\n\t}, [lang, model, blockStates])\n\n\treturn
\n}\n","import { locale } from '../Locales'\n\ntype FieldSettingsProps = {\n\tlang: string,\n\tpath?: string,\n}\nexport function FieldSettings({ lang }: FieldSettingsProps) {\n\tconst loc = locale.bind(null, lang)\n\treturn
\n\t\t
\n\t\t\t

{loc('settings.fields.description')}

\n\t\t\t
    \n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useErrorBoundary, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Analytics } from '../Analytics'\nimport { Ad, Btn, BtnInput, BtnMenu, ErrorPanel, HasPreview, Octicon, PreviewPanel, SourcePanel, Tree } from '../components'\nimport { fetchPreset } from '../DataFetcher'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { checkVersion, getBlockStates, getCollections, getModel } from '../Schemas'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: string[]) => unknown,\n\tversion: VersionId,\n\tonChangeVersion: (version: VersionId) => unknown,\n\tgenerator?: string,\n\tpath?: string,\n\tcategory?: string,\n}\nexport function Generator({ lang, changeTitle, version, onChangeVersion, category, generator }: GeneratorProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState('')\n\tconst [errorBoundary] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\treturn
\n\t}\n\n\tconst id = category ? `${category}/${generator}` : generator ?? ''\n\tconst modelConfig = config.models.find(m => m.id === id)\n\n\tif (!modelConfig) {\n\t\treturn
\n\t}\n\n\tconst minVersion = config.models.find(m => m.id === id)?.minVersion ?? '1.15'\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, minVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tchangeTitle(loc('title.generator', loc(id)), allowedVersions)\n\n\tconst [model, setModel] = useState(null)\n\tconst [blockStates, setBlockStates] = useState(null)\n\tuseEffect(() => {\n\t\tsetModel(null)\n\t\tgetBlockStates(version)\n\t\t\t.then(b => setBlockStates(b))\n\t\tgetModel(version, id)\n\t\t\t.then(m => setModel(m))\n\t\t\t.catch(e => setError(e.message))\n\t}, [version, category, generator])\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(model.schema.default(), true)\n\t}\n\tconst undo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('undo', 'Menu')\n\t\tmodel?.undo()\n\t}\n\tconst redo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('redo', 'Menu')\n\t\tmodel?.redo()\n\t}\n\n\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 'z') {\n\t\t\tAnalytics.generatorEvent('undo', 'Hotkey')\n\t\t\tmodel?.undo()\n\t\t} else if (e.ctrlKey && e.key === 'y') {\n\t\t\tAnalytics.generatorEvent('redo', 'Hotkey')\n\t\t\tmodel?.redo()\n\t\t}\n\t}\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keyup', onKeyUp)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keyup', onKeyUp)\n\t\t}\n\t}, [model])\n\n\tconst [presetFilter, setPresetFilter] = useState('')\n\tconst [presetResults, setPresetResults] = useState([])\n\tconst registry = (modelConfig.category ? modelConfig.category + '/' : '') + modelConfig.schema\n\tuseEffect(() => {\n\t\tif (!modelConfig.path) return\n\t\tgetCollections(version)\n\t\t\t.then(collections => {\n\t\t\t\tconst terms = (presetFilter ?? '').trim().split(' ')\n\t\t\t\tconst presets = collections.get(registry)\n\t\t\t\t\t.map(p => p.slice(10))\n\t\t\t\t\t.filter(p => terms.every(t => p.includes(t)))\n\t\t\t\tif (presets) {\n\t\t\t\t\tsetPresetResults(presets)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(e => setError(e.message))\n\t}, [version, category, generator, presetFilter])\n\n\tconst loadPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tfetchPreset(version, modelConfig.path!, id).then(preset => {\n\t\t\tmodel?.reset(preset, false)\n\t\t})\n\t}\n\n\tconst [sourceShown, setSourceShown] = useState(window.innerWidth > 820)\n\tconst [doCopy, setCopy] = useState(0)\n\tconst [doDownload, setDownload] = useState(0)\n\tconst [doImport, setImport] = useState(0)\n\n\tconst copySource = () => {\n\t\tAnalytics.generatorEvent('copy')\n\t\tsetCopy(doCopy + 1)\n\t}\n\tconst downloadSource = () => {\n\t\tAnalytics.generatorEvent('download')\n\t\tsetDownload(doDownload + 1)\n\t}\n\tconst importSource = () => {\n\t\tAnalytics.generatorEvent('import')\n\t\tsetSourceShown(true)\n\t\tsetImport(doImport + 1)\n\t}\n\tconst toggleSource = () => {\n\t\tAnalytics.generatorEvent('toggle-output', !sourceShown ? 'visible' : 'hidden')\n\t\tsetSourceShown(!sourceShown)\n\t\tsetCopy(0)\n\t\tsetDownload(0)\n\t\tsetImport(0)\n\t}\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\n\tconst hasPreview = HasPreview.includes(id)\n\tlet actionsShown = 1\n\tif (hasPreview) actionsShown += 1\n\tif (sourceShown) actionsShown += 2\n\n\tconst togglePreview = () => {\n\t\tAnalytics.generatorEvent('toggle-preview', !previewShown ? 'visible' : 'hidden')\n\t\tsetPreviewShown(!previewShown)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{modelConfig.path && \n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{presetResults.map(preset => loadPreset(preset)} />)}\n\t\t\t\t\t
\n\t\t\t\t\t{presetResults.length === 0 && }\n\t\t\t\t
}\n\t\t\t\t\n\t\t\t\t\t{allowedVersions.reverse().map(v =>\n\t\t\t\t\t\t onChangeVersion(v)} />\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t{error && }\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{previewShown ? Octicon.x_circle : Octicon.play}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.download}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.clippy}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{sourceShown ? Octicon.chevron_right : Octicon.code}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\n}\n","import { Link } from 'preact-router'\nimport config from '../../config.json'\nimport { Octicon } from '../components/Octicon'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype HomeProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n\tcategory?: string,\n}\nexport function Home({ lang, changeTitle, category }: HomeProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(category ? loc('title.generator_category', loc(category)) : loc('title.home'))\n\treturn
\n\t\t
\n\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t{config.models.filter(m => typeof m.category !== 'string').map(m =>
  • \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{loc(m.id)}\n\t\t\t\t\t\t\t{m.category && Octicon.chevron_right}\n\t\t\t\t\t\t\n\t\t\t\t\t
  • )}\n\t\t\t\t
\n\t\t\t\t{(category && config.models.some(m => m.category === category)) &&\n\t\t\t\t
    \n\t\t\t\t\t{config.models.filter(m => m.category === category).map(m =>
  • \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{loc(m.id)}\n\t\t\t\t\t\t\n\t\t\t\t\t
  • )}\n\t\t\t\t
}\n\t\t\t
\n\t\t
\n\t
\n}\n","import { render } from 'preact'\nimport type { RouterOnChangeArgs } from 'preact-router'\nimport { Router } from 'preact-router'\nimport { useEffect, useState } from 'preact/hooks'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { loadLocale, locale, Locales } from './Locales'\nimport { FieldSettings } from './pages/FieldSettings'\nimport { Generator } from './pages/Generator'\nimport { Home } from './pages/Home'\nimport type { VersionId } from './Schemas'\nimport { Store } from './Store'\nimport { cleanUrl } from './Utils'\n\nfunction Main() {\n\tconst [lang, setLanguage] = useState('en')\n\tconst changeLanguage = async (language: string) => {\n\t\tif (!Locales[language]) {\n\t\t\tawait loadLocale(language)\n\t\t}\n\t\tAnalytics.setLanguage(language)\n\t\tStore.setLanguage(language)\n\t\tsetLanguage(language)\n\t}\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst target = Store.getLanguage()\n\t\t\tawait Promise.all([\n\t\t\t\tloadLocale('en'),\n\t\t\t\t...(target !== 'en' ? [loadLocale(target)] : []),\n\t\t\t])\n\t\t\tsetLanguage(target)\n\t\t})()\n\t}, [])\n\n\tconst [theme, setTheme] = useState(Store.getTheme())\n\tconst changeTheme = (theme: string) => {\n\t\tAnalytics.setTheme(theme)\n\t\tStore.setTheme(theme)\n\t\tsetTheme(theme)\n\t}\n\tuseEffect(() => {\n\t\tdocument.documentElement.setAttribute('data-theme', theme)\n\t}, [theme])\n\n\tconst [version, setVersion] = useState(Store.getVersion())\n\tconst changeVersion = (version: VersionId) => {\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}\n\n\tconst [title, setTitle] = useState(locale(lang, 'title.home'))\n\tconst changeTitle = (title: string, versions = ['1.15', '1.16', '1.17']) => {\n\t\tdocument.title = `${title} Minecraft ${versions.join(', ')}`\n\t\tsetTitle(title)\n\t}\n\n\tconst changeRoute = (e: RouterOnChangeArgs) => {\n\t\t// Needs a timeout to ensure the title is set correctly\n\t\tsetTimeout(() => Analytics.pageview(cleanUrl(e.url)))\n\t}\n\n\treturn <>\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n}\n\nrender(
, document.body)\n"],"names":["Analytics","type","id","getElementById","remove","window","load","data-ea-publisher","data-ea-type","class","icon","label","active","class_","onClick","Octicon","large","doSelect","value","onChange","onKeyUp","e","value2","target","endsWith","isNaN","Number","ref","useRef","current","select","stopPropagation","relative","children","setActive","useState","hider","body","addEventListener","removeEventListener","Btn","error2","href","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","generatorEvent","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","cssSelector","querySelector","link","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","key","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","code","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","__spreadValues","default","Themes","system","dark","light","title","changeTheme","changeLanguage","loc","locale","bind","Link","getCurrentUrl","three_bars","BtnMenu","name","Object","entries","th","mark_github","archive","xmlns","viewBox","width","height","fill-rule","d","arrow_left","arrow_right","chevron_right","clippy","dash","device_desktop","download","eye","eye_closed","gear","globe","history","kebab_horizontal","moon","play","plus","search","sun","sync","tag","unfold","upload","x_circle","model","invalidated","listener","[object Object]","addListener","removeListener","element","drag","request","dragStart","pending","onMouseDown","offsetX","offsetY","onMouseMove","dx","dy","requestAnimationFrame","onMouseUp","_e","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","str","url","replaceAll","h","Math","abs","s2","i","imul","charCodeAt","hashString","a2","b","c","max","min","lerp","f","x","random","xo","yo","zo","p","n","int32","this","y2","z","x2","y22","z2","x3","floor","y3","z3","x4","y4","z4","x5","smoothstep","y5","z5","y6","sampleAndLerp","grad","_ImprovedNoise","GRADIENT","g","j","P","k","l2","m","o","lerp2","lerp3","gradDot","ImprovedNoise","seed","firstOctave","amplitudes","noiseLevels","seedrandom","lowestFreqInputFactor","pow","lowestFreqValueFactor","PerlinNoise","fill","fixY","inputF","valueF","noise","wrap","first","second","Infinity","expectedDeviation","valueFactor","getValue","NoiseMaps","state","img","options","config2","NormalNoise","biomeColorCache","biomes","forEach","biome","getBiomeColor","biomeColors","ox","offset","oy","row","col","xx","scale","yy","closestBiome","color","multiNoise","fixed","shift","numBiomes","checkerboard","VanillaColors","stringToColor","isArray","n2","minDist","minBiome","dist","fitness","parameters","altitude","temperature","humidity","weirdness","minecraft:badlands","minecraft:badlands_plateau","minecraft:bamboo_jungle","minecraft:bamboo_jungle_hills","minecraft:basalt_deltas","minecraft:beach","minecraft:birch_forest","minecraft:birch_forest_hills","minecraft:cold_ocean","minecraft:crimson_forest","minecraft:dark_forest","minecraft:dark_forest_hills","minecraft:deep_cold_ocean","minecraft:deep_frozen_ocean","minecraft:deep_lukewarm_ocean","minecraft:deep_ocean","minecraft:deep_warm_ocean","minecraft:desert","minecraft:desert_hills","minecraft:desert_lakes","minecraft:end_barrens","minecraft:end_highlands","minecraft:end_midlands","minecraft:eroded_badlands","minecraft:flower_forest","minecraft:forest","minecraft:frozen_ocean","minecraft:frozen_river","minecraft:giant_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_mountains","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:jungle_hills","minecraft:lukewarm_ocean","minecraft:modified_badlands_plateau","minecraft:modified_gravelly_mountains","minecraft:modified_jungle","minecraft:modified_jungle_edge","minecraft:modified_wooded_badlands_plateau","minecraft:mountain_edge","minecraft:mountains","minecraft:mushroom_field_shore","minecraft:mushroom_fields","minecraft:nether_wastes","minecraft:ocean","minecraft:plains","minecraft:river","minecraft:savanna","minecraft:savanna_plateau","minecraft:shattered_savanna","minecraft:shattered_savanna_plateau","minecraft:small_end_islands","minecraft:snowy_beach","minecraft:snowy_mountains","minecraft:snowy_taiga","minecraft:snowy_taiga_hills","minecraft:snowy_taiga_mountains","minecraft:snowy_tundra","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_hills","minecraft:wooded_mountains","terrain","featureColors","startsWith","pos","ctx","base","nextInt","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","features","indexOf","push","feature","placements","useFeature","featureFn","Features","JSON","stringify","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","biomeInfoNoise","noise_level","below_noise","above_noise","count_noise_biased","factor","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","seaLevel","clamp","outer","flatMap","inner","depth_average","decorateY","baseline","emerald_ore","fire","glowstone","heightmap","heightmap_spread_double","heightmap_world_surface","iceberg","lava_lake","nope","range","maximum","top_offset","bottom_offset","range_biased","range_very_biased","spread_32_above","top_solid_heightmap","magma","square","water_lake","minLimitPerlinNoise","fromRange","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","depth","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","cx","noise1","fillNoiseColumn","noise2","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","falloff","density_factor","density_offset","top_slide","size","clampedLerp","bottom_slide","minLimitNoise","maxLimitNoise","mainNoise","HasPreview","Previews","generator","path","Path","predicate","get","shown","setScale","setSeed","hexId","focused","setFocused","canvas","redrawTimeout","redraw","refocus","getContext","createImageData","putImageData","setTimeout","clientWidth","clientHeight","toWorld","getBiome","hover","onMouseLeave","changeScale","newScale","setBiomeDepth","setBiomeScale","NoiseChunkGenerator","reset","iterateNoiseColumn","reverse","getColor","BtnInput","v","setCount","filter","transformOutput","switchNode","props","hook","obj","blockState","validation","validator","blockStates","relativePath","keys","properties","includes","getActiveFields","activeFields","enabled","localStorage","removeItem","mcdataUrl","vanillaDatapackUrl","refs","hash","versionId","collectionTarget","blockStateTarget","versions","debug","dynamic","getItem","r","async","matches","cache","caches","open","promises","delete","warn","message","deleteMatching","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","error","registries","checkVersion","minVersion","maxVersion","mcdata_master","getData","data2","register","values","states","assign","vanilla_datapack_summary","fn","cacheResponse","ok","json","fetchResponse","fetch","responseData","put","Response","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","collections","getCollections","fetchData","getSchemas","Error","minVersionId","maxVersionId","findIndex","Store","Store2","getLanguage","getTheme","getVersion","getIndent","setIndent","indent","INDENT","2_spaces","4_spaces","tabs","doCopy","doDownload","doImport","onError","retransform","ModelPath","execCommand","content","encodeURIComponent","setAttribute","click","changeIndent","parse","spellcheck","autocorrect","placeholder","style","callback","registry","el","on","querySelectorAll","el2","getAttribute","info","issue_opened","plus_circle","trashcan","selectRegistries","hiddenFields","flattenedFields","inlineFields","keysModel","DataModel","MapNode","StringNode","historyMax","renderHtml","node","onFalse","mounter","set","optional","onTrue","htmlEncode","choices","choice","activeCase","pathWithContext","context","getModel","getArray","pathWithChoiceContext","choiceContext","prefix","suffix","c2","change","pathLocale","contextPush","onAdd","onAddBottom","childValue","removeId","childPath","cPrefix","cSuffix","cBody","help","contextMenu","keyPath","enum","last","errors","add","ObjectNode","fromEntries","onRemove","modelPush","childrenSchema","integer","parsed","parseFloat","padStart","getChildModelPath","field","isFlattened","isInlined","getValues","inputId","newValue","isEnum","additional","pool","datalistId","result","popupIcon","popup","getElementsByTagName","classList","capture","once","openMenu","insertAdjacentHTML","inputEl","removeChild","preventDefault","timer","tree","Mounter","rendered","html","innerHTML","mounted","changeTitle","onChangeVersion","setError","errorBoundary","useErrorBoundary","ErrorPanel","modelConfig","models","allowedVersions","setModel","setBlockStates","versionData","schemaName","validate","catch","ctrlKey","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","trim","split","presets","every","t","loadPreset","id2","vanilla_datapack_data","preset","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Ad","Tree","__spreadProps","PreviewPanel","SourcePanel","cleanUrl","some","loadLocale","documentElement","changeVersion","version2","setTitle","title2","Header","theme2","Router","Home","FieldSettings","Generator","render","Main"],"mappings":"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"} \ No newline at end of file diff --git a/assets/index.89e7a3fc.css b/assets/index.89e7a3fc.css new file mode 100644 index 00000000..d5d1f726 --- /dev/null +++ b/assets/index.89e7a3fc.css @@ -0,0 +1 @@ +:root{--background-1:#1b1b1b;--background-2:#252525;--background-3:#2f2f2f;--background-4:#3d3d3d;--background-5:#464646;--text-1:#ffffff;--text-2:#dcdcdc;--text-3:#c3c3c3;--accent-blue:#50baf9;--accent-red:#f1453f;--nav:#91908f;--nav-hover:#b4b3b0;--nav-faded:#4d4c4c;--nav-faded-hover:#6e6e6e;--selection:#6786dd99;--errors-background:#62190f;--errors-text:#ffffffcc}:root[data-theme=light]{--background-1:#fafafa;--background-2:#e2e2e2;--background-3:#d4d3d3;--background-4:#cccccc;--background-5:#d6d6d6;--text-1:#000000;--text-2:#505050;--text-3:#6a6a6a;--accent-blue:#088cdb;--accent-red:#cc312c;--nav:#343a40;--nav-hover:#565d64;--nav-faded:#9fa2a7;--nav-faded-hover:#bcbfc3;--selection:#6786dd99;--errors-background:#f66653;--errors-text:#000000cc}@media (prefers-color-scheme:light){:root[data-theme=system]{--background-1:#fafafa;--background-2:#e2e2e2;--background-3:#d4d3d3;--background-4:#cccccc;--background-5:#d6d6d6;--text-1:#000000;--text-2:#505050;--text-3:#6a6a6a;--accent-blue:#088cdb;--accent-red:#cc312c;--nav:#343a40;--nav-hover:#565d64;--nav-faded:#9fa2a7;--nav-faded-hover:#bcbfc3;--selection:#6786dd99;--errors-background:#f66653;--errors-text:#000000cc}}*{box-sizing:border-box;margin:0;padding:0}::selection{background-color:var(--selection)}a svg{pointer-events:none}body{font-size:18px;font-family:Arial,Helvetica,sans-serif;overflow-x:hidden;background-color:var(--background-1)}header{display:flex;justify-content:space-between;align-items:center;padding:10px;width:100%;height:56px;z-index:5;position:fixed;box-shadow:0 0 9px -3px #000;background-color:var(--background-2)}body[data-panel=home] header,body[data-panel=settings] header{position:fixed}.header-title{display:flex;align-items:center}.header-title h2{color:var(--nav)}.home-link{margin:0 8px 0 0}.home-link svg{display:block;width:32px;height:32px;padding:2px}.home-link svg rect:nth-child(2n){transition:transform .2s}.home-link:hover rect:nth-child(2){transform:translateX(-8px)}.home-link:hover rect:nth-child(4){transform:translateX(-11px)}.home-link:hover rect:nth-child(6){transform:translateX(-6px)}nav ul{display:flex;align-items:center}nav li{display:flex;align-items:center;cursor:pointer;margin:0 16px;fill:var(--nav);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.home-link:hover svg{fill:var(--nav-hover)}nav li.dimmed svg{fill:var(--nav-faded)}nav li.dimmed:hover svg{fill:var(--nav-faded-hover)}nav li svg,nav li>*{width:24px;height:24px}nav li .btn-menu>.btn{background:0 0!important;padding:0;box-shadow:none;fill:var(--nav)}nav li .btn-menu>.btn:hover{fill:var(--nav-hover)}main{padding-top:68px;color:var(--text-1);fill:var(--text-1);transition:padding .3s}.controls{display:flex;justify-content:flex-end;position:fixed;top:12px;right:16px;z-index:1;pointer-events:none}main>.controls{position:sticky;margin-right:16px;right:16px;top:68px}.controls>*{pointer-events:all}.controls>:not(:last-child){margin-right:8px}.tree{margin-top:-36px;overflow-x:auto;padding:4px 16px 50vh}.popup-source{position:fixed;display:flex;flex-direction:column;width:40vw;left:100%;bottom:0;z-index:1;transition:transform .3s;border-radius:6px 0 0 0}.popup-source.shown{transform:translateX(-100%)}.source{width:100%;height:40vh;max-height:50vh;padding:12px;border:none;font-family:Consolas,monospace;font-size:14px;white-space:pre;overflow-wrap:normal;overflow-x:auto;tab-size:4;-moz-tab-size:4;-o-tab-size:4;-webkit-tab-size:4;outline:0;resize:none;position:static;background-color:var(--background-2);border-top-left-radius:6px;color:var(--text-1);box-shadow:0 0 7px -3px #000}.popup-preview{position:fixed;display:flex;flex-direction:column;height:calc(100% - 56px);width:40vw;left:100%;bottom:0;z-index:1;background-color:var(--background-2);box-shadow:0 0 7px -3px #000;transition:transform .3s}main.has-preview{padding-right:40vw}.popup-preview.shown{transform:translateX(-100%)}.popup-preview canvas{width:100%;background-color:var(--nav-faded);display:block;cursor:crosshair;image-rendering:-moz-crisp-edges;image-rendering:-webkit-crisp-edges;image-rendering:crisp-edges;image-rendering:pixelated;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.btn{display:flex;align-items:center;border:none;height:32px;border-radius:6px;padding:7px 11px;cursor:pointer;outline:0;font-size:1rem;white-space:nowrap;background-color:var(--background-4);box-shadow:0 1px 7px -2px #000;color:var(--text-2);fill:var(--text-2);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.btn.active{color:var(--accent-blue);fill:var(--accent-blue)}.btn:not(.btn-input):hover{background-color:var(--background-5)}.btn.no-pointer{pointer-events:none}.btn svg:not(:last-child){margin-right:5px}.btn-menu:not(.no-relative){position:relative}.btn-menu>.btn{height:100%}.btn-menu .btn-group{display:flex;flex-direction:column;position:absolute;right:0;top:100%;margin-top:8px}.btn-group{border-radius:6px;box-shadow:0 0 7px -2px #000}.btn-group .btn{box-shadow:none}.btn-group .btn:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group .btn:not(:first-child),.btn-menu .result-list .btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-input{cursor:initial;padding-right:7px}.btn-input input{background:var(--background-1);color:var(--text-1);font-size:17px;border:none;padding:0 3px;margin-left:5px;width:100px}.btn-input.large-input{padding:5px;padding-left:11px}.btn-input.large-input input{width:100%;height:100%}.btn-menu .result-list{display:block;width:380px;height:unset;overflow-y:auto;overflow-x:hidden;max-height:240px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.popup-actions{display:flex;position:fixed;bottom:8px;left:100%;z-index:5;padding:0 8px;border-top-left-radius:24px;border-bottom-left-radius:24px;background-color:var(--background-4);box-shadow:0 0 7px -3px #000;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;transform:translateX(var(--offset));transition:padding .1s,transform .3s}.popup-actions:hover{background-color:var(--background-5)}.popup-action{padding:12px;fill:var(--text-2);cursor:pointer}.popup-action:not(.shown){pointer-events:none;order:1;visibility:hidden}.popup-action>svg{display:block;width:24px;height:24px}.popup-action.action-preview{fill:var(--accent-blue)}.error{padding:5px 14px;margin:12px 16px;color:var(--text-1);background-color:var(--errors-background);border-radius:3px}.error>*{margin:10px 0}.error a{color:var(--text-1)}.home{padding:16px}.generator-picker{display:flex}.home.center{flex-direction:column;align-items:center;color:var(--nav)}.home.center p{padding-bottom:20px;text-align:center;font-size:20px}.home{max-width:960px;margin:0 auto}.tool-card{display:flex;padding:10px;margin-bottom:8px;color:var(--text-2);background-color:var(--background-2);box-shadow:1px 1px 7px -3px #000;border-radius:6px;text-decoration:none}.tool-card:hover{background-color:var(--background-3)}.tool-card svg{width:32px;height:32px;flex-shrink:0;margin-right:8px}.tool-card h3{font-weight:unset}.tool-card p{color:var(--text-3)}hr{margin:12px 0;border:none}.settings{padding:20px}.settings p{color:var(--nav);padding:8px;border-bottom:2px solid var(--background-4)}.field-list{width:100%;border-collapse:collapse;list-style-type:none}.field-list li{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--background-4)}.field-prop{display:inline-flex;align-items:center;max-width:100%;margin:4px}.field-prop>input,.field-prop>label{height:34px;color:var(--text-1);margin-right:-1px;border:1px solid;border-color:var(--nav-faded-hover)}.field-prop label{padding:0 9px;line-height:1.94rem;background-color:var(--node-background-label);white-space:nowrap;border-top-left-radius:3px;border-bottom-left-radius:3px}.field-prop input{width:100%;line-height:1.6rem;background-color:var(--node-background-input);color:var(--text-1);padding-left:9px;font-size:18px;border-top-right-radius:3px;border-bottom-right-radius:3px}.field-prop svg{padding:4px;margin:0 4px;height:28px;width:28px;fill:var(--nav);cursor:pointer}.field-prop .hidden svg{fill:#be4b2e}.field-prop .dimmed svg{fill:var(--nav-faded)}.very-large{font-size:80px;font-weight:100}[data-ea-publisher]{margin:0 16px 8px}.ea-content{margin:0!important;background:var(--background-2)!important}.ea-content span{color:var(--text-2)!important}.ea-content strong{color:var(--accent-blue)!important}.ea-callout{margin:.25rem 0!important;padding:0!important}.ea-callout a{color:var(--text-3)!important}@keyframes spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fadein{from{opacity:0}to{opacity:1}}@media screen and (max-width:1300px){main.has-preview .tree{margin-top:8px}}@media screen and (max-width:800px){main .tree{margin-top:4px!important}}@media screen and (max-width:580px){.header-title h2{font-size:22px}body nav li{margin:0 8px}main.has-preview{padding-right:0}main .controls{top:64px}.tree{padding-left:8px;padding-right:8px}.popup-source{width:100vw}.source{border-radius:0}.popup-preview{width:100vw;height:unset;bottom:0;background-color:transparent;box-shadow:none}.popup-preview canvas{margin-top:8px}.btn-menu .result-list,.btn.btn.large-input{width:calc(100vw - 10px)}.generator-picker{justify-content:center}.field-list li{flex-direction:column}.field-prop{width:100%}.field-prop input{width:100%}}:root{--node-border:#4e4e4e;--node-background-label:#1b1b1b;--node-background-input:#272727;--node-text:#dadada;--node-selected:#ad9715;--node-selected-border:#8d7a0d;--node-add:#487c13;--node-add-border:#3b6e0c;--node-remove:#9b341b;--node-remove-border:#7e1d05;--node-indent-border:#454749;--node-popup-background:#0a0a0ae6;--node-popup-text:#dadada;--node-popup-text-dimmed:#b4b4b4;--category-predicate:#306163;--category-predicate-border:#224849;--category-predicate-background:#1d3333;--category-function:#838383;--category-function-border:#6b6b6b;--category-function-background:#414141;--category-pool:#386330;--category-pool-border:#2e4922;--category-pool-background:#21331d}:root[data-theme=light]{--node-border:#bcbfc3;--node-background-label:#e4e4e4;--node-background-input:#ffffff;--node-text:#000000;--node-selected:#f0e65e;--node-selected-border:#b9a327;--node-add:#9bd464;--node-add-border:#498d09;--node-remove:#e76f51;--node-remove-border:#be4b2e;--node-indent-border:#b9b9b9;--node-popup-background:#1f2020e6;--node-popup-text:#dadada;--node-popup-text-dimmed:#b4b4b4;--category-predicate:#65b5b8;--category-predicate-border:#187e81;--category-predicate-background:#95c5c7;--category-function:#979fa7;--category-function-border:#788086;--category-function-background:#dce0e4;--category-pool:#76b865;--category-pool-border:#398118;--category-pool-background:#b1d6a6}@media (prefers-color-scheme:light){:root[data-theme=system]{--node-border:#bcbfc3;--node-background-label:#e4e4e4;--node-background-input:#ffffff;--node-text:#000000;--node-selected:#f0e65e;--node-selected-border:#b9a327;--node-add:#9bd464;--node-add-border:#498d09;--node-remove:#e76f51;--node-remove-border:#be4b2e;--node-indent-border:#b9b9b9;--node-popup-background:#1f2020e6;--node-popup-text:#dadada;--node-popup-text-dimmed:#b4b4b4;--category-predicate:#65b5b8;--category-predicate-border:#187e81;--category-predicate-background:#95c5c7;--category-function:#979fa7;--category-function-border:#788086;--category-function-background:#dce0e4;--category-pool:#76b865;--category-pool-border:#398118;--category-pool-background:#b1d6a6}}.node-header{display:inline-flex;position:relative;align-items:center;width:100%}.node-header>*{height:34px;border:1px solid;color:var(--node-text);border-color:var(--node-border)}.node-header>label{padding:0 9px;line-height:1.94rem;white-space:nowrap;user-select:none;background-color:var(--node-background-label)}.node-header>input{font-size:18px;padding-left:9px;background-color:var(--node-background-input)}.node-header>input[type=color]{padding:0 2px}.node-header>datalist,.node-header>select{font-size:18px;padding-left:6px;background-color:var(--node-background-input)}.node-header>button{font-size:18px;padding:0 9px;line-height:1.94rem;white-space:nowrap;user-select:none;cursor:pointer;background-color:var(--node-background-input)}.object-node>.node-header>.collapse{cursor:pointer}.node-error~input:last-child,.node-error~input[list]:nth-last-child(2),.node-error~select:last-child{border-color:var(--node-remove)!important}.node-header>.node-icon{order:1}.node-header>.node-icon+*,.node-header>:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.node-header>:last-child,.node-header>input[list]:nth-last-child(2){border-top-right-radius:3px;border-bottom-right-radius:3px}.node-header>*{margin-right:-1px}.list-node>.node-header>:first-child,.map-node>.node-header>:first-child,.object-node:not(.no-body)>.node-header>:first-child{border-top-left-radius:8px;border-bottom-left-radius:0}button.selected{background-color:var(--node-selected);border-color:var(--node-selected-border)}.collapse svg{fill:var(--node-text)}.collapse.closed,button.add{background-color:var(--node-add);border-color:var(--node-add-border)}.collapse.open,button.remove{background-color:var(--node-remove);border-color:var(--node-remove-border)}.node-header>button svg{display:inline-block;position:relative;top:2px;fill:var(--node-text)}.node-header>button.add:last-child,.node-header>button.collapse:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.node-icon{border:none;position:relative;display:inline-block}.node-icon .icon-popup{visibility:hidden;width:240px;background-color:var(--node-popup-background);color:var(--node-popup-text);text-align:center;border-radius:6px;padding:8px 4px;position:absolute;z-index:2;top:125%;left:50%;margin-left:-120px}.node-icon .icon-popup::after{content:"";position:absolute;bottom:100%;left:50%;margin-left:-3px;border-width:5px;border-style:solid;border-color:transparent transparent var(--node-popup-background) transparent}.node-icon .icon-popup.show,.node-icon svg:hover+.icon-popup{visibility:visible}.node-icon svg{height:34px;width:34px;min-width:34px;margin-left:6px;cursor:pointer}.node-icon.node-help svg{fill:var(--node-border)}.node-icon.node-error svg{fill:var(--node-remove)}.node-menu{position:absolute;left:0;top:100%;width:min-content;margin-top:4px;margin-left:4px;z-index:1;color:var(--node-popup-text);font-size:16px;border-radius:3px;background-color:var(--node-popup-background)}.node-menu::after{content:"";position:absolute;bottom:100%;left:0;margin-left:6px;border-width:5px;border-style:solid;border-color:transparent transparent var(--node-popup-background) transparent}.menu-item{padding:4px;display:flex;align-items:center;white-space:normal}.menu-item>*{margin-right:4px}.menu-item .btn{padding:8px}span.menu-item{padding:4px 8px}.menu-item-context{color:var(--node-popup-text-dimmed)}.node{margin-bottom:4px}.node-body>.node:first-child{margin-top:4px}.node:last-child{margin-bottom:0}.node-body{border-left:3px solid var(--node-indent-border)}.node-body{display:flex;flex-direction:column;padding-left:18px}.node-entry>.object-node>.node-body{padding-left:0}.node-entry>.object-node>.node-body>.node>.node-body{border-left:none}.node-entry>.object-node>.node-body>.node>.node-header>.node-icon+*,.node-entry>.object-node>.node-body>.node>.node-header>:first-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:none}.node-entry{display:flex;flex-direction:column;margin-top:4px}.node-entry>.list-node[data-category],.node-entry>.map-node[data-category],.node-entry>.object-node[data-category]{width:100%;min-width:max-content;padding:5px;padding-left:0;margin-top:8px;border:2px solid var(--node-border);border-radius:3px}.node-entry:first-child>.list-node[data-category],.node-entry:first-child>.map-node[data-category],.node-entry:first-child>.object-node[data-category]{margin-top:4px}.node-entry>.object-node[data-category]>.node-header>.node-icon+*,.node-entry>.object-node[data-category]>.node-header>:first-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:none}.node-entry>.list-node[data-category]>.node-body,.node-entry>.map-node[data-category]>.node-body,.node-entry>.object-node[data-category]>.node-body{border:none}.range-node select{width:25px}.number-node input,.range-node input{width:100px}[data-category=predicate]>.node-body>.node>.node-header>label,[data-category=predicate]>.node-header>label{background-color:var(--category-predicate)}[data-category=predicate]>.node-body,[data-category=predicate]>.node-body>.node>.node-header>:not(.selected),[data-category=predicate]>.node-header>:not(.selected),[data-category=predicate]>.node-header>label{border-color:var(--category-predicate-border)}.node-entry>.node.list-node[data-category=predicate],.node-entry>.node.map-node[data-category=predicate],.node-entry>.node.object-node[data-category=predicate]{background-color:var(--category-predicate-background);border-color:var(--category-predicate-border)}[data-category=function]>.node-body>.node>.node-header>label,[data-category=function]>.node-header>label{background-color:var(--category-function)}[data-category=function]>.node-body,[data-category=function]>.node-body>.node>.node-header>:not(.selected),[data-category=function]>.node-header>:not(.selected),[data-category=function]>.node-header>label{border-color:var(--category-function-border)}.node-entry>.node.list-node[data-category=function],.node-entry>.node.map-node[data-category=function],.node-entry>.node.object-node[data-category=function]{background-color:var(--category-function-background);border-color:var(--category-function-border)}[data-category=pool]>.node-body>.node>.node-header>label,[data-category=pool]>.node-header>label{background-color:var(--category-pool)}[data-category=pool]>.node-body,[data-category=pool]>.node-body>.node>.node-header>:not(.selected),[data-category=pool]>.node-header>:not(.selected),[data-category=pool]>.node-header>label{border-color:var(--category-pool-border)}.node-entry>.node.list-node[data-category=pool],.node-entry>.node.map-node[data-category=pool],.node-entry>.node.object-node[data-category=pool]{background-color:var(--category-pool-background);border-color:var(--category-pool-border)} \ No newline at end of file diff --git a/assets/index.a9e0473e.js b/assets/index.a9e0473e.js new file mode 100644 index 00000000..5f6bfe71 --- /dev/null +++ b/assets/index.a9e0473e.js @@ -0,0 +1,2 @@ +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,s=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&a(e,n,t[n]);if(o)for(var n of o(t))i.call(t,n)&&a(e,n,t[n]);return e},l=(e,o)=>t(e,n(o));import{y as c,a as d,s as u,l as h,g as m,L as g,b as p,c as f,d as v,j as _,e as w,f as y,q as b,N as $,R as C}from"./vendor.5f8b9a3f.js";var k;function x({type:e,id:t}){return c((()=>{var e;null==(e=document.getElementById("ad-placeholder"))||e.remove(),"ethicalads"in window&ðicalads.load()}),[]),d("div",{"data-ea-publisher":"misode-github-io","data-ea-type":e,class:"ad dark flat",id:t})}function V({icon:e,label:t,active:n,class:o,onClick:r}){return d("div",{class:`btn${n?" active":""}${o?` ${o}`:""}`,onClick:r},e&&K[e],t&&d("span",null,t))}function E({icon:e,label:t,large:n,type:o,doSelect:r,value:i,onChange:a}){const s=void 0===a?()=>{}:e=>{const t=e.target.value;"number"===o&&(t.endsWith(".")||isNaN(Number(t)))||null==a||a(t)},l=u(null);return c((()=>{r&&l.current&&l.current.select()}),[r]),d("div",{class:"btn btn-input "+(n?"large-input":""),onClick:e=>e.stopPropagation()},e&&K[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:i,onKeyUp:s}))}function M({icon:e,label:t,relative:n,children:o}){const[r,i]=h(!1),a=()=>{i(!1)};return c((()=>(r&&document.body.addEventListener("click",a),()=>{document.body.removeEventListener("click",a)})),[r]),d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(V,{icon:e,label:t,onClick:()=>i(!0)}),r&&d("div",{class:"btn-group"},o))}function z({error:e}){return d("div",{class:"error"},d("h3",null,e),d("p",null,"You can report this as a bug ",d("a",{href:"https://github.com/misode/misode.github.io/issues/new",target:"_blank"},"on GitHub")))}!function(e){const t="Site",n="Generator";function o(e,t,n){ga("send","event",e,t,n)}function r(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){r(4,e),o(t,"set-language",e)},e.setTheme=function(e){r(1,e),o(t,"set-theme",e)},e.setVersion=function(e){r(3,e),o(n,"set-version",e)},e.setPreview=function(e){r(5,e),o(n,"set-preview",e)},e.generatorEvent=function(e,t){o(n,e,t)}}(k||(k={}));var A=JSON.parse('{"languages":[{"code":"de","name":"Deutsch"},{"code":"en","name":"English"},{"code":"fr","name":"Français"},{"code":"it","name":"Italiano"},{"code":"ja","name":"日本語"},{"code":"pl","name":"Polski"},{"code":"pt","name":"Português"},{"code":"ru","name":"Русский"},{"code":"sk","name":"Slovenčina","schemas":false},{"code":"zh-cn","name":"简体中文"},{"code":"zh-tw","name":"正體中文"}],"versions":[{"id":"1.15","refs":{"mcdata_master":"13355f7"}},{"id":"1.16","refs":{"mcdata_master":"1.16.4","vanilla_datapack_data":"1.16.4-data","vanilla_datapack_summary":"1.16.4-summary"}},{"id":"1.17","refs":{"mcdata_master":"master","vanilla_datapack_data":"data","vanilla_datapack_summary":"summary"},"dynamic":true}],"models":[{"id":"loot-table","name":"Loot Table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","name":"Predicate","path":"predicates","schema":"predicate"},{"id":"item-modifier","name":"Item Modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","name":"Advancement","path":"advancements","schema":"advancement"},{"id":"dimension","name":"Dimension","path":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension-type","name":"Dimension Type","path":"dimension_type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","name":"World Settings","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen","name":"Worldgen","category":true,"minVersion":"1.16"},{"id":"worldgen/biome","name":"Biome","path":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/carver","name":"Carver","path":"worldgen/configured_carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/feature","name":"Feature","path":"worldgen/configured_feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/noise-settings","name":"Noise Settings","path":"worldgen/noise_settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/structure-feature","name":"Structure Feature","path":"worldgen/configured_structure_feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16"},{"id":"worldgen/surface-builder","name":"Surface Builder","path":"worldgen/configured_surface_builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16"},{"id":"worldgen/processor-list","name":"Processor List","path":"worldgen/processor_list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template-pool","name":"Template Pool","path":"worldgen/template_pool","category":"worldgen","schema":"template_pool","minVersion":"1.16"}],"registries":[{"id":"advancement","dynamic":true},{"id":"attribute","minVersion":"1.16"},{"id":"block"},{"id":"dimension","dynamic":true},{"id":"dimension_type","dynamic":true},{"id":"enchantment"},{"id":"entity_type"},{"id":"fluid"},{"id":"function","dynamic":true},{"id":"float_provider_type","minVersion":"1.17"},{"id":"item"},{"id":"int_provider_type","minVersion":"1.17"},{"id":"height_provider_type","minVersion":"1.17"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_function_type","minVersion":"1.16"},{"id":"loot_nbt_provider_type","minVersion":"1.17"},{"id":"loot_number_provider_type","minVersion":"1.17"},{"id":"loot_pool_entry_type","minVersion":"1.16"},{"id":"loot_score_provider_type","minVersion":"1.17"},{"id":"loot_table","dynamic":true},{"id":"mob_effect"},{"id":"pos_rule_test","minVersion":"1.16"},{"id":"potion","minVersion":"1.15"},{"id":"predicate","dynamic":true},{"id":"recipe","dynamic":true},{"id":"rule_test","minVersion":"1.16"},{"id":"sound_event"},{"id":"stat_type"},{"id":"structure","dynamic":true},{"id":"tag/block","dynamic":true},{"id":"tag/entity_type","dynamic":true},{"id":"tag/fluid","dynamic":true},{"id":"tag/function","dynamic":true},{"id":"tag/item","dynamic":true},{"id":"worldgen/biome","dynamic":true},{"id":"worldgen/block_state_provider_type","minVersion":"1.16"},{"id":"worldgen/block_placer_type","minVersion":"1.16"},{"id":"worldgen/biome_source","minVersion":"1.16"},{"id":"worldgen/carver","minVersion":"1.16"},{"id":"worldgen/chunk_generator","minVersion":"1.16"},{"id":"worldgen/configured_carver","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_decorator","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_structure_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_surface_builder","minVersion":"1.16","dynamic":true},{"id":"worldgen/decorator","minVersion":"1.16"},{"id":"worldgen/feature","minVersion":"1.16"},{"id":"worldgen/feature_size_type","minVersion":"1.16"},{"id":"worldgen/foliage_placer_type","minVersion":"1.16"},{"id":"worldgen/noise_settings","minVersion":"1.16","dynamic":true},{"id":"worldgen/processor_list","minVersion":"1.16","dynamic":true},{"id":"worldgen/structure_feature","minVersion":"1.16"},{"id":"worldgen/structure_pool_element","minVersion":"1.16"},{"id":"worldgen/structure_processor","minVersion":"1.16"},{"id":"worldgen/surface_builder","minVersion":"1.16"},{"id":"worldgen/template_pool","minVersion":"1.16","dynamic":true},{"id":"worldgen/tree_decorator_type","minVersion":"1.16"},{"id":"worldgen/trunk_placer_type","minVersion":"1.16"},{"id":"biome","maxVersion":"1.15"},{"id":"worldgen/biome","minVersion":"1.16","path":"processed/reports/biomes"}]}');let j;const L={},P=function(e,t){if(!t)return e();if(void 0===j){const e=document.createElement("link").relList;j=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in L)return;L[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":j,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};var D=JSON.parse('{"advancement":"Advancement","button.add":"Add","button.collapse":"Collapse","button.expand":"Expand","button.remove":"Remove","copy":"Copy","dimension-type":"Dimension Type","dimension":"Dimension","download":"Download","fields":"Fields","github":"GitHub","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.tabs":"Tabs","item-modifier":"Item Modifier","language":"Language","loot-table":"Loot Table","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","predicate":"Predicate","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","presets":"Presets","preview":"Visualize","preview.scale":"Scale","preview.depth":"Depth","preview.width":"Width","source_placeholder":"Paste JSON content here","undo":"Undo","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/carver":"Carver","worldgen/feature":"Feature","worldgen/noise-settings":"Noise Settings","worldgen/processor-list":"Processor List","worldgen/structure-feature":"Structure Feature","worldgen/surface-builder":"Surface Builder","worldgen/template-pool":"Template Pool"}'),I=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:D});const S={fallback:D};function O(e,t,...n){var o,r,i,a,s;return function(e,t){return e.replace(/%\d+%/g,(e=>{const n=parseInt(e.slice(1,-1));return void 0!==(null==t?void 0:t[n])?t[n]:e}))}(null!=(s=null!=(a=null!=(i=null==(o=S[e])?void 0:o[t])?i:null==(r=S.en)?void 0:r[t])?a:S.fallback[t])?s:t,n)}async function N(e){const t=A.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return P((()=>import("./de.a632fd27.js")),void 0);case"../locales/en.json":return P((()=>Promise.resolve().then((function(){return I}))),void 0);case"../locales/fr.json":return P((()=>import("./fr.ea70bc04.js")),void 0);case"../locales/it.json":return P((()=>import("./it.772fd5c1.js")),void 0);case"../locales/ja.json":return P((()=>import("./ja.ed039f93.js")),void 0);case"../locales/pl.json":return P((()=>import("./pl.ea3084e3.js")),void 0);case"../locales/pt.json":return P((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return P((()=>import("./ru.4f4928c9.js")),void 0);case"../locales/sk.json":return P((()=>import("./sk.dcbe99ef.js")),void 0);case"../locales/zh-cn.json":return P((()=>import("./zh-cn.d626787e.js")),void 0);case"../locales/zh-tw.json":return P((()=>import("./zh-tw.2f743133.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),o=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return P((()=>import("./de.ba8c635a.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return P((()=>import("./en.6ae73cdb.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return P((()=>import("./fr.c1ebc76d.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return P((()=>import("./it.288ea523.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return P((()=>import("./ja.d68f1cee.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return P((()=>import("./pl.2f8b352f.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return P((()=>import("./pt.98ad9b62.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return P((()=>import("./ru.61de7e2f.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return P((()=>import("./zh-cn.655950f4.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return P((()=>import("./zh-tw.a8f28612.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);S[e]=s(s({},n.default),o.default)}const T=e=>("0"+e.toString(16)).substr(-2);function B(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,T).join("")}function R(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function H(e){return`/${e}/`.replaceAll("//","/")}function F(e){const t=Math.abs(function(e){let t=0;for(let n=0;n>8)%256,(t>>16)%256]}function W(e,t,n){return Math.max(e,Math.min(t,n))}function G(e,t,n){return n<0?e:n>1?t:q(n,e,t)}function q(e,t,n){return t+e*(n-t)}function J(e,t,n,o,r,i){return q(t,q(e,n,o),q(e,r,i))}function Y(e){return e*e*e*(e*(6*e-15)+10)}const U={system:"device_desktop",dark:"moon",light:"sun"};function Z({lang:e,title:t,theme:n,changeTheme:o,language:r,changeLanguage:i}){var a;const s=O.bind(null,e),l=m().replace(/^\//,"").replace(/\/$/,""),c=null==(a=A.models.find((e=>e.id===l)))?void 0:a.category;return d("header",null,d("div",{class:"header-title"},d(g,{class:"home-link",href:"string"==typeof c?H(c):"/"},X.home),d("h2",null,t)),d("nav",null,d("ul",null,d("li",null,d(M,{icon:"globe"},A.languages.map((({code:e,name:t})=>d(V,{label:t,active:e===r,onClick:()=>i(e)}))))),d("li",null,d(M,{icon:U[n]},Object.entries(U).map((([e,t])=>d(V,{icon:t,label:s(`theme.${e}`),active:e===n,onClick:()=>o(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",title:s("github")},K.mark_github)))))}const X={home:d("svg",{width:"32",height:"28",viewBox:"0 0 32 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},d("rect",{width:"26",height:"6",rx:"3",fill:"#7CB45C"}),d("rect",{x:"8",width:"18",height:"6",rx:"3",fill:"#4BA041"}),d("rect",{y:"11",width:"32",height:"6",rx:"3",fill:"#AAA8A8"}),d("rect",{x:"11",y:"11",width:"21",height:"6",rx:"3",fill:"#91908F"}),d("rect",{x:"11",y:"22",width:"21",height:"6",rx:"3",fill:"#70B5C3"}),d("rect",{x:"17",y:"22",width:"15",height:"6",rx:"3",fill:"#4D989B"})),report:d("svg",{width:"30",height:"36",viewBox:"0 0 30 36",xmlns:"http://www.w3.org/2000/svg"},d("path",{d:"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z",fill:"#6ACC5D"}),d("path",{d:"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z",fill:"#FF4C4C"}),d("path",{d:"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z",fill:"#E5B442"}),d("path",{d:"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z",fill:"#2BAD1D"}),d("path",{d:"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z",fill:"#C10B0B"}),d("path",{d:"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z",fill:"#CC8E00"})),sounds:d("svg",{width:"20",height:"20",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},d("circle",{cx:"10",cy:"10",r:"10",fill:"#451475"}),d("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z",fill:"#C5A5E6"}))},K={archive:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"})),arrow_left:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"})),arrow_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"})),chevron_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"})),clippy:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"})),code:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"})),dash:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"})),device_desktop:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"})),download:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),eye:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"})),eye_closed:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"})),gear:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"})),globe:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"})),history:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"})),kebab_horizontal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"})),link:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"})),mark_github:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})),moon:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"})),play:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"})),plus:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"})),search:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"})),sun:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"})),sync:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"})),tag:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"})),three_bars:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"})),unfold:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"})),upload:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),x_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"}))};function Q(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),n.invalidated(),()=>{null==e||e.removeListener(n)})),[e])}function ee(e,t){if(!e)return;const n=u(),o=u(),r=u([0,0]);c((()=>{const i=e=>{o.current=[e.offsetX,e.offsetY]},a=e=>{if(void 0===o.current)return;const i=e.offsetX-o.current[0],a=e.offsetY-o.current[1];0===i&&0===a||(cancelAnimationFrame(n.current),r.current=[r.current[0]+i,r.current[1]+a],n.current=requestAnimationFrame((()=>{t(...r.current),r.current=[0,0]}))),o.current=[e.offsetX,e.offsetY]},s=e=>{o.current=void 0};return e.addEventListener("mousedown",i),e.addEventListener("mousemove",a),document.body.addEventListener("mouseup",s),()=>{e.removeEventListener("mousedown",i),e.removeEventListener("mousemove",a),document.body.removeEventListener("mouseup",s)}}),[e])}const te=class{constructor(e){this.xo=256*e(),this.yo=256*e(),this.zo=256*e(),this.p=Array(256);for(let t=0;t<256;t+=1)this.p[t]=t;for(let t=0;t<256;t+=1){const n=e.int32()%(256-t),o=this.p[t];this.p[t]=this.p[t+n],this.p[t+n]=o}}noise(e,t,n,o,r){const i=e+this.xo,a=t+this.yo,s=n+this.zo,l=Math.floor(i),c=Math.floor(a),d=Math.floor(s),u=i-l,h=a-c,m=s-d,g=Y(u),p=Y(h),f=Y(m);let v=0;return 0!==o&&(v=Math.floor(Math.min(r,h)/o)*o),this.sampleAndLerp(l,c,d,u,h-v,m,g,p,f)}gradDot(e,t,n,o){const r=te.GRADIENT[15&e];return r[0]*t+r[1]*n+r[2]*o}P(e){return 255&this.p[255&e]}sampleAndLerp(e,t,n,o,r,i,a,s,l){const c=this.P(e)+t,d=this.P(c)+n,u=this.P(c+1)+n,h=this.P(e+1)+t,m=this.P(h)+n,g=this.P(h+1)+n;return function(e,t,n,o,r,i,a,s,l,c,d){return q(n,J(e,t,o,r,i,a),J(e,t,s,l,c,d))}(a,s,l,this.gradDot(this.P(d),o,r,i),this.gradDot(this.P(m),o-1,r,i),this.gradDot(this.P(u),o,r-1,i),this.gradDot(this.P(g),o-1,r-1,i),this.gradDot(this.P(d+1),o,r,i-1),this.gradDot(this.P(m+1),o-1,r,i-1),this.gradDot(this.P(u+1),o,r-1,i-1),this.gradDot(this.P(g+1),o-1,r-1,i-1))}};let ne=te;ne.GRADIENT=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1],[1,1,0],[0,-1,1],[-1,1,0],[0,-1,-1]];class oe{constructor(e,t,n){this.amplitudes=n,this.noiseLevels=Array(this.amplitudes.length);for(let o=0;o{const r=e[`${t}_noise`];return new re(n.seed+o,r.firstOctave,r.amplitudes)})),i={};e.biomes.forEach((e=>{i[e.biome]=se(e.biome,n.biomeColors)}));const a=t.data,s=-n.offset[0]-100+n.res/2,l=-n.offset[1]-100+n.res/2,c=4*t.width/n.res,d=4/n.res;for(let u=0;u<200;u+=n.res)for(let t=0;t<200;t+=n.res){const h=t*c+u*d,m=(u+s)*n.scale,g=(t+l)*n.scale,p=le(r,e.biomes,m,g),f=null!=(o=i[p])?o:[128,128,128];a[h]=f[0],a[h+1]=f[1],a[h+2]=f[2],a[h+3]=255}}(e,t,n);case"fixed":return function(e,t,n){const o=t.data,r=se(e.biome,n.biomeColors),i=4*t.width/n.res,a=4/n.res;for(let s=0;s<200;s+=n.res)for(let e=0;e<200;e+=n.res){const t=e*i+s*a;o[t]=r[0],o[t+1]=r[1],o[t+2]=r[2],o[t+3]=255}}(e,t,n);case"checkerboard":return function(e,t,n){var o,r,i,a,s,l;const c={};null==(o=e.biomes)||o.forEach((e=>{c[e]=se(e,n.biomeColors)}));const d=t.data,u=-n.offset[0]-100+n.res/2,h=-n.offset[1]-100+n.res/2,m=4*t.width/n.res,g=4/n.res,p=(null!=(r=e.scale)?r:2)+2,f=null!=(a=null==(i=e.biomes)?void 0:i.length)?a:0;for(let v=0;v<200;v+=n.res)for(let t=0;t<200;t+=n.res){const o=t*m+v*g,r=((((v+u)*n.scale>>p)+((t+h)*n.scale>>p))%f+f)%f,i=null==(s=e.biomes)?void 0:s[r],a=null!=(l=c[i])?l:[128,128,128];d[o]=a[0],d[o+1]=a[1],d[o+2]=a[2],d[o+3]=255}}(e,t,n)}}function se(e,t){var n;if(!e)return[128,128,128];const o=null!=(n=t[e])?n:de[e];return void 0===o?F(e):o}function le(e,t,n,o){if(!Array.isArray(t)||0===t.length)return"";const r=e.map((e=>e.getValue(n,o,0)));let i=1/0,a="";for(const s of t){const e=ce(s.parameters,{altitude:r[0],temperature:r[1],humidity:r[2],weirdness:r[3],offset:0});e{we(t,null==e?void 0:e.decorator,n).forEach((t=>_e(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{_e(t,n.random()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var o,r;for(const i of null!=(o=null==e?void 0:e.features)?o:[])if(n.random()<(null!=(r=null==i?void 0:i.chance)?r:0))return void _e(t,i.feature,n);_e(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var o,r,i;_e(t,null==(i=null==e?void 0:e.features)?void 0:i[pe(null!=(r=null==(o=null==e?void 0:e.features)?void 0:o.length)?r:0,n)],n)}},be={chance:(e,t,n)=>{var o;return n.random()<1/(null!=(o=null==e?void 0:e.chance)?o:1)?[t]:[]},count:(e,t,n)=>{var o;return new Array(fe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t)},count_extra:(e,t,n)=>{var o,r;let i=null!=(o=null==e?void 0:e.count)?o:1;return n.random(){var o;return new Array(fe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t).map((e=>[e[0]+pe(16,n),e[1],e[2]+pe(16,n)]))},count_noise:(e,t,n)=>{const o=n.biomeInfoNoise.getValue(t[0]/200,0,t[2]/200){var o;const r=Math.max(1,e.noise_factor),i=n.biomeInfoNoise.getValue(t[0]/r,0,t[2]/r),a=Math.max(0,Math.ceil((i+(null!=(o=e.noise_offset)?o:0))*e.noise_to_count_ratio));return new Array(a).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,o)=>{const r=4*Math.floor(o/4)+1+pe(3,n)+t[0];return[r,Math.max(n.seaLevel,ue[W(0,63,r)]),4*Math.floor(o%4)+1+pe(3,n)+t[2]]})),decorated:(e,t,n)=>we(t,null==e?void 0:e.outer,n).flatMap((t=>we(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var o,r,i,a;return ge(t,pe(null!=(o=null==e?void 0:e.spread)?o:0,n)+pe(null!=(r=null==e?void 0:e.spread)?r:0,n)-(null!=(i=e.spread)?i:0)+(null!=(a=null==e?void 0:e.baseline)?a:0))},emerald_ore:(e,t,n)=>{const o=3+pe(6,n);return[...new Array(o)].map((()=>[t[0]+pe(16,n),4+pe(28,n),t[2]+pe(16,n)]))},fire:(e,t,n)=>{const o=1+pe(pe(fe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+pe(16,n),pe(128,n),t[2]+pe(16,n)]))},glowstone:(e,t,n)=>{const o=pe(1+pe(fe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+pe(16,n),pe(128,n),t[2]+pe(16,n)]))},heightmap:(e,t,n)=>ge(t,Math.max(n.seaLevel,ue[W(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>ge(t,pe(2*Math.max(n.seaLevel,ue[W(0,63,t[0])]),n)),heightmap_world_surface:(e,t,n)=>ge(t,Math.max(n.seaLevel,ue[W(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+pe(8,n),t[1],t[2]+4+pe(8,n)]],lava_lake:(e,t,n)=>{var o,r;if(0===pe((null!=(o=e.chance)?o:1)/10,n)){const o=pe(pe(248,n)+8,n);if(o[t],range:(e,t,n)=>{var o,r,i;return ge(t,pe((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0))},range_biased:(e,t,n)=>{var o,r,i;return ge(t,pe(pe((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n))},range_very_biased:(e,t,n)=>{var o,r,i,a;return ge(t,pe(pe(pe((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n)+(null!=(a=null==e?void 0:e.bottom_offset)?a:0),n))},spread_32_above:(e,t,n)=>ge(t,pe(t[1]+32,n)),top_solid_heightmap:(e,t)=>ge(t,ue[W(0,63,t[0])]),magma:(e,t,n)=>ge(t,pe(t[1]+32,n)),square:(e,t,n)=>[[t[0]+pe(16,n),t[1],t[2]+pe(16,n)]],water_lake:(e,t,n)=>{var o;return 0===pe(null!=(o=e.chance)?o:1,n)?[[t[0]+pe(16,n),pe(256,n),t[2]+pe(16,n)]]:[]}};class $e{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0,this.minLimitPerlinNoise=oe.fromRange(e+"djfqnqd",-15,0),this.maxLimitPerlinNoise=oe.fromRange(e+"gowdnqs",-15,0),this.mainPerlinNoise=oe.fromRange(e+"afiwmco",-7,0),this.depthNoise=oe.fromRange(e+"qphnmeo",-15,0)}reset(e,t,n,o,r){this.settings=e,this.chunkWidth=4*e.size_horizontal,this.chunkHeight=4*e.size_vertical,this.chunkCountY=Math.floor(e.height/this.chunkHeight),e.amplified&&t>0&&(t=1+2*t,n=1+4*n),this.biomeDepth=.265625*(.5*t-.125),this.biomeScale=96/(.9*n+.1),this.noiseColumnCache=Array(r).fill(null),this.xOffset=o}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),o=Math.floor(e%this.chunkWidth)/this.chunkWidth,r=this.fillNoiseColumn(n),i=this.fillNoiseColumn(n+1);for(let a=this.chunkCountY-1;a>=0;a-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[a*this.chunkHeight+e]=J(n,o,r[a],r[a+1],i[a],i[a+1])}return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),o=684.412*this.settings.sampling.xz_scale,r=684.412*this.settings.sampling.y_scale,i=o/this.settings.sampling.xz_factor,a=r/this.settings.sampling.y_factor,s=this.settings.random_density_offset?this.getRandomDensity(e):0;for(let l=0;l<=this.chunkCountY;l+=1){let t=this.sampleAndClampNoise(e,l,this.mainPerlinNoise.getOctaveNoise(0).zo,o,r,i,a);const c=((1-2*l/this.chunkCountY+s)*this.settings.density_factor+this.settings.density_offset+this.biomeDepth)*this.biomeScale;t+=c*(c>0?4:1),this.settings.top_slide.size>0&&(t=G(this.settings.top_slide.target,t,(this.chunkCountY-l-this.settings.top_slide.offset)/this.settings.top_slide.size)),this.settings.bottom_slide.size>0&&(t=G(this.settings.bottom_slide.target,t,(l-this.settings.bottom_slide.offset)/this.settings.bottom_slide.size)),n[l]=t}return this.noiseColumnCache[e-this.xOffset]=n,n}getRandomDensity(e){const t=this.depthNoise.getValue(200*e,10,this.depthNoise.getOctaveNoise(0).zo,1,0,!0),n=24.575625*(t<0?.3*-t:t)-2;return n<0?.009486607142857142*n:.006640625*Math.min(n,1)}sampleAndClampNoise(e,t,n,o,r,i,a){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=oe.wrap(e*o*d),m=oe.wrap(t*r*d),g=oe.wrap(n*o*d),p=r*d,f=this.minLimitPerlinNoise.getOctaveNoise(u);f&&(s+=f.noise(h,m,g,p,t*p)/d);const v=this.maxLimitPerlinNoise.getOctaveNoise(u);if(v&&(l+=v.noise(h,m,g,p,t*p)/d),u<8){const o=this.mainPerlinNoise.getOctaveNoise(u);o&&(c+=o.noise(oe.wrap(e*i*d),oe.wrap(t*a*d),oe.wrap(n*i*d),a*d,t*a*d)/d)}d/=2}return G(s/512,l/512,(c/10+1)/2)}}function Ce(e,t){return e[t]>0?0:e[t+1]>0?150:255}const ke=["dimension","worldgen/noise-settings","worldgen/feature"],xe=[{id:"biome-noise",generator:"dimension",path:new v.Path(["generator","biome_source"]),predicate:e=>e.get(new v.Path(["generator","type"])).endsWith("noise"),preview:({data:e,shown:t})=>{var n;const[o,r]=h(2),[i,a]=h(B()),[s,l]=h(void 0),m=null==(n=e.type)?void 0:n.replace(/^minecraft:/,""),g=u(null),p=u([0,0]),v=u(void 0),_=u(),w=u();c((()=>{_.current=(t=4)=>{"multi_noise"!==m&&(t=1);const n=g.current.getContext("2d");g.current.width=200/t,g.current.height=200/t;const r=n.createImageData(g.current.width,g.current.height);ae(e,r,{biomeColors:{},offset:p.current,scale:o,seed:i,res:t}),n.putImageData(r,0,0),1!==t&&(clearTimeout(v.current),v.current=setTimeout((()=>_.current(1)),150))},w.current=(t,n)=>{const r=200*t/g.current.clientWidth,a=200*n/g.current.clientHeight,s=function(e,t,n,o){var r,i,a,s,l;const[c,d]=function([e,t],n){return[(e-n.offset[0]-100+n.res/2)*n.scale,(t-n.offset[1]-100+n.res/2)*n.scale]}([t,n],o);switch(null==(r=null==e?void 0:e.type)?void 0:r.replace(/^minecraft:/,"")){case"multi_noise":return le(ie.map(((t,n)=>{const r=e[`${t}_noise`];return new re(o.seed+n,r.firstOctave,r.amplitudes)})),e.biomes,c,d);case"fixed":return e.biome;case"checkerboard":const t=(null!=(i=e.scale)?i:2)+2,n=null!=(s=null==(a=e.biomes)?void 0:a.length)?s:0,r=(((c>>t)+(d>>t))%n+n)%n;return null==(l=e.biomes)?void 0:l[r]}}(e,r,a,{biomeColors:{},offset:p.current,scale:o,seed:i,res:1});l(s)}})),ee(g.current,((e,t)=>{const n=200*e/g.current.clientWidth,o=200*t/g.current.clientHeight;p.current=[p.current[0]+n,p.current[1]+o],_.current()})),function(e,t){if(!e)return;const n=e=>{t(e.offsetX,e.offsetY)},o=()=>{t(void 0,void 0)};c((()=>(e.addEventListener("mousemove",n),e.addEventListener("mouseleave",o),()=>{e.removeEventListener("mousemove",n),e.removeEventListener("mouseleave",o)})),[e])}(g.current,((e,t)=>{void 0===e||void 0===t?l(void 0):w.current(e,t)}));const y=JSON.stringify(e);c((()=>{t&&_.current()}),[y,o,i,t]);const b=e=>{p.current[0]*=o/e,p.current[1]*=o/e,r(e)};return d(f,null,d("div",{class:"controls"},s&&d(V,{label:s,class:"no-pointer"}),("multi_noise"===m||"checkerboard"===m)&&d(f,null,d(V,{icon:"dash",onClick:()=>b(1.5*o)}),d(V,{icon:"plus",onClick:()=>b(o/1.5)})),"multi_noise"===m&&d(V,{icon:"sync",onClick:()=>a(B())})),d("canvas",{ref:g,width:"200",height:"200"}))}},{id:"noise-settings",generator:"worldgen/noise-settings",path:new v.Path(["noise"]),predicate:()=>!0,preview:({lang:e,data:t,shown:n})=>{const o=O.bind(null,e),[r,i]=h(B()),[a,s]=h(.1),[l,m]=h(.2),g=u(null),p=u(0),v=u();c((()=>{v.current=()=>{const e=g.current.getContext("2d"),n=t.height;g.current.width=n,g.current.height=n;const o=e.createImageData(g.current.width,g.current.height);!function(e,t,n){const o=new $e(n.seed);o.reset(e,n.biomeDepth,n.biomeScale,n.offset,200);const r=t.data,i=4*t.width;for(let a=0;a{const t=e*g.current.width/g.current.clientWidth;p.current=p.current+t,v.current()}));const _=JSON.stringify(t);return c((()=>{n&&v.current()}),[_,a,l,r,n]),d(f,null,d("div",{class:"controls"},d(M,{icon:"gear"},d(E,{type:"number",label:o("preview.depth"),value:`${a}`,onChange:e=>s(Number(e))}),d(E,{type:"number",label:o("preview.scale"),value:`${l}`,onChange:e=>m(Number(e))})),d(V,{icon:"sync",onClick:()=>i(B())})),d("canvas",{ref:g,width:"200",height:t.height}))}},{id:"decorator",generator:"worldgen/feature",path:new v.Path([]),predicate:()=>!0,preview:({data:e,version:t,shown:n})=>{const[o,r]=h(4),[i,a]=h(B()),s=u(null),l=u();c((()=>{l.current=()=>{const n=s.current.getContext("2d");s.current.width=16*o,s.current.height=16*o;const r=n.createImageData(s.current.width,s.current.height);!function(e,t,n){const o={placements:[],features:[],random:p(n.seed),biomeInfoNoise:new oe(n.seed+"frwynup",0,[1]),seaLevel:63,version:n.version};for(let i=0;i=n.size[0]||i[1]>=n.size[1]||i[2]>=n.size[2])continue;const e=i[2]*(4*t.width)+4*i[0],s=a{n&&setTimeout((()=>l.current()))}),[m,o,i,n]),d(f,null,d("div",{class:"controls"},d(V,{icon:"dash",onClick:()=>r(Math.min(16,o+1))}),d(V,{icon:"plus",onClick:()=>r(Math.max(1,o-1))}),d(V,{icon:"sync",onClick:()=>a(B())})),d("canvas",{ref:s,width:"64",height:"64"}))}}];function Ve({lang:e,model:t,version:n,id:o,shown:r}){const[,i]=h(0);return Q(t,(()=>{i((e=>e+1))})),d(f,null,xe.filter((e=>e.generator===o)).map((o=>{const i=null==t?void 0:t.get(o.path);return t&&void 0!==i&&o.predicate(t)?o.preview({lang:e,model:t,data:i,version:n,shown:r}):d(f,null)})))}const Ee={base:({},e,t)=>t,choice({switchNode:e},t,n,o){return e.hook(this,t,n,o)},list({children:e},t,n,o){return Array.isArray(n)?n.map(((n,r)=>e.hook(this,t.push(r),n,o))):n},map({children:e,config:t},n,o,r){var i,a;if(void 0===o)return;const s="block_state_map"===(null==(i=t.validation)?void 0:i.validator)?null==(a=r.blockStates)?void 0:a[v.relativePath(n,t.validation.params.id).get()]:null,l={};return Object.keys(o).forEach((t=>{s&&!Object.keys(s.properties).includes(t)||(l[t]=e.hook(this,n.push(t),o[t],r))})),l},object({getActiveFields:e},t,n,o){if(null==n||"object"!=typeof n)return n;const r={},i=e(t);return Object.keys(i).filter((e=>i[e].enabled(t))).forEach((e=>{r[e]=i[e].hook(this,t.push(e),n[e],o)})),r}};["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const Me="https://raw.githubusercontent.com/Arcensoth/mcdata",ze="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",Ae=[{id:"mcdata_master",hash:"743393fb9a98eb34710158efcfe59c64553adfca",url:Me},{id:"vanilla_datapack_summary",hash:"8a2f8022eb88840e6871ff6a72f63d6e64afc323",url:ze}];async function je(e,t,n){const o=A.versions.find((t=>t.id===e));o?(console.debug(`[fetchData] ${JSON.stringify(o)}`),o.dynamic&&await Promise.all(Ae.filter((e=>localStorage.getItem(`cached_${e.id}`)!==e.hash)).map((async e=>{console.debug(`[deleteMatching] ${e.id} '${localStorage.getItem(`cached_${e.id}`)}' < '${e.hash}' ${e.url}/${o.refs[e.id]}`),await async function(e){try{const t=await caches.open("misode-v1");console.debug("[deleteMatching] Opened cache misode-v1");const n=[];for(const o of await t.keys())e(o.url)&&n.push(t.delete(o));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${t.message}`)}}((t=>t.startsWith(`${e.url}/${o.refs[e.id]}`))),console.debug(`[deleteMatching] Done! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`),localStorage.setItem(`cached_${e.id}`,e.hash),console.debug(`[deleteMatching] Set! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`)}))),await Promise.all([Le(o,t),Pe(o,n),De(o,t)])):console.error(`[fetchData] Unknown version ${o} in ${JSON.stringify(A.versions)}`)}async function Le(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=A.registries.filter((e=>!e.dynamic)).filter((t=>Re(e.id,t.minVersion,t.maxVersion)));if(Re(e.id,void 0,"1.15")){const r=`${Me}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await Ie(r,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var o;t.register(n.id,null!=(o=e[n.id])?o:[])}))}catch(o){console.warn("Error occurred while fetching registries:",o)}}else await Promise.all(n.map((async n=>{try{const o=n.path?`${Me}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${Me}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await Ie(o,(e=>e.values)))}catch(o){console.warn(`Error occurred while fetching registry ${n.id}:`,o)}})))}async function Pe(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),Re(e.id,void 0,"1.16")){const o=Re(e.id,void 0,"1.15")?`${Me}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${Me}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await Ie(o,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n]={properties:e[n].properties,default:e[n].states.find((e=>e.default)).properties}})),t}));Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}else{const o=`${Me}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await Ie(o);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}}async function De(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=A.registries.filter((e=>e.dynamic)).filter((t=>Re(e.id,t.minVersion,t.maxVersion)));if(Re(e.id,"1.16")){const r=`${ze}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await Ie(r);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(o){console.warn("Error occurred while fetching dynamic registries:",o)}}}async function Ie(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const o=await n.match(e);if(o&&o.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await o.json();console.debug(`[getData] fetching data ${e}`);const r=await fetch(e),i=t(await r.json());return await n.put(e,new Response(JSON.stringify(i))),i}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${n.message}`),console.debug(`[getData] fetching data ${e}`);const o=await fetch(e);return t(await o.json())}}const Se=["1.15","1.16","1.17"],Oe={},Ne={},Te={1.15:_,1.16:w,1.17:y};async function Be(e){return Oe[e]||(Oe[e]=(async()=>{try{const t=Te[e].getCollections(),n={};await je(e,t,n);const o=Te[e].getSchemas(t);return Oe[e]={collections:t,schemas:o,blockStates:n},Oe[e]}catch(t){throw new Error(`Cannot get version "${e}": ${t.message}`)}})()),Oe[e]}function Re(e,t,n){const o=A.versions.findIndex((t=>t.id===e)),r=t?A.versions.findIndex((e=>e.id===t)):0,i=n?A.versions.findIndex((e=>e.id===n)):A.versions.length-1;return r<=o&&o<=i}var He,Fe;(Fe=He||(He={})).ID_LANGUAGE="language",Fe.ID_THEME="theme",Fe.ID_VERSION="schema_version",Fe.ID_INDENT="indentation",Fe.getLanguage=function(){var e;return null!=(e=localStorage.getItem(Fe.ID_LANGUAGE))?e:"en"},Fe.getTheme=function(){var e;return null!=(e=localStorage.getItem(Fe.ID_THEME))?e:"dark"},Fe.getVersion=function(){const e=localStorage.getItem(Fe.ID_VERSION);return e&&Se.includes(e)?e:"1.17"},Fe.getIndent=function(){var e;return null!=(e=localStorage.getItem(Fe.ID_INDENT))?e:"2_spaces"},Fe.setLanguage=function(e){e&&localStorage.setItem(Fe.ID_LANGUAGE,e)},Fe.setTheme=function(e){e&&localStorage.setItem(Fe.ID_THEME,e)},Fe.setVersion=function(e){e&&localStorage.setItem(Fe.ID_VERSION,e)},Fe.setIndent=function(e){e&&localStorage.setItem(Fe.ID_INDENT,e)};const We={"2_spaces":2,"4_spaces":4,tabs:"\t"};function Ge({lang:e,name:t,model:n,blockStates:o,doCopy:r,doDownload:i,doImport:a,onError:s}){const l=O.bind(null,e),[m,g]=h(He.getIndent()),p=u(null),_=u(null),w=u();c((()=>{w.current=()=>{if(n&&o)try{const e={blockStates:null!=o?o:{}},t=n.schema.hook(Ee,new v.ModelPath(n),n.data,e);p.current.value=JSON.stringify(t,null,We[m])+"\n"}catch(e){s(`Error getting JSON output: ${e.message}`),console.error(e),p.current.value=""}}})),Q(n,(()=>{w.current()})),c((()=>{w.current()}),[m]);c((()=>{r&&p.current&&(p.current.select(),document.execCommand("copy"))}),[r]),c((()=>{if(i&&p.current&&_.current){const e=encodeURIComponent(p.current.value);_.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),_.current.setAttribute("download",`${t}.json`),_.current.click()}}),[i]),c((()=>{a&&p.current&&(p.current.value="",p.current.select())}),[a]);return d(f,null,d("div",{class:"controls"},d(M,{icon:"gear"},Object.entries(We).map((([e])=>d(V,{label:l(`indentation.${e}`),active:m===e,onClick:()=>{return t=e,He.setIndent(t),void g(t);var t}}))))),d("textarea",{ref:p,class:"source",onChange:()=>{try{const e=JSON.parse(p.current.value);null==n||n.reset(e,!1)}catch(e){}},spellcheck:!1,autocorrect:"off",placeholder:l("source_placeholder")}),d("a",{ref:_,style:"display: none;"}))}function qe({title:e,link:t,icon:n,children:o}){return d("a",{class:"tool-card",href:t},n&&X[n],d("div",null,d("h3",null,e),o))}class Je{constructor(){this.registry={}}register(e){const t=B();return this.registry[t]=e,t}on(e,t){return this.register((n=>{n.addEventListener(e,(e=>{t(n),e.stopPropagation()}))}))}onChange(e){return this.on("change",e)}onClick(e){return this.on("click",e)}mounted(e){e.querySelectorAll("[data-id]").forEach((e=>{var t,n;const o=e.getAttribute("data-id");null==(n=(t=this.registry)[o])||n.call(t,e)})),this.registry={}}}const Ye={clippy:'',info:'',issue_opened:'',plus_circle:'',trashcan:''},Ue=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","carver.type","feature.type","decorator.type","feature.tree.minimum_size.type","block_state_provider.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","int_provider.type","float_provider.type","height_provider.type","structure_feature.type","surface_builder.type","processor.processor_type","rule_test.predicate_type","pos_rule_test.predicate_type","template_element.element_type","block_placer.type"],Ze=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],Xe=["feature.config","decorator.config","int_provider.value","float_provider.value","block_state_provider.simple_state_provider.state","block_state_provider.rotated_block_provider.state","block_state_provider.weighted_state_provider.entries.entry.data","rule_test.block_state","structure_feature.config","surface_builder.config","template_pool.elements.entry.element"],Ke=["loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","feature.type","decorator.type","block_state_provider.type","feature.tree.minimum_size.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","block_placer.type","rule_test.predicate_type","processor.processor_type","template_element.element_type"],Qe=new v.DataModel(v.MapNode(v.StringNode(),v.StringNode()),{historyMax:0}),et={base:()=>["","",""],boolean({node:e},t,n,o){const r=o.mounter.onClick((()=>{t.model.set(t,!(!e.optional()||!1!==n)&&void 0)})),i=o.mounter.onClick((()=>{t.model.set(t,!e.optional()||!0!==n||void 0)}));return["",`${R(o.loc("false"))}\n\t\t\t${R(o.loc("true"))}`,""]},choice({choices:e,config:t,switchNode:n},o,r,i){const a=n.activeCase(o,!0),s=(null==t?void 0:t.context)?new v.ModelPath(o.getModel(),new v.Path(o.getArray(),[t.context])):o,l=(null==t?void 0:t.choiceContext)?new v.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new v.Path([],[t.context]):o,[c,d,u]=a.node.hook(this,s,r,i);if(1===e.length)return[c,d,u];return[c,``+d,u]},list({children:e},t,n,o){const r=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[e.default(),...n])})),i=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[...n,e.default()])})),a=``;let s="";return Array.isArray(n)&&(s=n.map(((n,r)=>{const i=o.mounter.onClick((()=>t.model.set(t.push(r),void 0))),a=t.push(r).contextPush("entry"),s=e.category(a),[l,c,d]=e.hook(this,a,n,o);return`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${rt(o.loc,a,o.mounter)}\n\t\t\t\t\t\t${it(o.loc,a,o.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${l}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${c}\n\t\t\t\t\t
\n\t\t\t\t\t${d?`
${d}
`:""}\n\t\t\t\t\t
\n\t\t\t\t
`})).join(""),n.length>2&&(s+=`
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`)),["",a,s]},map({children:e,keys:t,config:n},o,r,i){var a,s,l,c;const d=new v.ModelPath(Qe,new v.Path([nt(o.toString())])),u=i.mounter.onClick((()=>{const t=d.get();o.model.set(o.push(t),e.default())})),h="block_state_map"===(null==(a=n.validation)?void 0:a.validator)?null==(s=i.blockStates)?void 0:s[v.relativePath(o,n.validation.params.id).get()]:null,m=((null==h?void 0:h.properties)?v.StringNode(null,{enum:Object.keys(null!=(l=h.properties)?l:{})}):t).hook(this,d,null!=(c=d.get())?c:"",i)[1]+``;if(h&&"Properties"===o.last()){"object"!=typeof r&&(r={});const e=Object.entries(h.properties).map((([e,t])=>[e,v.StringNode(null,{enum:t})]));return Object.entries(h.properties).forEach((([e,t])=>{"string"!=typeof r[e]?o.model.errors.add(o.push(e),"error.expected_string"):t.includes(r[e])||o.model.errors.add(o.push(e),"error.invalid_enum_option",r[e])})),v.ObjectNode(Object.fromEntries(e)).hook(this,o,r,i)}let g="";return"object"==typeof r&&void 0!==r&&(g=Object.keys(r).map((t=>{var n;const a=i.mounter.onClick((()=>o.model.set(o.push(t),void 0))),s=o.modelPush(t),l=e.category(s),c=h?v.StringNode(null,{enum:null!=(n=h.properties[t])?n:[]}):e;(null==h?void 0:h.properties[t])&&!h.properties[t].includes(r[t])&&o.model.errors.add(s,"error.invalid_enum_option",r[t]);const[d,u,m]=c.hook(this,s,r[t],i);return`
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${rt(i.loc,s,i.mounter)}\n\t\t\t\t\t\t\t${it(i.loc,s,i.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${d}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${u}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${m?`
${m}
`:""}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`})).join("")),["",m,g]},number({integer:e,config:t},n,o,{mounter:r}){var i;const a=r.onChange((o=>{const r=o.value,i=(null==t?void 0:t.color)?parseInt(r.slice(1),16):e?parseInt(r):parseFloat(r);n.model.set(n,i)}));if(null==t?void 0:t.color){return["",``,""]}return["",``,""]},object({node:e,getActiveFields:t,getChildModelPath:n},o,r,i){let a="",s="";e.optional()&&(s=void 0===r?``:``);let l="";if("object"==typeof r&&void 0!==r&&(!e.optional()||void 0!==r)){const e=t(o);l=Object.keys(e).filter((t=>e[t].enabled(o))).map((t=>{const l=e[t],c=n(o,t),d=c.getContext().join(".");if(Ze.includes(d))return"";const u=l.category(c),[h,m,g]=l.hook(this,c,r[t],i);if(0===h.length&&0===m.length&&0===g.length)return"";const p="object"===l.type(c)&&Xe.includes(d),f=Ke.includes(d);return p||f?(a+=`${rt(i.loc,c,i.mounter)}${it(i.loc,c,i.mounter)}${h}`,s+=m,p?g:""):`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${rt(i.loc,c,i.mounter)}\n\t\t\t\t\t\t${it(i.loc,c,i.mounter)}\n\t\t\t\t\t\t${h}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${m}\n\t\t\t\t\t
\n\t\t\t\t\t${g?`
${g}
`:""}\n\t\t\t\t
`})).join("")}return[a,s,l]},string({node:e,getValues:t,config:n},o,r,i){var a,s;const l=i.mounter.register((e=>{e.value=null!=r?r:"",e.addEventListener("change",(t=>{const n=e.value;o.model.set(o,0===n.length?void 0:n),t.stopPropagation()}))}));let c;const d=t();if(tt(n)&&!n.additional||Ue.includes(o.getContext().join("."))){let t=new v.Path([]);tt(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):tt(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool||(t=t.contextPush(n.params.pool)),c=``}else if(tt(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=B();c=`\n\t\t\t\t${0===d.length?"":`\n\t\t\t\t\t\t\t\t${d.map((e=>``}`}else{const e=null==(a=i.blockStates)?void 0:a[v.relativePath(o,n.params.id).get()];c=``}return["",c,""]}};function tt(e){return!!(null==e?void 0:e.enum)}function nt(e){var t,n=0;for(t=0;t`
{e.getElementsByTagName("span")[0].classList.remove("show")}),{capture:!0,once:!0})}))}">\n\t\t${Ye[t]}\n\t\t${n}\n\t
`,st=(e,t,n)=>`data-id="${n.register((n=>{const o=()=>{var o;const r=document.createElement("div");r.classList.add("node-menu");const i=e(t.contextPush("help").getContext().join("."));i.endsWith(".help")||r.insertAdjacentHTML("beforeend",`${i}`);const a=t.getContext().join(".");r.insertAdjacentHTML("beforeend",`\n\t\t\t\t`),null==(o=r.querySelector(".menu-item .btn"))||o.addEventListener("click",(()=>{const e=document.createElement("input");e.value=a,n.appendChild(e),e.select(),document.execCommand("copy"),n.removeChild(e)})),n.appendChild(r),document.body.addEventListener("click",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0}),document.body.addEventListener("contextmenu",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0})};n.addEventListener("contextmenu",(e=>{o(),e.preventDefault()}));let r=null;n.addEventListener("touchstart",(()=>{r=setTimeout((()=>{o(),r=null}),800)})),n.addEventListener("touchend",(()=>{r&&(clearTimeout(r),r=null)}))}))}"`;function lt({lang:e,model:t,version:n,blockStates:o,onError:r}){const i=u(null),a=u();return c((()=>{a.current=()=>{if(t&&o)try{const r=new Je,a={loc:O.bind(null,e),version:n,mounter:r,blockStates:o},s=new v.ModelPath(t),l=t.schema.hook(et,s,t.data,a),c=t.schema.category(s),d=t.schema.type(s);let u=l[2];l[1]&&(u=`
\n\t\t\t\t\t\t
${l[0]}${l[1]}
\n\t\t\t\t\t\t
${l[2]}
\n\t\t\t\t\t
`),i.current.innerHTML=u,r.mounted(i.current)}catch(a){r(`Error rendering the tree: ${a.message}`),console.error(a),i.current.innerHTML=""}}})),Q(t,(()=>{a.current()})),c((()=>{a.current()}),[e,t,o]),d("div",{ref:i,class:"tree"})}function ct({lang:e}){const t=O.bind(null,e);return d("main",null,d("div",{class:"settings"},d("p",null,t("settings.fields.description")),d("ul",{class:"field-list"})))}function dt({lang:e,changeTitle:t,version:n,onChangeVersion:o,category:r,generator:i}){var a,u,m;const g=O.bind(null,e),[p,_]=h(""),[w]=b();if(w)return d("main",null,d(z,{error:`Something went wrong rendering the generator: ${w.message}`}));const y=r?`${r}/${i}`:null!=i?i:"",$=A.models.find((e=>e.id===y));if(!$)return d("main",null,d(z,{error:`Cannot find generator "${y}"`}));const C=null!=(u=null==(a=A.models.find((e=>e.id===y)))?void 0:a.minVersion)?u:"1.15",j=A.versions.filter((e=>Re(e.id,C))).map((e=>e.id));t(g("title.generator",g(y)),j);const[L,P]=h(null),[D,I]=h(null);c((()=>{P(null),async function(e){return(await Be(e)).blockStates}(n).then((e=>I(e))),async function(e,t){var n;if(!Ne[t]||Ne[t].version!==e){const r=await Be(e),i=null==(n=A.models.find((e=>e.id===t)))?void 0:n.schema;if(!i)throw new Error(`Cannot find model ${t}`);try{const n=r.schemas.get(i),o=new v.DataModel(n);Ne[t]?o.reset(Ne[t].model.data,!1):(o.validate(!0),o.history=[JSON.stringify(o.data)]),Ne[t]={model:o,version:e}}catch(o){throw new Error(`Cannot get generator "${t}" for version "${e}": ${o.message}`)}}return Ne[t].model}(n,y).then((e=>P(e))).catch((e=>_(e.message)))}),[n,r,i]);const S=e=>{e.ctrlKey&&"z"===e.key?(k.generatorEvent("undo","Hotkey"),null==L||L.undo()):e.ctrlKey&&"y"===e.key&&(k.generatorEvent("redo","Hotkey"),null==L||L.redo())};c((()=>(document.addEventListener("keyup",S),()=>{document.removeEventListener("keyup",S)})),[L]);const[N,T]=h(""),[B,R]=h([]),H=($.category?$.category+"/":"")+$.schema;c((()=>{$.path&&async function(e){return(await Be(e)).collections}(n).then((e=>{const t=(null!=N?N:"").trim().split(" "),n=e.get(H).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&R(n)})).catch((e=>_(e.message)))}),[n,r,i,N]);const F=e=>{k.generatorEvent("load-preset",e),async function(e,t,n){console.debug(`[fetchPreset] ${n} ${t} ${n}`);const o=A.versions.find((t=>t.id===e));try{const e=await fetch(`${ze}/${o.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`);return await e.json()}catch(r){console.warn(`Error occurred while fetching ${t} preset ${n}:`,r)}}(n,$.path,e).then((e=>{null==L||L.reset(e,!1)}))},[W,G]=h(window.innerWidth>820),[q,J]=h(0),[Y,U]=h(0),[Z,X]=h(0),[Q,ee]=h(!1),te=ke.includes(y);let ne=1;te&&(ne+=1),W&&(ne+=2);return d(f,null,d("main",{class:Q?"has-preview":""},d(x,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(V,{icon:"upload",label:g("import"),onClick:()=>{k.generatorEvent("import"),G(!0),X(Z+1)}}),$.path&&d(M,{icon:"archive",label:g("presets"),relative:!1},d(E,{icon:"search",large:!0,value:N,onChange:T,doSelect:1}),d("div",{class:"result-list"},B.map((e=>d(V,{label:e,onClick:()=>F(e)})))),0===B.length&&d(V,{label:g("no_presets")})),d(M,{icon:"tag",label:n},j.reverse().map((e=>d(V,{label:e,active:e===n,onClick:()=>o(e)})))),d(M,{icon:"kebab_horizontal"},d(V,{icon:"history",label:g("reset"),onClick:()=>{k.generatorEvent("reset"),null==L||L.reset(L.schema.default(),!0)}}),d(V,{icon:"arrow_left",label:g("undo"),onClick:e=>{e.stopPropagation(),k.generatorEvent("undo","Menu"),null==L||L.undo()}}),d(V,{icon:"arrow_right",label:g("redo"),onClick:e=>{e.stopPropagation(),k.generatorEvent("redo","Menu"),null==L||L.redo()}}))),p&&d(z,{error:p}),d(lt,l(s({},{lang:e,model:L,version:n,blockStates:D}),{onError:_}))),d("div",{class:"popup-actions",style:`--offset: -${10+50*ne}px;`},d("div",{class:"popup-action action-preview"+(te?" shown":""),onClick:()=>{k.generatorEvent("toggle-preview",Q?"hidden":"visible"),ee(!Q)}},Q?K.x_circle:K.play),d("div",{class:"popup-action action-download"+(W?" shown":""),onClick:()=>{k.generatorEvent("download"),U(Y+1)}},K.download),d("div",{class:"popup-action action-copy"+(W?" shown":""),onClick:()=>{k.generatorEvent("copy"),J(q+1)}},K.clippy),d("div",{class:"popup-action action-code shown",onClick:()=>{k.generatorEvent("toggle-output",W?"hidden":"visible"),G(!W),J(0),U(0),X(0)}},W?K.chevron_right:K.code)),d("div",{class:"popup-preview"+(Q?" shown":"")},d(Ve,l(s({},{lang:e,model:L,version:n,id:y}),{shown:Q,onError:_}))),d("div",{class:"popup-source"+(W?" shown":"")},d(Ge,l(s({},{lang:e,model:L,blockStates:D,doCopy:q,doDownload:Y,doImport:Z}),{name:null!=(m=$.schema)?m:"data",onError:_}))))}function ut({lang:e,changeTitle:t}){const n=O.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},A.models.filter((e=>"string"!=typeof e.category)).map((e=>d(qe,{title:n(e.id),link:H(e.id)}))),d("hr",null),d(qe,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/"},d("p",null,"Analyse your performance reports")),d(qe,{title:"Minecraft Sounds",icon:"sounds",link:"https://misode.github.io/sounds/"},d("p",null,"Browse through and mix all the vanilla sounds")),d(qe,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/"},d("p",null,"Convert your 1.16 data packs to 1.17"))))}function ht({lang:e,changeTitle:t}){const n=O.bind(null,e);return t(n("title.generator_category",n("worldgen"))),d("main",null,d("div",{class:"home"},A.models.filter((e=>"worldgen"===e.category)).map((e=>d(qe,{title:n(e.id),link:H(e.id)})))))}function mt(){const[e,t]=h("en");c((()=>{(async()=>{const e=He.getLanguage();await Promise.all([N("en"),..."en"!==e?[N(e)]:[]]),t(e)})()}),[]);const[n,o]=h(He.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const[r,i]=h(He.getVersion()),a=e=>{k.setVersion(e),He.setVersion(e),i(e)},[u,m]=h(O(e,"title.home")),g=(e,t=["1.15","1.16","1.17"])=>{document.title=`${e} Minecraft ${t.join(", ")}`,m(e)};return d(f,null,d(Z,s({},{lang:e,title:u,theme:n,language:e,changeLanguage:async e=>{S[e]||await N(e),k.setLanguage(e),He.setLanguage(e),t(e)},changeTheme:e=>{k.setTheme(e),He.setTheme(e),o(e)}})),d(C,{onChange:e=>{setTimeout((()=>k.pageview(H(e.url))))}},d(ut,s({path:"/"},{lang:e,changeTitle:g})),d(ct,s({path:"/settings/fields"},{lang:e,changeTitle:g})),d(ht,s({path:"/worldgen"},{lang:e,changeTitle:g})),d(dt,l(s({path:"/:generator"},{lang:e,version:r,changeTitle:g}),{onChangeVersion:a})),d(dt,l(s({path:"/worldgen/:generator",category:"worldgen"},{lang:e,version:r,changeTitle:g}),{onChangeVersion:a}))))}$(d(mt,null),document.body); +//# sourceMappingURL=index.a9e0473e.js.map diff --git a/assets/index.a9e0473e.js.map b/assets/index.a9e0473e.js.map new file mode 100644 index 00000000..20e13ff9 --- /dev/null +++ b/assets/index.a9e0473e.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.a9e0473e.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/components/BtnMenu.tsx","../../src/app/components/ErrorPanel.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/Utils.ts","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/components/Octicon.tsx","../../src/app/hooks/useModel.ts","../../src/app/hooks/useOnDrag.ts","../../src/app/previews/noise/ImprovedNoise.ts","../../src/app/previews/noise/PerlinNoise.ts","../../src/app/previews/noise/NormalNoise.ts","../../src/app/previews/BiomeSource.ts","../../src/app/previews/Decorator.ts","../../src/app/previews/noise/NoiseChunkGenerator.ts","../../src/app/previews/NoiseSettings.ts","../../src/app/components/PreviewPanel.tsx","../../src/app/components/previews/BiomeSourcePreview.tsx","../../src/app/hooks/useOnHover.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/schema/transformOutput.ts","../../src/app/DataFetcher.ts","../../src/app/Schemas.ts","../../src/app/Store.ts","../../src/app/components/SourcePanel.tsx","../../src/app/components/ToolCard.tsx","../../src/app/schema/Mounter.ts","../../src/app/schema/Octicon.ts","../../src/app/schema/renderHtml.ts","../../src/app/components/Tree.tsx","../../src/app/pages/FieldSettings.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Worldgen.tsx","../../src/app/Main.tsx"],"sourcesContent":["export namespace Analytics {\n\tconst ID_SITE = 'Site'\n\tconst ID_GENERATOR = 'Generator'\n\n\tconst DIM_THEME = 1\n\tconst DIM_VERSION = 3\n\tconst DIM_LANGUAGE = 4\n\tconst DIM_PREVIEW = 5\n\n\tfunction event(category: string, action: string, label?: string) {\n\t\tga('send', 'event', category, action, label)\n\t}\n\n\tfunction dimension(index: number, value: string) {\n\t\tga('set', `dimension${index}`, value)\n\t}\n\n\texport function pageview(page: string) {\n\t\tga('set', 'page', page)\n\t\tga('send', 'pageview')\n\t}\n\n\texport function setLanguage(language: string) {\n\t\tdimension(DIM_LANGUAGE, language)\n\t\tevent(ID_SITE, 'set-language', language)\n\t}\n\n\texport function setTheme(theme: string) {\n\t\tdimension(DIM_THEME, theme)\n\t\tevent(ID_SITE, 'set-theme', theme)\n\t}\n\n\texport function setVersion(version: string) {\n\t\tdimension(DIM_VERSION, version)\n\t\tevent(ID_GENERATOR, 'set-version', version)\n\t}\n\n\texport function setPreview(preview: string) {\n\t\tdimension(DIM_PREVIEW, preview)\n\t\tevent(ID_GENERATOR, 'set-preview', preview)\n\t}\n\n\texport function generatorEvent(action: string, label?: string) {\n\t\tevent(ID_GENERATOR, action, label)\n\t}\n}\n","import { useEffect } from 'preact/hooks'\n\ndeclare const ethicalads: any\n\ntype AdProps = {\n\ttype: 'text' | 'image',\n\tid: string,\n}\nexport function Ad({ type, id }: AdProps) {\n\tuseEffect(() => {\n\t\tdocument.getElementById('ad-placeholder')?.remove()\n\t\tif ('ethicalads' in window) {\n\t\t\tethicalads.load()\n\t\t}\n\t}, [])\n\n\treturn
\n}\n","import { Octicon } from '.'\n\ntype BtnProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tactive?: boolean,\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: class_, onClick }: BtnProps) {\n\treturn
\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t
\n}\n","import { useEffect, useRef } from 'preact/hooks'\nimport { Octicon } from '.'\n\ntype BtnInputProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tlarge?: boolean,\n\ttype?: 'number' | 'text',\n\tdoSelect?: number,\n\tvalue?: string,\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, type, doSelect, value, onChange }: BtnInputProps) {\n\tconst onKeyUp = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tif (type !== 'number' || (!value.endsWith('.') && !isNaN(Number(value)))) {\n\t\t\tonChange?.(value)\n\t\t}\n\t}\n\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tif (doSelect && ref.current) {\n\t\t\tref.current.select()\n\t\t}\n\t}, [doSelect])\n\n\treturn
e.stopPropagation()}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t\t\n\t
\n}\n","import type { ComponentChildren } from 'preact'\nimport { useEffect, useState } from 'preact/hooks'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\n\ntype BtnMenuProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu({ icon, label, relative, children }: BtnMenuProps) {\n\tconst [active, setActive] = useState(false)\n\n\tconst hider = () => {\n\t\tsetActive(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active) {\n\t\t\tdocument.body.addEventListener('click', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t}\n\t}, [active])\n\n\treturn
\n\t\t setActive(true)} />\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export function ErrorPanel({ error }: { error: string }) {\n\treturn
\n\t\t

{error}

\n\t\t

You can report this as a bug on GitHub

\n\t
\n}\n","let scriptRel;const seen = {};export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps) {\n return baseModule();\n }\n // @ts-ignore\n if (scriptRel === undefined) {\n // @ts-ignore\n const relList = document.createElement('link').relList;\n // @ts-ignore\n scriptRel =\n relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload';\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","import config from '../config.json'\nimport English from '../locales/en.json'\n\nexport type Localize = (key: string, ...params: string[]) => string\n\ninterface Locale {\n\t[key: string]: string\n}\n\nexport const Locales: {\n\t[key: string]: Locale,\n} = {\n\tfallback: English,\n}\n\nfunction resolveLocaleParams(value: string, params?: string[]): string {\n\treturn value.replace(/%\\d+%/g, match => {\n\t\tconst index = parseInt(match.slice(1, -1))\n\t\treturn params?.[index] !== undefined ? params[index] : match\n\t})\n}\n\nexport function locale(language: string, key: string, ...params: string[]): string {\n\tconst value: string | undefined = Locales[language]?.[key]\n\t\t?? Locales.en?.[key] ?? Locales.fallback[key] ?? key\n\treturn resolveLocaleParams(value, params)\n}\n\nexport async function loadLocale(language: string) {\n\tconst langConfig = config.languages.find(lang => lang.code === language)\n\tif (!langConfig) return\n\tconst data = await import(`../locales/${language}.json`)\n\tconst schema = langConfig.schemas !== false\n\t\t&& await import(`../../node_modules/@mcschema/locales/src/${language}.json`)\n\tLocales[language] = { ...data.default, ...schema.default }\n}\n","export function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nconst dec2hex = (dec: number) => ('0' + dec.toString(16)).substr(-2)\n\nexport function hexId(length = 12) {\n\tvar arr = new Uint8Array(length / 2)\n\twindow.crypto.getRandomValues(arr)\n\treturn Array.from(arr, dec2hex).join('')\n}\n\nexport function htmlEncode(str: string) {\n\treturn str.replace(/&/g, '&').replace(//g, '>')\n\t\t.replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/')\n}\n\nexport function hashString(s: string) {\n\tlet h = 0\n\tfor(let i = 0; i < s.length; i++)\n\t\th = Math.imul(31, h) + s.charCodeAt(i) | 0\n\treturn h\n}\n\nexport function cleanUrl(url: string) {\n\treturn `/${url}/`.replaceAll('//', '/')\n}\n\nexport function stringToColor(str: string): [number, number, number] {\n\tconst h = Math.abs(hashString(str))\n\treturn [h % 256, (h >> 8) % 256, (h >> 16) % 256]\n}\n\nexport function clamp(a: number, b: number, c: number) {\n\treturn Math.max(a, Math.min(b, c))\n}\n\nexport function clampedLerp(a: number, b: number, c: number): number {\n\tif (c < 0) {\n\t\treturn a\n\t} else if (c > 1) {\n\t\treturn b\n\t} else {\n\t\treturn lerp(c, a, b)\n\t}\n}\n\nexport function lerp(a: number, b: number, c: number): number {\n\treturn b + a * (c - b)\n}\n\nexport function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {\n\treturn lerp(b, lerp(a, c, d), lerp(a, e, f))\n}\n\nexport function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {\n\treturn lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))\n}\n\nexport function smoothstep(x: number): number {\n\treturn x * x * x * (x * (x * 6 - 15) + 10)\n}\n","import { getCurrentUrl, Link } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\nconst Themes: Record = {\n\tsystem: 'device_desktop',\n\tdark: 'moon',\n\tlight: 'sun',\n}\n\ntype HeaderProps = {\n\tlang: string,\n\ttitle: string,\n\ttheme: string,\n\tchangeTheme: (theme: string) => unknown,\n\tlanguage: string,\n\tchangeLanguage: (language: string) => unknown,\n}\nexport function Header({ lang, title, theme, changeTheme, language, changeLanguage }: HeaderProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst id = getCurrentUrl().replace(/^\\//, '').replace(/\\/$/, '')\n\tconst category = config.models.find(m => m.id === id)?.category\n\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\t{Icons.home}\n\t\t\t\n\t\t\t

{title}

\n\t\t
\n\t\t\n\t
\n}\n","export const Icons = {\n\thome: ,\n\treport: ,\n\tsounds: ,\n}\n","export const Octicon = {\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tchevron_right: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tsearch: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tthree_bars: ,\n\tunfold: ,\n\tupload: ,\n\tx_circle: ,\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect } from 'preact/hooks'\n\nexport function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown) {\n\tconst listener = {\n\t\tinvalidated() {\n\t\t\tif (model) {\n\t\t\t\tinvalidated(model)\n\t\t\t}\n\t\t},\n\t}\n\n\tuseEffect(() => {\n\t\tmodel?.addListener(listener)\n\t\tlistener.invalidated()\n\t\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import { useEffect, useRef } from 'preact/hooks'\n\nexport function useOnDrag(element: HTMLElement, drag: (dx: number, dy: number) => unknown) {\n\tif (!element) return\n\n\tconst request = useRef()\n\tconst dragStart = useRef<[number, number] | undefined>()\n\tconst pending = useRef<[number, number]>([0, 0])\n\n\tuseEffect(() => {\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (dragStart.current === undefined) return\n\t\t\tconst dx = e.offsetX - dragStart.current[0]\n\t\t\tconst dy = e.offsetY - dragStart.current[1]\n\t\t\tif (!(dx === 0 && dy === 0)) {\n\t\t\t\tcancelAnimationFrame(request.current)\n\t\t\t\tpending.current = [pending.current[0] + dx, pending.current[1] + dy]\n\t\t\t\trequest.current = requestAnimationFrame(() => {\n\t\t\t\t\tdrag(...pending.current)\n\t\t\t\t\tpending.current = [0, 0]\n\t\t\t\t})\n\t\t\t}\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseUp = (_e: MouseEvent) => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\n\t\telement.addEventListener('mousedown', onMouseDown)\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousedown', onMouseDown)\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [element])\n}\n","import type seedrandom from 'seedrandom'\nimport { lerp3, smoothstep } from '../../Utils'\n\nexport class ImprovedNoise {\n\tprivate static readonly GRADIENT = [[1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0], [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1], [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1], [1, 1, 0], [0, -1, 1], [-1, 1, 0], [0, -1, -1]]\n\tprivate readonly p: number[]\n\tpublic readonly xo: number\n\tpublic readonly yo: number\n\tpublic readonly zo: number\n\n\tconstructor(random: seedrandom.prng) {\n\t\tthis.xo = random() * 256\n\t\tthis.yo = random() * 256\n\t\tthis.zo = random() * 256\n\t\tthis.p = Array(256)\n\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tthis.p[i] = i\n\t\t}\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tconst n = random.int32() % (256 - i)\n\t\t\tconst b = this.p[i]\n\t\t\tthis.p[i] = this.p[i + n]\n\t\t\tthis.p[i + n] = b\n\t\t}\n\t}\n\n\tpublic noise(x: number, y: number, z: number, a: number, b: number) {\n\t\tconst x2 = x + this.xo\n\t\tconst y2 = y + this.yo\n\t\tconst z2 = z + this.zo\n\t\tconst x3 = Math.floor(x2)\n\t\tconst y3 = Math.floor(y2)\n\t\tconst z3 = Math.floor(z2)\n\t\tconst x4 = x2 - x3\n\t\tconst y4 = y2 - y3\n\t\tconst z4 = z2 - z3\n\t\tconst x5 = smoothstep(x4)\n\t\tconst y5 = smoothstep(y4)\n\t\tconst z5 = smoothstep(z4)\n\n\t\tlet y6 = 0\n\t\tif (a !== 0) {\n\t\t\ty6 = Math.floor(Math.min(b, y4) / a) * a\n\t\t}\n\n\t\treturn this.sampleAndLerp(x3, y3, z3, x4, y4 - y6, z4, x5, y5, z5)\n\t}\n\n\tprivate gradDot(a: number, b: number, c: number, d: number) {\n\t\tconst grad = ImprovedNoise.GRADIENT[a & 15]\n\t\treturn grad[0] * b + grad[1] * c + grad[2] * d\n\t}\n\n\tprivate P(i: number) {\n\t\treturn this.p[i & 255] & 255\n\t}\n\n\tpublic sampleAndLerp(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) {\n\t\tconst j = this.P(a) + b\n\t\tconst k = this.P(j) + c\n\t\tconst l = this.P(j + 1) + c\n\t\tconst m = this.P(a + 1) + b\n\t\tconst n = this.P(m) + c\n\t\tconst o = this.P(m + 1) + c\n\n\t\tconst p = this.gradDot(this.P(k), d, e, f)\n\t\tconst q = this.gradDot(this.P(n), d - 1, e, f)\n\t\tconst r = this.gradDot(this.P(l), d, e - 1, f)\n\t\tconst s = this.gradDot(this.P(o), d - 1, e - 1, f)\n \n\t\tconst t = this.gradDot(this.P(k + 1), d, e, f - 1)\n\t\tconst u = this.gradDot(this.P(n + 1), d - 1, e, f - 1)\n\t\tconst v = this.gradDot(this.P(l + 1), d, e - 1, f - 1)\n\t\tconst w = this.gradDot(this.P(o + 1), d - 1, e - 1, f - 1)\n\n\t\treturn lerp3(g, h, i, p, q, r, s, t, u, v, w)\n\t}\n}\n","import seedrandom from 'seedrandom'\nimport { ImprovedNoise } from './ImprovedNoise'\n\nexport class PerlinNoise {\n\tprivate readonly noiseLevels: ImprovedNoise[]\n\tprivate readonly amplitudes: number[]\n\tprivate readonly lowestFreqValueFactor: number\n\tprivate readonly lowestFreqInputFactor: number\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.amplitudes = amplitudes\n\n\t\tthis.noiseLevels = Array(this.amplitudes.length)\n\t\tfor (let i = 0; i < this.amplitudes.length; i += 1) {\n\t\t\tthis.noiseLevels[i] = new ImprovedNoise(seedrandom(seed))\n\t\t}\n \n\t\tthis.lowestFreqInputFactor = Math.pow(2, firstOctave)\n\t\tthis.lowestFreqValueFactor = Math.pow(2, (amplitudes.length - 1)) / (Math.pow(2, amplitudes.length) - 1)\n\t}\n\n\tpublic static fromRange(seed: string, min: number, max: number) {\n\t\treturn new PerlinNoise(seed, min, Array(max - min + 1).fill(1))\n\t}\n\n\tpublic getValue(x: number, y: number, z: number, a = 0, b = 0, fixY = false) {\n\t\tlet value = 0\n\t\tlet inputF = this.lowestFreqInputFactor\n\t\tlet valueF = this.lowestFreqValueFactor\n\t\tfor (let i = 0; i < this.noiseLevels.length; i += 1) {\n\t\t\tconst noise = this.noiseLevels[i]\n\t\t\tif (noise) {\n\t\t\t\tvalue += this.amplitudes[i] * noise.noise(\n\t\t\t\t\tPerlinNoise.wrap(x * inputF),\n\t\t\t\t\tfixY ? -noise.yo : PerlinNoise.wrap(y * inputF),\n\t\t\t\t\tPerlinNoise.wrap(z * inputF),\n\t\t\t\t\ta * inputF,\n\t\t\t\t\tb * inputF\n\t\t\t\t) * valueF\n\t\t\t}\n\t\t\tinputF *= 2\n\t\t\tvalueF /= 2\n\t\t}\n\t\treturn value\n\t}\n\n\tpublic getOctaveNoise(i: number) {\n\t\treturn this.noiseLevels[this.noiseLevels.length - 1 - i]\n\t}\n\n\tpublic static wrap(value: number) {\n\t\treturn value - Math.floor(value / 3.3554432E7 + 0.5) * 3.3554432E7\n\t}\n}\n","import { PerlinNoise } from './PerlinNoise'\n\nexport class NormalNoise {\n\tprivate readonly valueFactor: number\n\tprivate readonly first: PerlinNoise\n\tprivate readonly second: PerlinNoise\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.first = new PerlinNoise(seed, firstOctave, amplitudes)\n\t\tthis.second = new PerlinNoise(seed + 'a', firstOctave, amplitudes)\n\n\t\tlet min = +Infinity\n\t\tlet max = -Infinity\n\t\tfor (let i = 0; i < amplitudes.length; i += 1) {\n\t\t\tif (amplitudes[i] !== 0) {\n\t\t\t\tmin = Math.min(min, i)\n\t\t\t\tmax = Math.max(max, i)\n\t\t\t}\n\t\t}\n\n\t\tconst expectedDeviation = 0.1 * (1 + 1 / (max - min + 1))\n\t\tthis.valueFactor = (1/6) / expectedDeviation\n\t}\n\n\tgetValue(x: number, y: number, z: number) {\n\t\tconst x2 = x * 1.0181268882175227\n\t\tconst y2 = y * 1.0181268882175227\n\t\tconst z2 = z * 1.0181268882175227\n\t\treturn (this.first.getValue(x, y, z) + this.second.getValue(x2, y2, z2)) * this.valueFactor\n\t}\n}\n","import { stringToColor } from '../Utils'\nimport { NormalNoise } from './noise/NormalNoise'\n\nexport type BiomeColors =Record\nexport type BiomeSourceOptions = {\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: string,\n}\n\nexport const NoiseMaps = ['altitude', 'temperature', 'humidity', 'weirdness']\n\nexport function biomeSource(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise': return multiNoise(state, img, options)\n\t\tcase 'fixed': return fixed(state, img, options)\n\t\tcase 'checkerboard': return checkerboard(state, img, options)\n\t}\n}\n\nfunction fixed(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst data = img.data\n\tconst color = getBiomeColor(state.biome, options.biomeColors)\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction checkerboard(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes?.forEach((b: string) => {\n\t\tbiomeColorCache[b] = getBiomeColor(b, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tconst shift = (state.scale ?? 2) + 2\n\tconst numBiomes = state.biomes?.length ?? 0\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\tconst b = state.biomes?.[j]\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction multiNoise(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst noise = NoiseMaps.map((id, i) => {\n\t\tconst config = state[`${id}_noise`]\n\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t})\n\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes.forEach((b: any) => {\n\t\tbiomeColorCache[b.biome] = getBiomeColor(b.biome, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst b = closestBiome(noise, state.biomes, xx, yy)\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport function getBiome(state: any, x: number, y: number, options: BiomeSourceOptions): string | undefined {\n\tconst [xx, yy] = toWorld([x, y], options)\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise':\n\t\t\tconst noise = NoiseMaps.map((id, i) => {\n\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t\t\t})\n\t\t\treturn closestBiome(noise, state.biomes, xx, yy)\n\t\tcase 'fixed': return state.biome\n\t\tcase 'checkerboard':\n\t\t\tconst shift = (state.scale ?? 2) + 2\n\t\t\tconst numBiomes = state.biomes?.length ?? 0\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\treturn state.biomes?.[j]\n\t}\n\treturn undefined\n}\n\nexport function getBiomeColor(biome: string, biomeColors: BiomeColors) {\n\tif (!biome) {\n\t\treturn [128, 128, 128]\n\t}\n\tconst color = biomeColors[biome] ?? VanillaColors[biome]\n\tif (color === undefined) {\n\t\treturn stringToColor(biome)\n\t}\n\treturn color\n}\n\nfunction toWorld([x, y]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst yy = (y - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, yy]\n}\n\nfunction closestBiome(noise: NormalNoise[], biomes: any[], x: number, y: number): string {\n\tif (!Array.isArray(biomes) || biomes.length === 0) return ''\n\tconst n = noise.map(n => n.getValue(x, y, 0))\n\tlet minDist = Infinity\n\tlet minBiome = ''\n\tfor (const b of biomes) {\n\t\tconst dist = fitness(b.parameters, {altitude: n[0], temperature: n[1], humidity: n[2], weirdness: n[3], offset: 0})\n\t\tif (dist < minDist) {\n\t\t\tminDist = dist\n\t\t\tminBiome = b.biome\n\t\t}\n\t}\n\treturn minBiome\n}\n\nfunction fitness(a: any, b: any) {\n\treturn (a.altitude - b.altitude) * (a.altitude - b.altitude) + (a.temperature - b.temperature) * (a.temperature - b.temperature) + (a.humidity - b.humidity) * (a.humidity - b.humidity) + (a.weirdness - b.weirdness) * (a.weirdness - b.weirdness) + (a.offset - b.offset) * (a.offset - b.offset)\n}\n\nconst VanillaColors: Record = {\n\t'minecraft:badlands': [217,69,21],\n\t'minecraft:badlands_plateau': [202,140,101],\n\t'minecraft:bamboo_jungle': [118,142,20],\n\t'minecraft:bamboo_jungle_hills': [59,71,10],\n\t'minecraft:basalt_deltas': [64,54,54],\n\t'minecraft:beach': [250,222,85],\n\t'minecraft:birch_forest': [48,116,68],\n\t'minecraft:birch_forest_hills': [31,95,50],\n\t'minecraft:cold_ocean': [32,32,112],\n\t'minecraft:crimson_forest': [221,8,8],\n\t'minecraft:dark_forest': [64,81,26],\n\t'minecraft:dark_forest_hills': [104,121,66],\n\t'minecraft:deep_cold_ocean': [32,32,56],\n\t'minecraft:deep_frozen_ocean': [64,64,144],\n\t'minecraft:deep_lukewarm_ocean': [0,0,64],\n\t'minecraft:deep_ocean': [0,0,48],\n\t'minecraft:deep_warm_ocean': [0,0,80],\n\t'minecraft:desert': [250,148,24],\n\t'minecraft:desert_hills': [210,95,18],\n\t'minecraft:desert_lakes': [255,188,64],\n\t'minecraft:end_barrens': [128,128,255],\n\t'minecraft:end_highlands': [128,128,255],\n\t'minecraft:end_midlands': [128,128,255],\n\t'minecraft:eroded_badlands': [255,109,61],\n\t'minecraft:flower_forest': [45,142,73],\n\t'minecraft:forest': [5,102,33],\n\t'minecraft:frozen_ocean': [112,112,214],\n\t'minecraft:frozen_river': [160,160,255],\n\t'minecraft:giant_spruce_taiga': [129,142,121],\n\t'minecraft:giant_spruce_taiga_hills': [109,119,102],\n\t'minecraft:giant_tree_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:ice_spikes': [180,220,220],\n\t'minecraft:jungle': [83,123,9],\n\t'minecraft:jungle_edge': [98,139,23],\n\t'minecraft:jungle_hills': [44,66,5],\n\t'minecraft:lukewarm_ocean': [0,0,144],\n\t'minecraft:modified_badlands_plateau': [242,180,141],\n\t'minecraft:modified_gravelly_mountains': [120,152,120],\n\t'minecraft:modified_jungle': [123,163,49],\n\t'minecraft:modified_jungle_edge': [138,179,63],\n\t'minecraft:modified_wooded_badlands_plateau': [216,191,141],\n\t'minecraft:mountain_edge': [114,120,154],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:mushroom_field_shore': [160,0,255],\n\t'minecraft:mushroom_fields': [255,0,255],\n\t'minecraft:nether_wastes': [191,59,59],\n\t'minecraft:ocean': [0,0,112],\n\t'minecraft:plains': [141,179,96],\n\t'minecraft:river': [0,0,255],\n\t'minecraft:savanna': [189,178,95],\n\t'minecraft:savanna_plateau': [167,157,100],\n\t'minecraft:shattered_savanna': [229,218,135],\n\t'minecraft:shattered_savanna_plateau': [207,197,140],\n\t'minecraft:small_end_islands': [128,128,255],\n\t'minecraft:snowy_beach': [250,240,192],\n\t'minecraft:snowy_mountains': [160,160,160],\n\t'minecraft:snowy_taiga': [49,85,74],\n\t'minecraft:snowy_taiga_hills': [36,63,54],\n\t'minecraft:snowy_taiga_mountains': [89,125,114],\n\t'minecraft:snowy_tundra': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:sunflower_plains': [181,219,136],\n\t'minecraft:swamp': [7,249,178],\n\t'minecraft:swamp_hills': [47,255,218],\n\t'minecraft:taiga': [11,102,89],\n\t'minecraft:taiga_hills': [22,57,51],\n\t'minecraft:taiga_mountains': [51,142,129],\n\t'minecraft:tall_birch_forest': [88,156,108],\n\t'minecraft:tall_birch_hills': [71,135,90],\n\t'minecraft:the_end': [128,128,255],\n\t'minecraft:the_void': [0,0,0],\n\t'minecraft:warm_ocean': [0,0,172],\n\t'minecraft:warped_forest': [73,144,123],\n\t'minecraft:wooded_badlands_plateau': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n}\n","import seedrandom from 'seedrandom'\nimport type { VersionId } from '../Schemas'\nimport { clamp, stringToColor } from '../Utils'\nimport { PerlinNoise } from './noise/PerlinNoise'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: seedrandom.prng,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n}\n\nconst terrain = [50, 50, 51, 51, 52, 52, 53, 54, 56, 57, 57, 58, 58, 59, 60, 60, 60, 59, 59, 59, 60, 61, 61, 62, 63, 63, 64, 64, 64, 65, 65, 66, 66, 65, 65, 66, 66, 67, 67, 67, 68, 69, 71, 73, 74, 76, 79, 80, 81, 81, 82, 83, 83, 82, 82, 81, 81, 80, 80, 80, 81, 81, 82, 82] \n\nconst featureColors = [\n\t[255, 77, 54], // red\n\t[59, 118, 255], // blue\n\t[91, 207, 25], // green\n\t[217, 32, 245], // magenta\n\t[255, 209, 41], // yellow\n\t[52, 204, 209], // cyan\n]\n\nexport type DecoratorOptions = {\n\tsize: [number, number, number],\n\tseed: string,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = seedrandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(options.seed + 'frwynup', 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t}\n\n\tfor (let x = 0; x < options.size[0] / 16; x += 1) {\n\t\tfor (let z = 0; z < options.size[2] / 16; z += 1) {\n\t\t\tgetPlacements([x * 16, 0, z * 16], state, ctx)\n\t\t}\n\t}\n\n\tconst data = img.data\n\timg.data.fill(255)\n\n\tfor (const [pos, feature] of ctx.placements) {\n\t\tif (pos[0] < 0 || pos[1] < 0 || pos[2] < 0 || pos[0] >= options.size[0] || pos[1] >= options.size[1] || pos[2] >= options.size[2]) continue\n\t\tconst i = (pos[2] * (img.width * 4)) + (pos[0] * 4)\n\t\tconst color = feature < featureColors.length ? featureColors[feature] : stringToColor(ctx.features[feature])\n\t\tdata[i] = clamp(50, 205, color[0])\n\t\tdata[i + 1] = clamp(50, 205, color[1])\n\t\tdata[i + 2] = clamp(50, 205, color[2])\n\t\tdata[i + 3] = 255\n\t}\n\n\tfor (let x = 0; x < options.size[0]; x += 1) {\n\t\tfor (let y = 0; y < options.size[2]; y += 1) {\n\t\t\tif ((Math.floor(x / 16) + Math.floor(y / 16)) % 2 === 0) continue\n\t\t\tconst i = (y * (img.width * 4)) + (x * 4)\n\t\t\tfor (let j = 0; j < 3; j += 1) {\n\t\t\t\tdata[i + j] = 0.85 * data[i + j] \n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction normalize(id: string) {\n\treturn id.startsWith('minecraft:') ? id.slice(10) : id\n}\n\nfunction decorateY(pos: BlockPos, y: number): BlockPos[] {\n\treturn [[ pos[0], y, pos[2] ]]\n}\n\nfunction nextInt(max: number, ctx: PlacementContext): number {\n\treturn Math.floor(ctx.random() * max)\n}\n\nfunction sampleInt(value: any, ctx: PlacementContext): number {\n\tif (typeof value === 'number') {\n\t\treturn value\n\t} else if (value.base) {\n\t\treturn value.base ?? 1 + nextInt(1 + (value.spread ?? 0), ctx)\n\t} else {\n\t\tswitch (normalize(value.type)) {\n\t\t\tcase 'constant': return value.value\n\t\t\tcase 'uniform': return value.value.min_inclusive + nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + nextInt(nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx) + 1, ctx)\n\t\t\tcase 'clamped': return Math.max(value.value.min_inclusive, Math.min(value.value.max_inclusive, sampleInt(value.value.source, ctx)))\n\t\t}\n\t\treturn 1\n\t}\n}\n\nfunction useFeature(s: string, ctx: PlacementContext) {\n\tconst i = ctx.features.indexOf(s)\n\tif (i != -1) return i\n\tctx.features.push(s)\n\treturn ctx.features.length - 1\n}\n\nfunction getPlacements(pos: BlockPos, feature: any, ctx: PlacementContext): void {\n\tif (typeof feature === 'string') {\n\t\tctx.placements.push([pos, useFeature(feature, ctx)])\n\t\treturn\n\t}\n\tconst type = normalize(feature?.type ?? 'no_op')\n\tconst featureFn = Features[type]\n\tif (featureFn) {\n\t\tfeatureFn(feature.config, pos, ctx)\n\t} else {\n\t\tctx.placements.push([pos, useFeature(JSON.stringify(feature), ctx)])\n\t}\n}\n\nfunction getPositions(pos: BlockPos, decorator: any, ctx: PlacementContext): BlockPos[] {\n\tconst type = normalize(decorator?.type ?? 'nope')\n\tconst decoratorFn = Decorators[type]\n\tif (!decoratorFn) {\n\t\treturn [pos]\n\t}\n\treturn decoratorFn(decorator?.config, pos, ctx)\n}\n\nconst Features: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => void,\n} = {\n\tdecorated: (config, pos, ctx) => {\n\t\tconst positions = getPositions(pos, config?.decorator, ctx)\n\t\tpositions.forEach(p => getPlacements(p, config?.feature, ctx))\n\t},\n\trandom_boolean_selector: (config, pos, ctx) => {\n\t\tconst feature = ctx.random() < 0.5 ? config?.feature_true : config?.feature_false\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n\trandom_selector: (config, pos, ctx) => {\n\t\tfor (const f of config?.features ?? []) {\n\t\t\tif (ctx.random() < (f?.chance ?? 0)) {\n\t\t\t\tgetPlacements(pos, f.feature, ctx)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tgetPlacements(pos, config?.default, ctx)\n\t},\n\tsimple_random_selector: (config, pos, ctx) => {\n\t\tconst feature = config?.features?.[nextInt(config?.features?.length ?? 0, ctx)]\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n}\n\nconst Decorators: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tchance: (config, pos, ctx) => {\n\t\treturn ctx.random() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.random() < config.extra_chance ?? 0){\n\t\t\tcount += config.extra_count ?? 0\n\t\t}\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_multilayer: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + nextInt(16, ctx),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + nextInt(16, ctx),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < config.noise_level ? config.below_noise : config.above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_noise_biased: (config, pos, ctx) => {\n\t\tconst factor = Math.max(1, config.noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (config.noise_offset ?? 0)) * config.noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tdark_oak_tree: (_config, pos, ctx) => {\n\t\treturn [...new Array(16)].map((_, i) => {\n\t\t\tconst x = Math.floor(i / 4) * 4 + 1 + nextInt(3, ctx) + pos[0]\n\t\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, x)])\n\t\t\tconst z = Math.floor(i % 4) * 4 + 1 + nextInt(3, ctx) + pos[2]\n\t\t\treturn [x, y, z]\n\t\t})\n\t},\n\tdecorated: (config, pos, ctx) => {\n\t\treturn getPositions(pos, config?.outer, ctx).flatMap(p => {\n\t\t\treturn getPositions(p, config?.inner, ctx)\n\t\t})\n\t},\n\tdepth_average: (config, pos, ctx) => {\n\t\tconst y = nextInt(config?.spread ?? 0, ctx) + nextInt(config?.spread ?? 0, ctx) - (config.spread ?? 0) + (config?.baseline ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\temerald_ore: (_config, pos, ctx) => {\n\t\tconst count = 3 + nextInt(6, ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t4 + nextInt(28, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + nextInt(nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = nextInt(1 + nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\theightmap: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\theightmap_spread_double: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, nextInt(y * 2, ctx))\n\t},\n\theightmap_world_surface: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\ticeberg: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + 4 + nextInt(8, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + nextInt(8, ctx),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (nextInt((config.chance ?? 1) / 10, ctx) === 0) {\n\t\t\tconst y = nextInt(nextInt(256 - 8, ctx) + 8, ctx)\n\t\t\tif (y < ctx.seaLevel || nextInt((config?.chance ?? 1) / 8, ctx) == 0) {\n\t\t\t\tconst x = nextInt(16, ctx) + pos[0]\n\t\t\t\tconst z = nextInt(16, ctx) + pos[2]\n\t\t\t\treturn [[x, y, z]]\n\t\t\t}\n\t\t}\n\t\treturn []\n\t},\n\tnope: (_config, pos) => {\n\t\treturn [pos]\n\t},\n\trange: (config, pos, ctx) => {\n\t\tconst y = nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\ttop_solid_heightmap: (_config, pos) => {\n\t\tconst y = terrain[clamp(0, 63, pos[0])]\n\t\treturn decorateY(pos, y)\n\t},\n\tmagma: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t]]\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (nextInt(config.chance ?? 1, ctx) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t\tnextInt(256, ctx),\n\t\t\t\tpos[2] + nextInt(16, ctx),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n","import { clampedLerp, lerp2 } from '../../Utils'\nimport { PerlinNoise } from './PerlinNoise'\n\nexport class NoiseChunkGenerator {\n\tprivate readonly minLimitPerlinNoise: PerlinNoise\n\tprivate readonly maxLimitPerlinNoise: PerlinNoise\n\tprivate readonly mainPerlinNoise: PerlinNoise\n\tprivate readonly depthNoise: PerlinNoise\n\n\tprivate settings: any = {}\n\tprivate chunkWidth: number = 4\n\tprivate chunkHeight: number = 4\n\tprivate chunkCountY: number = 32\n\tprivate biomeDepth: number = 0.1\n\tprivate biomeScale: number = 0.2\n\n\tprivate noiseColumnCache: (number[] | null)[] = []\n\tprivate xOffset: number = 0\n\n\tconstructor(seed: string) {\n\t\tthis.minLimitPerlinNoise = PerlinNoise.fromRange(seed + 'djfqnqd', -15, 0)\n\t\tthis.maxLimitPerlinNoise = PerlinNoise.fromRange(seed + 'gowdnqs', -15, 0)\n\t\tthis.mainPerlinNoise = PerlinNoise.fromRange(seed + 'afiwmco', -7, 0)\n\t\tthis.depthNoise = PerlinNoise.fromRange(seed + 'qphnmeo', -15, 0)\n\t}\n\n\tpublic reset(settings: any, depth: number, scale: number, xOffset: number, width: number) {\n\t\tthis.settings = settings\n\t\tthis.chunkWidth = settings.size_horizontal * 4\n\t\tthis.chunkHeight = settings.size_vertical * 4\n\t\tthis.chunkCountY = Math.floor(settings.height / this.chunkHeight)\n\n\t\tif (settings.amplified && depth > 0) {\n\t\t\tdepth = 1 + depth * 2\n\t\t\tscale = 1 + scale * 4\n\t\t}\n\t\tthis.biomeDepth = 0.265625 * (depth * 0.5 - 0.125)\n\t\tthis.biomeScale = 96.0 / (scale * 0.9 + 0.1)\n\n\t\tthis.noiseColumnCache = Array(width).fill(null)\n\t\tthis.xOffset = xOffset\n\t}\n \n\tpublic iterateNoiseColumn(x: number): number[] {\n\t\tconst data = Array(this.chunkCountY * this.chunkHeight)\n\t\tconst cx = Math.floor(x / this.chunkWidth)\n\t\tconst ox = Math.floor(x % this.chunkWidth) / this.chunkWidth\n\t\tconst noise1 = this.fillNoiseColumn(cx)\n\t\tconst noise2 = this.fillNoiseColumn(cx + 1)\n\n\t\tfor (let y = this.chunkCountY - 1; y >= 0; y -= 1) {\n\t\t\tfor (let yy = this.chunkHeight; yy >= 0; yy -= 1) {\n\t\t\t\tconst oy = yy / this.chunkHeight\n\t\t\t\tconst i = y * this.chunkHeight + yy\n\t\t\t\tdata[i] = lerp2(oy, ox, noise1[y], noise1[y+1], noise2[y], noise2[y+1])\n\t\t\t}\n\t\t}\n\t\treturn data\n\t}\n\n\tprivate fillNoiseColumn(x: number): number[] {\n\t\tconst cachedColumn = this.noiseColumnCache[x - this.xOffset]\n\t\tif (cachedColumn) return cachedColumn\n\n\t\tconst data = Array(this.chunkCountY + 1)\n\n\t\tconst xzScale = 684.412 * this.settings.sampling.xz_scale\n\t\tconst yScale = 684.412 * this.settings.sampling.y_scale\n\t\tconst xzFactor = xzScale / this.settings.sampling.xz_factor\n\t\tconst yFactor = yScale / this.settings.sampling.y_factor\n\t\tconst randomDensity = this.settings.random_density_offset ? this.getRandomDensity(x) : 0\n\n\t\tfor (let y = 0; y <= this.chunkCountY; y += 1) {\n\t\t\tlet noise = this.sampleAndClampNoise(x, y, this.mainPerlinNoise.getOctaveNoise(0).zo, xzScale, yScale, xzFactor, yFactor)\n\t\t\tconst yOffset = 1 - y * 2 / this.chunkCountY + randomDensity\n\t\t\tconst density = yOffset * this.settings.density_factor + this.settings.density_offset\n\t\t\tconst falloff = (density + this.biomeDepth) * this.biomeScale\n\t\t\tnoise += falloff * (falloff > 0 ? 4 : 1)\n\n\t\t\tif (this.settings.top_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.top_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(this.chunkCountY - y - (this.settings.top_slide.offset)) / (this.settings.top_slide.size)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.settings.bottom_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.bottom_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(y - (this.settings.bottom_slide.offset)) / (this.settings.bottom_slide.size)\n\t\t\t\t)\n\t\t\t}\n\t\t\tdata[y] = noise\n\t\t}\n\n\t\tthis.noiseColumnCache[x - this.xOffset] = data\n\t\treturn data\n\t}\n\n\tprivate getRandomDensity(x: number): number {\n\t\tconst noise = this.depthNoise.getValue(x * 200, 10, this.depthNoise.getOctaveNoise(0).zo, 1, 0, true)\n\t\tconst a = (noise < 0) ? -noise * 0.3 : noise\n\t\tconst b = a * 24.575625 - 2\n\t\treturn (b < 0) ? b * 0.009486607142857142 : Math.min(b, 1) * 0.006640625\n\t}\n\n\tprivate sampleAndClampNoise(x: number, y: number, z: number, xzScale: number, yScale: number, xzFactor: number, yFactor: number): number {\n\t\tlet a = 0\n\t\tlet b = 0\n\t\tlet c = 0\n\t\tlet d = 1\n\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst x2 = PerlinNoise.wrap(x * xzScale * d)\n\t\t\tconst y2 = PerlinNoise.wrap(y * yScale * d)\n\t\t\tconst z2 = PerlinNoise.wrap(z * xzScale * d)\n\t\t\tconst e = yScale * d\n\n\t\t\tconst minLimitNoise = this.minLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (minLimitNoise) {\n\t\t\t\ta += minLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tconst maxLimitNoise = this.maxLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (maxLimitNoise) {\n\t\t\t\tb += maxLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tif (i < 8) {\n\t\t\t\tconst mainNoise = this.mainPerlinNoise.getOctaveNoise(i)\n\t\t\t\tif (mainNoise) {\n\t\t\t\t\tc += mainNoise.noise(\n\t\t\t\t\t\tPerlinNoise.wrap(x * xzFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(y * yFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(z * xzFactor * d),\n\t\t\t\t\t\tyFactor * d,\n\t\t\t\t\t\ty * yFactor * d \n\t\t\t\t\t) / d\n\t\t\t\t}\n\t\t\t}\n\n\t\t\td /= 2\n\t\t}\n\n\t\treturn clampedLerp(a / 512, b / 512, (c / 10 + 1) / 2)\n\t}\n}\n","import { NoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiomeScale: number,\n\tbiomeDepth: number,\n\toffset: number,\n\twidth: number,\n\tseed: string,\n}\n\nexport function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tconst generator = new NoiseChunkGenerator(options.seed)\n\tgenerator.reset(state, options.biomeDepth, options.biomeScale, options.offset, 200)\n\tconst data = img.data\n\tconst row = img.width * 4\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tconst noise = generator.iterateNoiseColumn(x - options.offset).reverse()\n\t\tfor (let y = 0; y < state.height; y += 1) {\n\t\t\tconst i = y * row + x * 4\n\t\t\tconst color = getColor(noise, y)\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction getColor(noise: number[], y: number): number {\n\tif (noise[y] > 0) {\n\t\treturn 0\n\t}\n\tif (noise[y+1] > 0) {\n\t\treturn 150\n\t}\n\treturn 255\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport type { FunctionalComponent } from 'preact'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport type { VersionId } from '../Schemas'\nimport { BiomeSourcePreview, DecoratorPreview, NoiseSettingsPreview } from './previews'\n\nexport const HasPreview = ['dimension', 'worldgen/noise-settings', 'worldgen/feature']\n\nexport const Previews: {\n\tid: string,\n\tgenerator: string,\n\tpath: Path,\n\tpredicate: (model: DataModel) => boolean,\n\tpreview: FunctionalComponent<{\n\t\tlang: string,\n\t\tmodel: DataModel,\n\t\tdata: any,\n\t\tversion: VersionId,\n\t\tshown: boolean,\n\t}>,\n}[] = [\n\t{\n\t\tid: 'biome-noise',\n\t\tgenerator: 'dimension',\n\t\tpath: new Path(['generator', 'biome_source']),\n\t\tpredicate: model => model.get(new Path(['generator', 'type'])).endsWith('noise'),\n\t\tpreview: BiomeSourcePreview,\n\t},\n\t{\n\t\tid: 'noise-settings',\n\t\tgenerator: 'worldgen/noise-settings',\n\t\tpath: new Path(['noise']),\n\t\tpredicate: () => true,\n\t\tpreview: NoiseSettingsPreview,\n\t},\n\t{\n\t\tid: 'decorator',\n\t\tgenerator: 'worldgen/feature',\n\t\tpath: new Path([]),\n\t\tpredicate: () => true,\n\t\tpreview: DecoratorPreview,\n\t},\n]\n\ntype PreviewProps = {\n\tlang: string,\n\tmodel: DataModel | null,\n\tversion: VersionId,\n\tid: string,\n\tshown: boolean,\n\tonError: (message: string) => unknown,\n}\nexport function PreviewPanel({ lang, model, version, id, shown }: PreviewProps) {\n\tconst [, setCount] = useState(0)\n\n\tuseModel(model, () => {\n\t\tsetCount(count => count + 1)\n\t})\n\n\treturn <>\n\t\t{Previews.filter(p => p.generator === id).map(p => {\n\t\t\tconst data = model?.get(p.path)\n\t\t\tif (!model || data === undefined || !p.predicate(model)) {\n\t\t\t\treturn <>\n\t\t\t}\n\t\t\treturn p.preview({ lang, model: model!, data, version, shown })\n\t\t})}\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { useOnDrag, useOnHover } from '../../hooks'\nimport { biomeSource, getBiome } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype BiomeSourceProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const BiomeSourcePreview = ({ data, shown }: BiomeSourceProps) => {\n\tconst [scale, setScale] = useState(2)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [focused, setFocused] = useState(undefined)\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst redrawTimeout = useRef(undefined)\n\tconst redraw = useRef()\n\tconst refocus = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = (res = 4) => {\n\t\t\tif (type !== 'multi_noise') res = 1\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = 200 / res\n\t\t\tcanvas.current.height = 200 / res\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tbiomeSource(data, img, { biomeColors: {}, offset: offset.current, scale, seed, res })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t\tif (res !== 1) {\n\t\t\t\tclearTimeout(redrawTimeout.current)\n\t\t\t\tredrawTimeout.current = setTimeout(() => redraw.current(1), 150) as any\n\t\t\t}\n\t\t}\n\t\trefocus.current = (x: number, y: number) => {\n\t\t\tconst x2 = x * 200 / canvas.current.clientWidth\n\t\t\tconst y2 = y * 200 / canvas.current.clientHeight\n\t\t\tconst biome = getBiome(data, x2, y2, { biomeColors: {}, offset: offset.current, scale, seed, res: 1 })\n\t\t\tsetFocused(biome)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx, dy) => {\n\t\tconst x = dx * 200 / canvas.current.clientWidth\n\t\tconst y = dy * 200 / canvas.current.clientHeight\n\t\toffset.current = [offset.current[0] + x, offset.current[1] + y]\n\t\tredraw.current()\n\t})\n\n\tuseOnHover(canvas.current, (x, y) => {\n\t\tif (x === undefined || y === undefined) {\n\t\t\tsetFocused(undefined)\n\t\t} else {\n\t\t\trefocus.current(x, y)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] *= scale / newScale\n\t\toffset.current[1] *= scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t{focused && }\n\t\t\t{(type === 'multi_noise' || type === 'checkerboard') && <>\n\t\t\t\t changeScale(scale * 1.5)} />\n\t\t\t\t changeScale(scale / 1.5)} />\n\t\t\t}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t setSeed(hexId())} />}\n\t\t
\n\t\t\n\t\n}\n","import { useEffect } from 'preact/hooks'\n\nexport function useOnHover(element: HTMLElement, hover: (x: number | undefined, y: number | undefined) => unknown) {\n\tif (!element) return\n\n\tconst onMouseMove = (e: MouseEvent) => {\n\t\thover(e.offsetX, e.offsetY)\n\t}\n\tconst onMouseLeave = () => {\n\t\thover(undefined, undefined)\n\t}\n\n\tuseEffect(() => {\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\telement.addEventListener('mouseleave', onMouseLeave)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\telement.removeEventListener('mouseleave', onMouseLeave)\n\t\t}\n\t}, [element])\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useOnDrag } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { noiseSettings } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype NoiseSettingsProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const NoiseSettingsPreview = ({ lang, data, shown }: NoiseSettingsProps) => {\n\tconst loc = locale.bind(null, lang)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef(0)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tconst size = data.height\n\t\t\tcanvas.current.width = size\n\t\t\tcanvas.current.height = size\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tnoiseSettings(data, img, { biomeDepth, biomeScale, offset: offset.current, width: size, seed })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx) => {\n\t\tconst x = dx * canvas.current.width / canvas.current.clientWidth\n\t\toffset.current = offset.current + x\n\t\tredraw.current()\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, biomeDepth, biomeScale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t\t setBiomeDepth(Number(v))} />\n\t\t\t\t setBiomeScale(Number(v))} />\n\t\t\t\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { decorator } from '../../previews'\nimport type { VersionId } from '../../Schemas'\nimport { hexId } from '../../Utils'\n\ntype DecoratorProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tversion: VersionId,\n\tshown: boolean,\n}\nexport const DecoratorPreview = ({ data, version, shown }: DecoratorProps) => {\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(hexId())\n\n\tconst canvas = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = scale * 16\n\t\t\tcanvas.current.height = scale * 16\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tsetTimeout(() => redraw.current())\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t setScale(Math.min(16, scale + 1))} />\n\t\t\t setScale(Math.max(1, scale - 1))} />\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { Hook } from '@mcschema/core'\nimport { relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../Schemas'\n\nexport type OutputProps = {\n\tblockStates: BlockStateRegistry,\n}\nexport const transformOutput: Hook<[any, OutputProps], any> = {\n\tbase({}, _, value) {\n\t\treturn value\n\t},\n\n\tchoice({ switchNode }, path, value, props) {\n\t\treturn switchNode.hook(this, path, value, props)\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tif (!Array.isArray(value)) return value\n\t\treturn value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj, props)\n\t\t)\n\t},\n\n\tmap({ children, config }, path, value, props) {\n\t\tif (value === undefined) return undefined\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst res: any = {}\n\t\tObject.keys(value).forEach(f => {\n\t\t\tif (blockState) {\n\t\t\t\tif (!Object.keys(blockState.properties).includes(f)) return\n\t\t\t}\n\t\t\tres[f] = children.hook(this, path.push(f), value[f], props)\n\t\t})\n\t\treturn res\n\t},\n\n\tobject({ getActiveFields }, path, value, props) {\n\t\tif (value === undefined || value === null || typeof value !== 'object') {\n\t\t\treturn value\n\t\t}\n\t\tconst res: any = {}\n\t\tconst activeFields = getActiveFields(path)\n\t\tObject.keys(activeFields)\n\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\t.forEach(f => {\n\t\t\t\tres[f] = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t})\n\t\treturn res\n\t},\n}\n","import type { CollectionRegistry } from '@mcschema/core'\nimport config from '../config.json'\nimport type { BlockStateRegistry, VersionId } from './Schemas'\nimport { checkVersion } from './Schemas'\n\n['1.15', '1.16', '1.17'].forEach(v => localStorage.removeItem(`cache_${v}`))\n\nconst CACHE_NAME = 'misode-v1'\n\ntype VersionRef = 'mcdata_master' | 'vanilla_datapack_summary' | 'vanilla_datapack_data'\n\ntype Version = {\n\tid: string,\n\trefs: Partial<{ [key in VersionRef]: string }>,\n\tdynamic?: boolean,\n}\n\ndeclare var __MCDATA_MASTER_HASH__: string\ndeclare var __VANILLA_DATAPACK_SUMMARY_HASH__: string\n\nconst mcdataUrl = 'https://raw.githubusercontent.com/Arcensoth/mcdata'\nconst vanillaDatapackUrl = 'https://raw.githubusercontent.com/SPGoding/vanilla-datapack'\n\nconst refs: {\n\tid: VersionRef,\n\thash: string,\n\turl: string,\n}[] = [\n\t{\n\t\tid: 'mcdata_master',\n\t\thash: __MCDATA_MASTER_HASH__,\n\t\turl: mcdataUrl,\n\t},\n\t{\n\t\tid: 'vanilla_datapack_summary',\n\t\thash: __VANILLA_DATAPACK_SUMMARY_HASH__,\n\t\turl: vanillaDatapackUrl,\n\t},\n]\n\nexport async function fetchData(versionId: string, collectionTarget: CollectionRegistry, blockStateTarget: BlockStateRegistry) {\n\tconst version = config.versions.find(v => v.id === versionId) as Version | undefined\n\tif (!version) {\n\t\tconsole.error(`[fetchData] Unknown version ${version} in ${JSON.stringify(config.versions)}`)\n\t\treturn\n\t}\n\tconsole.debug(`[fetchData] ${JSON.stringify(version)}`)\n\n\tif (version.dynamic) {\n\t\tawait Promise.all(refs\n\t\t\t.filter(r => localStorage.getItem(`cached_${r.id}`) !== r.hash)\n\t\t\t.map(async r => {\n\t\t\t\tconsole.debug(`[deleteMatching] ${r.id} '${localStorage.getItem(`cached_${r.id}`)}' < '${r.hash}' ${r.url}/${version.refs[r.id]}`)\n\t\t\t\tawait deleteMatching(url => url.startsWith(`${r.url}/${version.refs[r.id]}`))\n\t\t\t\tconsole.debug(`[deleteMatching] Done! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t\tlocalStorage.setItem(`cached_${r.id}`, r.hash)\n\t\t\t\tconsole.debug(`[deleteMatching] Set! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t}))\n\t}\n\n\tawait Promise.all([\n\t\tfetchRegistries(version, collectionTarget),\n\t\tfetchBlockStateMap(version, blockStateTarget),\n\t\tfetchDynamicRegistries(version, collectionTarget),\n\t])\n}\n\nasync function fetchRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => !r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, undefined, '1.15')) {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/registries.json`\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: {[id: string]: string[]} = {}\n\t\t\t\tObject.keys(data).forEach(k => {\n\t\t\t\t\tres[k.slice(10)] = Object.keys(data[k].entries)\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id] ?? [])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching registries:', e)\n\t\t}\n\t} else {\n\t\tawait Promise.all(registries.map(async r => {\n\t\t\ttry {\n\t\t\t\tconst url = r.path\n\t\t\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/${r.path}/data.min.json`\n\t\t\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/registries/${r.id}/data.min.json`\n\t\t\t\ttarget.register(r.id, await getData(url, v => v.values))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`Error occurred while fetching registry ${r.id}:`, e)\n\t\t\t}\n\t\t}))\n\t}\n}\n\nasync function fetchBlockStateMap(version: Version, target: BlockStateRegistry) {\n\tconsole.debug(`[fetchBlockStateMap] ${version.id}`)\n\tif (checkVersion(version.id, undefined, '1.16')) {\n\t\tconst url = (checkVersion(version.id, undefined, '1.15'))\n\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/blocks.json`\n\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/data.min.json`\n\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: BlockStateRegistry = {}\n\t\t\t\tObject.keys(data).forEach(b => {\n\t\t\t\t\tres[b] = {\n\t\t\t\t\t\tproperties: data[b].properties,\n\t\t\t\t\t\tdefault: data[b].states.find((s: any) => s.default).properties,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t} else {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t}\n}\n\nasync function fetchDynamicRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchDynamicRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, '1.16')) {\n\t\tconst url = `${vanillaDatapackUrl}/${version.refs.vanilla_datapack_summary}/summary/flattened.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching dynamic registries:', e)\n\t\t}\n\t}\n}\n\nexport async function fetchPreset(version: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${id} ${registry} ${id}`)\n\tconst versionData = config.versions.find(v => v.id === version)!\n\ttry {\n\t\tconst res = await fetch(`${vanillaDatapackUrl}/${versionData.refs.vanilla_datapack_data}/data/minecraft/${registry}/${id}.json`)\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tconsole.warn(`Error occurred while fetching ${registry} preset ${id}:`, e)\n\t}\n}\n\nasync function getData(url: string, fn: (v: any) => T = (v: any) => v): Promise {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[getData] Opened cache ${CACHE_NAME} ${url}`)\n\t\tconst cacheResponse = await cache.match(url)\n \n\t\tif (cacheResponse && cacheResponse.ok) {\n\t\t\tconsole.debug(`[getData] Retrieving cached data ${url}`)\n\t\t\treturn await cacheResponse.json()\n\t\t}\n \n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\tawait cache.put(url, new Response(JSON.stringify(responseData)))\n\t\treturn responseData\n\t} catch (e) {\n\t\tconsole.warn(`[getData] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\treturn responseData\n\t}\n}\n\nasync function deleteMatching(matches: (url: string) => boolean) {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[deleteMatching] Opened cache ${CACHE_NAME}`)\n\t\tconst promises: Promise[] = []\n \n\t\tfor (const request of await cache.keys()) {\n\t\t\tif (matches(request.url)) {\n\t\t\t\tpromises.push(cache.delete(request))\n\t\t\t}\n\t\t}\n\t\tconsole.debug(`[deleteMatching] Removing ${promises.length} cache objects...`)\n\t\tawait Promise.all(promises)\n\t} catch (e) {\n\t\tconsole.warn(`[deleteMatching] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\t}\n}\n","import type { CollectionRegistry, SchemaRegistry } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\nimport * as java15 from '@mcschema/java-1.15'\nimport * as java16 from '@mcschema/java-1.16'\nimport * as java17 from '@mcschema/java-1.17'\nimport config from '../config.json'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17'] as const\nexport type VersionId = typeof VersionIds[number]\n\nexport type BlockStateRegistry = {\n\t[block: string]: {\n\t\tproperties: {\n\t\t\t[key: string]: string[],\n\t\t},\n\t\tdefault: {\n\t\t\t[key: string]: string,\n\t\t},\n\t},\n}\n\ntype VersionData = {\n\tcollections: CollectionRegistry,\n\tschemas: SchemaRegistry,\n\tblockStates: BlockStateRegistry,\n}\nconst Versions: Record> = {}\n\ntype ModelData = {\n\tmodel: DataModel,\n\tversion: VersionId,\n}\nconst Models: Record = {}\n\nconst versionGetter: {\n\t[versionId in VersionId]: {\n\t\tgetCollections: () => CollectionRegistry,\n\t\tgetSchemas: (collections: CollectionRegistry) => SchemaRegistry,\n\t}\n} = {\n\t1.15: java15,\n\t1.16: java16,\n\t1.17: java17,\n}\n\nasync function getVersion(id: VersionId): Promise {\n\tif (!Versions[id]) {\n\t\tVersions[id] = (async () => {\n\t\t\ttry {\n\t\t\t\tconst collections = versionGetter[id].getCollections()\n\t\t\t\tconst blockStates: BlockStateRegistry = {}\n\t\t\t\tawait fetchData(id, collections, blockStates)\n\t\t\t\tconst schemas = versionGetter[id].getSchemas(collections)\n\t\t\t\tVersions[id] = { collections, schemas, blockStates }\n\t\t\t\treturn Versions[id]\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`Cannot get version \"${id}\": ${e.message}`)\n\t\t\t}\n\t\t})()\n\t\treturn Versions[id]\n\t}\n\treturn Versions[id]\n}\n\nexport async function getModel(version: VersionId, id: string): Promise {\n\tif (!Models[id] || Models[id].version !== version) {\n\t\tconst versionData = await getVersion(version)\n\t\tconst schemaName = config.models.find(m => m.id === id)?.schema\n\t\tif (!schemaName) {\n\t\t\tthrow new Error(`Cannot find model ${id}`)\n\t\t}\n\t\ttry {\n\t\t\tconst schema = versionData.schemas.get(schemaName)\n\t\t\tconst model = new DataModel(schema)\n\t\t\tif (Models[id]) {\n\t\t\t\tmodel.reset(Models[id].model.data, false)\n\t\t\t} else {\n\t\t\t\tmodel.validate(true)\n\t\t\t\tmodel.history = [JSON.stringify(model.data)]\n\t\t\t}\n\t\t\tModels[id] = { model, version }\n\t\t} catch (e) {\n\t\t\tthrow new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${e.message}`)\n\t\t}\n\t}\n\treturn Models[id].model\n}\n\nexport async function getCollections(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.collections\n}\n\nexport async function getBlockStates(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.blockStates\n}\n\nexport function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) {\n\tconst version = config.versions.findIndex(v => v.id === versionId)\n\tconst minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0\n\tconst maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1\n\treturn minVersion <= version && version <= maxVersion\n}\n","import type { VersionId } from './Schemas'\nimport { VersionIds } from './Schemas'\n\nexport namespace Store {\n\texport const ID_LANGUAGE = 'language'\n\texport const ID_THEME = 'theme'\n\texport const ID_VERSION = 'schema_version'\n\texport const ID_INDENT = 'indentation'\n\n\texport function getLanguage() {\n\t\treturn localStorage.getItem(ID_LANGUAGE) ?? 'en'\n\t}\n\n\texport function getTheme() {\n\t\treturn localStorage.getItem(ID_THEME) ?? 'dark'\n\t}\n\n\texport function getVersion(): VersionId {\n\t\tconst version = localStorage.getItem(ID_VERSION)\n\t\tif (version && VersionIds.includes(version as VersionId)) {\n\t\t\treturn version as VersionId\n\t\t}\n\t\treturn '1.17'\n\t}\n\n\texport function getIndent() {\n\t\treturn localStorage.getItem(ID_INDENT) ?? '2_spaces'\n\t}\n\n\texport function setLanguage(language: string | undefined) {\n\t\tif (language) localStorage.setItem(ID_LANGUAGE, language)\n\t}\n\n\texport function setTheme(theme: string | undefined) {\n\t\tif (theme) localStorage.setItem(ID_THEME, theme)\n\t}\n\n\texport function setVersion(version: VersionId | undefined) {\n\t\tif (version) localStorage.setItem(ID_VERSION, version)\n\t}\n\n\texport function setIndent(indent: string) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnMenu } from '.'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { transformOutput } from '../schema/transformOutput'\nimport type { BlockStateRegistry } from '../Schemas'\nimport { Store } from '../Store'\n\nconst INDENT: Record = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n}\n\ntype SourcePanelProps = {\n\tlang: string,\n\tname: string,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tdoCopy?: number,\n\tdoDownload?: number,\n\tdoImport?: number,\n\tonError: (message: string) => unknown,\n}\nexport function SourcePanel({ lang, name, model, blockStates, doCopy, doDownload, doImport, onError }: SourcePanelProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst source = useRef(null)\n\tconst download = useRef(null)\n\tconst retransform = useRef()\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst props = { blockStates: blockStates ?? {} }\n\t\t\t\tconst data = model.schema.hook(transformOutput, new ModelPath(model), model.data, props)\n\t\t\t\tsource.current.value = JSON.stringify(data, null, INDENT[indent]) + '\\n'\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error getting JSON output: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\tsource.current.value = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tretransform.current()\n\t})\n\n\tuseEffect(() => {\n\t\tretransform.current()\n\t}, [indent])\n\n\tconst onImport = () => {\n\t\ttry {\n\t\t\tconst data = JSON.parse(source.current.value)\n\t\t\tmodel?.reset(data, false)\n\t\t} catch (e) {\n\t\t\t// TODO\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (doCopy && source.current) {\n\t\t\tsource.current.select()\n\t\t\tdocument.execCommand('copy')\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && source.current && download.current) {\n\t\t\tconst content = encodeURIComponent(source.current.value)\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.json`)\n\t\t\tdownload.current.click()\n\t\t}\n\t}, [doDownload])\n\n\tuseEffect(() => {\n\t\tif (doImport && source.current) {\n\t\t\tsource.current.value = ''\n\t\t\tsource.current.select()\n\t\t}\n\t}, [doImport])\n\n\tconst changeIndent = (value: string) => {\n\t\tStore.setIndent(value)\n\t\tsetIndent(value)\n\t}\n\n\treturn <> \n\t\t
\n\t\t\t\n\t\t\t\t{Object.entries(INDENT).map(([key]) =>\n\t\t\t\t\t changeIndent(key)}/>\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t\t\n\t\t\n\t\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tlink: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, link, icon, children }: ToolCardProps) {\n\treturn \n\t\t{icon && Icons[icon]}\n\t\t
\n\t\t\t

{title}

\n\t\t\t{children}\n\t\t
\n\t
\n}\n","import { hexId } from '../Utils'\n\nexport class Mounter {\n\tprivate registry: { [id: string]: (el: Element) => void } = {}\n\n\tregister(callback: (el: Element) => void): string {\n\t\tconst id = hexId()\n\t\tthis.registry[id] = callback\n\t\treturn id\n\t}\n\n\ton(type: string, callback: (el: Element) => void): string {\n\t\treturn this.register(el => {\n\t\t\tel.addEventListener(type, evt => {\n\t\t\t\tcallback(el)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t}\n\n\tonChange(callback: (el: Element) => void): string {\n\t\treturn this.on('change', callback)\n\t}\n\n\tonClick(callback: (el: Element) => void): string {\n\t\treturn this.on('click', callback)\n\t}\n\n\tmounted(el: Element): void {\n\t\tel.querySelectorAll('[data-id]').forEach(el => {\n\t\t\tconst id = el.getAttribute('data-id')!\n\t\t\tthis.registry[id]?.(el)\n\t\t})\n\t\tthis.registry = {}\n\t}\n}\n","export const Octicon = {\n\tclippy: '',\n\tinfo: '',\n\tissue_opened: '',\n\tplus_circle: '',\n\ttrashcan: '',\n}\n","import type { EnumOption, Hook, ValidationOption } from '@mcschema/core'\nimport { DataModel, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { Localize } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { hexId, htmlEncode } from '../Utils'\nimport type { Mounter } from './Mounter'\nimport { Octicon } from './Octicon'\n\nexport type TreeProps = {\n\tloc: Localize,\n\tmounter: Mounter,\n\tversion: VersionId,\n\tblockStates: BlockStateRegistry,\n}\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'carver.type', 'feature.type', 'decorator.type', 'feature.tree.minimum_size.type', 'block_state_provider.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'int_provider.type', 'float_provider.type', 'height_provider.type', 'structure_feature.type', 'surface_builder.type', 'processor.processor_type', 'rule_test.predicate_type', 'pos_rule_test.predicate_type', 'template_element.element_type', 'block_placer.type']\nconst hiddenFields = ['number_provider.type', 'score_provider.type', 'nbt_provider.type', 'int_provider.type', 'float_provider.type', 'height_provider.type']\nconst flattenedFields = ['feature.config', 'decorator.config', 'int_provider.value', 'float_provider.value', 'block_state_provider.simple_state_provider.state', 'block_state_provider.rotated_block_provider.state', 'block_state_provider.weighted_state_provider.entries.entry.data', 'rule_test.block_state', 'structure_feature.config', 'surface_builder.config', 'template_pool.elements.entry.element']\nconst inlineFields = ['loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'feature.type', 'decorator.type', 'block_state_provider.type', 'feature.tree.minimum_size.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'block_placer.type', 'rule_test.predicate_type', 'processor.processor_type', 'template_element.element_type']\n\n/**\n * Secondary model used to remember the keys of a map\n */\nconst keysModel = new DataModel(MapNode(\n\tStringNode(),\n\tStringNode()\n), { historyMax: 0 })\n\n/**\n * Renders the node and handles events to update the model\n * @returns string HTML representation of this node using the given data\n */\nexport const renderHtml: Hook<[any, TreeProps], [string, string, string]> = {\n\tbase() {\n\t\treturn ['', '', '']\n\t},\n\n\tboolean({ node }, path, value, props) {\n\t\tconst onFalse = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === false ? undefined : false)\n\t\t})\n\t\tconst onTrue = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === true ? undefined : true)\n\t\t})\n\t\treturn ['', `${htmlEncode(props.loc('false'))}\n\t\t\t${htmlEncode(props.loc('true'))}`, '']\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, props) {\n\t\tconst choice = switchNode.activeCase(path, true)\n\t\tconst pathWithContext = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst pathWithChoiceContext = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, pathWithContext, value, props)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = choice.type\n\t\t\tel.addEventListener('change', () => {\n\t\t\t\tconst c = choices.find(c => c.type === (el as HTMLSelectElement).value) ?? choice\n\t\t\t\tpath.model.set(path, c.change ? c.change(value) : c.node.default())\n\t\t\t})\n\t\t})\n\t\tconst inject = ``\n\n\t\treturn [prefix, inject + suffix, body]\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [children.default(), ...value])\n\t\t})\n\t\tconst onAddBottom = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [...value, children.default()])\n\t\t})\n\t\tconst suffix = ``\n\n\t\tlet body = ''\n\t\tif (Array.isArray(value)) {\n\t\t\tbody = value.map((childValue, index) => {\n\t\t\t\tconst removeId = props.mounter.onClick(() => path.model.set(path.push(index), undefined))\n\t\t\t\tconst childPath = path.push(index).contextPush('entry')\n\t\t\t\tconst category = children.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = children.hook(this, childPath, childValue, props)\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}).join('')\n\t\t\tif (value.length > 2) {\n\t\t\t\tbody += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, props) {\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), children.default())\n\t\t})\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst keysSchema = blockState?.properties\n\t\t\t? StringNode(null!, { enum: Object.keys(blockState.properties ?? {}) })\n\t\t\t: keys\n\t\tconst keyRendered = keysSchema.hook(this, keyPath, keyPath.get() ?? '', props)\n\t\tconst suffix = keyRendered[1] + ``\n\t\tif (blockState && path.last() === 'Properties') {\n\t\t\tif (typeof value !== 'object') value = {}\n\t\t\tconst properties = Object.entries(blockState.properties)\n\t\t\t\t.map(([key, values]) => [key, StringNode(null!, { enum: values })])\n\t\t\tObject.entries(blockState.properties).forEach(([key, values]) => {\n\t\t\t\tif (typeof value[key] !== 'string') {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.expected_string')\n\t\t\t\t} else if (!values.includes(value[key])) {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.invalid_enum_option', value[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn ObjectNode(Object.fromEntries(properties)).hook(this, path, value, props)\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined) {\n\t\t\tbody = Object.keys(value)\n\t\t\t\t.map(key => {\n\t\t\t\t\tconst onRemove = props.mounter.onClick(() => path.model.set(path.push(key), undefined))\n\t\t\t\t\tconst childPath = path.modelPush(key)\n\t\t\t\t\tconst category = children.category(childPath)\n\t\t\t\t\tconst childrenSchema = blockState\n\t\t\t\t\t\t? StringNode(null!, { enum: blockState.properties[key] ?? [] })\n\t\t\t\t\t\t: children\n\t\t\t\t\tif (blockState?.properties[key] && !blockState.properties[key].includes(value[key])) {\n\t\t\t\t\t\tpath.model.errors.add(childPath, 'error.invalid_enum_option', value[key])\n\t\t\t\t\t}\n\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = childrenSchema.hook(this, childPath, value[key], props)\n\t\t\t\t\treturn `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tnumber({ integer, config }, path, value, { mounter }) {\n\t\tconst onChange = mounter.onChange(el => {\n\t\t\tconst value = (el as HTMLInputElement).value\n\t\t\tconst parsed = config?.color\n\t\t\t\t? parseInt(value.slice(1), 16)\n\t\t\t\t: integer ? parseInt(value) : parseFloat(value)\n\t\t\tpath.model.set(path, parsed)\n\t\t})\n\t\tif (config?.color) {\n\t\t\tconst hex = (value?.toString(16).padStart(6, '0') ?? '000000')\n\t\t\treturn ['', ``, '']\n\t\t}\n\t\treturn ['', ``, '']\n\t},\n\n\tobject({ node, getActiveFields, getChildModelPath }, path, value, props) {\n\t\tlet prefix = ''\n\t\tlet suffix = ''\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tsuffix = ``\n\t\t\t} else {\n\t\t\t\tsuffix = ``\n\t\t\t}\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined && (!(node.optional() && value === undefined))) {\n\t\t\tconst activeFields = getActiveFields(path)\n\t\t\tconst activeKeys = Object.keys(activeFields)\n\t\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\tbody = activeKeys.map(k => {\n\t\t\t\tconst field = activeFields[k]\n\t\t\t\tconst childPath = getChildModelPath(path, k)\n\t\t\t\tconst context = childPath.getContext().join('.')\n\t\t\t\tif (hiddenFields.includes(context)) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst category = field.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = field.hook(this, childPath, value[k], props)\n\t\t\t\tif (cPrefix.length === 0 && cSuffix.length === 0 && cBody.length === 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst isFlattened = field.type(childPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\tprefix += `${error(props.loc, childPath, props.mounter)}${help(props.loc, childPath, props.mounter)}${cPrefix}`\n\t\t\t\t\tsuffix += cSuffix\n\t\t\t\t\treturn isFlattened ? cBody : ''\n\t\t\t\t}\n\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t
`\n\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring({ node, getValues, config }, path, value, props) {\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = value ?? ''\n\t\t\tel.addEventListener('change', evt => {\n\t\t\t\tconst newValue = (el as HTMLSelectElement).value\n\t\t\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t\tlet suffix\n\t\tconst values = getValues()\n\t\tif ((isEnum(config) && !config.additional)\n\t\t\t|| selectRegistries.includes(path.getContext().join('.'))\t) {\n\t\t\tlet context = new Path([])\n\t\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\t\tcontext = context.contextPush(config.enum)\n\t\t\t} else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') {\n\t\t\t\tcontext = context.contextPush(config.params.pool)\n\t\t\t}\n\t\t\tsuffix = ``\n\t\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\t\tconst blockState = props.blockStates?.[relativePath(path, config.params.id).get()]\n\t\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\t\tsuffix = ``\n\t\t} else {\n\t\t\tconst datalistId = hexId()\n\t\t\tsuffix = `\n\t\t\t\t${values.length === 0 ? '' :\n\t\t`\n\t\t\t\t\t\t\t\t${values.map(v =>\n\t\t``}`\n\t\t}\n\t\treturn ['', suffix, '']\n\t},\n}\n\nfunction isEnum(value?: ValidationOption | EnumOption): value is EnumOption {\n\treturn !!(value as any)?.enum\n}\n\nfunction hashString(str: string) {\n\tvar hash = 0, i, chr\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t\thash |= 0\n\t}\n\treturn hash\n}\n\nfunction pathLocale(loc: Localize, path: Path, ...params: string[]) {\n\tconst ctx = path.getContext()\n\tfor (let i = 0; i < ctx.length; i += 1) {\n\t\tconst key = ctx.slice(i).join('.')\n\t\tconst result = loc(key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn htmlEncode(ctx[ctx.length - 1])\n}\n\nfunction error(loc: Localize, path: ModelPath, mounter: Mounter) {\n\tconst e = path.model.errors.get(path, true)\n\tif (e.length === 0) return ''\n\tconst message = e[0].params ? loc(e[0].error, ...e[0].params) : loc(e[0].error)\n\treturn popupIcon('node-error', 'issue_opened', htmlEncode(message), mounter)\n}\n\nfunction help(loc: Localize, path: Path, mounter: Mounter) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = loc(key)\n\tif (message === key) return ''\n\treturn popupIcon('node-help', 'info', htmlEncode(message), mounter)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string, mounter: Mounter) => {\n\tconst onClick = mounter.onClick(el => {\n\t\tel.getElementsByTagName('span')[0].classList.add('show')\n\t\tdocument.body.addEventListener('click', () => {\n\t\t\tel.getElementsByTagName('span')[0].classList.remove('show')\n\t\t}, { capture: true, once: true })\n\t})\n\treturn `
\n\t\t${Octicon[icon]}\n\t\t${popup}\n\t
`\n}\n\nconst contextMenu = (loc: Localize, path: ModelPath, mounter: Mounter) => {\n\tconst id = mounter.register(el => {\n\t\tconst openMenu = () => {\n\t\t\tconst popup = document.createElement('div')\n\t\t\tpopup.classList.add('node-menu')\n\n\t\t\tconst message = loc(path.contextPush('help').getContext().join('.'))\n\t\t\tif (!message.endsWith('.help')) {\n\t\t\t\tpopup.insertAdjacentHTML('beforeend', `${message}`)\n\t\t\t}\n\n\t\t\tconst context = path.getContext().join('.')\n\t\t\tpopup.insertAdjacentHTML('beforeend', `\n\t\t\t\t
\n\t\t\t\t\t${Octicon.clippy}\n\t\t\t\t\tContext: \n\t\t\t\t\t${context}\n\t\t\t\t
`)\n\t\t\tpopup.querySelector('.menu-item .btn')?.addEventListener('click', () => {\n\t\t\t\tconst inputEl = document.createElement('input')\n\t\t\t\tinputEl.value = context\n\t\t\t\tel.appendChild(inputEl) \n\t\t\t\tinputEl.select()\n\t\t\t\tdocument.execCommand('copy')\n\t\t\t\tel.removeChild(inputEl)\n\t\t\t})\n\n\t\t\tel.appendChild(popup)\n\t\t\tdocument.body.addEventListener('click', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t\tdocument.body.addEventListener('contextmenu', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t}\n\t\tel.addEventListener('contextmenu', evt => {\n\t\t\topenMenu()\n\t\t\tevt.preventDefault()\n\t\t})\n\t\tlet timer: any = null\n\t\tel.addEventListener('touchstart', () => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\topenMenu()\n\t\t\t\ttimer = null\n\t\t\t}, 800)\n\t\t})\n\t\tel.addEventListener('touchend', () => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer)\n\t\t\t\ttimer = null\n\t\t\t}\n\t\t})\n\t})\n\treturn `data-id=\"${id}\"`\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { Mounter } from '../schema/Mounter'\nimport { renderHtml } from '../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\n\ntype TreePanelProps = {\n\tlang: string,\n\tversion: VersionId,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tonError: (message: string) => unknown,\n}\nexport function Tree({ lang, model, version, blockStates, onError }: TreePanelProps) {\n\tconst tree = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst mounter = new Mounter()\n\t\t\t\tconst props = { loc: locale.bind(null, lang), version, mounter, blockStates }\n\t\t\t\tconst path = new ModelPath(model)\n\t\t\t\tconst rendered = model.schema.hook(renderHtml, path, model.data, props)\n\t\t\t\tconst category = model.schema.category(path)\n\t\t\t\tconst type = model.schema.type(path)\n\t\t\t\tlet html = rendered[2]\n\t\t\t\tif (rendered[1]) {\n\t\t\t\t\thtml = `
\n\t\t\t\t\t\t
${rendered[0]}${rendered[1]}
\n\t\t\t\t\t\t
${rendered[2]}
\n\t\t\t\t\t
`\n\t\t\t\t}\n\t\t\t\ttree.current.innerHTML = html\n\t\t\t\tmounter.mounted(tree.current)\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\ttree.current.innerHTML = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tredraw.current()\n\t})\n\n\tuseEffect(() => {\n\t\tredraw.current()\n\t}, [lang, model, blockStates])\n\n\treturn
\n}\n","import { locale } from '../Locales'\n\ntype FieldSettingsProps = {\n\tlang: string,\n\tpath?: string,\n}\nexport function FieldSettings({ lang }: FieldSettingsProps) {\n\tconst loc = locale.bind(null, lang)\n\treturn
\n\t\t
\n\t\t\t

{loc('settings.fields.description')}

\n\t\t\t
    \n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useErrorBoundary, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Analytics } from '../Analytics'\nimport { Ad, Btn, BtnInput, BtnMenu, ErrorPanel, HasPreview, Octicon, PreviewPanel, SourcePanel, Tree } from '../components'\nimport { fetchPreset } from '../DataFetcher'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { checkVersion, getBlockStates, getCollections, getModel } from '../Schemas'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: string[]) => unknown,\n\tversion: VersionId,\n\tonChangeVersion: (version: VersionId) => unknown,\n\tgenerator?: string,\n\tpath?: string,\n\tcategory?: string,\n}\nexport function Generator({ lang, changeTitle, version, onChangeVersion, category, generator }: GeneratorProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState('')\n\tconst [errorBoundary] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\treturn
\n\t}\n\n\tconst id = category ? `${category}/${generator}` : generator ?? ''\n\tconst modelConfig = config.models.find(m => m.id === id)\n\n\tif (!modelConfig) {\n\t\treturn
\n\t}\n\n\tconst minVersion = config.models.find(m => m.id === id)?.minVersion ?? '1.15'\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, minVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tchangeTitle(loc('title.generator', loc(id)), allowedVersions)\n\n\tconst [model, setModel] = useState(null)\n\tconst [blockStates, setBlockStates] = useState(null)\n\tuseEffect(() => {\n\t\tsetModel(null)\n\t\tgetBlockStates(version)\n\t\t\t.then(b => setBlockStates(b))\n\t\tgetModel(version, id)\n\t\t\t.then(m => setModel(m))\n\t\t\t.catch(e => setError(e.message))\n\t}, [version, category, generator])\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(model.schema.default(), true)\n\t}\n\tconst undo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('undo', 'Menu')\n\t\tmodel?.undo()\n\t}\n\tconst redo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('redo', 'Menu')\n\t\tmodel?.redo()\n\t}\n\n\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 'z') {\n\t\t\tAnalytics.generatorEvent('undo', 'Hotkey')\n\t\t\tmodel?.undo()\n\t\t} else if (e.ctrlKey && e.key === 'y') {\n\t\t\tAnalytics.generatorEvent('redo', 'Hotkey')\n\t\t\tmodel?.redo()\n\t\t}\n\t}\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keyup', onKeyUp)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keyup', onKeyUp)\n\t\t}\n\t}, [model])\n\n\tconst [presetFilter, setPresetFilter] = useState('')\n\tconst [presetResults, setPresetResults] = useState([])\n\tconst registry = (modelConfig.category ? modelConfig.category + '/' : '') + modelConfig.schema\n\tuseEffect(() => {\n\t\tif (!modelConfig.path) return\n\t\tgetCollections(version)\n\t\t\t.then(collections => {\n\t\t\t\tconst terms = (presetFilter ?? '').trim().split(' ')\n\t\t\t\tconst presets = collections.get(registry)\n\t\t\t\t\t.map(p => p.slice(10))\n\t\t\t\t\t.filter(p => terms.every(t => p.includes(t)))\n\t\t\t\tif (presets) {\n\t\t\t\t\tsetPresetResults(presets)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(e => setError(e.message))\n\t}, [version, category, generator, presetFilter])\n\n\tconst loadPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tfetchPreset(version, modelConfig.path!, id).then(preset => {\n\t\t\tmodel?.reset(preset, false)\n\t\t})\n\t}\n\n\tconst [sourceShown, setSourceShown] = useState(window.innerWidth > 820)\n\tconst [doCopy, setCopy] = useState(0)\n\tconst [doDownload, setDownload] = useState(0)\n\tconst [doImport, setImport] = useState(0)\n\n\tconst copySource = () => {\n\t\tAnalytics.generatorEvent('copy')\n\t\tsetCopy(doCopy + 1)\n\t}\n\tconst downloadSource = () => {\n\t\tAnalytics.generatorEvent('download')\n\t\tsetDownload(doDownload + 1)\n\t}\n\tconst importSource = () => {\n\t\tAnalytics.generatorEvent('import')\n\t\tsetSourceShown(true)\n\t\tsetImport(doImport + 1)\n\t}\n\tconst toggleSource = () => {\n\t\tAnalytics.generatorEvent('toggle-output', !sourceShown ? 'visible' : 'hidden')\n\t\tsetSourceShown(!sourceShown)\n\t\tsetCopy(0)\n\t\tsetDownload(0)\n\t\tsetImport(0)\n\t}\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\n\tconst hasPreview = HasPreview.includes(id)\n\tlet actionsShown = 1\n\tif (hasPreview) actionsShown += 1\n\tif (sourceShown) actionsShown += 2\n\n\tconst togglePreview = () => {\n\t\tAnalytics.generatorEvent('toggle-preview', !previewShown ? 'visible' : 'hidden')\n\t\tsetPreviewShown(!previewShown)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{modelConfig.path && \n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{presetResults.map(preset => loadPreset(preset)} />)}\n\t\t\t\t\t
\n\t\t\t\t\t{presetResults.length === 0 && }\n\t\t\t\t
}\n\t\t\t\t\n\t\t\t\t\t{allowedVersions.reverse().map(v =>\n\t\t\t\t\t\t onChangeVersion(v)} />\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t{error && }\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{previewShown ? Octicon.x_circle : Octicon.play}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.download}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.clippy}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{sourceShown ? Octicon.chevron_right : Octicon.code}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype HomeProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Home({ lang, changeTitle }: HomeProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.home'))\n\treturn
\n\t\t
\n\t\t\t{config.models.filter(m => typeof m.category !== 'string').map(m => \n\t\t\t\t\n\t\t\t)}\n\t\t\t
\n\t\t\t\n\t\t\t\t

Analyse your performance reports

\n\t\t\t
\n\t\t\t\n\t\t\t\t

Browse through and mix all the vanilla sounds

\n\t\t\t
\n\t\t\t\n\t\t\t\t

Convert your 1.16 data packs to 1.17

\n\t\t\t
\n\t\t
\n\t
\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype WorldgenProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Worldgen({ lang, changeTitle }: WorldgenProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.generator_category', loc('worldgen')))\n\treturn
\n\t\t
\n\t\t\t{config.models.filter(m => m.category === 'worldgen').map(m => \n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t
\n}\n","import { render } from 'preact'\nimport type { RouterOnChangeArgs } from 'preact-router'\nimport { Router } from 'preact-router'\nimport { useEffect, useState } from 'preact/hooks'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { loadLocale, locale, Locales } from './Locales'\nimport { FieldSettings, Generator, Home, Worldgen } from './pages'\nimport type { VersionId } from './Schemas'\nimport { Store } from './Store'\nimport { cleanUrl } from './Utils'\n\nfunction Main() {\n\tconst [lang, setLanguage] = useState('en')\n\tconst changeLanguage = async (language: string) => {\n\t\tif (!Locales[language]) {\n\t\t\tawait loadLocale(language)\n\t\t}\n\t\tAnalytics.setLanguage(language)\n\t\tStore.setLanguage(language)\n\t\tsetLanguage(language)\n\t}\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst target = Store.getLanguage()\n\t\t\tawait Promise.all([\n\t\t\t\tloadLocale('en'),\n\t\t\t\t...(target !== 'en' ? [loadLocale(target)] : []),\n\t\t\t])\n\t\t\tsetLanguage(target)\n\t\t})()\n\t}, [])\n\n\tconst [theme, setTheme] = useState(Store.getTheme())\n\tconst changeTheme = (theme: string) => {\n\t\tAnalytics.setTheme(theme)\n\t\tStore.setTheme(theme)\n\t\tsetTheme(theme)\n\t}\n\tuseEffect(() => {\n\t\tdocument.documentElement.setAttribute('data-theme', theme)\n\t}, [theme])\n\n\tconst [version, setVersion] = useState(Store.getVersion())\n\tconst changeVersion = (version: VersionId) => {\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}\n\n\tconst [title, setTitle] = useState(locale(lang, 'title.home'))\n\tconst changeTitle = (title: string, versions = ['1.15', '1.16', '1.17']) => {\n\t\tdocument.title = `${title} Minecraft ${versions.join(', ')}`\n\t\tsetTitle(title)\n\t}\n\n\tconst changeRoute = (e: RouterOnChangeArgs) => {\n\t\t// Needs a timeout to ensure the title is set correctly\n\t\tsetTimeout(() => Analytics.pageview(cleanUrl(e.url)))\n\t}\n\n\treturn <>\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n}\n\nrender(
, document.body)\n"],"names":["Analytics","type","id","getElementById","remove","window","load","data-ea-publisher","data-ea-type","class","icon","label","active","class_","onClick","Octicon","large","doSelect","value","onChange","onKeyUp","e","value2","target","endsWith","isNaN","Number","ref","useRef","current","select","stopPropagation","relative","children","setActive","useState","hider","body","addEventListener","removeEventListener","Btn","error2","href","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","generatorEvent","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","cssSelector","querySelector","link","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","key","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","code","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","__spreadValues","default","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","str","url","replaceAll","h","Math","abs","s2","i","imul","charCodeAt","hashString","a2","b","c","max","min","lerp","d","f","x","Themes","system","dark","light","title","changeTheme","changeLanguage","loc","locale","bind","getCurrentUrl","models","m","Link","cleanUrl","Icons","home","BtnMenu","name","Object","entries","th","mark_github","width","height","viewBox","fill","xmlns","rx","y","report","sounds","cx","cy","r","fill-rule","clip-rule","archive","arrow_left","arrow_right","chevron_right","clippy","dash","device_desktop","download","eye","eye_closed","gear","globe","history","kebab_horizontal","moon","play","plus","search","sun","sync","tag","three_bars","unfold","upload","x_circle","model","invalidated","listener","[object Object]","addListener","removeListener","element","drag","request","dragStart","pending","onMouseDown","offsetX","offsetY","onMouseMove","dx","dy","requestAnimationFrame","onMouseUp","_e","random","xo","yo","zo","p","n","int32","this","y2","z","x2","y22","z2","x3","floor","y3","z3","x4","y4","z4","x5","smoothstep","y5","z5","y6","sampleAndLerp","grad","_ImprovedNoise","GRADIENT","g","j","P","k","l2","o","lerp2","lerp3","gradDot","ImprovedNoise","seed","firstOctave","amplitudes","noiseLevels","seedrandom","lowestFreqInputFactor","pow","lowestFreqValueFactor","PerlinNoise","fixY","inputF","valueF","noise","wrap","first","second","Infinity","expectedDeviation","valueFactor","getValue","NoiseMaps","state","img","options","config2","NormalNoise","biomeColorCache","biomes","forEach","biome","getBiomeColor","biomeColors","ox","offset","oy","row","col","xx","scale","yy","closestBiome","color","multiNoise","fixed","shift","numBiomes","checkerboard","VanillaColors","stringToColor","isArray","n2","minDist","minBiome","dist","fitness","parameters","altitude","temperature","humidity","weirdness","minecraft:badlands","minecraft:badlands_plateau","minecraft:bamboo_jungle","minecraft:bamboo_jungle_hills","minecraft:basalt_deltas","minecraft:beach","minecraft:birch_forest","minecraft:birch_forest_hills","minecraft:cold_ocean","minecraft:crimson_forest","minecraft:dark_forest","minecraft:dark_forest_hills","minecraft:deep_cold_ocean","minecraft:deep_frozen_ocean","minecraft:deep_lukewarm_ocean","minecraft:deep_ocean","minecraft:deep_warm_ocean","minecraft:desert","minecraft:desert_hills","minecraft:desert_lakes","minecraft:end_barrens","minecraft:end_highlands","minecraft:end_midlands","minecraft:eroded_badlands","minecraft:flower_forest","minecraft:forest","minecraft:frozen_ocean","minecraft:frozen_river","minecraft:giant_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_mountains","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:jungle_hills","minecraft:lukewarm_ocean","minecraft:modified_badlands_plateau","minecraft:modified_gravelly_mountains","minecraft:modified_jungle","minecraft:modified_jungle_edge","minecraft:modified_wooded_badlands_plateau","minecraft:mountain_edge","minecraft:mountains","minecraft:mushroom_field_shore","minecraft:mushroom_fields","minecraft:nether_wastes","minecraft:ocean","minecraft:plains","minecraft:river","minecraft:savanna","minecraft:savanna_plateau","minecraft:shattered_savanna","minecraft:shattered_savanna_plateau","minecraft:small_end_islands","minecraft:snowy_beach","minecraft:snowy_mountains","minecraft:snowy_taiga","minecraft:snowy_taiga_hills","minecraft:snowy_taiga_mountains","minecraft:snowy_tundra","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_hills","minecraft:wooded_mountains","terrain","featureColors","startsWith","pos","ctx","base","nextInt","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","features","indexOf","push","feature","placements","useFeature","featureFn","Features","JSON","stringify","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","biomeInfoNoise","noise_level","below_noise","above_noise","count_noise_biased","factor","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","seaLevel","clamp","outer","flatMap","inner","depth_average","decorateY","baseline","emerald_ore","fire","glowstone","heightmap","heightmap_spread_double","heightmap_world_surface","iceberg","lava_lake","nope","range","maximum","top_offset","bottom_offset","range_biased","range_very_biased","spread_32_above","top_solid_heightmap","magma","square","water_lake","minLimitPerlinNoise","fromRange","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","depth","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","noise1","fillNoiseColumn","noise2","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","falloff","density_factor","density_offset","top_slide","size","clampedLerp","bottom_slide","minLimitNoise","maxLimitNoise","mainNoise","HasPreview","Previews","generator","path","Path","predicate","get","shown","setScale","setSeed","hexId","focused","setFocused","canvas","redrawTimeout","redraw","refocus","getContext","createImageData","putImageData","setTimeout","clientWidth","clientHeight","toWorld","getBiome","hover","onMouseLeave","changeScale","newScale","setBiomeDepth","setBiomeScale","NoiseChunkGenerator","reset","iterateNoiseColumn","reverse","getColor","BtnInput","v","setCount","filter","transformOutput","switchNode","props","hook","obj","blockState","validation","validator","blockStates","relativePath","keys","properties","includes","getActiveFields","activeFields","enabled","localStorage","removeItem","mcdataUrl","vanillaDatapackUrl","refs","hash","versionId","collectionTarget","blockStateTarget","versions","debug","dynamic","getItem","async","matches","cache","caches","open","promises","delete","warn","message","deleteMatching","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","error","registries","checkVersion","minVersion","maxVersion","mcdata_master","getData","data2","register","values","states","assign","vanilla_datapack_summary","fn","cacheResponse","ok","json","fetchResponse","fetch","responseData","put","Response","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","collections","getCollections","fetchData","getSchemas","Error","minVersionId","maxVersionId","findIndex","Store","Store2","getLanguage","getTheme","getVersion","getIndent","setIndent","indent","INDENT","2_spaces","4_spaces","tabs","doCopy","doDownload","doImport","onError","retransform","ModelPath","execCommand","content","encodeURIComponent","setAttribute","click","changeIndent","parse","spellcheck","autocorrect","placeholder","style","callback","registry","el","on","querySelectorAll","el2","getAttribute","info","issue_opened","plus_circle","trashcan","selectRegistries","hiddenFields","flattenedFields","inlineFields","keysModel","DataModel","MapNode","StringNode","historyMax","renderHtml","node","onFalse","mounter","set","optional","onTrue","htmlEncode","choices","choice","activeCase","pathWithContext","context","getModel","getArray","pathWithChoiceContext","choiceContext","prefix","suffix","c2","change","pathLocale","contextPush","onAdd","onAddBottom","childValue","removeId","childPath","cPrefix","cSuffix","cBody","help","contextMenu","keyPath","enum","last","errors","add","ObjectNode","fromEntries","onRemove","modelPush","childrenSchema","integer","parsed","parseFloat","padStart","getChildModelPath","field","isFlattened","isInlined","getValues","inputId","newValue","isEnum","additional","pool","datalistId","result","popupIcon","popup","getElementsByTagName","classList","capture","once","openMenu","insertAdjacentHTML","inputEl","removeChild","preventDefault","timer","tree","Mounter","rendered","html","innerHTML","mounted","changeTitle","onChangeVersion","setError","errorBoundary","useErrorBoundary","ErrorPanel","modelConfig","allowedVersions","setModel","setBlockStates","versionData","schemaName","validate","catch","ctrlKey","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","trim","split","presets","every","t","loadPreset","id2","vanilla_datapack_data","preset","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Ad","Tree","__spreadProps","PreviewPanel","SourcePanel","ToolCard","loadLocale","documentElement","changeVersion","version2","setTitle","title2","Header","theme2","Router","Home","FieldSettings","Worldgen","Generator","render","Main"],"mappings":"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"} \ No newline at end of file diff --git a/assets/index.aad4924e.css b/assets/index.aad4924e.css deleted file mode 100644 index 265142d4..00000000 --- a/assets/index.aad4924e.css +++ /dev/null @@ -1 +0,0 @@ -:root{--background-1:#1b1b1b;--background-2:#252525;--background-3:#3d3d3d;--background-4:#464646;--text-1:#ffffff;--text-2:#dcdcdc;--text-3:#c3c3c3;--accent-blue:#50baf9;--accent-red:#f1453f;--nav:#91908f;--nav-hover:#b4b3b0;--nav-faded:#4d4c4c;--nav-faded-hover:#6e6e6e;--selection:#6786dd99;--errors-background:#62190f;--errors-text:#ffffffcc}:root[data-theme=light]{--background-1:#fafafa;--background-2:#e2e2e2;--background-3:#cccccc;--background-4:#d6d6d6;--text-1:#000000;--text-2:#505050;--text-3:#6a6a6a;--accent-blue:#088cdb;--accent-red:#cc312c;--nav:#343a40;--nav-hover:#565d64;--nav-faded:#9fa2a7;--nav-faded-hover:#bcbfc3;--selection:#6786dd99;--errors-background:#f66653;--errors-text:#000000cc}@media (prefers-color-scheme:light){:root[data-theme=system]{--background-1:#fafafa;--background-2:#e2e2e2;--background-3:#cccccc;--background-4:#d6d6d6;--text-1:#000000;--text-2:#505050;--text-3:#6a6a6a;--accent-blue:#088cdb;--accent-red:#cc312c;--nav:#343a40;--nav-hover:#565d64;--nav-faded:#9fa2a7;--nav-faded-hover:#bcbfc3;--selection:#6786dd99;--errors-background:#f66653;--errors-text:#000000cc}}*{box-sizing:border-box;margin:0;padding:0}::selection{background-color:var(--selection)}a svg{pointer-events:none}body{font-size:18px;font-family:Arial,Helvetica,sans-serif;overflow-x:hidden;background-color:var(--background-1)}header{display:flex;justify-content:space-between;align-items:center;padding:10px;width:100%;height:56px;z-index:5;position:fixed;box-shadow:0 0 9px -3px #000;background-color:var(--background-2)}body[data-panel=home] header,body[data-panel=settings] header{position:fixed}.header-title{display:flex;align-items:center}.header-title h2{color:var(--nav)}.home-link{margin:0 8px 0 0;height:32px;fill:var(--nav)}.home-link svg{width:32px;height:32px;padding:2px}nav ul{display:flex;align-items:center}nav li{display:flex;align-items:center;cursor:pointer;margin:0 16px;fill:var(--nav);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.home-link:hover svg{fill:var(--nav-hover)}nav li.dimmed svg{fill:var(--nav-faded)}nav li.dimmed:hover svg{fill:var(--nav-faded-hover)}nav li svg,nav li>*{width:24px;height:24px}nav li .btn-menu>.btn{background:0 0!important;padding:0;box-shadow:none;fill:var(--nav)}nav li .btn-menu>.btn:hover{fill:var(--nav-hover)}main{padding-top:68px;color:var(--text-1);fill:var(--text-1);transition:padding .3s}.controls{display:flex;justify-content:flex-end;position:fixed;top:12px;right:16px;z-index:1;pointer-events:none}main>.controls{position:sticky;margin-right:16px;right:16px;top:68px}.controls>*{pointer-events:all}.controls>:not(:last-child){margin-right:8px}.tree{margin-top:-36px;overflow-x:auto;padding:4px 16px 50vh}.popup-source{position:fixed;display:flex;flex-direction:column;width:40vw;left:100%;bottom:0;z-index:1;transition:transform .3s;border-radius:6px 0 0 0}.popup-source.shown{transform:translateX(-100%)}.source{width:100%;height:40vh;max-height:50vh;padding:12px;border:none;font-family:Consolas,monospace;font-size:14px;white-space:pre;overflow-wrap:normal;overflow-x:auto;tab-size:4;-moz-tab-size:4;-o-tab-size:4;-webkit-tab-size:4;outline:0;resize:none;position:static;background-color:var(--background-2);border-top-left-radius:6px;color:var(--text-1);box-shadow:0 0 7px -3px #000}.popup-preview{position:fixed;display:flex;flex-direction:column;height:calc(100% - 56px);width:40vw;left:100%;bottom:0;z-index:1;background-color:var(--background-2);box-shadow:0 0 7px -3px #000;transition:transform .3s}main.has-preview{padding-right:40vw}.popup-preview.shown{transform:translateX(-100%)}.popup-preview canvas{width:100%;background-color:var(--nav-faded);display:block;cursor:crosshair;image-rendering:-moz-crisp-edges;image-rendering:-webkit-crisp-edges;image-rendering:crisp-edges;image-rendering:pixelated;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.btn{display:flex;align-items:center;border:none;height:32px;border-radius:6px;padding:7px 11px;cursor:pointer;outline:0;font-size:1rem;white-space:nowrap;background-color:var(--background-3);box-shadow:0 1px 7px -2px #000;color:var(--text-2);fill:var(--text-2);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.btn.active{color:var(--accent-blue);fill:var(--accent-blue)}.btn:not(.btn-input):hover{background-color:var(--background-4)}.btn.no-pointer{pointer-events:none}.btn svg:not(:last-child){margin-right:5px}.btn-menu:not(.no-relative){position:relative}.btn-menu>.btn{height:100%}.btn-menu .btn-group{display:flex;flex-direction:column;position:absolute;right:0;top:100%;margin-top:8px}.btn-group{border-radius:6px;box-shadow:0 0 7px -2px #000}.btn-group .btn{box-shadow:none}.btn-group .btn:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group .btn:not(:first-child),.btn-menu .result-list .btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-input{cursor:initial;padding-right:7px}.btn-input input{background:var(--background-1);color:var(--text-1);font-size:17px;border:none;padding:0 3px;margin-left:5px;width:100px}.btn-input.large-input{padding:5px;padding-left:11px}.btn-input.large-input input{width:100%;height:100%}.btn-menu .result-list{display:block;width:380px;height:unset;overflow-y:auto;overflow-x:hidden;max-height:240px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.popup-actions{display:flex;position:fixed;bottom:8px;left:100%;z-index:5;padding:0 8px;border-top-left-radius:24px;border-bottom-left-radius:24px;background-color:var(--background-3);box-shadow:0 0 7px -3px #000;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;transform:translateX(var(--offset));transition:padding .1s,transform .3s}.popup-actions:hover{background-color:var(--background-4)}.popup-action{padding:12px;fill:var(--text-2);cursor:pointer}.popup-action:not(.shown){pointer-events:none;order:1;visibility:hidden}.popup-action>svg{display:block;width:24px;height:24px}.popup-action.action-preview{fill:var(--accent-blue)}.error{padding:5px 14px;margin:12px 16px;color:var(--text-1);background-color:var(--errors-background);border-radius:3px}.error>*{margin:10px 0}.error a{color:var(--text-1)}.home{padding:16px}.generator-picker{display:flex}.home.center{flex-direction:column;align-items:center;color:var(--nav)}.home.center p{padding-bottom:20px;text-align:center;font-size:20px}.generators-list{display:flex;flex-direction:column;list-style-type:none}.generators-list:not(:last-child){margin-right:20px}.generators-card{margin-bottom:10px;padding:8px 15px;cursor:pointer;text-decoration:none;text-transform:capitalize;border-radius:3px;background-color:var(--nav-faded);color:var(--text-1);fill:var(--text-1);display:flex;align-items:center;justify-content:space-between;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;transition:margin .2s}.generators-card *{pointer-events:none}.generators-card.selected,.generators-card:hover{background-color:var(--nav-faded-hover);margin-left:8px;margin-right:-8px}.generators-card svg{margin-left:10px}.settings{padding:20px}.settings p{color:var(--nav);padding:8px;border-bottom:2px solid var(--background-3)}.field-list{width:100%;border-collapse:collapse;list-style-type:none}.field-list li{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--background-3)}.field-prop{display:inline-flex;align-items:center;max-width:100%;margin:4px}.field-prop>input,.field-prop>label{height:34px;color:var(--text-1);margin-right:-1px;border:1px solid;border-color:var(--nav-faded-hover)}.field-prop label{padding:0 9px;line-height:1.94rem;background-color:var(--node-background-label);white-space:nowrap;border-top-left-radius:3px;border-bottom-left-radius:3px}.field-prop input{width:100%;line-height:1.6rem;background-color:var(--node-background-input);color:var(--text-1);padding-left:9px;font-size:18px;border-top-right-radius:3px;border-bottom-right-radius:3px}.field-prop svg{padding:4px;margin:0 4px;height:28px;width:28px;fill:var(--nav);cursor:pointer}.field-prop .hidden svg{fill:#be4b2e}.field-prop .dimmed svg{fill:var(--nav-faded)}.very-large{font-size:80px;font-weight:100}[data-ea-publisher]{margin:0 16px 8px}.ea-content{margin:0!important;background:var(--background-2)!important}.ea-content span{color:var(--text-2)!important}.ea-content strong{color:var(--accent-blue)!important}.ea-callout{margin:.25rem 0!important;padding:0!important}.ea-callout a{color:var(--text-3)!important}@keyframes spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fadein{from{opacity:0}to{opacity:1}}@media screen and (max-width:1300px){main.has-preview .tree{margin-top:8px}}@media screen and (max-width:800px){main .tree{margin-top:4px!important}}@media screen and (max-width:580px){.header-title h2{font-size:22px}body nav li{margin:0 8px}main.has-preview{padding-right:0}main .controls{top:64px}.tree{padding-left:8px;padding-right:8px}.popup-source{width:100vw}.source{border-radius:0}.popup-preview{width:100vw;height:unset;bottom:0;background-color:transparent;box-shadow:none}.popup-preview canvas{margin-top:8px}.btn-menu .result-list,.btn.btn.large-input{width:calc(100vw - 10px)}.generator-picker{justify-content:center}.field-list li{flex-direction:column}.field-prop{width:100%}.field-prop input{width:100%}}:root{--node-border:#4e4e4e;--node-background-label:#1b1b1b;--node-background-input:#272727;--node-text:#dadada;--node-selected:#ad9715;--node-selected-border:#8d7a0d;--node-add:#487c13;--node-add-border:#3b6e0c;--node-remove:#9b341b;--node-remove-border:#7e1d05;--node-indent-border:#454749;--node-popup-background:#0a0a0ae6;--node-popup-text:#dadada;--node-popup-text-dimmed:#b4b4b4;--category-predicate:#306163;--category-predicate-border:#224849;--category-predicate-background:#1d3333;--category-function:#838383;--category-function-border:#6b6b6b;--category-function-background:#414141;--category-pool:#386330;--category-pool-border:#2e4922;--category-pool-background:#21331d}:root[data-theme=light]{--node-border:#bcbfc3;--node-background-label:#e4e4e4;--node-background-input:#ffffff;--node-text:#000000;--node-selected:#f0e65e;--node-selected-border:#b9a327;--node-add:#9bd464;--node-add-border:#498d09;--node-remove:#e76f51;--node-remove-border:#be4b2e;--node-indent-border:#b9b9b9;--node-popup-background:#1f2020e6;--node-popup-text:#dadada;--node-popup-text-dimmed:#b4b4b4;--category-predicate:#65b5b8;--category-predicate-border:#187e81;--category-predicate-background:#95c5c7;--category-function:#979fa7;--category-function-border:#788086;--category-function-background:#dce0e4;--category-pool:#76b865;--category-pool-border:#398118;--category-pool-background:#b1d6a6}@media (prefers-color-scheme:light){:root[data-theme=system]{--node-border:#bcbfc3;--node-background-label:#e4e4e4;--node-background-input:#ffffff;--node-text:#000000;--node-selected:#f0e65e;--node-selected-border:#b9a327;--node-add:#9bd464;--node-add-border:#498d09;--node-remove:#e76f51;--node-remove-border:#be4b2e;--node-indent-border:#b9b9b9;--node-popup-background:#1f2020e6;--node-popup-text:#dadada;--node-popup-text-dimmed:#b4b4b4;--category-predicate:#65b5b8;--category-predicate-border:#187e81;--category-predicate-background:#95c5c7;--category-function:#979fa7;--category-function-border:#788086;--category-function-background:#dce0e4;--category-pool:#76b865;--category-pool-border:#398118;--category-pool-background:#b1d6a6}}.node-header{display:inline-flex;position:relative;align-items:center;width:100%}.node-header>*{height:34px;border:1px solid;color:var(--node-text);border-color:var(--node-border)}.node-header>label{padding:0 9px;line-height:1.94rem;white-space:nowrap;user-select:none;background-color:var(--node-background-label)}.node-header>input{font-size:18px;padding-left:9px;background-color:var(--node-background-input)}.node-header>input[type=color]{padding:0 2px}.node-header>datalist,.node-header>select{font-size:18px;padding-left:6px;background-color:var(--node-background-input)}.node-header>button{font-size:18px;padding:0 9px;line-height:1.94rem;white-space:nowrap;user-select:none;cursor:pointer;background-color:var(--node-background-input)}.object-node>.node-header>.collapse{cursor:pointer}.node-error~input:last-child,.node-error~input[list]:nth-last-child(2),.node-error~select:last-child{border-color:var(--node-remove)!important}.node-header>.node-icon{order:1}.node-header>.node-icon+*,.node-header>:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.node-header>:last-child,.node-header>input[list]:nth-last-child(2){border-top-right-radius:3px;border-bottom-right-radius:3px}.node-header>*{margin-right:-1px}.list-node>.node-header>:first-child,.map-node>.node-header>:first-child,.object-node:not(.no-body)>.node-header>:first-child{border-top-left-radius:8px;border-bottom-left-radius:0}button.selected{background-color:var(--node-selected);border-color:var(--node-selected-border)}.collapse svg{fill:var(--node-text)}.collapse.closed,button.add{background-color:var(--node-add);border-color:var(--node-add-border)}.collapse.open,button.remove{background-color:var(--node-remove);border-color:var(--node-remove-border)}.node-header>button svg{display:inline-block;position:relative;top:2px;fill:var(--node-text)}.node-header>button.add:last-child,.node-header>button.collapse:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.node-icon{border:none;position:relative;display:inline-block}.node-icon .icon-popup{visibility:hidden;width:240px;background-color:var(--node-popup-background);color:var(--node-popup-text);text-align:center;border-radius:6px;padding:8px 4px;position:absolute;z-index:2;top:125%;left:50%;margin-left:-120px}.node-icon .icon-popup::after{content:"";position:absolute;bottom:100%;left:50%;margin-left:-3px;border-width:5px;border-style:solid;border-color:transparent transparent var(--node-popup-background) transparent}.node-icon .icon-popup.show,.node-icon svg:hover+.icon-popup{visibility:visible}.node-icon svg{height:34px;width:34px;min-width:34px;margin-left:6px;cursor:pointer}.node-icon.node-help svg{fill:var(--node-border)}.node-icon.node-error svg{fill:var(--node-remove)}.node-menu{position:absolute;left:0;top:100%;width:min-content;margin-top:4px;margin-left:4px;z-index:1;color:var(--node-popup-text);font-size:16px;border-radius:3px;background-color:var(--node-popup-background)}.node-menu::after{content:"";position:absolute;bottom:100%;left:0;margin-left:6px;border-width:5px;border-style:solid;border-color:transparent transparent var(--node-popup-background) transparent}.menu-item{padding:4px;display:flex;align-items:center;white-space:normal}.menu-item>*{margin-right:4px}.menu-item .btn{padding:8px}span.menu-item{padding:4px 8px}.menu-item-context{color:var(--node-popup-text-dimmed)}.node{margin-bottom:4px}.node-body>.node:first-child{margin-top:4px}.node:last-child{margin-bottom:0}.node-body{border-left:3px solid var(--node-indent-border)}.node-body{display:flex;flex-direction:column;padding-left:18px}.node-entry>.object-node>.node-body{padding-left:0}.node-entry>.object-node>.node-body>.node>.node-body{border-left:none}.node-entry>.object-node>.node-body>.node>.node-header>.node-icon+*,.node-entry>.object-node>.node-body>.node>.node-header>:first-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:none}.node-entry{display:flex;flex-direction:column;margin-top:4px}.node-entry>.list-node[data-category],.node-entry>.map-node[data-category],.node-entry>.object-node[data-category]{width:100%;min-width:max-content;padding:5px;padding-left:0;margin-top:8px;border:2px solid var(--node-border);border-radius:3px}.node-entry:first-child>.list-node[data-category],.node-entry:first-child>.map-node[data-category],.node-entry:first-child>.object-node[data-category]{margin-top:4px}.node-entry>.object-node[data-category]>.node-header>.node-icon+*,.node-entry>.object-node[data-category]>.node-header>:first-child{border-top-left-radius:0;border-bottom-left-radius:0;border-left:none}.node-entry>.list-node[data-category]>.node-body,.node-entry>.map-node[data-category]>.node-body,.node-entry>.object-node[data-category]>.node-body{border:none}.range-node select{width:25px}.number-node input,.range-node input{width:100px}[data-category=predicate]>.node-body>.node>.node-header>label,[data-category=predicate]>.node-header>label{background-color:var(--category-predicate)}[data-category=predicate]>.node-body,[data-category=predicate]>.node-body>.node>.node-header>:not(.selected),[data-category=predicate]>.node-header>:not(.selected),[data-category=predicate]>.node-header>label{border-color:var(--category-predicate-border)}.node-entry>.node.list-node[data-category=predicate],.node-entry>.node.map-node[data-category=predicate],.node-entry>.node.object-node[data-category=predicate]{background-color:var(--category-predicate-background);border-color:var(--category-predicate-border)}[data-category=function]>.node-body>.node>.node-header>label,[data-category=function]>.node-header>label{background-color:var(--category-function)}[data-category=function]>.node-body,[data-category=function]>.node-body>.node>.node-header>:not(.selected),[data-category=function]>.node-header>:not(.selected),[data-category=function]>.node-header>label{border-color:var(--category-function-border)}.node-entry>.node.list-node[data-category=function],.node-entry>.node.map-node[data-category=function],.node-entry>.node.object-node[data-category=function]{background-color:var(--category-function-background);border-color:var(--category-function-border)}[data-category=pool]>.node-body>.node>.node-header>label,[data-category=pool]>.node-header>label{background-color:var(--category-pool)}[data-category=pool]>.node-body,[data-category=pool]>.node-body>.node>.node-header>:not(.selected),[data-category=pool]>.node-header>:not(.selected),[data-category=pool]>.node-header>label{border-color:var(--category-pool-border)}.node-entry>.node.list-node[data-category=pool],.node-entry>.node.map-node[data-category=pool],.node-entry>.node.object-node[data-category=pool]{background-color:var(--category-pool-background);border-color:var(--category-pool-border)} \ No newline at end of file diff --git a/dimension-type/index.html b/dimension-type/index.html index 75652f1a..325c6765 100644 --- a/dimension-type/index.html +++ b/dimension-type/index.html @@ -20,9 +20,9 @@ Dimension Type Generator Minecraft 1.16, 1.17 - + - +
diff --git a/dimension/index.html b/dimension/index.html index 18303fdb..90af58fa 100644 --- a/dimension/index.html +++ b/dimension/index.html @@ -20,9 +20,9 @@ Dimension Generator Minecraft 1.16, 1.17 - + - +
diff --git a/index.html b/index.html index 6ef510fa..94a76643 100644 --- a/index.html +++ b/index.html @@ -20,9 +20,9 @@ Data Pack Generators Minecraft 1.15, 1.16, 1.17 - + - +
diff --git a/item-modifier/index.html b/item-modifier/index.html index 56239cb7..85b50122 100644 --- a/item-modifier/index.html +++ b/item-modifier/index.html @@ -20,9 +20,9 @@ Item Modifier Generator Minecraft 1.17 - + - +
diff --git a/loot-table/index.html b/loot-table/index.html index 9b930066..66faad1e 100644 --- a/loot-table/index.html +++ b/loot-table/index.html @@ -20,9 +20,9 @@ Loot Table Generator Minecraft 1.15, 1.16, 1.17 - + - +
diff --git a/predicate/index.html b/predicate/index.html index e41f5252..a0e798a6 100644 --- a/predicate/index.html +++ b/predicate/index.html @@ -20,9 +20,9 @@ Predicate Generator Minecraft 1.15, 1.16, 1.17 - + - +
diff --git a/world/index.html b/world/index.html index 8df68bff..e504adea 100644 --- a/world/index.html +++ b/world/index.html @@ -20,9 +20,9 @@ World Settings Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/biome/index.html b/worldgen/biome/index.html index da0ba766..29531ab9 100644 --- a/worldgen/biome/index.html +++ b/worldgen/biome/index.html @@ -20,9 +20,9 @@ Biome Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/carver/index.html b/worldgen/carver/index.html index 32e15dd4..8708e3e5 100644 --- a/worldgen/carver/index.html +++ b/worldgen/carver/index.html @@ -20,9 +20,9 @@ Carver Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/feature/index.html b/worldgen/feature/index.html index 0693d3e4..4bd296db 100644 --- a/worldgen/feature/index.html +++ b/worldgen/feature/index.html @@ -20,9 +20,9 @@ Feature Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/index.html b/worldgen/index.html index 223dad1f..5eff6410 100644 --- a/worldgen/index.html +++ b/worldgen/index.html @@ -20,9 +20,9 @@ Worldgen Generators Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/noise-settings/index.html b/worldgen/noise-settings/index.html index 20b68c3b..7a74302c 100644 --- a/worldgen/noise-settings/index.html +++ b/worldgen/noise-settings/index.html @@ -20,9 +20,9 @@ Noise Settings Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/processor-list/index.html b/worldgen/processor-list/index.html index 967b9ea6..6991d482 100644 --- a/worldgen/processor-list/index.html +++ b/worldgen/processor-list/index.html @@ -20,9 +20,9 @@ Processor List Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/structure-feature/index.html b/worldgen/structure-feature/index.html index c72487c2..1e4573c9 100644 --- a/worldgen/structure-feature/index.html +++ b/worldgen/structure-feature/index.html @@ -20,9 +20,9 @@ Structure Feature Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/surface-builder/index.html b/worldgen/surface-builder/index.html index d554d1d8..da73af6c 100644 --- a/worldgen/surface-builder/index.html +++ b/worldgen/surface-builder/index.html @@ -20,9 +20,9 @@ Surface Builder Generator Minecraft 1.16, 1.17 - + - +
diff --git a/worldgen/template-pool/index.html b/worldgen/template-pool/index.html index 4cab3ab1..0425be08 100644 --- a/worldgen/template-pool/index.html +++ b/worldgen/template-pool/index.html @@ -20,9 +20,9 @@ Template Pool Generator Minecraft 1.16, 1.17 - + - +