diff --git a/404.html b/404.html index 0ab68758..22b983e3 100644 --- a/404.html +++ b/404.html @@ -20,7 +20,7 @@ 404 - + diff --git a/advancement/index.html b/advancement/index.html index 68163dfe..95f0f98c 100644 --- a/advancement/index.html +++ b/advancement/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.15, 1.16, 1.17 - + diff --git a/assets/index.22bf6748.js b/assets/index.22bf6748.js deleted file mode 100644 index 08d53d5f..00000000 --- a/assets/index.22bf6748.js +++ /dev/null @@ -1,2 +0,0 @@ -var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,s=(e,t)=>{for(var n in t||(t={}))o.call(t,n)&&a(e,n,t[n]);if(r)for(var n of r(t))i.call(t,n)&&a(e,n,t[n]);return e},l=(e,r)=>t(e,n(r));import{y as c,a as d,s as u,l as h,b as m,j as g,c as p,d as f,g as v,L as _,r as w,e as y,f as b,h as C,q as k,i as x,N as V,R as z}from"./vendor.f4c463d9.js";var M;function A({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:r,onClick:o}){return d("div",{class:`btn${n?" active":""}${r?` ${r}`:""}`,onClick:o},e&&I[e],t&&d("span",null,t))}function j({icon:e,label:t,large:n,type:r,doSelect:o,value:i,onChange:a}){const s=void 0===a?()=>{}:e=>{const t=e.target.value;"number"===r&&(t.endsWith(".")||isNaN(Number(t)))||null==a||a(t)},l=u(null);return c((()=>{o&&l.current&&l.current.select()}),[o]),d("div",{class:"btn btn-input "+(n?"large-input":""),onClick:e=>e.stopPropagation()},e&&I[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:i,onInput:s}))}function L(){const[e,t]=h(!1),n=()=>{t(!1)};return c((()=>(e&&document.body.addEventListener("click",n),()=>{document.body.removeEventListener("click",n)})),[e]),[e,()=>t(!0)]}function P(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),()=>{null==e||e.removeListener(n)})),[e])}function $(e,t){if(!e)return;const n=u(),r=u(),o=u([0,0]);c((()=>{const i=e=>{r.current=[e.offsetX,e.offsetY]},a=e=>{if(void 0===r.current)return;const i=e.offsetX-r.current[0],a=e.offsetY-r.current[1];0===i&&0===a||(cancelAnimationFrame(n.current),o.current=[o.current[0]+i,o.current[1]+a],n.current=requestAnimationFrame((()=>{t(...o.current),o.current=[0,0]}))),r.current=[e.offsetX,e.offsetY]},s=e=>{r.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])}function D({icon:e,label:t,relative:n,children:r}){const[o,i]=L();return d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(E,{icon:e,label:t,onClick:i}),o&&d("div",{class:"btn-group"},r))}!function(e){const t="Site",n="Generator";function r(e,t,n){ga("send","event",e,t,n)}function o(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){o(4,e),r(t,"set-language",e)},e.setTheme=function(e){o(1,e),r(t,"set-theme",e)},e.setVersion=function(e){o(3,e),r(n,"set-version",e)},e.setPreview=function(e){o(5,e),r(n,"set-preview",e)},e.generatorEvent=function(e,t){r(n,e,t)}}(M||(M={}));const I={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_down:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"})),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"})),chevron_up: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.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"})),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"})),info: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"})),issue_opened: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"})),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"})),plus_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:"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 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"})),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"})),trashcan: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.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"})),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: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.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})),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 O({error:e,onDismiss:t}){return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},I.x),d("h3",null,e),d("p",null,"If you think this is a bug, you can report it ",d("a",{href:"https://github.com/misode/misode.github.io/issues/new",target:"_blank"},"on GitHub")))}var S=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}],"generators":[{"id":"loot_table","url":"loot-table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","url":"predicate","path":"predicates","schema":"predicate"},{"id":"item_modifier","url":"item-modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","url":"advancement","path":"advancements","schema":"advancement"},{"id":"dimension","url":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension_type","url":"dimension-type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","url":"world","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen/biome","url":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/configured_carver","url":"worldgen/carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/configured_feature","url":"worldgen/feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/noise_settings","url":"worldgen/noise-settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/configured_structure_feature","url":"worldgen/structure-feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16"},{"id":"worldgen/configured_surface_builder","url":"worldgen/surface-builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16"},{"id":"worldgen/processor_list","url":"worldgen/processor-list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template_pool","url":"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 N;const T={},B=function(e,t){if(!t)return e();if(void 0===N){const e=document.createElement("link").relList;N=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in T)return;T[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const r=document.createElement("link");return r.rel=t?"stylesheet":N,t||(r.as="script",r.crossOrigin=""),r.href=e,document.head.appendChild(r),t?new Promise(((e,t)=>{r.addEventListener("load",e),r.addEventListener("error",t)})):void 0}))).then((()=>e()))};var R=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/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/noise_settings":"Noise Settings","worldgen/processor_list":"Processor List","worldgen/configured_structure_feature":"Structure Feature","worldgen/configured_surface_builder":"Surface Builder","worldgen/template_pool":"Template Pool"}'),H=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:R});const F={fallback:R};function W(e,t,...n){var r,o,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==(r=F[e])?void 0:r[t])?i:null==(o=F.en)?void 0:o[t])?a:F.fallback[t])?s:t,n)}async function G(e){const t=S.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return B((()=>import("./de.9324c846.js")),void 0);case"../locales/en.json":return B((()=>Promise.resolve().then((function(){return H}))),void 0);case"../locales/es.json":return B((()=>import("./es.be1c5183.js")),void 0);case"../locales/fr.json":return B((()=>import("./fr.cc0e1c18.js")),void 0);case"../locales/it.json":return B((()=>import("./it.fd9a8268.js")),void 0);case"../locales/ja.json":return B((()=>import("./ja.8c79487c.js")),void 0);case"../locales/pl.json":return B((()=>import("./pl.3a9fb38c.js")),void 0);case"../locales/pt.json":return B((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return B((()=>import("./ru.43cf4da1.js")),void 0);case"../locales/sk.json":return B((()=>import("./sk.586a2a32.js")),void 0);case"../locales/zh-cn.json":return B((()=>import("./zh-cn.97195370.js")),void 0);case"../locales/zh-tw.json":return B((()=>import("./zh-tw.a82e5245.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),r=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return B((()=>import("./de.c1ee95e4.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return B((()=>import("./en.1feb7726.js")),void 0);case"../../node_modules/@mcschema/locales/src/es.json":return B((()=>import("./es.4fa2c63c.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return B((()=>import("./fr.f6a9792a.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return B((()=>import("./it.7ff123cd.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return B((()=>import("./ja.af0142d0.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return B((()=>import("./pl.2f8b352f.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return B((()=>import("./pt.a435ff66.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return B((()=>import("./ru.ddb74b03.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return B((()=>import("./zh-cn.fd769298.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return B((()=>import("./zh-tw.9dc297b5.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);F[e]=s(s({},n.default),r.default)}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const J="https://raw.githubusercontent.com/Arcensoth/mcdata",Y="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",q=[{id:"mcdata_master",hash:"c1adf4f9ba8e81a7683ce775b7f2847bdd118e82",url:J},{id:"vanilla_datapack_summary",hash:"8a2f8022eb88840e6871ff6a72f63d6e64afc323",url:Y}];async function U(e,t,n){const r=S.versions.find((t=>t.id===e));r?(console.debug(`[fetchData] ${JSON.stringify(r)}`),r.dynamic&&await Promise.all(q.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}/${r.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 r of await t.keys())e(r.url)&&n.push(t.delete(r));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}/${r.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([Z(r,t),X(r,n),K(r,t)])):console.error(`[fetchData] Unknown version ${r} in ${JSON.stringify(S.versions)}`)}async function Z(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=S.registries.filter((e=>!e.dynamic)).filter((t=>ie(e.id,t.minVersion,t.maxVersion)));if(ie(e.id,void 0,"1.15")){const o=`${J}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await Q(o,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var r;t.register(n.id,null!=(r=e[n.id])?r:[])}))}catch(r){console.warn("Error occurred while fetching registries:",r)}}else await Promise.all(n.map((async n=>{try{const r=n.path?`${J}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${J}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await Q(r,(e=>e.values)))}catch(r){console.warn(`Error occurred while fetching registry ${n.id}:`,r)}})))}async function X(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),ie(e.id,void 0,"1.16")){const r=ie(e.id,void 0,"1.15")?`${J}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${J}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await Q(r,(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 r=`${J}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await Q(r);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}}async function K(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=S.registries.filter((e=>e.dynamic)).filter((t=>ie(e.id,t.minVersion,t.maxVersion)));if(ie(e.id,"1.16")){const o=`${Y}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await Q(o);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(r){console.warn("Error occurred while fetching dynamic registries:",r)}}}async function Q(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const r=await n.match(e);if(r&&r.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await r.json();console.debug(`[getData] fetching data ${e}`);const o=await fetch(e),i=t(await o.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 r=await fetch(e);return t(await r.json())}}const ee=["1.15","1.16","1.17"],te={},ne={},re={1.15:g,1.16:p,1.17:f};async function oe(e){return te[e]||(te[e]=(async()=>{try{const t=re[e].getCollections(),n={};await U(e,t,n);const r=re[e].getSchemas(t);return te[e]={collections:t,schemas:r,blockStates:n},te[e]}catch(t){throw new Error(`Cannot get version "${e}": ${t.message}`)}})()),te[e]}function ie(e,t,n){const r=S.versions.findIndex((t=>t.id===e)),o=t?S.versions.findIndex((e=>e.id===t)):0,i=n?S.versions.findIndex((e=>e.id===n)):S.versions.length-1;return o<=r&&r<=i}const ae=e=>("0"+e.toString(16)).substr(-2);function se(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,ae).join("")}function le(e){return`/${e}/`.replaceAll("//","/")}function ce(e){const t=e.replace(/^\//,"").replace(/\/$/,"");return S.generators.find((e=>e.url===t))}function de(e){const t=Math.abs(function(e){let t=0;for(let n=0;n>8)%256,(t>>16)%256]}function ue(e,t,n){return Math.max(e,Math.min(t,n))}function he(e,t,n){return n<0?e:n>1?t:me(n,e,t)}function me(e,t,n){return t+e*(n-t)}function ge(e,t,n,r,o,i){return me(t,me(e,n,r),me(e,o,i))}function pe(e){return e*e*e*(e*(6*e-15)+10)}const fe={system:"device_desktop",dark:"moon",light:"sun"};function ve({lang:e,title:t,version:n,theme:r,changeTheme:o,language:i,changeLanguage:a}){const s=W.bind(null,e),l=ce(v());return d("header",null,d("div",{class:"title"},d(_,{class:"home-link",href:"/"},_e.home),d("h2",null,t),l&&d(D,{icon:"chevron_down"},S.generators.filter((e=>e.category===(null==l?void 0:l.category)&&ie(n,e.minVersion))).map((e=>d(E,{label:s(e.id),active:e.id===l.id,onClick:()=>w(le(e.url))}))))),d("nav",null,d("ul",null,d("li",null,d(D,{icon:"globe"},S.languages.map((({code:e,name:t})=>d(E,{label:t,active:e===i,onClick:()=>a(e)}))))),d("li",null,d(D,{icon:fe[r]},Object.entries(fe).map((([e,t])=>d(E,{icon:t,label:s(`theme.${e}`),active:e===r,onClick:()=>o(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",title:s("github")},I.mark_github)))))}const _e={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"}))},we=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),r=this.p[t];this.p[t]=this.p[t+n],this.p[t+n]=r}}noise(e,t,n,r,o){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=pe(u),p=pe(h),f=pe(m);let v=0;return 0!==r&&(v=Math.floor(Math.min(o,h)/r)*r),this.sampleAndLerp(l,c,d,u,h-v,m,g,p,f)}gradDot(e,t,n,r){const o=we.GRADIENT[15&e];return o[0]*t+o[1]*n+o[2]*r}P(e){return 255&this.p[255&e]}sampleAndLerp(e,t,n,r,o,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,r,o,i,a,s,l,c,d){return me(n,ge(e,t,r,o,i,a),ge(e,t,s,l,c,d))}(a,s,l,this.gradDot(this.P(d),r,o,i),this.gradDot(this.P(m),r-1,o,i),this.gradDot(this.P(u),r,o-1,i),this.gradDot(this.P(g),r-1,o-1,i),this.gradDot(this.P(d+1),r,o,i-1),this.gradDot(this.P(m+1),r-1,o,i-1),this.gradDot(this.P(u+1),r,o-1,i-1),this.gradDot(this.P(g+1),r-1,o-1,i-1))}};let ye=we;ye.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 be{constructor(e,t,n){this.amplitudes=n,this.noiseLevels=Array(this.amplitudes.length);for(let r=0;r{const o=e[`${t}_noise`];return new Ce(n.seed+r,o.firstOctave,o.amplitudes)})),a={};e.biomes.forEach((e=>{a[e.biome]=Ve(e.biome,n.biomeColors)}));const s=t.data,l=-n.offset[0]-100+n.res/2,c=-n.offset[1]-100+n.res/2,d=4*t.width/n.res,u=4/n.res;for(let h=0;h<200;h+=n.res)for(let t=0;t<200;t+=n.res){const r=t*d+h*u,m=(h+l)*n.scale,g=(t+c)*n.scale,p=ze(i,e.biomes,m,g),f=null!=(o=a[p])?o:[128,128,128];s[r]=f[0],s[r+1]=f[1],s[r+2]=f[2],s[r+3]=255}}(e,t,n);case"fixed":return function(e,t,n){const r=t.data,o=Ve(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;r[t]=o[0],r[t+1]=o[1],r[t+2]=o[2],r[t+3]=255}}(e,t,n);case"checkerboard":return function(e,t,n){var r,o,i,a,s,l;const c={};null==(r=e.biomes)||r.forEach((e=>{c[e]=Ve(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!=(o=e.scale)?o: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 r=t*m+v*g,o=((((v+u)*n.scale>>p)+((t+h)*n.scale>>p))%f+f)%f,i=null==(s=e.biomes)?void 0:s[o],a=null!=(l=c[i])?l:[128,128,128];d[r]=a[0],d[r+1]=a[1],d[r+2]=a[2],d[r+3]=255}}(e,t,n)}}function Ve(e,t){var n;if(!e)return[128,128,128];const r=null!=(n=t[e])?n:Ae[e];return void 0===r?de(e):r}function ze(e,t,n,r){if(!Array.isArray(t)||0===t.length)return"";const o=e.map((e=>e.getValue(n,r,0)));let i=1/0,a="";for(const s of t){const e=Me(s.parameters,{altitude:o[0],temperature:o[1],humidity:o[2],weirdness:o[3],offset:0});e{Ne(t,null==e?void 0:e.decorator,n).forEach((t=>Se(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{Se(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 r,o;for(const i of null!=(r=null==e?void 0:e.features)?r:[])if(n.random()<(null!=(o=null==i?void 0:i.chance)?o:0))return void Se(t,i.feature,n);Se(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var r,o,i;Se(t,null==(i=null==e?void 0:e.features)?void 0:i[De(null!=(o=null==(r=null==e?void 0:e.features)?void 0:r.length)?o:0,n)],n)}},Be={chance:(e,t,n)=>{var r;return n.random()<1/(null!=(r=null==e?void 0:e.chance)?r:1)?[t]:[]},count:(e,t,n)=>{var r;return new Array(Ie(null!=(r=null==e?void 0:e.count)?r:1,n)).fill(t)},count_extra:(e,t,n)=>{var r,o;let i=null!=(r=null==e?void 0:e.count)?r:1;return n.random(){var r;return new Array(Ie(null!=(r=null==e?void 0:e.count)?r:1,n)).fill(t).map((e=>[e[0]+De(16,n),e[1],e[2]+De(16,n)]))},count_noise:(e,t,n)=>{const r=n.biomeInfoNoise.getValue(t[0]/200,0,t[2]/200){var r;const o=Math.max(1,e.noise_factor),i=n.biomeInfoNoise.getValue(t[0]/o,0,t[2]/o),a=Math.max(0,Math.ceil((i+(null!=(r=e.noise_offset)?r:0))*e.noise_to_count_ratio));return new Array(a).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,r)=>{const o=4*Math.floor(r/4)+1+De(3,n)+t[0];return[o,Math.max(n.seaLevel,je[ue(0,63,o)]),4*Math.floor(r%4)+1+De(3,n)+t[2]]})),decorated:(e,t,n)=>Ne(t,null==e?void 0:e.outer,n).flatMap((t=>Ne(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var r,o,i,a;return $e(t,De(null!=(r=null==e?void 0:e.spread)?r:0,n)+De(null!=(o=null==e?void 0:e.spread)?o:0,n)-(null!=(i=e.spread)?i:0)+(null!=(a=null==e?void 0:e.baseline)?a:0))},emerald_ore:(e,t,n)=>{const r=3+De(6,n);return[...new Array(r)].map((()=>[t[0]+De(16,n),4+De(28,n),t[2]+De(16,n)]))},fire:(e,t,n)=>{const r=1+De(De(Ie(null==e?void 0:e.count,n),n),n);return[...new Array(r)].map((()=>[t[0]+De(16,n),De(128,n),t[2]+De(16,n)]))},glowstone:(e,t,n)=>{const r=De(1+De(Ie(null==e?void 0:e.count,n),n),n);return[...new Array(r)].map((()=>[t[0]+De(16,n),De(128,n),t[2]+De(16,n)]))},heightmap:(e,t,n)=>$e(t,Math.max(n.seaLevel,je[ue(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>$e(t,De(2*Math.max(n.seaLevel,je[ue(0,63,t[0])]),n)),heightmap_world_surface:(e,t,n)=>$e(t,Math.max(n.seaLevel,je[ue(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+De(8,n),t[1],t[2]+4+De(8,n)]],lava_lake:(e,t,n)=>{var r,o;if(0===De((null!=(r=e.chance)?r:1)/10,n)){const r=De(De(248,n)+8,n);if(r[t],range:(e,t,n)=>{var r,o,i;return $e(t,De((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(o=null==e?void 0:e.top_offset)?o:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0))},range_biased:(e,t,n)=>{var r,o,i;return $e(t,De(De((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(o=null==e?void 0:e.top_offset)?o:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n))},range_very_biased:(e,t,n)=>{var r,o,i,a;return $e(t,De(De(De((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(o=null==e?void 0:e.top_offset)?o: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)=>$e(t,De(t[1]+32,n)),top_solid_heightmap:(e,t)=>$e(t,je[ue(0,63,t[0])]),magma:(e,t,n)=>$e(t,De(t[1]+32,n)),square:(e,t,n)=>[[t[0]+De(16,n),t[1],t[2]+De(16,n)]],water_lake:(e,t,n)=>{var r;return 0===De(null!=(r=e.chance)?r:1,n)?[[t[0]+De(16,n),De(256,n),t[2]+De(16,n)]]:[]}};class Re{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=be.fromRange(e+"djfqnqd",-15,0),this.maxLimitPerlinNoise=be.fromRange(e+"gowdnqs",-15,0),this.mainPerlinNoise=be.fromRange(e+"afiwmco",-7,0),this.depthNoise=be.fromRange(e+"qphnmeo",-15,0)}reset(e,t,n,r,o){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(o).fill(null),this.xOffset=r}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),r=Math.floor(e%this.chunkWidth)/this.chunkWidth,o=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]=ge(n,r,o[a],o[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),r=684.412*this.settings.sampling.xz_scale,o=684.412*this.settings.sampling.y_scale,i=r/this.settings.sampling.xz_factor,a=o/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,r,o,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=he(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=he(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,r,o,i,a){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=be.wrap(e*r*d),m=be.wrap(t*o*d),g=be.wrap(n*r*d),p=o*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 r=this.mainPerlinNoise.getOctaveNoise(u);r&&(c+=r.noise(be.wrap(e*i*d),be.wrap(t*a*d),be.wrap(n*i*d),a*d,t*a*d)/d)}d/=2}return he(s/512,l/512,(c/10+1)/2)}}function He(e,t){return e[t]>0?0:e[t+1]>0?150:255}const Fe=["dimension","worldgen/noise_settings","worldgen/configured_feature"],We=[{id:"biome-noise",generator:"dimension",path:new m.Path(["generator","biome_source"]),predicate:e=>e.get(new m.Path(["generator","type"])).endsWith("noise"),preview:({data:e,shown:t})=>{var n;const[r,o]=h(2),[i,a]=h(se()),[s,l]=h(void 0),m=null==(n=e.type)?void 0:n.replace(/^minecraft:/,""),g=u(null),p=u([0,0]),f=u(void 0),v=u(),_=u();c((()=>{v.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 o=n.createImageData(g.current.width,g.current.height);xe(e,o,{biomeColors:{},offset:p.current,scale:r,seed:i,res:t}),n.putImageData(o,0,0),1!==t&&(clearTimeout(f.current),f.current=setTimeout((()=>v.current(1)),150))},_.current=(t,n)=>{const o=200*t/g.current.clientWidth,a=200*n/g.current.clientHeight,s=function(e,t,n,r){var o,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],r);switch(null==(o=null==e?void 0:e.type)?void 0:o.replace(/^minecraft:/,"")){case"multi_noise":return ze(ke.map(((t,n)=>{const o=e[`${t}_noise`];return new Ce(r.seed+n,o.firstOctave,o.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,o=(((c>>t)+(d>>t))%n+n)%n;return null==(l=e.biomes)?void 0:l[o]}}(e,o,a,{biomeColors:{},offset:p.current,scale:r,seed:i,res:1});l(s)}})),$(g.current,((e,t)=>{const n=200*e/g.current.clientWidth,r=200*t/g.current.clientHeight;p.current=[p.current[0]+n,p.current[1]+r],v.current()})),function(e,t){if(!e)return;const n=e=>{t(e.offsetX,e.offsetY)},r=()=>{t(void 0,void 0)};c((()=>(e.addEventListener("mousemove",n),e.addEventListener("mouseleave",r),()=>{e.removeEventListener("mousemove",n),e.removeEventListener("mouseleave",r)})),[e])}(g.current,((e,t)=>{void 0===e||void 0===t?l(void 0):_.current(e,t)}));const w=JSON.stringify(e);c((()=>{t&&v.current()}),[w,r,i,t]);const y=e=>{p.current[0]*=r/e,p.current[1]*=r/e,o(e)};return d(b,null,d("div",{class:"controls"},s&&d(E,{label:s,class:"no-pointer"}),("multi_noise"===m||"checkerboard"===m)&&d(b,null,d(E,{icon:"dash",onClick:()=>y(1.5*r)}),d(E,{icon:"plus",onClick:()=>y(r/1.5)})),"multi_noise"===m&&d(E,{icon:"sync",onClick:()=>a(se())})),d("canvas",{ref:g,width:"200",height:"200"}))}},{id:"noise-settings",generator:"worldgen/noise_settings",path:new m.Path(["noise"]),predicate:()=>!0,preview:({lang:e,data:t,shown:n})=>{const r=W.bind(null,e),[o,i]=h(se()),[a,s]=h(.1),[l,m]=h(.2),g=u(null),p=u(0),f=u();c((()=>{f.current=()=>{const e=g.current.getContext("2d"),n=t.height;g.current.width=n,g.current.height=n;const r=e.createImageData(g.current.width,g.current.height);!function(e,t,n){const r=new Re(n.seed);r.reset(e,n.biomeDepth,n.biomeScale,n.offset,200);const o=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,f.current()}));const v=JSON.stringify(t);return c((()=>{n&&f.current()}),[v,a,l,o,n]),d(b,null,d("div",{class:"controls"},d(D,{icon:"gear"},d(j,{type:"number",label:r("preview.depth"),value:`${a}`,onChange:e=>s(Number(e))}),d(j,{type:"number",label:r("preview.scale"),value:`${l}`,onChange:e=>m(Number(e))})),d(E,{icon:"sync",onClick:()=>i(se())})),d("canvas",{ref:g,width:"200",height:t.height}))}},{id:"decorator",generator:"worldgen/configured_feature",path:new m.Path([]),predicate:()=>!0,preview:({data:e,version:t,shown:n})=>{const[r,o]=h(4),[i,a]=h(se()),s=u(null),l=u();c((()=>{l.current=()=>{const n=s.current.getContext("2d");s.current.width=16*r,s.current.height=16*r;const o=n.createImageData(s.current.width,s.current.height);!function(e,t,n){const r={placements:[],features:[],random:y(n.seed),biomeInfoNoise:new be(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,r,i,n]),d(b,null,d("div",{class:"controls"},d(E,{icon:"dash",onClick:()=>o(Math.min(16,r+1))}),d(E,{icon:"plus",onClick:()=>o(Math.max(1,r-1))}),d(E,{icon:"sync",onClick:()=>a(se())})),d("canvas",{ref:s,width:"64",height:"64"}))}}];function Ge({lang:e,model:t,version:n,id:r,shown:o}){const[,i]=h(0);return P(t,(()=>{i((e=>e+1))})),d(b,null,We.filter((e=>e.generator===r)).map((r=>{const i=null==t?void 0:t.get(r.path);return t&&void 0!==i&&r.predicate(t)?r.preview({lang:e,model:t,data:i,version:n,shown:o}):d(b,null)})))}const Je={base:({},e,t)=>t,choice({switchNode:e},t,n,r){return e.hook(this,t,n,r)},list({children:e},t,n,r){return Array.isArray(n)?n.map(((n,o)=>e.hook(this,t.push(o),n,r))):n},map({children:e,config:t},n,r,o){var i,a;if(void 0===r)return;const s="block_state_map"===(null==(i=t.validation)?void 0:i.validator)?null==(a=o.blockStates)?void 0:a[m.relativePath(n,t.validation.params.id).get()]:null,l={};return Object.keys(r).forEach((t=>{var i;s&&!Object.keys(null!=(i=s.properties)?i:{}).includes(t)||(l[t]=e.hook(this,n.push(t),r[t],o))})),l},object({getActiveFields:e},t,n,r){if(null==n||"object"!=typeof n)return n;const o={},i=e(t);return Object.keys(i).filter((e=>i[e].enabled(t))).forEach((e=>{o[e]=i[e].hook(this,t.push(e),n[e],r)})),o}};var Ye,qe;(qe=Ye||(Ye={})).ID_LANGUAGE="language",qe.ID_THEME="theme",qe.ID_VERSION="schema_version",qe.ID_INDENT="indentation",qe.getLanguage=function(){var e;return null!=(e=localStorage.getItem(qe.ID_LANGUAGE))?e:"en"},qe.getTheme=function(){var e;return null!=(e=localStorage.getItem(qe.ID_THEME))?e:"dark"},qe.getVersion=function(){const e=localStorage.getItem(qe.ID_VERSION);return e&&ee.includes(e)?e:"1.17"},qe.getIndent=function(){var e;return null!=(e=localStorage.getItem(qe.ID_INDENT))?e:"2_spaces"},qe.setLanguage=function(e){e&&localStorage.setItem(qe.ID_LANGUAGE,e)},qe.setTheme=function(e){e&&localStorage.setItem(qe.ID_THEME,e)},qe.setVersion=function(e){e&&localStorage.setItem(qe.ID_VERSION,e)},qe.setIndent=function(e){e&&localStorage.setItem(qe.ID_INDENT,e)};const Ue={"2_spaces":2,"4_spaces":4,tabs:"\t"};function Ze({lang:e,name:t,model:n,blockStates:r,doCopy:o,doDownload:i,doImport:a,onError:s}){const l=W.bind(null,e),[g,p]=h(Ye.getIndent()),f=u(null),v=u(null),_=u();c((()=>{_.current=()=>{if(n&&r)try{const e={blockStates:null!=r?r:{}},t=n.schema.hook(Je,new m.ModelPath(n),n.data,e);f.current.value=JSON.stringify(t,null,Ue[g])+"\n"}catch(e){s(`Error getting JSON output: ${e.message}`),console.error(e),f.current.value=""}}})),P(n,(()=>{_.current()})),c((()=>{n&&_.current()}),[n]),c((()=>{_.current()}),[g]);c((()=>{o&&f.current&&(f.current.select(),document.execCommand("copy"))}),[o]),c((()=>{if(i&&f.current&&v.current){const e=encodeURIComponent(f.current.value);v.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),v.current.setAttribute("download",`${t}.json`),v.current.click()}}),[i]),c((()=>{a&&f.current&&(f.current.value="",f.current.select())}),[a]);return d(b,null,d("div",{class:"controls"},d(D,{icon:"gear"},Object.entries(Ue).map((([e])=>d(E,{label:l(`indentation.${e}`),active:g===e,onClick:()=>{return t=e,Ye.setIndent(t),void p(t);var t}}))))),d("textarea",{ref:f,class:"source",onChange:()=>{try{const e=JSON.parse(f.current.value);null==n||n.reset(e,!1)}catch(e){s(`Error importing: ${e.message}`)}},spellcheck:!1,autocorrect:"off",placeholder:l("source_placeholder")}),d("a",{ref:v,style:"display: none;"}))}function Xe({title:e,link:t,icon:n,children:r}){return d("a",{class:"tool-card",href:t},n&&_e[n],d("div",null,d("h3",null,e),r))}const Ke=["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"],Qe=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],et=["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"],tt=["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","nbt_operation.op","number_provider.value","score_provider.name","score_provider.target","nbt_provider.source","nbt_provider.target"],nt=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],rt=new m.DataModel(m.MapNode(m.StringNode(),m.StringNode()),{historyMax:0}),ot={base:()=>[null,null,null],boolean:(e,t,n,r,o)=>[null,d(it,s({},l(s({},e),{path:t,value:n,lang:r,states:o}))),null],choice({choices:e,config:t,switchNode:n},r,o,i,a){const s=n.activeCase(r,!0),l=(null==t?void 0:t.context)?new m.ModelPath(r.getModel(),new m.Path(r.getArray(),[t.context])):r,[c,u,h]=s.node.hook(this,l,o,i,a);if(1===e.length)return[c,u,h];const g=(null==t?void 0:t.choiceContext)?new m.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new m.Path([],[t.context]):r,p=d("select",{value:s.type,onChange:t=>(t=>{var n;const o=null!=(n=e.find((e=>e.type===t)))?n:s;console.log(o),r.model.set(r,o.change?o.change(t):o.node.default())})(t.target.value)},e.map((e=>d("option",{value:e.type},ut(i,g.contextPush(e.type))))));return[c,d(b,null,p,u),h]},list:({children:e},t,n,r,o)=>[null,d("button",{class:"add",onClick:()=>{Array.isArray(n)||(n=[]),t.model.set(t,[e.default(),...n])}},I.plus_circle),d(b,null,n&&Array.isArray(n)&&n.map(((i,a)=>{const s=t.push(a).contextPush("entry");return d("div",{class:"node-entry"},d(lt,{path:s,schema:e,value:i,lang:r,states:o},d("button",{class:"remove",onClick:()=>s.set(void 0)},I.trashcan),n.length>1&&d("div",{class:"node-move"},d("button",{class:"move",onClick:()=>{const e=[...n];[e[a-1],e[a]]=[e[a],e[a-1]],t.model.set(t,e)},disabled:0===a},I.chevron_up),d("button",{class:"move",onClick:()=>{const e=[...n];[e[a+1],e[a]]=[e[a],e[a+1]],t.model.set(t,e)},disabled:a===n.length-1},I.chevron_down))))})),n&&n.length>2&&d("div",{class:"node-entry"},d("div",{class:"node node-header"},d("button",{class:"add",onClick:()=>{Array.isArray(n)||(n=[]),t.model.set(t,[...n,e.default()])}},I.plus_circle))))],map({children:e,keys:t,config:n},r,o,i,a){var s,l,c,u,h;const g=new m.ModelPath(rt,new m.Path([dt(r.toString())])),p="block_state_map"===(null==(s=n.validation)?void 0:s.validator)?null==a?void 0:a[m.relativePath(r,n.validation.params.id).get()]:null,f=(null==p?void 0:p.properties)?m.StringNode(null,{enum:Object.keys(null!=(l=p.properties)?l:{})}):t;if(p&&"Properties"===r.last()){"object"!=typeof o&&(o={});const e=Object.entries(null!=(c=p.properties)?c:{}).map((([e,t])=>[e,m.StringNode(null,{enum:t})]));return Object.entries(null!=(u=p.properties)?u:{}).forEach((([e,t])=>{"string"!=typeof o[e]?r.model.errors.add(r.push(e),"error.expected_string"):t.includes(o[e])||r.model.errors.add(r.push(e),"error.invalid_enum_option",o[e])})),m.ObjectNode(Object.fromEntries(e)).hook(this,r,o,i,a)}return[null,d(b,null,f.hook(this,g,null!=(h=g.get())?h:"",i,a)[1],d("button",{class:"add",onClick:()=>{const t=g.get();r.model.set(r.push(t),e.default())}},I.plus_circle)),d(b,null,"object"==typeof o&&Object.entries(o).map((([t,n])=>{var o,s,l,c;const u=r.modelPush(t),h=p?m.StringNode(null,{enum:null!=(s=null==(o=p.properties)?void 0:o[t])?s:[]}):e;(null==(l=null==p?void 0:p.properties)?void 0:l[t])&&"string"==typeof n&&!(null==(c=p.properties)?void 0:c[t].includes(n))&&r.model.errors.add(u,"error.invalid_enum_option",n);return d("div",{class:"node-entry",key:t},d(lt,{schema:h,path:u,value:n,lang:i,states:a,label:t},d("button",{class:"remove",onClick:()=>u.set(void 0)},I.trashcan)))})))]},number:(e,t,n,r,o)=>[null,d(at,s({},l(s({},e),{path:t,value:n,lang:r,states:o}))),null],object({node:e,getActiveFields:t,getChildModelPath:n},r,o,i,a){let s=null,l=null;if(e.optional())if(void 0===o){l=d("button",{class:"collapse closed",onClick:()=>r.set(e.default())},I.plus_circle)}else{l=d("button",{class:"collapse open",onClick:()=>r.set(void 0)},I.trashcan)}const c=d(b,null,"object"==typeof o&&!(e.optional()&&void 0===o)&&Object.entries(t(r)).filter((([e,t])=>t.enabled(r))).map((([e,t])=>{var c,u,h;const m=n(r,e),g=m.getContext().join(".");if(Qe.includes(g))return null;const[p,f,v]=t.hook(this,m,o[e],i,a);if(!(p||f||(null!=(h=null==(u=null==(c=null==v?void 0:v.props)?void 0:c.children)?void 0:u.length)?h:0)>0))return null;const _="object"===t.type(m)&&et.includes(g),w=tt.includes(g);return _||w?(s=d(b,null,s,d(ht,{lang:i,path:m}),d(mt,{lang:i,path:m}),p),l=d(b,null,l,f),_?v:null):d(lt,{schema:t,path:m,value:o[e],lang:i,states:a})})));return[s,l,c]},string:(e,t,n,r,o)=>[null,d(st,s({},l(s({},e),{path:t,value:n,lang:r,states:o}))),null]};function it({path:e,node:t,value:n,lang:r}){const o=r=>{e.model.set(e,t.optional()&&n===r?void 0:r)};return d(b,null,d("button",{class:!1===n?"selected":"",onClick:()=>o(!1)},W(r,"false")),d("button",{class:!0===n?"selected":"",onClick:()=>o(!0)},W(r,"true")))}function at({path:e,config:t,integer:n,value:r}){return d("input",{type:(null==t?void 0:t.color)?"color":"text",onChange:r=>{const o=r.target.value,i=(null==t?void 0:t.color)?parseInt(o.slice(1),16):n?parseInt(o):parseFloat(o);e.model.set(e,i)},value:(null==t?void 0:t.color)?"#"+(null==r?void 0:r.toString(16).padStart(6,"0")):null!=r?r:""})}function st({path:e,getValues:t,config:n,node:r,value:o,lang:i,states:a}){var s;const l=t=>{const n=t.target.value;e.model.set(e,0===n.length?void 0:n),t.stopPropagation()},c=t(),u=e.getContext().join(".");if(nt.includes(u))return d("textarea",{value:null!=o?o:"",onChange:l});if(ct(n)&&!n.additional||Ke.includes(u)){let e=new m.Path([]);return ct(n)&&"string"==typeof n.enum?e=e.contextPush(n.enum):ct(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool||(e=e.contextPush(n.params.pool)),d("select",{value:null!=o?o:"",onChange:l},r.optional()&&d("option",{value:""},W(i,"unset")),c.map((t=>d("option",{value:t},ut(i,e.contextPush(t.replace(/^minecraft:/,"")))))))}if(ct(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=se();return d(b,null,d("input",{value:null!=o?o:"",onChange:l,list:c.length>0?e:""}),c.length>0&&d("datalist",{id:e},c.map((e=>d("option",{value:e})))))}{const t=null==a?void 0:a[m.relativePath(e,n.params.id).get()],r=Object.keys(null!=(s=null==t?void 0:t.properties)?s:{});return d("select",{value:null!=o?o:"",onChange:l},r.map((e=>d("option",null,e))))}}function lt({label:e,schema:t,path:n,value:r,lang:o,states:i,children:a}){const s=t.type(n),l=t.category(n),[c,u,h]=t.hook(ot,n,r,o,i);return d("div",{class:`node ${s}-node`,"data-category":l},d("div",{class:"node-header"},d(ht,{lang:o,path:n}),d(mt,{lang:o,path:n}),a,c,d("label",null,null!=e?e:ut(o,n,`${n.last()}`)),u),h&&d("div",{class:"node-body"},h))}function ct(e){return!!(null==e?void 0:e.enum)}function dt(e){var t,n=0;for(t=0;t{const[r,o]=L();return d("div",{class:`node-icon ${e}${r?" show":""}`,onClick:o},I[t],d("span",{class:"icon-popup"},n))},pt=C();function ft({lang:e,model:t,blockStates:n,onError:r}){if(!t||!n)return d(b,null);const[o]=k((e=>{r(`Error rendering the tree: ${e.message}`),console.error(e)}));if(o)return d(b,null);const[i,a]=h(0);P(t,(()=>{a((e=>e+1))}));const s=new m.ModelPath(t),l=u(null);return x((()=>{var r;const[o,i,a]=t.schema.hook(ot,s,pt(t.data),e,n);l.current=(null==(r=null==i?void 0:i.props)?void 0:r.children.some((e=>e)))?d("div",{class:`node ${t.schema.type(s)}-node`,"data-category":t.schema.category(s)},d("div",{class:"node-header"},o,i),d("div",{class:"node-body"},a)):a}),[e,t,n,i]),d("div",{class:"tree"},l.current)}function vt({lang:e}){const t=W.bind(null,e);return d("main",null,d("div",{class:"settings"},d("p",null,t("settings.fields.description")),d("ul",{class:"field-list"})))}function _t({lang:e,changeTitle:t,version:n,onChangeVersion:r}){var o;const i=W.bind(null,e),[a,u]=h(null),[g,p]=k();if(g)return d("main",null,d(O,{error:`Something went wrong rendering the generator: ${g.message}`,onDismiss:p}));const f=ce(v());if(!f)return d("main",null,d(O,{error:`Cannot find generator "${v()}"`}));c((()=>{u(null)}),[f.id,n]);const _=S.versions.filter((e=>ie(e.id,f.minVersion))).map((e=>e.id));t(i("title.generator",i(f.id)),_),ie(n,f.minVersion)||u(`The minimum version for this generator is ${f.minVersion}`);const[w,y]=h(null),[C,x]=h(null);c((()=>{y(null),async function(e){return(await oe(e)).blockStates}(n).then((e=>x(e))),async function(e,t){var n;if(!ne[t]||ne[t].version!==e){const o=await oe(e),i=null==(n=S.generators.find((e=>e.id===t)))?void 0:n.schema;if(!i)throw new Error(`Cannot find model ${t}`);try{const n=o.schemas.get(i),r=new m.DataModel(n);ne[t]?r.reset(ne[t].model.data,!1):(r.validate(!0),r.history=[JSON.stringify(r.data)]),ne[t]={model:r,version:e}}catch(r){throw new Error(`Cannot get generator "${t}" for version "${e}": ${r.message}`)}}return ne[t].model}(n,f.id).then((e=>y(e))).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id]),P(w,(()=>{u(null)}));const V=e=>{e.ctrlKey&&"z"===e.key?(M.generatorEvent("undo","Hotkey"),null==w||w.undo()):e.ctrlKey&&"y"===e.key&&(M.generatorEvent("redo","Hotkey"),null==w||w.redo())};c((()=>(document.addEventListener("keyup",V),()=>{document.removeEventListener("keyup",V)})),[w]);const[z,L]=h(""),[$,N]=h([]);c((()=>{(async function(e){return(await oe(e)).collections})(n).then((e=>{const t=(null!=z?z:"").trim().split(" "),n=e.get(f.id).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&N(n)})).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id,z]);const T=e=>{var t;M.generatorEvent("load-preset",e),async function(e,t,n){console.debug(`[fetchPreset] ${n} ${t} ${n}`);const r=S.versions.find((t=>t.id===e));try{const e=await fetch(`${Y}/${r.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`);return await e.json()}catch(o){console.warn(`Error occurred while fetching ${t} preset ${n}:`,o)}}(n,null!=(t=f.path)?t:f.id,e).then((e=>{null==w||w.reset(e,!1)}))},[B,R]=h(window.innerWidth>820),[H,F]=h(0),[G,J]=h(0),[q,U]=h(0),[Z,X]=h(!1),K=Fe.includes(f.id);let Q=1;K&&(Q+=1),B&&(Q+=2);return d(b,null,d("main",{class:Z?"has-preview":""},d(A,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(E,{icon:"upload",label:i("import"),onClick:()=>{M.generatorEvent("import"),R(!0),U(q+1)}}),d(D,{icon:"archive",label:i("presets"),relative:!1},d(j,{icon:"search",large:!0,value:z,onChange:L,doSelect:1}),d("div",{class:"result-list"},$.map((e=>d(E,{label:e,onClick:()=>T(e)})))),0===$.length&&d(E,{label:i("no_presets")})),d(D,{icon:"tag",label:n},_.reverse().map((e=>d(E,{label:e,active:e===n,onClick:()=>r(e)})))),d(D,{icon:"kebab_horizontal"},d(E,{icon:"history",label:i("reset"),onClick:()=>{M.generatorEvent("reset"),null==w||w.reset(w.schema.default(),!0)}}),d(E,{icon:"arrow_left",label:i("undo"),onClick:e=>{e.stopPropagation(),M.generatorEvent("undo","Menu"),null==w||w.undo()}}),d(E,{icon:"arrow_right",label:i("redo"),onClick:e=>{e.stopPropagation(),M.generatorEvent("redo","Menu"),null==w||w.redo()}}))),a&&d(O,{error:a,onDismiss:()=>u(null)}),d(ft,l(s({},{lang:e,model:w,version:n,blockStates:C}),{onError:u}))),d("div",{class:"popup-actions",style:`--offset: -${10+50*Q}px;`},d("div",{class:"popup-action action-preview"+(K?" shown":""),onClick:()=>{M.generatorEvent("toggle-preview",Z?"hidden":"visible"),X(!Z)}},Z?I.x_circle:I.play),d("div",{class:"popup-action action-download"+(B?" shown":""),onClick:()=>{M.generatorEvent("download"),J(G+1)}},I.download),d("div",{class:"popup-action action-copy"+(B?" shown":""),onClick:()=>{M.generatorEvent("copy"),F(H+1)}},I.clippy),d("div",{class:"popup-action action-code shown",onClick:()=>{M.generatorEvent("toggle-output",B?"hidden":"visible"),R(!B),F(0),J(0),U(0)}},B?I.chevron_right:I.code)),d("div",{class:"popup-preview"+(Z?" shown":"")},d(Ge,l(s({},{lang:e,model:w,version:n,id:f.id}),{shown:Z,onError:u}))),d("div",{class:"popup-source"+(B?" shown":"")},d(Ze,l(s({},{lang:e,model:w,blockStates:C,doCopy:H,doDownload:G,doImport:q}),{name:null!=(o=f.schema)?o:"data",onError:u}))))}function wt({lang:e,changeTitle:t}){const n=W.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},S.generators.filter((e=>!e.category)).map((e=>d(Xe,{title:n(e.id),link:le(e.url)}))),d(Xe,{title:n("worldgen"),link:"/worldgen/"}),d("hr",null),d(Xe,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/"},d("p",null,"Analyse your performance reports")),d(Xe,{title:"Minecraft Sounds",icon:"sounds",link:"https://misode.github.io/sounds/"},d("p",null,"Browse through and mix all the vanilla sounds")),d(Xe,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/"},d("p",null,"Convert your 1.16 data packs to 1.17"))))}function yt({lang:e,changeTitle:t}){const n=W.bind(null,e);return t(n("title.generator_category",n("worldgen"))),d("main",null,d("div",{class:"home"},S.generators.filter((e=>"worldgen"===e.category)).map((e=>d(Xe,{title:n(e.id),link:le(e.url)})))))}function bt(){const[e,t]=h("en");c((()=>{(async()=>{const e=Ye.getLanguage();await Promise.all([G("en"),..."en"!==e?[G(e)]:[]]),t(e)})()}),[]);const[n,r]=h(Ye.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const[o,i]=h(Ye.getVersion()),[a,u]=h(W(e,"title.home")),m=(e,t=["1.15","1.16","1.17"])=>{document.title=`${e} Minecraft ${t.join(", ")}`,u(e)};return d(b,null,d(ve,s({},{lang:e,title:a,version:o,theme:n,language:e,changeLanguage:async e=>{F[e]||await G(e),M.setLanguage(e),Ye.setLanguage(e),t(e)},changeTheme:e=>{M.setTheme(e),Ye.setTheme(e),r(e)}})),d(z,{onChange:e=>{setTimeout((()=>M.pageview(le(e.url))))}},d(wt,s({path:"/"},{lang:e,changeTitle:m})),d(vt,s({path:"/settings/fields"},{lang:e,changeTitle:m})),d(yt,s({path:"/worldgen"},{lang:e,changeTitle:m})),d(_t,l(s({default:!0},{lang:e,version:o,changeTitle:m}),{onChangeVersion:e=>{M.setVersion(e),Ye.setVersion(e),i(e)}}))))}V(d(bt,null),document.body); -//# sourceMappingURL=index.22bf6748.js.map diff --git a/assets/index.22bf6748.js.map b/assets/index.22bf6748.js.map deleted file mode 100644 index 9aeb7e48..00000000 --- a/assets/index.22bf6748.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.22bf6748.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/hooks/useFocus.ts","../../src/app/hooks/useModel.ts","../../src/app/hooks/useOnDrag.ts","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/DataFetcher.ts","../../src/app/Schemas.ts","../../src/app/Utils.ts","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../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/Store.ts","../../src/app/components/SourcePanel.tsx","../../src/app/components/ToolCard.tsx","../../src/app/schema/renderHtml.tsx","../../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 onInput = 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 { useEffect, useState } from 'preact/hooks'\n\nexport function useFocus(): [boolean, () => unknown] {\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 [active, () => setActive(true)]\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\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 { ComponentChildren } from 'preact'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\nimport { useFocus } from '../hooks'\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] = useFocus()\n\n\treturn
\n\t\t\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tchevron_up: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tinfo: ,\n\tissue_opened: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tplus_circle: ,\n\tsearch: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tthree_bars: ,\n\ttrashcan: ,\n\tunfold: ,\n\tupload: ,\n\tx: ,\n\tx_circle: ,\n}\n","import { Octicon } from './Octicon'\n\ntype ErrorPanelProps = {\n\terror: string,\n\tonDismiss?: () => unknown,\n}\nexport function ErrorPanel({ error, onDismiss }: ErrorPanelProps) {\n\treturn
\n\t\t{onDismiss &&
{Octicon.x}
}\n\t\t

{error}

\n\t\t

If you think this is a bug, you can report it 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 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.generators.find(g => g.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 config from '../config.json'\n\nexport 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 getGenerator(url: string) {\n\tconst trimmedUrl = url.replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\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, route } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { locale } from '../Locales'\nimport type { VersionId } from '../Schemas'\nimport { checkVersion } from '../Schemas'\nimport { cleanUrl, getGenerator } 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\tversion: VersionId,\n\ttheme: string,\n\tchangeTheme: (theme: string) => unknown,\n\tlanguage: string,\n\tchangeLanguage: (language: string) => unknown,\n}\nexport function Header({ lang, title, version, theme, changeTheme, language, changeLanguage }: HeaderProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst gen = getGenerator(getCurrentUrl())\n\n\treturn
\n\t\t
\n\t\t\t{Icons.home}\n\t\t\t

{title}

\n\t\t\t{gen && \n\t\t\t\t{config.generators\n\t\t\t\t\t.filter(g => g.category === gen?.category && checkVersion(version, g.minVersion))\n\t\t\t\t\t.map(g =>\n\t\t\t\t\t\t route(cleanUrl(g.url))} />\n\t\t\t\t\t)}\n\t\t\t}\n\t\t
\n\t\t\n\t
\n}\n","export const Icons = {\n\thome: ,\n\treport: ,\n\tsounds: ,\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\ntype BiomeColors =Record\ntype BiomeSourceOptions = {\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: string,\n}\n\nconst 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\tif (state.preset?.replace(/^minecraft:/, '') === 'nether') {\n\t\tstate = NetherPreset\n\t}\n\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\nconst NetherPreset = {type:'minecraft:multi_noise',seed:0,altitude_noise:{firstOctave:-7,amplitudes:[1,1]},temperature_noise:{firstOctave:-7,amplitudes:[1,1]},humidity_noise:{firstOctave:-7,amplitudes:[1,1]},weirdness_noise:{firstOctave:-7,amplitudes:[1,1]},biomes:[{biome:'minecraft:nether_wastes',parameters:{altitude:0,temperature:0,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{altitude:0,temperature:0,humidity:-0.5,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{altitude:0,temperature:0.4,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{altitude:0,temperature:0,humidity:0.5,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{altitude:0,temperature:-0.5,humidity:0,weirdness:0,offset:0.175}}]}\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/configured_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/configured_feature',\n\t\tpath: new Path([]),\n\t\tpredicate: () => true,\n\t\tpreview: DecoratorPreview,\n\t},\n]\n\ntype PreviewPanelProps = {\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 }: PreviewPanelProps) {\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 { 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\tuseEffect(() => {\n\t\tif (model) retransform.current()\n\t}, [model])\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\tonError(`Error importing: ${e.message}`)\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 type { BooleanHookParams, EnumOption, Hook, INode, NumberHookParams, StringHookParams, ValidationOption } from '@mcschema/core'\nimport { DataModel, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { ComponentChildren, JSX } from 'preact'\nimport { Octicon } from '../components/Octicon'\nimport { useFocus } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry } from '../Schemas'\nimport { hexId } from '../Utils'\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', 'nbt_operation.op', 'number_provider.value', 'score_provider.name', 'score_provider.target', 'nbt_provider.source', 'nbt_provider.target']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\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\ntype JSXTriple = [JSX.Element | null, JSX.Element | null, JSX.Element | null]\ntype RenderHook = Hook<[any, string, BlockStateRegistry], JSXTriple>\n\ntype NodeProps = T & { node: INode } & { path: ModelPath } & { value: any} & { lang: string } & { states: BlockStateRegistry }\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: RenderHook = {\n\tbase() {\n\t\treturn [null, null, null]\n\t},\n\n\tboolean(params, path, value, lang, states) {\n\t\treturn [null, , null]\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, lang, states) {\n\t\tconst choice = switchNode.activeCase(path, true) as typeof choices[number]\n\t\tconst contextPath = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, contextPath, value, lang, states)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\t\tconst choiceContextPath = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\t\tconst set = (value: string) => {\n\t\t\tconst c = choices.find(c => c.type === value) ?? choice\n\t\t\tconsole.log(c)\n\t\t\tpath.model.set(path, c.change ? c.change(value) : c.node.default())\n\t\t}\n\t\tconst inject = \n\t\treturn [prefix, <>{inject}{suffix}, body]\n\t},\n\n\tlist({ children }, path, value, lang, states) {\n\t\tconst onAdd = () => {\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 = () => {\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\t\tconst body = <>\n\t\t\t{(value && Array.isArray(value)) && value.map((cValue, index) => {\n\t\t\t\tconst cPath = path.push(index).contextPush('entry')\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\tconst onMoveUp = () => {\n\t\t\t\t\tconst v = [...value];\n\t\t\t\t\t[v[index - 1], v[index]] = [v[index], v[index - 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst onMoveDown = () => {\n\t\t\t\t\tconst v = [...value];\n\t\t\t\t\t[v[index + 1], v[index]] = [v[index], v[index + 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\treturn
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{value.length > 1 &&
\n\t\t\t\t\t\t\t\n\t\t\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\t{(value && value.length > 2) &&
\n\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 [null, suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, lang, states) {\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = () => {\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' ? states?.[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\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, lang, states)\n\t\t}\n\t\tconst suffix = <>\n\t\t\t{keysSchema.hook(this, keyPath, keyPath.get() ?? '', lang, states)[1]}\n\t\t\t\n\t\t\n\t\tconst body = <>\n\t\t\t{typeof value === 'object' && Object.entries(value).map(([key, cValue]) => {\n\t\t\t\tconst cPath = path.modelPush(key)\n\t\t\t\tconst cSchema = blockState\n\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t: children\n\t\t\t\tif (blockState?.properties?.[key] && typeof cValue === 'string'\n\t\t\t\t\t&& !blockState.properties?.[key].includes(cValue)) {\n\t\t\t\t\tpath.model.errors.add(cPath, 'error.invalid_enum_option', cValue)\n\t\t\t\t}\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\treturn
\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 [null, suffix, body]\n\t},\n\n\tnumber(params, path, value, lang, states) {\n\t\treturn [null, , null]\n\t},\n\n\tobject({ node, getActiveFields, getChildModelPath }, path, value, lang, states) {\n\t\tlet prefix: JSX.Element | null = null\n\t\tlet suffix: JSX.Element | null = null\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tconst onExpand = () => path.set(node.default())\n\t\t\t\tsuffix = \n\t\t\t} else {\n\t\t\t\tconst onCollapse = () => path.set(undefined)\n\t\t\t\tsuffix = \n\t\t\t}\n\t\t}\n\t\tconst body = <>\n\t\t\t{(typeof value === 'object' && !(node.optional() && value === undefined)) &&\n\t\t\t\tObject.entries(getActiveFields(path))\n\t\t\t\t\t.filter(([_, child]) => child.enabled(path))\n\t\t\t\t\t.map(([key, child]) => {\n\t\t\t\t\t\tconst cPath = getChildModelPath(path, key)\n\t\t\t\t\t\tconst context = cPath.getContext().join('.')\n\t\t\t\t\t\tif (hiddenFields.includes(context)) return null\n\t\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = child.hook(this, cPath, value[key], lang, states)\n\t\t\t\t\t\tif (!cPrefix && !cSuffix && !((cBody?.props?.children?.length ?? 0) > 0)) return null\n\t\t\t\t\t\tconst isFlattened = child.type(cPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\t\t\tprefix = <>{prefix}{cPrefix}\n\t\t\t\t\t\t\tsuffix = <>{suffix}{cSuffix}\n\t\t\t\t\t\t\treturn isFlattened ? cBody : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \n\t\t\t\t\t})\n\t\t\t}\n\t\t\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring(params, path, value, lang, states) {\n\t\treturn [null, , null]\n\t},\n}\n\nfunction BooleanSuffix({ path, node, value, lang }: NodeProps) {\n\tconst set = (target: boolean) => {\n\t\tpath.model.set(path, node.optional() && value === target ? undefined : target)\n\t}\n\treturn <>\n\t\t\n\t\t\n\t\n}\n\nfunction NumberSuffix({ path, config, integer, value }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = config?.color\n\t\t\t? parseInt(value.slice(1), 16)\n\t\t\t: integer ? parseInt(value) : parseFloat(value)\n\t\tpath.model.set(path, parsed)\n\t}\n\treturn \n}\n\nfunction StringSuffix({ path, getValues, config, node, value, lang, states }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tconst newValue = (evt.target as HTMLSelectElement).value\n\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\tevt.stopPropagation()\n\t}\n\tconst values = getValues()\n\tconst context = path.getContext().join('.')\n\tif (nbtFields.includes(context)) {\n\t\treturn \n\t} else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) {\n\t\tlet context = new Path([])\n\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\tcontext = context.contextPush(config.enum)\n\t\t} else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') {\n\t\t\tcontext = context.contextPush(config.params.pool)\n\t\t}\n\t\treturn \n\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\tconst blockState = states?.[relativePath(path, config.params.id).get()]\n\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\treturn \n\t} else {\n\t\tconst datalistId = hexId()\n\t\treturn <>\n\t\t\t 0 ? datalistId : ''} />\n\t\t\t{values.length > 0 && \n\t\t\t\t{values.map(v => }\n\t\t\n\t}\n}\n\ntype TreeNodeProps = {\n\tschema: INode,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tstates: BlockStateRegistry,\n\tcompare?: any,\n\tlabel?: string,\n\tchildren?: ComponentChildren,\n}\nfunction TreeNode({ label, schema, path, value, lang, states, children }: TreeNodeProps) {\n\tconst type = schema.type(path)\n\tconst category = schema.category(path)\n\tconst [prefix, suffix, body] = schema.hook(renderHtml, path, value, lang, states)\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\t{prefix}\n\t\t\t\n\t\t\t{suffix}\n\t\t
\n\t\t{body &&
{body}
}\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(lang: string, 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 = locale(lang, key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn ctx[ctx.length - 1]\n}\n\nfunction ErrorPopup({ lang, path }: { lang: string, path: ModelPath }) {\n\tconst e = path.model.errors.get(path, true)\n\tif (e.length === 0) return null\n\tconst message = locale(lang, e[0].error, ...(e[0].params ?? []))\n\treturn popupIcon('node-error', 'issue_opened', message)\n}\n\nfunction HelpPopup({ lang, path }: { lang: string, path: Path }) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = locale(lang, key)\n\tif (message === key) return null\n\treturn popupIcon('node-help', 'info', message)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string) => {\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t{Octicon[icon]}\n\t\t{popup}\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport type { JSX } from 'preact'\nimport { useErrorBoundary, useMemo, useRef, useState } from 'preact/hooks'\nimport rfdc from 'rfdc'\nimport { useModel } from '../hooks'\nimport { renderHtml } from '../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nconst clone = rfdc()\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, blockStates, onError }: TreePanelProps) {\n\tif (!model || !blockStates) return <>\n\n\tconst [error] = useErrorBoundary(e => {\n\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\tconsole.error(e)\n\t})\n\tif (error) return <>\n\n\tconst [state, setState] = useState(0)\n\tuseModel(model, () => {\n\t\tsetState(state => state + 1)\n\t})\n\n\tconst path = new ModelPath(model)\n\tconst tree = useRef(null)\n\tuseMemo(() => {\n\t\tconst [prefix, suffix, body] = model.schema.hook(renderHtml, path, clone(model.data), lang, blockStates)\n\t\ttree.current = suffix?.props?.children.some((c: any) => c) ?
\n\t\t\t
{prefix}{suffix}
\n\t\t\t
{body}
\n\t\t
: body\n\t}, [lang, model, blockStates, state])\n\n\treturn
{tree.current}
\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 { getCurrentUrl } from 'preact-router'\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 { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { checkVersion, getBlockStates, getCollections, getModel } from '../Schemas'\nimport { getGenerator } from '../Utils'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: string[]) => unknown,\n\tversion: VersionId,\n\tonChangeVersion: (version: VersionId) => unknown,\n\tdefault?: true,\n}\nexport function Generator({ lang, changeTitle, version, onChangeVersion }: GeneratorProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tconst [errorBoundary, errorRetry] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\treturn
\n\t}\n\n\tconst gen = getGenerator(getCurrentUrl())\n\tif (!gen) {\n\t\treturn
\n\t}\n\n\tuseEffect(() => {\n\t\tsetError(null)\n\t}, [gen.id, version])\n\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tchangeTitle(loc('title.generator', loc(gen.id)), allowedVersions)\n\n\tif (!checkVersion(version, gen.minVersion)) {\n\t\tsetError(`The minimum version for this generator is ${gen.minVersion}`)\n\t}\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, gen.id)\n\t\t\t.then(m => setModel(m))\n\t\t\t.catch(e => { console.error(e); setError(e.message) })\n\t}, [version, gen.id])\n\n\tuseModel(model, () => {\n\t\tsetError(null)\n\t})\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\tuseEffect(() => {\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(gen.id)\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 => { console.error(e); setError(e.message) })\n\t}, [version, gen.id, presetFilter])\n\n\tconst loadPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tfetchPreset(version, gen.path ?? gen.id, 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(gen.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\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 && setError(null)} />}\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.generators.filter(g => !g.category).map(g => \n\t\t\t\t\n\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.generators.filter(g => g.category === 'worldgen').map(g => \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\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","onInput","e","value2","target","endsWith","isNaN","Number","ref","useRef","current","select","stopPropagation","setActive","useState","hider","body","addEventListener","removeEventListener","model","invalidated","listener","[object Object]","addListener","removeListener","element","drag","request","dragStart","pending","onMouseDown","offsetX","offsetY","onMouseMove","dx","dy","requestAnimationFrame","onMouseUp","_e","relative","children","useFocus","Btn","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","generatorEvent","archive","xmlns","viewBox","width","height","fill-rule","d","arrow_left","arrow_right","chevron_down","chevron_right","chevron_up","clippy","code","dash","device_desktop","download","eye","eye_closed","gear","globe","history","info","issue_opened","kebab_horizontal","link","mark_github","moon","play","plus","plus_circle","search","sun","sync","tag","three_bars","trashcan","unfold","upload","x","x_circle","error","onDismiss","href","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","key","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","__spreadValues","default","forEach","localStorage","removeItem","v","mcdataUrl","vanillaDatapackUrl","refs","hash","url","versionId","collectionTarget","blockStateTarget","versions","debug","JSON","stringify","dynamic","filter","getItem","r","async","matches","cache","caches","open","promises","keys","push","delete","length","warn","message","deleteMatching","startsWith","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","registries","checkVersion","minVersion","maxVersion","mcdata_master","getData","data2","k","Object","entries","register","path","values","b","properties","states","s2","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","blockStates","fetchData","getSchemas","Error","minVersionId","maxVersionId","findIndex","dec2hex","dec","toString","substr","arr","Uint8Array","crypto","getRandomValues","Array","from","join","replaceAll","trimmedUrl","generators","g","str","h","Math","abs","i","imul","charCodeAt","hashString","a2","c","max","min","lerp","d2","f","Themes","system","dark","light","title","changeTheme","changeLanguage","loc","locale","bind","gen","getGenerator","getCurrentUrl","Link","Icons","home","BtnMenu","route","cleanUrl","name","th","fill","rx","y","report","sounds","cx","cy","clip-rule","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","j","P","l2","m","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","preset","NetherPreset","config2","NormalNoise","biomeColorCache","biomes","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","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","pos","ctx","base","nextInt","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","features","indexOf","feature","placements","useFeature","featureFn","Features","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","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","setCount","transformOutput","switchNode","props","hook","obj","blockState","validation","validator","relativePath","includes","getActiveFields","activeFields","enabled","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","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","keysModel","DataModel","MapNode","StringNode","historyMax","renderHtml","boolean","BooleanSuffix","__spreadProps","choices","choice","activeCase","contextPath","context","getModel","getArray","prefix","suffix","node","choiceContextPath","choiceContext","inject","c2","log","set","change","pathLocale","contextPush","list","cValue","cPath","TreeNode","disabled","keyPath","keysSchema","enum","last","errors","add","ObjectNode","fromEntries","modelPush","cSchema","number","NumberSuffix","getChildModelPath","optional","child","cPrefix","cSuffix","cBody","isFlattened","isInlined","ErrorPopup","HelpPopup","string","StringSuffix","integer","evt","parsed","parseFloat","padStart","getValues","newValue","isEnum","additional","context2","pool","datalistId","values2","data-category","result","popupIcon","popup","clone","rfdc","useErrorBoundary","setState","state2","tree","some","changeTitle","onChangeVersion","setError","errorBoundary","errorRetry","ErrorPanel","allowedVersions","setModel","setBlockStates","versionData","schemaName","validate","catch","onKeyUp","ctrlKey","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","trim","split","presets","every","t","loadPreset","registry","vanilla_datapack_data","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Ad","Tree","PreviewPanel","SourcePanel","ToolCard","loadLocale","documentElement","setTitle","title2","Header","theme2","Router","Home","FieldSettings","Worldgen","Generator","version2","render","Main"],"mappings":"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"} \ No newline at end of file diff --git a/assets/index.3115336a.js b/assets/index.3115336a.js new file mode 100644 index 00000000..fe5847aa --- /dev/null +++ b/assets/index.3115336a.js @@ -0,0 +1,2 @@ +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,s=(e,t)=>{for(var n in t||(t={}))o.call(t,n)&&a(e,n,t[n]);if(r)for(var n of r(t))i.call(t,n)&&a(e,n,t[n]);return e},l=(e,r)=>t(e,n(r));import{y as c,a as d,s as u,l as h,b as m,j as g,c as p,d as f,g as v,L as _,r as w,e as y,f as b,h as C,q as k,i as x,N as V,R as z}from"./vendor.f4c463d9.js";var M;function A({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:r,onClick:o}){return d("div",{class:`btn${n?" active":""}${r?` ${r}`:""}`,onClick:o},e&&I[e],t&&d("span",null,t))}function j({icon:e,label:t,large:n,type:r,doSelect:o,value:i,onChange:a}){const s=void 0===a?()=>{}:e=>{const t=e.target.value;"number"===r&&(t.endsWith(".")||isNaN(Number(t)))||null==a||a(t)},l=u(null);return c((()=>{o&&l.current&&l.current.select()}),[o]),d("div",{class:"btn btn-input "+(n?"large-input":""),onClick:e=>e.stopPropagation()},e&&I[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:i,onInput:s}))}function L(){const[e,t]=h(!1),n=()=>{t(!1)};return c((()=>(e&&(document.body.addEventListener("click",n),document.body.addEventListener("contextmenu",n)),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("contextmenu",n)})),[e]),[e,()=>t(!0)]}function P(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),()=>{null==e||e.removeListener(n)})),[e])}function $(e,t){if(!e)return;const n=u(),r=u(),o=u([0,0]);c((()=>{const i=e=>{r.current=[e.offsetX,e.offsetY]},a=e=>{if(void 0===r.current)return;const i=e.offsetX-r.current[0],a=e.offsetY-r.current[1];0===i&&0===a||(cancelAnimationFrame(n.current),o.current=[o.current[0]+i,o.current[1]+a],n.current=requestAnimationFrame((()=>{t(...o.current),o.current=[0,0]}))),r.current=[e.offsetX,e.offsetY]},s=e=>{r.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])}function D({icon:e,label:t,relative:n,children:r}){const[o,i]=L();return d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(E,{icon:e,label:t,onClick:i}),o&&d("div",{class:"btn-group"},r))}!function(e){const t="Site",n="Generator";function r(e,t,n){ga("send","event",e,t,n)}function o(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){o(4,e),r(t,"set-language",e)},e.setTheme=function(e){o(1,e),r(t,"set-theme",e)},e.setVersion=function(e){o(3,e),r(n,"set-version",e)},e.setPreview=function(e){o(5,e),r(n,"set-preview",e)},e.generatorEvent=function(e,t){r(n,e,t)}}(M||(M={}));const I={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_down:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"})),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"})),chevron_up: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.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"})),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"})),info: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"})),issue_opened: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"})),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"})),plus_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:"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 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"})),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"})),trashcan: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.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"})),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: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.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})),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 O({error:e,onDismiss:t}){return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},I.x),d("h3",null,e),d("p",null,"If you think this is a bug, you can report it ",d("a",{href:"https://github.com/misode/misode.github.io/issues/new",target:"_blank"},"on GitHub")))}var S=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}],"generators":[{"id":"loot_table","url":"loot-table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","url":"predicate","path":"predicates","schema":"predicate"},{"id":"item_modifier","url":"item-modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","url":"advancement","path":"advancements","schema":"advancement"},{"id":"dimension","url":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension_type","url":"dimension-type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","url":"world","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen/biome","url":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/configured_carver","url":"worldgen/carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/configured_feature","url":"worldgen/feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/noise_settings","url":"worldgen/noise-settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/configured_structure_feature","url":"worldgen/structure-feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16"},{"id":"worldgen/configured_surface_builder","url":"worldgen/surface-builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16"},{"id":"worldgen/processor_list","url":"worldgen/processor-list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template_pool","url":"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 N;const T={},B=function(e,t){if(!t)return e();if(void 0===N){const e=document.createElement("link").relList;N=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in T)return;T[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const r=document.createElement("link");return r.rel=t?"stylesheet":N,t||(r.as="script",r.crossOrigin=""),r.href=e,document.head.appendChild(r),t?new Promise(((e,t)=>{r.addEventListener("load",e),r.addEventListener("error",t)})):void 0}))).then((()=>e()))};var R=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/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/noise_settings":"Noise Settings","worldgen/processor_list":"Processor List","worldgen/configured_structure_feature":"Structure Feature","worldgen/configured_surface_builder":"Surface Builder","worldgen/template_pool":"Template Pool"}'),H=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:R});const F={fallback:R};function W(e,t,...n){var r,o,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==(r=F[e])?void 0:r[t])?i:null==(o=F.en)?void 0:o[t])?a:F.fallback[t])?s:t,n)}async function G(e){const t=S.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return B((()=>import("./de.9324c846.js")),void 0);case"../locales/en.json":return B((()=>Promise.resolve().then((function(){return H}))),void 0);case"../locales/es.json":return B((()=>import("./es.be1c5183.js")),void 0);case"../locales/fr.json":return B((()=>import("./fr.cc0e1c18.js")),void 0);case"../locales/it.json":return B((()=>import("./it.fd9a8268.js")),void 0);case"../locales/ja.json":return B((()=>import("./ja.8c79487c.js")),void 0);case"../locales/pl.json":return B((()=>import("./pl.3a9fb38c.js")),void 0);case"../locales/pt.json":return B((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return B((()=>import("./ru.43cf4da1.js")),void 0);case"../locales/sk.json":return B((()=>import("./sk.586a2a32.js")),void 0);case"../locales/zh-cn.json":return B((()=>import("./zh-cn.97195370.js")),void 0);case"../locales/zh-tw.json":return B((()=>import("./zh-tw.a82e5245.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),r=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return B((()=>import("./de.c1ee95e4.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return B((()=>import("./en.1feb7726.js")),void 0);case"../../node_modules/@mcschema/locales/src/es.json":return B((()=>import("./es.4fa2c63c.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return B((()=>import("./fr.f6a9792a.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return B((()=>import("./it.7ff123cd.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return B((()=>import("./ja.af0142d0.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return B((()=>import("./pl.2f8b352f.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return B((()=>import("./pt.a435ff66.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return B((()=>import("./ru.ddb74b03.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return B((()=>import("./zh-cn.fd769298.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return B((()=>import("./zh-tw.9dc297b5.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);F[e]=s(s({},n.default),r.default)}const J=e=>("0"+e.toString(16)).substr(-2);function Y(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,J).join("")}function q(e){return`/${e}/`.replaceAll("//","/")}function U(e){const t=e.replace(/^\//,"").replace(/\/$/,"");return S.generators.find((e=>e.url===t))}function Z(e){const t=Math.abs(function(e){let t=0;for(let n=0;n>8)%256,(t>>16)%256]}function X(e,t,n){return Math.max(e,Math.min(t,n))}function K(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 ee(e,t,n,r,o,i){return Q(t,Q(e,n,r),Q(e,o,i))}function te(e){return e*e*e*(e*(6*e-15)+10)}function ne(e){return e instanceof Error?e.message:`${e}`}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const re="https://raw.githubusercontent.com/Arcensoth/mcdata",oe="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",ie=[{id:"mcdata_master",hash:"c1adf4f9ba8e81a7683ce775b7f2847bdd118e82",url:re},{id:"vanilla_datapack_summary",hash:"8a2f8022eb88840e6871ff6a72f63d6e64afc323",url:oe}];async function ae(e,t,n){const r=S.versions.find((t=>t.id===e));r?(console.debug(`[fetchData] ${JSON.stringify(r)}`),r.dynamic&&await Promise.all(ie.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}/${r.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 r of await t.keys())e(r.url)&&n.push(t.delete(r));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${ne(t)}`)}}((t=>t.startsWith(`${e.url}/${r.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([se(r,t),le(r,n),ce(r,t)])):console.error(`[fetchData] Unknown version ${r} in ${JSON.stringify(S.versions)}`)}async function se(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=S.registries.filter((e=>!e.dynamic)).filter((t=>fe(e.id,t.minVersion,t.maxVersion)));if(fe(e.id,void 0,"1.15")){const o=`${re}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await de(o,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var r;t.register(n.id,null!=(r=e[n.id])?r:[])}))}catch(r){console.warn("Error occurred while fetching registries:",ne(r))}}else await Promise.all(n.map((async n=>{try{const r=n.path?`${re}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${re}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await de(r,(e=>e.values)))}catch(r){console.warn(`Error occurred while fetching registry ${n.id}:`,ne(r))}})))}async function le(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),fe(e.id,void 0,"1.16")){const r=fe(e.id,void 0,"1.15")?`${re}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${re}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await de(r,(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:",ne(n))}}else{const r=`${re}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await de(r);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",ne(n))}}}async function ce(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=S.registries.filter((e=>e.dynamic)).filter((t=>fe(e.id,t.minVersion,t.maxVersion)));if(fe(e.id,"1.16")){const o=`${oe}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await de(o);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(r){console.warn("Error occurred while fetching dynamic registries:",ne(r))}}}async function de(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const r=await n.match(e);if(r&&r.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await r.json();console.debug(`[getData] fetching data ${e}`);const o=await fetch(e),i=t(await o.json());return await n.put(e,new Response(JSON.stringify(i))),i}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${ne(n)}`),console.debug(`[getData] fetching data ${e}`);const r=await fetch(e);return t(await r.json())}}const ue=["1.15","1.16","1.17"],he={},me={},ge={1.15:g,1.16:p,1.17:f};async function pe(e){return he[e]||(he[e]=(async()=>{try{const t=ge[e].getCollections(),n={};await ae(e,t,n);const r=ge[e].getSchemas(t);return he[e]={collections:t,schemas:r,blockStates:n},he[e]}catch(t){throw new Error(`Cannot get version "${e}": ${ne(t)}`)}})()),he[e]}function fe(e,t,n){const r=S.versions.findIndex((t=>t.id===e)),o=t?S.versions.findIndex((e=>e.id===t)):0,i=n?S.versions.findIndex((e=>e.id===n)):S.versions.length-1;return o<=r&&r<=i}const ve={system:"device_desktop",dark:"moon",light:"sun"};function _e({lang:e,title:t,version:n,theme:r,changeTheme:o,language:i,changeLanguage:a}){const s=W.bind(null,e),l=U(v());return d("header",null,d("div",{class:"title"},d(_,{class:"home-link",href:"/"},we.home),d("h2",null,t),l&&d(D,{icon:"chevron_down"},S.generators.filter((e=>e.category===(null==l?void 0:l.category)&&fe(n,e.minVersion))).map((e=>d(E,{label:s(e.id),active:e.id===l.id,onClick:()=>w(q(e.url))}))))),d("nav",null,d("ul",null,d("li",null,d(D,{icon:"globe"},S.languages.map((({code:e,name:t})=>d(E,{label:t,active:e===i,onClick:()=>a(e)}))))),d("li",null,d(D,{icon:ve[r]},Object.entries(ve).map((([e,t])=>d(E,{icon:t,label:s(`theme.${e}`),active:e===r,onClick:()=>o(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",title:s("github")},I.mark_github)))))}const we={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"}))},ye=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),r=this.p[t];this.p[t]=this.p[t+n],this.p[t+n]=r}}noise(e,t,n,r,o){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=te(u),p=te(h),f=te(m);let v=0;return 0!==r&&(v=Math.floor(Math.min(o,h)/r)*r),this.sampleAndLerp(l,c,d,u,h-v,m,g,p,f)}gradDot(e,t,n,r){const o=ye.GRADIENT[15&e];return o[0]*t+o[1]*n+o[2]*r}P(e){return 255&this.p[255&e]}sampleAndLerp(e,t,n,r,o,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,r,o,i,a,s,l,c,d){return Q(n,ee(e,t,r,o,i,a),ee(e,t,s,l,c,d))}(a,s,l,this.gradDot(this.P(d),r,o,i),this.gradDot(this.P(m),r-1,o,i),this.gradDot(this.P(u),r,o-1,i),this.gradDot(this.P(g),r-1,o-1,i),this.gradDot(this.P(d+1),r,o,i-1),this.gradDot(this.P(m+1),r-1,o,i-1),this.gradDot(this.P(u+1),r,o-1,i-1),this.gradDot(this.P(g+1),r-1,o-1,i-1))}};let be=ye;be.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 Ce{constructor(e,t,n){this.amplitudes=n,this.noiseLevels=Array(this.amplitudes.length);for(let r=0;r{const o=e[`${t}_noise`];return new ke(n.seed+r,o.firstOctave,o.amplitudes)})),a={};e.biomes.forEach((e=>{a[e.biome]=ze(e.biome,n.biomeColors)}));const s=t.data,l=-n.offset[0]-100+n.res/2,c=-n.offset[1]-100+n.res/2,d=4*t.width/n.res,u=4/n.res;for(let h=0;h<200;h+=n.res)for(let t=0;t<200;t+=n.res){const r=t*d+h*u,m=(h+l)*n.scale,g=(t+c)*n.scale,p=Me(i,e.biomes,m,g),f=null!=(o=a[p])?o:[128,128,128];s[r]=f[0],s[r+1]=f[1],s[r+2]=f[2],s[r+3]=255}}(e,t,n);case"fixed":return function(e,t,n){const r=t.data,o=ze(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;r[t]=o[0],r[t+1]=o[1],r[t+2]=o[2],r[t+3]=255}}(e,t,n);case"checkerboard":return function(e,t,n){var r,o,i,a,s,l;const c={};null==(r=e.biomes)||r.forEach((e=>{c[e]=ze(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!=(o=e.scale)?o: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 r=t*m+v*g,o=((((v+u)*n.scale>>p)+((t+h)*n.scale>>p))%f+f)%f,i=null==(s=e.biomes)?void 0:s[o],a=null!=(l=c[i])?l:[128,128,128];d[r]=a[0],d[r+1]=a[1],d[r+2]=a[2],d[r+3]=255}}(e,t,n)}}function ze(e,t){var n;if(!e)return[128,128,128];const r=null!=(n=t[e])?n:Ee[e];return void 0===r?Z(e):r}function Me(e,t,n,r){if(!Array.isArray(t)||0===t.length)return"";const o=e.map((e=>e.getValue(n,r,0)));let i=1/0,a="";for(const s of t){const e=Ae(s.parameters,{altitude:o[0],temperature:o[1],humidity:o[2],weirdness:o[3],offset:0});e{Te(t,null==e?void 0:e.decorator,n).forEach((t=>Ne(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{Ne(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 r,o;for(const i of null!=(r=null==e?void 0:e.features)?r:[])if(n.random()<(null!=(o=null==i?void 0:i.chance)?o:0))return void Ne(t,i.feature,n);Ne(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var r,o,i;Ne(t,null==(i=null==e?void 0:e.features)?void 0:i[Ie(null!=(o=null==(r=null==e?void 0:e.features)?void 0:r.length)?o:0,n)],n)}},Re={chance:(e,t,n)=>{var r;return n.random()<1/(null!=(r=null==e?void 0:e.chance)?r:1)?[t]:[]},count:(e,t,n)=>{var r;return new Array(Oe(null!=(r=null==e?void 0:e.count)?r:1,n)).fill(t)},count_extra:(e,t,n)=>{var r,o;let i=null!=(r=null==e?void 0:e.count)?r:1;return n.random(){var r;return new Array(Oe(null!=(r=null==e?void 0:e.count)?r:1,n)).fill(t).map((e=>[e[0]+Ie(16,n),e[1],e[2]+Ie(16,n)]))},count_noise:(e,t,n)=>{const r=n.biomeInfoNoise.getValue(t[0]/200,0,t[2]/200){var r;const o=Math.max(1,e.noise_factor),i=n.biomeInfoNoise.getValue(t[0]/o,0,t[2]/o),a=Math.max(0,Math.ceil((i+(null!=(r=e.noise_offset)?r:0))*e.noise_to_count_ratio));return new Array(a).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,r)=>{const o=4*Math.floor(r/4)+1+Ie(3,n)+t[0];return[o,Math.max(n.seaLevel,Le[X(0,63,o)]),4*Math.floor(r%4)+1+Ie(3,n)+t[2]]})),decorated:(e,t,n)=>Te(t,null==e?void 0:e.outer,n).flatMap((t=>Te(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var r,o,i,a;return De(t,Ie(null!=(r=null==e?void 0:e.spread)?r:0,n)+Ie(null!=(o=null==e?void 0:e.spread)?o:0,n)-(null!=(i=e.spread)?i:0)+(null!=(a=null==e?void 0:e.baseline)?a:0))},emerald_ore:(e,t,n)=>{const r=3+Ie(6,n);return[...new Array(r)].map((()=>[t[0]+Ie(16,n),4+Ie(28,n),t[2]+Ie(16,n)]))},fire:(e,t,n)=>{const r=1+Ie(Ie(Oe(null==e?void 0:e.count,n),n),n);return[...new Array(r)].map((()=>[t[0]+Ie(16,n),Ie(128,n),t[2]+Ie(16,n)]))},glowstone:(e,t,n)=>{const r=Ie(1+Ie(Oe(null==e?void 0:e.count,n),n),n);return[...new Array(r)].map((()=>[t[0]+Ie(16,n),Ie(128,n),t[2]+Ie(16,n)]))},heightmap:(e,t,n)=>De(t,Math.max(n.seaLevel,Le[X(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>De(t,Ie(2*Math.max(n.seaLevel,Le[X(0,63,t[0])]),n)),heightmap_world_surface:(e,t,n)=>De(t,Math.max(n.seaLevel,Le[X(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+Ie(8,n),t[1],t[2]+4+Ie(8,n)]],lava_lake:(e,t,n)=>{var r,o;if(0===Ie((null!=(r=e.chance)?r:1)/10,n)){const r=Ie(Ie(248,n)+8,n);if(r[t],range:(e,t,n)=>{var r,o,i;return De(t,Ie((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(o=null==e?void 0:e.top_offset)?o:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0))},range_biased:(e,t,n)=>{var r,o,i;return De(t,Ie(Ie((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(o=null==e?void 0:e.top_offset)?o:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n))},range_very_biased:(e,t,n)=>{var r,o,i,a;return De(t,Ie(Ie(Ie((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(o=null==e?void 0:e.top_offset)?o: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)=>De(t,Ie(t[1]+32,n)),top_solid_heightmap:(e,t)=>De(t,Le[X(0,63,t[0])]),magma:(e,t,n)=>De(t,Ie(t[1]+32,n)),square:(e,t,n)=>[[t[0]+Ie(16,n),t[1],t[2]+Ie(16,n)]],water_lake:(e,t,n)=>{var r;return 0===Ie(null!=(r=e.chance)?r:1,n)?[[t[0]+Ie(16,n),Ie(256,n),t[2]+Ie(16,n)]]:[]}};class He{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=Ce.fromRange(e+"djfqnqd",-15,0),this.maxLimitPerlinNoise=Ce.fromRange(e+"gowdnqs",-15,0),this.mainPerlinNoise=Ce.fromRange(e+"afiwmco",-7,0),this.depthNoise=Ce.fromRange(e+"qphnmeo",-15,0)}reset(e,t,n,r,o){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(o).fill(null),this.xOffset=r}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),r=Math.floor(e%this.chunkWidth)/this.chunkWidth,o=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]=ee(n,r,o[a],o[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),r=684.412*this.settings.sampling.xz_scale,o=684.412*this.settings.sampling.y_scale,i=r/this.settings.sampling.xz_factor,a=o/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,r,o,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=K(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=K(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,r,o,i,a){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=Ce.wrap(e*r*d),m=Ce.wrap(t*o*d),g=Ce.wrap(n*r*d),p=o*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 r=this.mainPerlinNoise.getOctaveNoise(u);r&&(c+=r.noise(Ce.wrap(e*i*d),Ce.wrap(t*a*d),Ce.wrap(n*i*d),a*d,t*a*d)/d)}d/=2}return K(s/512,l/512,(c/10+1)/2)}}function Fe(e,t){return e[t]>0?0:e[t+1]>0?150:255}const We=["dimension","worldgen/noise_settings","worldgen/configured_feature"],Ge=[{id:"biome-noise",generator:"dimension",path:new m.Path(["generator","biome_source"]),predicate:e=>e.get(new m.Path(["generator","type"])).endsWith("noise"),preview:({data:e,shown:t})=>{var n;const[r,o]=h(2),[i,a]=h(Y()),[s,l]=h(void 0),m=null==(n=e.type)?void 0:n.replace(/^minecraft:/,""),g=u(null),p=u([0,0]),f=u(void 0),v=u(),_=u();c((()=>{v.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 o=n.createImageData(g.current.width,g.current.height);Ve(e,o,{biomeColors:{},offset:p.current,scale:r,seed:i,res:t}),n.putImageData(o,0,0),1!==t&&(clearTimeout(f.current),f.current=setTimeout((()=>v.current(1)),150))},_.current=(t,n)=>{const o=200*t/g.current.clientWidth,a=200*n/g.current.clientHeight,s=function(e,t,n,r){var o,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],r);switch(null==(o=null==e?void 0:e.type)?void 0:o.replace(/^minecraft:/,"")){case"multi_noise":return Me(xe.map(((t,n)=>{const o=e[`${t}_noise`];return new ke(r.seed+n,o.firstOctave,o.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,o=(((c>>t)+(d>>t))%n+n)%n;return null==(l=e.biomes)?void 0:l[o]}}(e,o,a,{biomeColors:{},offset:p.current,scale:r,seed:i,res:1});l(s)}})),$(g.current,((e,t)=>{const n=200*e/g.current.clientWidth,r=200*t/g.current.clientHeight;p.current=[p.current[0]+n,p.current[1]+r],v.current()})),function(e,t){if(!e)return;const n=e=>{t(e.offsetX,e.offsetY)},r=()=>{t(void 0,void 0)};c((()=>(e.addEventListener("mousemove",n),e.addEventListener("mouseleave",r),()=>{e.removeEventListener("mousemove",n),e.removeEventListener("mouseleave",r)})),[e])}(g.current,((e,t)=>{void 0===e||void 0===t?l(void 0):_.current(e,t)}));const w=JSON.stringify(e);c((()=>{t&&v.current()}),[w,r,i,t]);const y=e=>{p.current[0]*=r/e,p.current[1]*=r/e,o(e)};return d(b,null,d("div",{class:"controls"},s&&d(E,{label:s,class:"no-pointer"}),("multi_noise"===m||"checkerboard"===m)&&d(b,null,d(E,{icon:"dash",onClick:()=>y(1.5*r)}),d(E,{icon:"plus",onClick:()=>y(r/1.5)})),"multi_noise"===m&&d(E,{icon:"sync",onClick:()=>a(Y())})),d("canvas",{ref:g,width:"200",height:"200"}))}},{id:"noise-settings",generator:"worldgen/noise_settings",path:new m.Path(["noise"]),predicate:()=>!0,preview:({lang:e,data:t,shown:n})=>{const r=W.bind(null,e),[o,i]=h(Y()),[a,s]=h(.1),[l,m]=h(.2),g=u(null),p=u(0),f=u();c((()=>{f.current=()=>{const e=g.current.getContext("2d"),n=t.height;g.current.width=n,g.current.height=n;const r=e.createImageData(g.current.width,g.current.height);!function(e,t,n){const r=new He(n.seed);r.reset(e,n.biomeDepth,n.biomeScale,n.offset,200);const o=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,f.current()}));const v=JSON.stringify(t);return c((()=>{n&&f.current()}),[v,a,l,o,n]),d(b,null,d("div",{class:"controls"},d(D,{icon:"gear"},d(j,{type:"number",label:r("preview.depth"),value:`${a}`,onChange:e=>s(Number(e))}),d(j,{type:"number",label:r("preview.scale"),value:`${l}`,onChange:e=>m(Number(e))})),d(E,{icon:"sync",onClick:()=>i(Y())})),d("canvas",{ref:g,width:"200",height:t.height}))}},{id:"decorator",generator:"worldgen/configured_feature",path:new m.Path([]),predicate:()=>!0,preview:({data:e,version:t,shown:n})=>{const[r,o]=h(4),[i,a]=h(Y()),s=u(null),l=u();c((()=>{l.current=()=>{const n=s.current.getContext("2d");s.current.width=16*r,s.current.height=16*r;const o=n.createImageData(s.current.width,s.current.height);!function(e,t,n){const r={placements:[],features:[],random:y(n.seed),biomeInfoNoise:new Ce(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,r,i,n]),d(b,null,d("div",{class:"controls"},d(E,{icon:"dash",onClick:()=>o(Math.min(16,r+1))}),d(E,{icon:"plus",onClick:()=>o(Math.max(1,r-1))}),d(E,{icon:"sync",onClick:()=>a(Y())})),d("canvas",{ref:s,width:"64",height:"64"}))}}];function Je({lang:e,model:t,version:n,id:r,shown:o}){const[,i]=h(0);return P(t,(()=>{i((e=>e+1))})),d(b,null,Ge.filter((e=>e.generator===r)).map((r=>{const i=null==t?void 0:t.get(r.path);return t&&void 0!==i&&r.predicate(t)?r.preview({lang:e,model:t,data:i,version:n,shown:o}):d(b,null)})))}const Ye={base:({},e,t)=>t,choice({switchNode:e},t,n,r){return e.hook(this,t,n,r)},list({children:e},t,n,r){return Array.isArray(n)?n.map(((n,o)=>e.hook(this,t.push(o),n,r))):n},map({children:e,config:t},n,r,o){var i,a;if(void 0===r)return;const s="block_state_map"===(null==(i=t.validation)?void 0:i.validator)?null==(a=o.blockStates)?void 0:a[m.relativePath(n,t.validation.params.id).get()]:null,l={};return Object.keys(r).forEach((t=>{var i;s&&!Object.keys(null!=(i=s.properties)?i:{}).includes(t)||(l[t]=e.hook(this,n.push(t),r[t],o))})),l},object({getActiveFields:e},t,n,r){if(null==n||"object"!=typeof n)return n;const o={},i=e(t);return Object.keys(i).filter((e=>i[e].enabled(t))).forEach((e=>{o[e]=i[e].hook(this,t.push(e),n[e],r)})),o}};var qe,Ue;(Ue=qe||(qe={})).ID_LANGUAGE="language",Ue.ID_THEME="theme",Ue.ID_VERSION="schema_version",Ue.ID_INDENT="indentation",Ue.getLanguage=function(){var e;return null!=(e=localStorage.getItem(Ue.ID_LANGUAGE))?e:"en"},Ue.getTheme=function(){var e;return null!=(e=localStorage.getItem(Ue.ID_THEME))?e:"dark"},Ue.getVersion=function(){const e=localStorage.getItem(Ue.ID_VERSION);return e&&ue.includes(e)?e:"1.17"},Ue.getIndent=function(){var e;return null!=(e=localStorage.getItem(Ue.ID_INDENT))?e:"2_spaces"},Ue.setLanguage=function(e){e&&localStorage.setItem(Ue.ID_LANGUAGE,e)},Ue.setTheme=function(e){e&&localStorage.setItem(Ue.ID_THEME,e)},Ue.setVersion=function(e){e&&localStorage.setItem(Ue.ID_VERSION,e)},Ue.setIndent=function(e){e&&localStorage.setItem(Ue.ID_INDENT,e)};const Ze={"2_spaces":2,"4_spaces":4,tabs:"\t"};function Xe({lang:e,name:t,model:n,blockStates:r,doCopy:o,doDownload:i,doImport:a,onError:s}){const l=W.bind(null,e),[g,p]=h(qe.getIndent()),f=u(null),v=u(null),_=u();c((()=>{_.current=()=>{if(n&&r)try{const e={blockStates:null!=r?r:{}},t=n.schema.hook(Ye,new m.ModelPath(n),n.data,e);f.current.value=JSON.stringify(t,null,Ze[g])+"\n"}catch(e){s(`Error getting JSON output: ${ne(e)}`),console.error(e),f.current.value=""}}})),P(n,(()=>{_.current()})),c((()=>{n&&_.current()}),[n]),c((()=>{_.current()}),[g]);c((()=>{o&&f.current&&(f.current.select(),document.execCommand("copy"))}),[o]),c((()=>{if(i&&f.current&&v.current){const e=encodeURIComponent(f.current.value);v.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),v.current.setAttribute("download",`${t}.json`),v.current.click()}}),[i]),c((()=>{a&&f.current&&(f.current.value="",f.current.select())}),[a]);return d(b,null,d("div",{class:"controls"},d(D,{icon:"gear"},Object.entries(Ze).map((([e])=>d(E,{label:l(`indentation.${e}`),active:g===e,onClick:()=>{return t=e,qe.setIndent(t),void p(t);var t}}))))),d("textarea",{ref:f,class:"source",onChange:()=>{try{const e=JSON.parse(f.current.value);null==n||n.reset(e,!1)}catch(e){s(`Error importing: ${ne(e)}`)}},spellcheck:!1,autocorrect:"off",placeholder:l("source_placeholder")}),d("a",{ref:v,style:"display: none;"}))}function Ke({title:e,link:t,icon:n,children:r}){return d("a",{class:"tool-card",href:t},n&&we[n],d("div",null,d("h3",null,e),r))}const Qe=["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"],et=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],tt=["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"],nt=["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","nbt_operation.op","number_provider.value","score_provider.name","score_provider.target","nbt_provider.source","nbt_provider.target"],rt=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],ot=new m.DataModel(m.MapNode(m.StringNode(),m.StringNode()),{historyMax:0}),it={base:()=>[null,null,null],boolean:(e,t,n,r,o)=>[null,d(at,s({},l(s({},e),{path:t,value:n,lang:r,states:o}))),null],choice({choices:e,config:t,switchNode:n},r,o,i,a){const s=n.activeCase(r,!0),l=(null==t?void 0:t.context)?new m.ModelPath(r.getModel(),new m.Path(r.getArray(),[t.context])):r,[c,u,h]=s.node.hook(this,l,o,i,a);if(1===e.length)return[c,u,h];const g=(null==t?void 0:t.choiceContext)?new m.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new m.Path([],[t.context]):r,p=d("select",{value:s.type,onChange:t=>(t=>{var n;const o=null!=(n=e.find((e=>e.type===t)))?n:s;console.log(o),r.model.set(r,o.change?o.change(t):o.node.default())})(t.target.value)},e.map((e=>d("option",{value:e.type},ht(i,g.contextPush(e.type))))));return[c,d(b,null,p,u),h]},list:({children:e},t,n,r,o)=>[null,d("button",{class:"add",onClick:()=>{Array.isArray(n)||(n=[]),t.model.set(t,[e.default(),...n])}},I.plus_circle),d(b,null,n&&Array.isArray(n)&&n.map(((i,a)=>{const s=t.push(a).contextPush("entry");return d("div",{class:"node-entry"},d(ct,{path:s,schema:e,value:i,lang:r,states:o},d("button",{class:"remove",onClick:()=>s.set(void 0)},I.trashcan),n.length>1&&d("div",{class:"node-move"},d("button",{class:"move",onClick:()=>{const e=[...n];[e[a-1],e[a]]=[e[a],e[a-1]],t.model.set(t,e)},disabled:0===a},I.chevron_up),d("button",{class:"move",onClick:()=>{const e=[...n];[e[a+1],e[a]]=[e[a],e[a+1]],t.model.set(t,e)},disabled:a===n.length-1},I.chevron_down))))})),n&&n.length>2&&d("div",{class:"node-entry"},d("div",{class:"node node-header"},d("button",{class:"add",onClick:()=>{Array.isArray(n)||(n=[]),t.model.set(t,[...n,e.default()])}},I.plus_circle))))],map({children:e,keys:t,config:n},r,o,i,a){var s,l,c,u,h;const g=new m.ModelPath(ot,new m.Path([ut(r.toString())])),p="block_state_map"===(null==(s=n.validation)?void 0:s.validator)?null==a?void 0:a[m.relativePath(r,n.validation.params.id).get()]:null,f=(null==p?void 0:p.properties)?m.StringNode(null,{enum:Object.keys(null!=(l=p.properties)?l:{})}):t;if(p&&"Properties"===r.last()){"object"!=typeof o&&(o={});const e=Object.entries(null!=(c=p.properties)?c:{}).map((([e,t])=>[e,m.StringNode(null,{enum:t})]));return Object.entries(null!=(u=p.properties)?u:{}).forEach((([e,t])=>{"string"!=typeof o[e]?r.model.errors.add(r.push(e),"error.expected_string"):t.includes(o[e])||r.model.errors.add(r.push(e),"error.invalid_enum_option",o[e])})),m.ObjectNode(Object.fromEntries(e)).hook(this,r,o,i,a)}return[null,d(b,null,f.hook(this,g,null!=(h=g.get())?h:"",i,a)[1],d("button",{class:"add",onClick:()=>{const t=g.get();r.model.set(r.push(t),e.default())}},I.plus_circle)),d(b,null,"object"==typeof o&&Object.entries(o).map((([t,n])=>{var o,s,l,c;const u=r.modelPush(t),h=p?m.StringNode(null,{enum:null!=(s=null==(o=p.properties)?void 0:o[t])?s:[]}):e;(null==(l=null==p?void 0:p.properties)?void 0:l[t])&&"string"==typeof n&&!(null==(c=p.properties)?void 0:c[t].includes(n))&&r.model.errors.add(u,"error.invalid_enum_option",n);return d("div",{class:"node-entry",key:t},d(ct,{schema:h,path:u,value:n,lang:i,states:a,label:t},d("button",{class:"remove",onClick:()=>u.set(void 0)},I.trashcan)))})))]},number:(e,t,n,r,o)=>[null,d(st,s({},l(s({},e),{path:t,value:n,lang:r,states:o}))),null],object({node:e,getActiveFields:t,getChildModelPath:n},r,o,i,a){let s=null,l=null;if(e.optional())if(void 0===o){l=d("button",{class:"collapse closed",onClick:()=>r.set(e.default())},I.plus_circle)}else{l=d("button",{class:"collapse open",onClick:()=>r.set(void 0)},I.trashcan)}const c=d(b,null,"object"==typeof o&&!(e.optional()&&void 0===o)&&Object.entries(t(r)).filter((([e,t])=>t.enabled(r))).map((([e,t])=>{var c,u,h;const m=n(r,e),g=m.getContext().join(".");if(et.includes(g))return null;const[p,f,v]=t.hook(this,m,o[e],i,a);if(!(p||f||(null!=(h=null==(u=null==(c=null==v?void 0:v.props)?void 0:c.children)?void 0:u.length)?h:0)>0))return null;const _="object"===t.type(m)&&tt.includes(g),w=nt.includes(g);return _||w?(s=d(b,null,s,d(mt,{lang:i,path:m}),d(gt,{lang:i,path:m}),p),l=d(b,null,l,f),_?v:null):d(ct,{schema:t,path:m,value:o[e],lang:i,states:a})})));return[s,l,c]},string:(e,t,n,r,o)=>[null,d(lt,s({},l(s({},e),{path:t,value:n,lang:r,states:o}))),null]};function at({path:e,node:t,value:n,lang:r}){const o=r=>{e.model.set(e,t.optional()&&n===r?void 0:r)};return d(b,null,d("button",{class:!1===n?"selected":"",onClick:()=>o(!1)},W(r,"false")),d("button",{class:!0===n?"selected":"",onClick:()=>o(!0)},W(r,"true")))}function st({path:e,config:t,integer:n,value:r}){return d("input",{type:(null==t?void 0:t.color)?"color":"text",onChange:r=>{const o=r.target.value,i=(null==t?void 0:t.color)?parseInt(o.slice(1),16):n?parseInt(o):parseFloat(o);e.model.set(e,i)},value:(null==t?void 0:t.color)?"#"+(null==r?void 0:r.toString(16).padStart(6,"0")):null!=r?r:""})}function lt({path:e,getValues:t,config:n,node:r,value:o,lang:i,states:a}){var s;const l=t=>{const n=t.target.value;e.model.set(e,0===n.length?void 0:n),t.stopPropagation()},c=t(),u=e.getContext().join(".");if(rt.includes(u))return d("textarea",{value:null!=o?o:"",onChange:l});if(dt(n)&&!n.additional||Qe.includes(u)){let e=new m.Path([]);return dt(n)&&"string"==typeof n.enum?e=e.contextPush(n.enum):dt(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool||(e=e.contextPush(n.params.pool)),d("select",{value:null!=o?o:"",onChange:l},r.optional()&&d("option",{value:""},W(i,"unset")),c.map((t=>d("option",{value:t},ht(i,e.contextPush(t.replace(/^minecraft:/,"")))))))}if(dt(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=Y();return d(b,null,d("input",{value:null!=o?o:"",onChange:l,list:c.length>0?e:""}),c.length>0&&d("datalist",{id:e},c.map((e=>d("option",{value:e})))))}{const t=null==a?void 0:a[m.relativePath(e,n.params.id).get()],r=Object.keys(null!=(s=null==t?void 0:t.properties)?s:{});return d("select",{value:null!=o?o:"",onChange:l},r.map((e=>d("option",null,e))))}}function ct({label:e,schema:t,path:n,value:r,lang:o,states:i,children:a}){const s=t.type(n),l=t.category(n),c=n.getContext().join("."),[u,h]=L(),[m,g,p]=t.hook(it,n,r,o,i);return d("div",{class:`node ${s}-node`,"data-category":l},d("div",{class:"node-header"},d(mt,{lang:o,path:n}),d(gt,{lang:o,path:n}),a,m,d("label",{onContextMenu:e=>{e.preventDefault(),h()}},null!=e?e:ht(o,n,`${n.last()}`),u&&d("div",{class:"node-menu"},d("div",{class:"menu-item"},d(E,{icon:"clippy",onClick:()=>navigator.clipboard.writeText(c)}),"Context:",d("span",{class:"menu-item-context"},c)))),g),p&&d("div",{class:"node-body"},p))}function dt(e){return!!(null==e?void 0:e.enum)}function ut(e){var t,n=0;for(t=0;t{const[r,o]=L();return d("div",{class:`node-icon ${e}${r?" show":""}`,onClick:o},I[t],d("span",{class:"icon-popup"},n))},ft=C();function vt({lang:e,model:t,blockStates:n,onError:r}){if(!t||!n)return d(b,null);const[o]=k((e=>{r(`Error rendering the tree: ${e.message}`),console.error(e)}));if(o)return d(b,null);const[i,a]=h(0);P(t,(()=>{a((e=>e+1))}));const s=new m.ModelPath(t),l=u(null);return x((()=>{var r;const[o,i,a]=t.schema.hook(it,s,ft(t.data),e,n);l.current=(null==(r=null==i?void 0:i.props)?void 0:r.children.some((e=>e)))?d("div",{class:`node ${t.schema.type(s)}-node`,"data-category":t.schema.category(s)},d("div",{class:"node-header"},o,i),d("div",{class:"node-body"},a)):a}),[e,t,n,i]),d("div",{class:"tree"},l.current)}function _t({lang:e}){const t=W.bind(null,e);return d("main",null,d("div",{class:"settings"},d("p",null,t("settings.fields.description")),d("ul",{class:"field-list"})))}function wt({lang:e,changeTitle:t,version:n,onChangeVersion:r}){var o;const i=W.bind(null,e),[a,u]=h(null),[g,p]=k();if(g)return d("main",null,d(O,{error:`Something went wrong rendering the generator: ${g.message}`,onDismiss:p}));const f=U(v());if(!f)return d("main",null,d(O,{error:`Cannot find generator "${v()}"`}));c((()=>{u(null)}),[f.id,n]);const _=S.versions.filter((e=>fe(e.id,f.minVersion))).map((e=>e.id));t(i("title.generator",i(f.id)),_),fe(n,f.minVersion)||u(`The minimum version for this generator is ${f.minVersion}`);const[w,y]=h(null),[C,x]=h(null);c((()=>{y(null),async function(e){return(await pe(e)).blockStates}(n).then((e=>x(e))),async function(e,t){var n;if(!me[t]||me[t].version!==e){const o=await pe(e),i=null==(n=S.generators.find((e=>e.id===t)))?void 0:n.schema;if(!i)throw new Error(`Cannot find model ${t}`);try{const n=o.schemas.get(i),r=new m.DataModel(n);me[t]?r.reset(me[t].model.data,!1):(r.validate(!0),r.history=[JSON.stringify(r.data)]),me[t]={model:r,version:e}}catch(r){throw new Error(`Cannot get generator "${t}" for version "${e}": ${ne(r)}`)}}return me[t].model}(n,f.id).then((e=>y(e))).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id]),P(w,(()=>{u(null)}));const V=e=>{e.ctrlKey&&"z"===e.key?(M.generatorEvent("undo","Hotkey"),null==w||w.undo()):e.ctrlKey&&"y"===e.key&&(M.generatorEvent("redo","Hotkey"),null==w||w.redo())};c((()=>(document.addEventListener("keyup",V),()=>{document.removeEventListener("keyup",V)})),[w]);const[z,L]=h(""),[$,N]=h([]);c((()=>{(async function(e){return(await pe(e)).collections})(n).then((e=>{const t=(null!=z?z:"").trim().split(" "),n=e.get(f.id).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&N(n)})).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id,z]);const T=e=>{var t;M.generatorEvent("load-preset",e),async function(e,t,n){console.debug(`[fetchPreset] ${n} ${t} ${n}`);const r=S.versions.find((t=>t.id===e));try{const e=await fetch(`${oe}/${r.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`);return await e.json()}catch(o){console.warn(`Error occurred while fetching ${t} preset ${n}:`,ne(o))}}(n,null!=(t=f.path)?t:f.id,e).then((e=>{null==w||w.reset(e,!1)}))},[B,R]=h(window.innerWidth>820),[H,F]=h(0),[G,J]=h(0),[Y,q]=h(0),[Z,X]=h(!1),K=We.includes(f.id);let Q=1;K&&(Q+=1),B&&(Q+=2);return d(b,null,d("main",{class:Z?"has-preview":""},d(A,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(E,{icon:"upload",label:i("import"),onClick:()=>{M.generatorEvent("import"),R(!0),q(Y+1)}}),d(D,{icon:"archive",label:i("presets"),relative:!1},d(j,{icon:"search",large:!0,value:z,onChange:L,doSelect:1}),d("div",{class:"result-list"},$.map((e=>d(E,{label:e,onClick:()=>T(e)})))),0===$.length&&d(E,{label:i("no_presets")})),d(D,{icon:"tag",label:n},_.reverse().map((e=>d(E,{label:e,active:e===n,onClick:()=>r(e)})))),d(D,{icon:"kebab_horizontal"},d(E,{icon:"history",label:i("reset"),onClick:()=>{M.generatorEvent("reset"),null==w||w.reset(w.schema.default(),!0)}}),d(E,{icon:"arrow_left",label:i("undo"),onClick:e=>{e.stopPropagation(),M.generatorEvent("undo","Menu"),null==w||w.undo()}}),d(E,{icon:"arrow_right",label:i("redo"),onClick:e=>{e.stopPropagation(),M.generatorEvent("redo","Menu"),null==w||w.redo()}}))),a&&d(O,{error:a,onDismiss:()=>u(null)}),d(vt,l(s({},{lang:e,model:w,version:n,blockStates:C}),{onError:u}))),d("div",{class:"popup-actions",style:`--offset: -${10+50*Q}px;`},d("div",{class:"popup-action action-preview"+(K?" shown":""),onClick:()=>{M.generatorEvent("toggle-preview",Z?"hidden":"visible"),X(!Z)}},Z?I.x_circle:I.play),d("div",{class:"popup-action action-download"+(B?" shown":""),onClick:()=>{M.generatorEvent("download"),J(G+1)}},I.download),d("div",{class:"popup-action action-copy"+(B?" shown":""),onClick:()=>{M.generatorEvent("copy"),F(H+1)}},I.clippy),d("div",{class:"popup-action action-code shown",onClick:()=>{M.generatorEvent("toggle-output",B?"hidden":"visible"),R(!B),F(0),J(0),q(0)}},B?I.chevron_right:I.code)),d("div",{class:"popup-preview"+(Z?" shown":"")},d(Je,l(s({},{lang:e,model:w,version:n,id:f.id}),{shown:Z,onError:u}))),d("div",{class:"popup-source"+(B?" shown":"")},d(Xe,l(s({},{lang:e,model:w,blockStates:C,doCopy:H,doDownload:G,doImport:Y}),{name:null!=(o=f.schema)?o:"data",onError:u}))))}function yt({lang:e,changeTitle:t}){const n=W.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},S.generators.filter((e=>!e.category)).map((e=>d(Ke,{title:n(e.id),link:q(e.url)}))),d(Ke,{title:n("worldgen"),link:"/worldgen/"}),d("hr",null),d(Ke,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/"},d("p",null,"Analyse your performance reports")),d(Ke,{title:"Minecraft Sounds",icon:"sounds",link:"https://misode.github.io/sounds/"},d("p",null,"Browse through and mix all the vanilla sounds")),d(Ke,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/"},d("p",null,"Convert your 1.16 data packs to 1.17"))))}function bt({lang:e,changeTitle:t}){const n=W.bind(null,e);return t(n("title.generator_category",n("worldgen"))),d("main",null,d("div",{class:"home"},S.generators.filter((e=>"worldgen"===e.category)).map((e=>d(Ke,{title:n(e.id),link:q(e.url)})))))}function Ct(){const[e,t]=h("en");c((()=>{(async()=>{const e=qe.getLanguage();await Promise.all([G("en"),..."en"!==e?[G(e)]:[]]),t(e)})()}),[]);const[n,r]=h(qe.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const[o,i]=h(qe.getVersion()),[a,u]=h(W(e,"title.home")),m=(e,t=["1.15","1.16","1.17"])=>{document.title=`${e} Minecraft ${t.join(", ")}`,u(e)};return d(b,null,d(_e,s({},{lang:e,title:a,version:o,theme:n,language:e,changeLanguage:async e=>{F[e]||await G(e),M.setLanguage(e),qe.setLanguage(e),t(e)},changeTheme:e=>{M.setTheme(e),qe.setTheme(e),r(e)}})),d(z,{onChange:e=>{setTimeout((()=>M.pageview(q(e.url))))}},d(yt,s({path:"/"},{lang:e,changeTitle:m})),d(_t,s({path:"/settings/fields"},{lang:e,changeTitle:m})),d(bt,s({path:"/worldgen"},{lang:e,changeTitle:m})),d(wt,l(s({default:!0},{lang:e,version:o,changeTitle:m}),{onChangeVersion:e=>{M.setVersion(e),qe.setVersion(e),i(e)}}))))}V(d(Ct,null),document.body); +//# sourceMappingURL=index.3115336a.js.map diff --git a/assets/index.3115336a.js.map b/assets/index.3115336a.js.map new file mode 100644 index 00000000..61bbff5b --- /dev/null +++ b/assets/index.3115336a.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.3115336a.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/hooks/useFocus.ts","../../src/app/hooks/useModel.ts","../../src/app/hooks/useOnDrag.ts","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/Utils.ts","../../src/app/DataFetcher.ts","../../src/app/Schemas.ts","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../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/Store.ts","../../src/app/components/SourcePanel.tsx","../../src/app/components/ToolCard.tsx","../../src/app/schema/renderHtml.tsx","../../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 onInput = 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 { useEffect, useState } from 'preact/hooks'\n\nexport function useFocus(): [boolean, () => unknown] {\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\tdocument.body.addEventListener('contextmenu', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t\tdocument.body.removeEventListener('contextmenu', hider)\n\t\t}\n\t}, [active])\n\n\treturn [active, () => setActive(true)]\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\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 { ComponentChildren } from 'preact'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\nimport { useFocus } from '../hooks'\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] = useFocus()\n\n\treturn
\n\t\t\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tchevron_up: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tinfo: ,\n\tissue_opened: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tplus_circle: ,\n\tsearch: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tthree_bars: ,\n\ttrashcan: ,\n\tunfold: ,\n\tupload: ,\n\tx: ,\n\tx_circle: ,\n}\n","import { Octicon } from './Octicon'\n\ntype ErrorPanelProps = {\n\terror: string,\n\tonDismiss?: () => unknown,\n}\nexport function ErrorPanel({ error, onDismiss }: ErrorPanelProps) {\n\treturn
\n\t\t{onDismiss &&
{Octicon.x}
}\n\t\t

{error}

\n\t\t

If you think this is a bug, you can report it 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 config from '../config.json'\n\nexport 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 getGenerator(url: string) {\n\tconst trimmedUrl = url.replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\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\nexport function message(e: unknown): string {\n\tif (e instanceof Error) return e.message\n\treturn `${e}`\n}\n","import type { CollectionRegistry } from '@mcschema/core'\nimport config from '../config.json'\nimport type { BlockStateRegistry, VersionId } from './Schemas'\nimport { checkVersion } from './Schemas'\nimport { message } from './Utils'\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:', message(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}:`, message(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:', message(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:', message(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:', message(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}:`, message(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}: ${message(e)}`)\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}: ${message(e)}`)\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'\nimport { message } from './Utils'\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}\": ${message(e)}`)\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.generators.find(g => g.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}\": ${message(e)}`)\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 { getCurrentUrl, Link, route } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { locale } from '../Locales'\nimport type { VersionId } from '../Schemas'\nimport { checkVersion } from '../Schemas'\nimport { cleanUrl, getGenerator } 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\tversion: VersionId,\n\ttheme: string,\n\tchangeTheme: (theme: string) => unknown,\n\tlanguage: string,\n\tchangeLanguage: (language: string) => unknown,\n}\nexport function Header({ lang, title, version, theme, changeTheme, language, changeLanguage }: HeaderProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst gen = getGenerator(getCurrentUrl())\n\n\treturn
\n\t\t
\n\t\t\t{Icons.home}\n\t\t\t

{title}

\n\t\t\t{gen && \n\t\t\t\t{config.generators\n\t\t\t\t\t.filter(g => g.category === gen?.category && checkVersion(version, g.minVersion))\n\t\t\t\t\t.map(g =>\n\t\t\t\t\t\t route(cleanUrl(g.url))} />\n\t\t\t\t\t)}\n\t\t\t}\n\t\t
\n\t\t\n\t
\n}\n","export const Icons = {\n\thome: ,\n\treport: ,\n\tsounds: ,\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\ntype BiomeColors =Record\ntype BiomeSourceOptions = {\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: string,\n}\n\nconst 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\tif (state.preset?.replace(/^minecraft:/, '') === 'nether') {\n\t\tstate = NetherPreset\n\t}\n\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\nconst NetherPreset = {type:'minecraft:multi_noise',seed:0,altitude_noise:{firstOctave:-7,amplitudes:[1,1]},temperature_noise:{firstOctave:-7,amplitudes:[1,1]},humidity_noise:{firstOctave:-7,amplitudes:[1,1]},weirdness_noise:{firstOctave:-7,amplitudes:[1,1]},biomes:[{biome:'minecraft:nether_wastes',parameters:{altitude:0,temperature:0,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{altitude:0,temperature:0,humidity:-0.5,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{altitude:0,temperature:0.4,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{altitude:0,temperature:0,humidity:0.5,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{altitude:0,temperature:-0.5,humidity:0,weirdness:0,offset:0.175}}]}\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/configured_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/configured_feature',\n\t\tpath: new Path([]),\n\t\tpredicate: () => true,\n\t\tpreview: DecoratorPreview,\n\t},\n]\n\ntype PreviewPanelProps = {\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 }: PreviewPanelProps) {\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 { 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'\nimport { message } from '../Utils'\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: ${message(e)}`)\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\tuseEffect(() => {\n\t\tif (model) retransform.current()\n\t}, [model])\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\tonError(`Error importing: ${message(e)}`)\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 type { BooleanHookParams, EnumOption, Hook, INode, NumberHookParams, StringHookParams, ValidationOption } from '@mcschema/core'\nimport { DataModel, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { ComponentChildren, JSX } from 'preact'\nimport { Btn } from '../components'\nimport { Octicon } from '../components/Octicon'\nimport { useFocus } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry } from '../Schemas'\nimport { hexId } from '../Utils'\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', 'nbt_operation.op', 'number_provider.value', 'score_provider.name', 'score_provider.target', 'nbt_provider.source', 'nbt_provider.target']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\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\ntype JSXTriple = [JSX.Element | null, JSX.Element | null, JSX.Element | null]\ntype RenderHook = Hook<[any, string, BlockStateRegistry], JSXTriple>\n\ntype NodeProps = T & { node: INode } & { path: ModelPath } & { value: any} & { lang: string } & { states: BlockStateRegistry }\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: RenderHook = {\n\tbase() {\n\t\treturn [null, null, null]\n\t},\n\n\tboolean(params, path, value, lang, states) {\n\t\treturn [null, , null]\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, lang, states) {\n\t\tconst choice = switchNode.activeCase(path, true) as typeof choices[number]\n\t\tconst contextPath = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, contextPath, value, lang, states)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\t\tconst choiceContextPath = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\t\tconst set = (value: string) => {\n\t\t\tconst c = choices.find(c => c.type === value) ?? choice\n\t\t\tconsole.log(c)\n\t\t\tpath.model.set(path, c.change ? c.change(value) : c.node.default())\n\t\t}\n\t\tconst inject = \n\t\treturn [prefix, <>{inject}{suffix}, body]\n\t},\n\n\tlist({ children }, path, value, lang, states) {\n\t\tconst onAdd = () => {\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 = () => {\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\t\tconst body = <>\n\t\t\t{(value && Array.isArray(value)) && value.map((cValue, index) => {\n\t\t\t\tconst cPath = path.push(index).contextPush('entry')\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\tconst onMoveUp = () => {\n\t\t\t\t\tconst v = [...value];\n\t\t\t\t\t[v[index - 1], v[index]] = [v[index], v[index - 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst onMoveDown = () => {\n\t\t\t\t\tconst v = [...value];\n\t\t\t\t\t[v[index + 1], v[index]] = [v[index], v[index + 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\treturn
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{value.length > 1 &&
\n\t\t\t\t\t\t\t\n\t\t\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\t{(value && value.length > 2) &&
\n\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 [null, suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, lang, states) {\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = () => {\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' ? states?.[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\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, lang, states)\n\t\t}\n\t\tconst suffix = <>\n\t\t\t{keysSchema.hook(this, keyPath, keyPath.get() ?? '', lang, states)[1]}\n\t\t\t\n\t\t\n\t\tconst body = <>\n\t\t\t{typeof value === 'object' && Object.entries(value).map(([key, cValue]) => {\n\t\t\t\tconst cPath = path.modelPush(key)\n\t\t\t\tconst cSchema = blockState\n\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t: children\n\t\t\t\tif (blockState?.properties?.[key] && typeof cValue === 'string'\n\t\t\t\t\t&& !blockState.properties?.[key].includes(cValue)) {\n\t\t\t\t\tpath.model.errors.add(cPath, 'error.invalid_enum_option', cValue)\n\t\t\t\t}\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\treturn
\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 [null, suffix, body]\n\t},\n\n\tnumber(params, path, value, lang, states) {\n\t\treturn [null, , null]\n\t},\n\n\tobject({ node, getActiveFields, getChildModelPath }, path, value, lang, states) {\n\t\tlet prefix: JSX.Element | null = null\n\t\tlet suffix: JSX.Element | null = null\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tconst onExpand = () => path.set(node.default())\n\t\t\t\tsuffix = \n\t\t\t} else {\n\t\t\t\tconst onCollapse = () => path.set(undefined)\n\t\t\t\tsuffix = \n\t\t\t}\n\t\t}\n\t\tconst body = <>\n\t\t\t{(typeof value === 'object' && !(node.optional() && value === undefined)) &&\n\t\t\t\tObject.entries(getActiveFields(path))\n\t\t\t\t\t.filter(([_, child]) => child.enabled(path))\n\t\t\t\t\t.map(([key, child]) => {\n\t\t\t\t\t\tconst cPath = getChildModelPath(path, key)\n\t\t\t\t\t\tconst context = cPath.getContext().join('.')\n\t\t\t\t\t\tif (hiddenFields.includes(context)) return null\n\t\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = child.hook(this, cPath, value[key], lang, states)\n\t\t\t\t\t\tif (!cPrefix && !cSuffix && !((cBody?.props?.children?.length ?? 0) > 0)) return null\n\t\t\t\t\t\tconst isFlattened = child.type(cPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\t\t\tprefix = <>{prefix}{cPrefix}\n\t\t\t\t\t\t\tsuffix = <>{suffix}{cSuffix}\n\t\t\t\t\t\t\treturn isFlattened ? cBody : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \n\t\t\t\t\t})\n\t\t\t}\n\t\t\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring(params, path, value, lang, states) {\n\t\treturn [null, , null]\n\t},\n}\n\nfunction BooleanSuffix({ path, node, value, lang }: NodeProps) {\n\tconst set = (target: boolean) => {\n\t\tpath.model.set(path, node.optional() && value === target ? undefined : target)\n\t}\n\treturn <>\n\t\t\n\t\t\n\t\n}\n\nfunction NumberSuffix({ path, config, integer, value }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = config?.color\n\t\t\t? parseInt(value.slice(1), 16)\n\t\t\t: integer ? parseInt(value) : parseFloat(value)\n\t\tpath.model.set(path, parsed)\n\t}\n\treturn \n}\n\nfunction StringSuffix({ path, getValues, config, node, value, lang, states }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tconst newValue = (evt.target as HTMLSelectElement).value\n\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\tevt.stopPropagation()\n\t}\n\tconst values = getValues()\n\tconst context = path.getContext().join('.')\n\tif (nbtFields.includes(context)) {\n\t\treturn \n\t} else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) {\n\t\tlet context = new Path([])\n\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\tcontext = context.contextPush(config.enum)\n\t\t} else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') {\n\t\t\tcontext = context.contextPush(config.params.pool)\n\t\t}\n\t\treturn \n\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\tconst blockState = states?.[relativePath(path, config.params.id).get()]\n\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\treturn \n\t} else {\n\t\tconst datalistId = hexId()\n\t\treturn <>\n\t\t\t 0 ? datalistId : ''} />\n\t\t\t{values.length > 0 && \n\t\t\t\t{values.map(v => }\n\t\t\n\t}\n}\n\ntype TreeNodeProps = {\n\tschema: INode,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tstates: BlockStateRegistry,\n\tcompare?: any,\n\tlabel?: string,\n\tchildren?: ComponentChildren,\n}\nfunction TreeNode({ label, schema, path, value, lang, states, children }: TreeNodeProps) {\n\tconst type = schema.type(path)\n\tconst category = schema.category(path)\n\tconst context = path.getContext().join('.')\n\n\tconst [active, setActive] = useFocus()\n\tconst onContextMenu = (evt: MouseEvent) => {\n\t\tevt.preventDefault()\n\t\tsetActive()\n\t}\n\n\tconst [prefix, suffix, body] = schema.hook(renderHtml, path, value, lang, states)\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\t{prefix}\n\t\t\t\n\t\t\t{suffix}\n\t\t
\n\t\t{body &&
{body}
}\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(lang: string, 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 = locale(lang, key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn ctx[ctx.length - 1]\n}\n\nfunction ErrorPopup({ lang, path }: { lang: string, path: ModelPath }) {\n\tconst e = path.model.errors.get(path, true)\n\tif (e.length === 0) return null\n\tconst message = locale(lang, e[0].error, ...(e[0].params ?? []))\n\treturn popupIcon('node-error', 'issue_opened', message)\n}\n\nfunction HelpPopup({ lang, path }: { lang: string, path: Path }) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = locale(lang, key)\n\tif (message === key) return null\n\treturn popupIcon('node-help', 'info', message)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string) => {\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t{Octicon[icon]}\n\t\t{popup}\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport type { JSX } from 'preact'\nimport { useErrorBoundary, useMemo, useRef, useState } from 'preact/hooks'\nimport rfdc from 'rfdc'\nimport { useModel } from '../hooks'\nimport { renderHtml } from '../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nconst clone = rfdc()\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, blockStates, onError }: TreePanelProps) {\n\tif (!model || !blockStates) return <>\n\n\tconst [error] = useErrorBoundary(e => {\n\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\tconsole.error(e)\n\t})\n\tif (error) return <>\n\n\tconst [state, setState] = useState(0)\n\tuseModel(model, () => {\n\t\tsetState(state => state + 1)\n\t})\n\n\tconst path = new ModelPath(model)\n\tconst tree = useRef(null)\n\tuseMemo(() => {\n\t\tconst [prefix, suffix, body] = model.schema.hook(renderHtml, path, clone(model.data), lang, blockStates)\n\t\ttree.current = suffix?.props?.children.some((c: any) => c) ?
\n\t\t\t
{prefix}{suffix}
\n\t\t\t
{body}
\n\t\t
: body\n\t}, [lang, model, blockStates, state])\n\n\treturn
{tree.current}
\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 { getCurrentUrl } from 'preact-router'\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 { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { checkVersion, getBlockStates, getCollections, getModel } from '../Schemas'\nimport { getGenerator } from '../Utils'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: string[]) => unknown,\n\tversion: VersionId,\n\tonChangeVersion: (version: VersionId) => unknown,\n\tdefault?: true,\n}\nexport function Generator({ lang, changeTitle, version, onChangeVersion }: GeneratorProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tconst [errorBoundary, errorRetry] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\treturn
\n\t}\n\n\tconst gen = getGenerator(getCurrentUrl())\n\tif (!gen) {\n\t\treturn
\n\t}\n\n\tuseEffect(() => {\n\t\tsetError(null)\n\t}, [gen.id, version])\n\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tchangeTitle(loc('title.generator', loc(gen.id)), allowedVersions)\n\n\tif (!checkVersion(version, gen.minVersion)) {\n\t\tsetError(`The minimum version for this generator is ${gen.minVersion}`)\n\t}\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, gen.id)\n\t\t\t.then(m => setModel(m))\n\t\t\t.catch(e => { console.error(e); setError(e.message) })\n\t}, [version, gen.id])\n\n\tuseModel(model, () => {\n\t\tsetError(null)\n\t})\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\tuseEffect(() => {\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(gen.id)\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 => { console.error(e); setError(e.message) })\n\t}, [version, gen.id, presetFilter])\n\n\tconst loadPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tfetchPreset(version, gen.path ?? gen.id, 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(gen.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\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 && setError(null)} />}\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.generators.filter(g => !g.category).map(g => \n\t\t\t\t\n\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.generators.filter(g => g.category === 'worldgen').map(g => \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\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","onInput","e","value2","target","endsWith","isNaN","Number","ref","useRef","current","select","stopPropagation","setActive","useState","hider","body","addEventListener","removeEventListener","model","invalidated","listener","[object Object]","addListener","removeListener","element","drag","request","dragStart","pending","onMouseDown","offsetX","offsetY","onMouseMove","dx","dy","requestAnimationFrame","onMouseUp","_e","relative","children","useFocus","Btn","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","generatorEvent","archive","xmlns","viewBox","width","height","fill-rule","d","arrow_left","arrow_right","chevron_down","chevron_right","chevron_up","clippy","code","dash","device_desktop","download","eye","eye_closed","gear","globe","history","info","issue_opened","kebab_horizontal","link","mark_github","moon","play","plus","plus_circle","search","sun","sync","tag","three_bars","trashcan","unfold","upload","x","x_circle","error","onDismiss","href","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","key","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","__spreadValues","default","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","url","replaceAll","trimmedUrl","generators","g","str","h","Math","abs","s2","i","imul","charCodeAt","hashString","a2","b","c","max","min","lerp","d2","f","Error","message","forEach","localStorage","removeItem","v","mcdataUrl","vanillaDatapackUrl","refs","hash","versionId","collectionTarget","blockStateTarget","versions","debug","JSON","stringify","dynamic","filter","getItem","r","async","matches","cache","caches","open","promises","keys","push","delete","warn","deleteMatching","startsWith","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","registries","checkVersion","minVersion","maxVersion","mcdata_master","getData","data2","k","Object","entries","register","path","values","properties","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","blockStates","fetchData","getSchemas","minVersionId","maxVersionId","findIndex","Themes","system","dark","light","title","changeTheme","changeLanguage","loc","locale","bind","gen","getGenerator","getCurrentUrl","Link","Icons","home","BtnMenu","route","cleanUrl","name","th","fill","rx","y","report","sounds","cx","cy","clip-rule","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","j","P","l2","m","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","preset","NetherPreset","config2","NormalNoise","biomeColorCache","biomes","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","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","pos","ctx","base","nextInt","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","features","indexOf","feature","placements","useFeature","featureFn","Features","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","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","setCount","transformOutput","switchNode","props","hook","obj","blockState","validation","validator","relativePath","includes","getActiveFields","activeFields","enabled","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","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","keysModel","DataModel","MapNode","StringNode","historyMax","renderHtml","boolean","BooleanSuffix","__spreadProps","choices","choice","activeCase","contextPath","context","getModel","getArray","prefix","suffix","node","choiceContextPath","choiceContext","inject","c2","log","set","change","pathLocale","contextPush","list","cValue","cPath","TreeNode","disabled","keyPath","keysSchema","enum","last","errors","add","ObjectNode","fromEntries","modelPush","cSchema","number","NumberSuffix","getChildModelPath","optional","child","cPrefix","cSuffix","cBody","isFlattened","isInlined","ErrorPopup","HelpPopup","string","StringSuffix","integer","evt","parsed","parseFloat","padStart","getValues","newValue","isEnum","additional","context2","pool","datalistId","values2","data-category","onContextMenu","preventDefault","navigator","clipboard","writeText","result","message2","popupIcon","popup","clone","rfdc","useErrorBoundary","setState","state2","tree","some","changeTitle","onChangeVersion","setError","errorBoundary","errorRetry","ErrorPanel","allowedVersions","setModel","setBlockStates","versionData","schemaName","validate","catch","onKeyUp","ctrlKey","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","trim","split","presets","every","t","loadPreset","registry","vanilla_datapack_data","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Ad","Tree","PreviewPanel","SourcePanel","ToolCard","loadLocale","documentElement","setTitle","title2","Header","theme2","Router","Home","FieldSettings","Worldgen","Generator","version2","render","Main"],"mappings":"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"} \ No newline at end of file diff --git a/dimension/index.html b/dimension/index.html index ad014f9e..15ae7793 100644 --- a/dimension/index.html +++ b/dimension/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/dimension_type/index.html b/dimension_type/index.html index ad014f9e..15ae7793 100644 --- a/dimension_type/index.html +++ b/dimension_type/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/index.html b/index.html index d2140e9c..dda96fdf 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@ Data Pack Generators Minecraft 1.15, 1.16, 1.17 - + diff --git a/item_modifier/index.html b/item_modifier/index.html index c432c091..26b8044b 100644 --- a/item_modifier/index.html +++ b/item_modifier/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.17 - + diff --git a/loot_table/index.html b/loot_table/index.html index 68163dfe..95f0f98c 100644 --- a/loot_table/index.html +++ b/loot_table/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.15, 1.16, 1.17 - + diff --git a/predicate/index.html b/predicate/index.html index 68163dfe..95f0f98c 100644 --- a/predicate/index.html +++ b/predicate/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.15, 1.16, 1.17 - + diff --git a/world/index.html b/world/index.html index ad014f9e..15ae7793 100644 --- a/world/index.html +++ b/world/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/biome/index.html b/worldgen/biome/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/biome/index.html +++ b/worldgen/biome/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_carver/index.html b/worldgen/configured_carver/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/configured_carver/index.html +++ b/worldgen/configured_carver/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_feature/index.html b/worldgen/configured_feature/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/configured_feature/index.html +++ b/worldgen/configured_feature/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_structure_feature/index.html b/worldgen/configured_structure_feature/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/configured_structure_feature/index.html +++ b/worldgen/configured_structure_feature/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_surface_builder/index.html b/worldgen/configured_surface_builder/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/configured_surface_builder/index.html +++ b/worldgen/configured_surface_builder/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/noise_settings/index.html b/worldgen/noise_settings/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/noise_settings/index.html +++ b/worldgen/noise_settings/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/processor_list/index.html b/worldgen/processor_list/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/processor_list/index.html +++ b/worldgen/processor_list/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/template_pool/index.html b/worldgen/template_pool/index.html index ad014f9e..15ae7793 100644 --- a/worldgen/template_pool/index.html +++ b/worldgen/template_pool/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - +