minecraft-renderer 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.html +1 -1
- package/dist/static/js/{index.092ec5be.js → index.1a612359.js} +2 -2
- package/package.json +2 -1
- package/src/examples/README.md +2 -0
- package/src/examples/appViewerExample.ts +2 -0
- package/src/examples/initialMenuStart.ts +2 -0
- package/src/graphicsBackend/appViewer.ts +2 -2
- package/src/graphicsBackend/types.ts +4 -4
- package/src/index.ts +1 -1
- package/src/lib/frameTimingCollector.ts +1 -1
- package/src/lib/guiRenderer.ts +1 -1
- package/src/lib/items.ts +4 -4
- package/src/lib/worldrendererCommon.ts +1 -1
- package/src/mesher/models.ts +11 -11
- package/src/playground/allEntitiesDebug.ts +1 -1
- package/src/playground/baseScene.ts +4 -4
- package/src/playground/playgroundUi.tsx +3 -2
- package/src/playground/scenes/main.ts +2 -2
- package/src/three/appShared.ts +4 -4
- package/src/three/entities.ts +1 -1
- package/src/three/graphicsBackend.ts +5 -5
- package/src/three/graphicsBackendOffThread.ts +5 -5
- package/src/three/holdingBlock.ts +3 -3
- package/src/three/renderSlot.ts +1 -1
- package/src/three/starField.ts +1 -1
- package/src/three/threeJsSound.ts +1 -1
- package/src/three/world/cursorBlock.ts +1 -1
- package/src/three/worldRendererThree.ts +2 -2
package/dist/index.html
CHANGED
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
color: #888;
|
|
73
73
|
}
|
|
74
74
|
</style>
|
|
75
|
-
<script defer src="./static/js/lib-polyfill.98986ac5.js"></script><script defer src="./static/js/lib-react.5c9129e0.js"></script><script defer src="./static/js/365.f05233ab.js"></script><script defer src="./static/js/index.
|
|
75
|
+
<script defer src="./static/js/lib-polyfill.98986ac5.js"></script><script defer src="./static/js/lib-react.5c9129e0.js"></script><script defer src="./static/js/365.f05233ab.js"></script><script defer src="./static/js/index.1a612359.js"></script></head>
|
|
76
76
|
<body>
|
|
77
77
|
<div id="react-root"></div>
|
|
78
78
|
<div class="loading-overlay" id="loading">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(()=>{var n={81569:function(n,t,e){"use strict";var v={};e.r(v),e.d(v,{allay:()=>eC,arrow:()=>eZ,axolotl:()=>eR,blaze:()=>eS,boat:()=>e9,camel:()=>ez,cat:()=>eB,chicken:()=>eE,cod:()=>eP,creeper:()=>eI,dolphin:()=>eT,ender_dragon:()=>eF,enderman:()=>eU,endermite:()=>eD,fox:()=>eO,frog:()=>eQ,ghast:()=>eL,goat:()=>eV,guardian:()=>ej,horse:()=>eG,llama:()=>eW,minecart:()=>eN,parrot:()=>eY,piglin:()=>eH,pillager:()=>eK,rabbit:()=>eq,sheep:()=>eJ,shulker:()=>eX,sniffer:()=>e$,spider:()=>e0,tadpole:()=>e5,turtle:()=>e1,vex:()=>e2,villager:()=>e3,warden:()=>e6,witch:()=>e7,wolf:()=>e8,zombie_villager:()=>e4});var i={};e.r(i),e.d(i,{main:()=>iq,railsCobweb:()=>iJ}),e(23712),e(12989),e(78873),e(24705),e(53346);var s=e(52676);e(67022),e(91620).Buffer;let a=()=>window.matchMedia("(pointer: coarse)").matches||navigator.userAgent.includes("Mobile");function r(n){return[Math.floor(n.x/16),Math.floor(n.z/16)]}function o(n){let t=Math.floor(n.x/16);return[t,Math.floor(n.y/16),Math.floor(n.z/16)]}var l=e(75271);let d=n=>{"touches"in n&&n.touches.length<2&&n.preventDefault&&n.preventDefault()},h=function(n,t){let{shouldPreventDefault:e=!1,delay:v=300}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},[i,s]=(0,l.useState)(!1),a=(0,l.useRef)(null),r=(0,l.useRef)(null),o=(0,l.useCallback)(t=>{e&&t.target&&(t.target.addEventListener("touchend",d,{passive:!1}),r.current=t.target),a.current=window.setTimeout(()=>{n(),s(!0)},v)},[n,v,e]),h=(0,l.useCallback)(n=>{a.current&&(clearTimeout(a.current),a.current=void 0),s(!1),e&&r.current&&(r.current.removeEventListener("touchend",d),r.current=null)},[e,t,i]);return{onMouseDown:n=>o(n),onTouchStart:n=>o(n),onMouseUp:n=>h(n),onMouseLeave:n=>h(n),onTouchEnd:n=>h(n),onClick(n){t()}}};var f=e(77449),u=e(65753),c=e(844);let m=(0,u.sj)({pointer:null,joystickInner:null}),g=(0,u.sj)({pointer:null}),p=n=>{let t=0,e=0;n&&m.pointer&&(t=n.clientX-m.pointer.x,e=n.clientY-m.pointer.y,t=Math.min(Math.max(t,-32),32),e=Math.min(Math.max(e,-32),32)),m.joystickInner&&(m.joystickInner.style.transform=`translate(${t}px, ${e}px)`),console.log("Movement vector:",{x:t/32,y:0,z:e/32})},b=(n,t)=>{console.log("Camera rotation:",{deltaX:n,deltaY:t})},A=()=>{let n=navigator.maxTouchPoints>0,t=(0,l.useRef)(null),e=(0,l.useRef)(null),{pointer:v}=(0,c.R)(m),{pointer:i}=(0,c.R)(g),a=n=>{let t={jump(){console.log("Jump button pressed")},sneak(){console.log("Sneak button pressed")}},e={jump(){console.log("Jump button released")},sneak(){console.log("Sneak button released")}},v=t=>{let v=t.currentTarget;v.releasePointerCapture(t.pointerId),e[n](),v.style.background="rgba(0, 0, 0, 0.5)"},i={jump:[85,60],sneak:[85,75]};return{style:{position:"fixed",left:`${i[n][0]}%`,top:`${i[n][1]}%`,borderRadius:"50%",width:"50px",height:"50px",background:"rgba(0, 0, 0, 0.5)",display:"flex",justifyContent:"center",alignItems:"center",transition:"background 0.1s",zIndex:8,color:"white",fontSize:"16px",userSelect:"none",transform:"translate(-50%, -50%)",border:"2px solid rgba(255, 255, 255, 0.3)"},onPointerDown(e){let v=e.currentTarget;v.setPointerCapture(e.pointerId),t[n](),v.style.background="rgba(0, 0, 0, 0.8)"},onPointerUp:v,onLostPointerCapture:v,children:({jump:"↑",sneak:"↓"})[n]}};return((0,l.useEffect)(()=>{e.current&&(m.joystickInner=(0,u.iH)(e.current))},[]),n)?(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"movement_joystick_outer",ref:t,style:{display:v?"flex":"none",borderRadius:"50%",width:80,height:80,border:"2px solid rgba(0, 0, 0, 0.5)",backgroundColor:"rgba(255, 255, 255, 0.3)",position:"fixed",justifyContent:"center",alignItems:"center",transform:"translate(-50%, -50%)",zIndex:8,...v?{left:`${v.x/window.innerWidth*100}%`,top:`${v.y/window.innerHeight*100}%`}:{}},children:(0,s.jsx)("div",{className:"movement_joystick_inner",style:{borderRadius:"50%",width:28,height:28,backgroundColor:"rgba(0, 0, 0, 0.5)",position:"absolute"},ref:e})}),(0,s.jsx)("div",{...a("jump")}),(0,s.jsx)("div",{...a("sneak")}),(0,s.jsx)("div",{style:{position:"fixed",left:"0",top:"0",width:"50%",height:"100%",zIndex:7},onPointerDown:n=>{m.pointer||(m.pointer={x:n.clientX,y:n.clientY,pointerId:n.pointerId},n.currentTarget.setPointerCapture(n.pointerId))},onPointerMove:n=>{m.pointer&&n.pointerId===m.pointer.pointerId&&p({clientX:n.clientX,clientY:n.clientY})},onPointerUp:n=>{m.pointer&&n.pointerId===m.pointer.pointerId&&(m.pointer=null,p(),n.currentTarget.releasePointerCapture(n.pointerId))},onLostPointerCapture:n=>{m.pointer&&n.pointerId===m.pointer.pointerId&&(m.pointer=null,p())}}),(0,s.jsx)("div",{style:{position:"fixed",right:"0",top:"0",width:"50%",height:"100%",zIndex:6},onPointerDown:n=>{g.pointer||(g.pointer={x:n.clientX,y:n.clientY,pointerId:n.pointerId},n.currentTarget.setPointerCapture(n.pointerId))},onPointerMove:n=>{if(g.pointer&&n.pointerId===g.pointer.pointerId)b(n.clientX-g.pointer.x,n.clientY-g.pointer.y),g.pointer.x=n.clientX,g.pointer.y=n.clientY},onPointerUp:n=>{g.pointer&&n.pointerId===g.pointer.pointerId&&(g.pointer=null,n.currentTarget.releasePointerCapture(n.pointerId))},onLostPointerCapture:n=>{g.pointer&&n.pointerId===g.pointer.pointerId&&(g.pointer=null)}})]}):null},y=(0,u.sj)({scenes:[],selected:"",selectorOpened:!1,actions:{}});function w(){let n=a(),{scenes:t,selected:e}=(0,c.R)(y),[v,i]=(0,l.useState)(!1),r=h(()=>{y.selectorOpened=!0},()=>{});return v?null:(0,s.jsxs)("div",{style:{position:"fixed",top:0,left:0,display:"flex",alignItems:"flex-start"},...r,children:[(0,s.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:t.map(t=>(0,s.jsx)("div",{style:{padding:n?"5px":"2px 5px",cursor:"pointer",userSelect:"none",background:t===e?"rgba(0, 0, 0, 0.5)":"rgba(0, 0, 0, 0.6)",fontWeight:t===e?"bold":"normal"},onClick:()=>{let n=new URLSearchParams(window.location.search);n.set("scene",t),location.search=n.toString()},children:t},t))}),(0,s.jsx)("div",{style:{padding:n?"5px":"2px 5px",cursor:"pointer",userSelect:"none",background:"rgba(0, 0, 0, 0.6)",fontSize:"14px",lineHeight:"1"},onClick:()=>i(!0),children:"\xd7"})]})}(0,f.my)((0,s.jsx)(function(){return(0,l.useEffect)(()=>{let n=document.createElement("style");n.innerHTML=`
|
|
1
|
+
(()=>{var n={81569:function(n,t,e){"use strict";var v={};e.r(v),e.d(v,{allay:()=>eC,arrow:()=>eZ,axolotl:()=>eR,blaze:()=>eS,boat:()=>e9,camel:()=>ez,cat:()=>eB,chicken:()=>eE,cod:()=>eP,creeper:()=>eI,dolphin:()=>eT,ender_dragon:()=>eF,enderman:()=>eU,endermite:()=>eD,fox:()=>eO,frog:()=>eQ,ghast:()=>eL,goat:()=>eV,guardian:()=>ej,horse:()=>eG,llama:()=>eW,minecart:()=>eN,parrot:()=>eY,piglin:()=>eH,pillager:()=>eK,rabbit:()=>eq,sheep:()=>eJ,shulker:()=>eX,sniffer:()=>e$,spider:()=>e0,tadpole:()=>e5,turtle:()=>e1,vex:()=>e2,villager:()=>e3,warden:()=>e6,witch:()=>e7,wolf:()=>e8,zombie_villager:()=>e4});var i={};e.r(i),e.d(i,{main:()=>iq,railsCobweb:()=>iJ}),e(23712),e(12989),e(78873),e(24705),e(53346);var s=e(52676);e(67022),e(91620).Buffer;let a=()=>window.matchMedia("(pointer: coarse)").matches||navigator.userAgent.includes("Mobile");function r(n){return[Math.floor(n.x/16),Math.floor(n.z/16)]}function o(n){let t=Math.floor(n.x/16);return[t,Math.floor(n.y/16),Math.floor(n.z/16)]}var l=e(75271);let d=n=>{"touches"in n&&n.touches.length<2&&n.preventDefault&&n.preventDefault()},h=function(n,t){let{shouldPreventDefault:e=!1,delay:v=300}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},[i,s]=(0,l.useState)(!1),a=(0,l.useRef)(null),r=(0,l.useRef)(null),o=(0,l.useCallback)(t=>{e&&t.target&&(t.target.addEventListener("touchend",d,{passive:!1}),r.current=t.target),a.current=window.setTimeout(()=>{n(),s(!0)},v)},[n,v,e]),h=(0,l.useCallback)(n=>{a.current&&(clearTimeout(a.current),a.current=void 0),s(!1),e&&r.current&&(r.current.removeEventListener("touchend",d),r.current=null)},[e,t,i]);return{onMouseDown:n=>o(n),onTouchStart:n=>o(n),onMouseUp:n=>h(n),onMouseLeave:n=>h(n),onTouchEnd:n=>h(n),onClick(n){t()}}};var f=e(77449),u=e(65753),c=e(844);let m=(0,u.sj)({pointer:null,joystickInner:null}),g=(0,u.sj)({pointer:null}),p=n=>{let t=0,e=0;n&&m.pointer&&(t=n.clientX-m.pointer.x,e=n.clientY-m.pointer.y,t=Math.min(Math.max(t,-32),32),e=Math.min(Math.max(e,-32),32)),m.joystickInner&&(m.joystickInner.style.transform=`translate(${t}px, ${e}px)`),console.log("Movement vector:",{x:t/32,y:0,z:e/32})},b=(n,t)=>{console.log("Camera rotation:",{deltaX:n,deltaY:t})},A=()=>{let n=navigator.maxTouchPoints>0,t=(0,l.useRef)(null),e=(0,l.useRef)(null),{pointer:v}=(0,c.R)(m),{pointer:i}=(0,c.R)(g),a=n=>{let t={jump(){console.log("Jump button pressed")},sneak(){console.log("Sneak button pressed")}},e={jump(){console.log("Jump button released")},sneak(){console.log("Sneak button released")}},v=t=>{let v=t.currentTarget;v.releasePointerCapture(t.pointerId),e[n](),v.style.background="rgba(0, 0, 0, 0.5)"},i={jump:[85,60],sneak:[85,75]};return{style:{position:"fixed",left:`${i[n][0]}%`,top:`${i[n][1]}%`,borderRadius:"50%",width:"50px",height:"50px",background:"rgba(0, 0, 0, 0.5)",display:"flex",justifyContent:"center",alignItems:"center",transition:"background 0.1s",zIndex:8,color:"white",fontSize:"16px",userSelect:"none",transform:"translate(-50%, -50%)",border:"2px solid rgba(255, 255, 255, 0.3)"},onPointerDown(e){let v=e.currentTarget;v.setPointerCapture(e.pointerId),t[n](),v.style.background="rgba(0, 0, 0, 0.8)"},onPointerUp:v,onLostPointerCapture:v,children:({jump:"↑",sneak:"↓"})[n]}};return((0,l.useEffect)(()=>{e.current&&(m.joystickInner=(0,u.iH)(e.current))},[]),n)?(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"movement_joystick_outer",ref:t,style:{display:v?"flex":"none",borderRadius:"50%",width:80,height:80,border:"2px solid rgba(0, 0, 0, 0.5)",backgroundColor:"rgba(255, 255, 255, 0.3)",position:"fixed",justifyContent:"center",alignItems:"center",transform:"translate(-50%, -50%)",zIndex:8,...v?{left:`${v.x/window.innerWidth*100}%`,top:`${v.y/window.innerHeight*100}%`}:{}},children:(0,s.jsx)("div",{className:"movement_joystick_inner",style:{borderRadius:"50%",width:28,height:28,backgroundColor:"rgba(0, 0, 0, 0.5)",position:"absolute"},ref:e})}),(0,s.jsx)("div",{...a("jump")}),(0,s.jsx)("div",{...a("sneak")}),(0,s.jsx)("div",{style:{position:"fixed",left:"0",top:"0",width:"50%",height:"100%",zIndex:7},onPointerDown:n=>{m.pointer||(m.pointer={x:n.clientX,y:n.clientY,pointerId:n.pointerId},n.currentTarget.setPointerCapture(n.pointerId))},onPointerMove:n=>{m.pointer&&n.pointerId===m.pointer.pointerId&&p({clientX:n.clientX,clientY:n.clientY})},onPointerUp:n=>{m.pointer&&n.pointerId===m.pointer.pointerId&&(m.pointer=null,p(),n.currentTarget.releasePointerCapture(n.pointerId))},onLostPointerCapture:n=>{m.pointer&&n.pointerId===m.pointer.pointerId&&(m.pointer=null,p())}}),(0,s.jsx)("div",{style:{position:"fixed",right:"0",top:"0",width:"50%",height:"100%",zIndex:6},onPointerDown:n=>{g.pointer||(g.pointer={x:n.clientX,y:n.clientY,pointerId:n.pointerId},n.currentTarget.setPointerCapture(n.pointerId))},onPointerMove:n=>{if(g.pointer&&n.pointerId===g.pointer.pointerId)b(n.clientX-g.pointer.x,n.clientY-g.pointer.y),g.pointer.x=n.clientX,g.pointer.y=n.clientY},onPointerUp:n=>{g.pointer&&n.pointerId===g.pointer.pointerId&&(g.pointer=null,n.currentTarget.releasePointerCapture(n.pointerId))},onLostPointerCapture:n=>{g.pointer&&n.pointerId===g.pointer.pointerId&&(g.pointer=null)}})]}):null},y=(0,u.sj)({scenes:[],selected:"",selectorOpened:!1,actions:{}});function w(){let n=a(),{scenes:t,selected:e}=(0,c.R)(y),[v,i]=(0,l.useState)(!1),r=h(()=>{y.selectorOpened=!0},()=>{});return v?null:(0,s.jsxs)("div",{style:{position:"fixed",top:0,left:0,display:"flex",alignItems:"flex-start",zIndex:1},...r,children:[(0,s.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:t.map(t=>(0,s.jsx)("div",{style:{padding:n?"5px":"2px 5px",cursor:"pointer",userSelect:"none",background:t===e?"rgba(0, 0, 0, 0.5)":"rgba(0, 0, 0, 0.6)",fontWeight:t===e?"bold":"normal"},onClick:()=>{let n=new URLSearchParams(window.location.search);n.set("scene",t),location.search=n.toString()},children:t},t))}),(0,s.jsx)("div",{style:{padding:n?"5px":"2px 5px",cursor:"pointer",userSelect:"none",background:"rgba(0, 0, 0, 0.6)",fontSize:"14px",lineHeight:"1"},onClick:()=>i(!0),children:"\xd7"})]})}(0,f.my)((0,s.jsx)(function(){return(0,l.useEffect)(()=>{let n=document.createElement("style");n.innerHTML=`
|
|
2
2
|
.lil-gui {
|
|
3
3
|
top: 60px !important;
|
|
4
4
|
right: 0 !important;
|
|
@@ -53,4 +53,4 @@ void main() {
|
|
|
53
53
|
|
|
54
54
|
#include <tonemapping_fragment>
|
|
55
55
|
#include <${iP>=154?"colorspace_fragment":"encodings_fragment"}>
|
|
56
|
-
}`})}}var iT=e(62005);let iF=new Date,iU=11===iF.getMonth()&&iF.getDate()>=24&&26>=iF.getDate(),iD=["panorama_3.webp","panorama_1.webp","panorama_4.webp","panorama_5.webp","panorama_0.webp","panorama_2.webp"];class iO{async start(){var n=this;this.doWorldBlocksPanorama?await this.worldBlocksPanorama():this.addClassicPanorama(),this.documentRenderer.render=function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];t&&(n.camera.aspect=n.documentRenderer.canvas.width/n.documentRenderer.canvas.height,n.camera.updateProjectionMatrix()),n.documentRenderer.renderer.render(n.scene,n.camera)}}async debugImageInFrontOfCamera(){let n=await tC((0,iT.join)("background","panorama_0.webp")),t=new nT.K(new nW._(1e3,1e3),new nD.v({map:n}));t.position.set(0,0,-500),t.rotation.set(0,0,0),this.scene.add(t)}addClassicPanorama(){let n=new nU.D(1e3,1e3,1e3),t=[];for(let n of iD)(async()=>{let{texture:e}=tM((0,iT.join)("background",iU?"christmas":"",n));e.matrixAutoUpdate=!1,e.matrix.set(-1,0,1,0,1,0,0,0,1),e.wrapS=nb.uWy,e.wrapT=nb.uWy,e.minFilter=nb.wem,e.magFilter=nb.wem;let v=new nD.v({map:e,transparent:!0,side:nb.ehD,depthWrite:!1,opacity:0});this.startTimes.set(v,Date.now()),t.push(v)})();let e=new nT.K(n,t);e.onBeforeRender=()=>{for(let n of(this.time+=.01,e.rotation.y=Math.PI+.01*this.time,e.rotation.z=.001*Math.sin(-(.001*this.time)),t)){let t=this.startTimes.get(n);t&&(n.opacity=Math.min(1,(Date.now()-t)/200))}};let v=new nB.T;if(v.add(e),!iU)for(let n=0;n<20;n++){let n=new vl("1.16.4","squid").mesh;n.position.set(30*Math.random()-15,20*Math.random()-10,10*Math.random()-17),n.rotation.set(0,Math.PI+Math.random(),-Math.PI/4,"ZYX");let t=.01*Math.random();n.children[0].onBeforeRender=()=>{n.rotation.y+=t,n.rotation.z=Math.cos(3*e.rotation.y)*Math.PI/4-Math.PI/2},v.add(n)}this.scene.add(v),this.panoramaGroup=v}async worldBlocksPanorama(){var n;let t,v="1.21.4",i=this.options.resourcesManager;if(i.currentConfig={version:v,noInventoryGui:!0},await (null==(n=i.updateAssetsData)?void 0:n.call(i,{})),this.abortController.signal.aborted)return;console.time("load panorama scene");let s=G(v),a=e(66512)(v),r=globalThis.mcData.blocksArray.filter(n=>{var t;if(!n.name.includes("stained_glass"))return!1;let e=a.fromStateId(n.defaultState,0);if((null==(t=e.shapes)?void 0:t.length)!==1)return!1;let v=e.shapes[0];return 0===v[0]&&0===v[1]&&0===v[2]&&1===v[3]&&1===v[4]&&1===v[5]});for(let n=-100;n<100;n++)for(let t=-100;t<100;t++){let e=r[Math.floor(Math.random()*r.length)];s.setBlockStateId(new R.A(n,t,-15),e.defaultState)}this.camera.updateProjectionMatrix(),this.camera.position.set(.5,50.5,.5),this.camera.rotation.set(0,0,0);let o=new R.A(...this.camera.position.toArray()),l=new nt(s,2,o);if(this.abortController.signal.aborted||(this.worldRenderer=new this.WorldRendererClass(this.documentRenderer.renderer,this.options,{version:v,worldView:l,inWorldRenderingConfig:tD,playerStateReactive:q().reactive,rendererState:Y().reactive,nonReactiveState:Y().nonReactive}),this.worldRenderer instanceof iB&&(this.scene=this.worldRenderer.scene),l.init(o),await this.worldRenderer.waitForChunksToRender(),this.abortController.signal.aborted))return;let{camera:d}=this,h=d.position.x,f=d.position.y;document.body.addEventListener("pointermove",n=>{if("mouse"!==n.pointerType)return;let e=new nz.F(n.clientX,n.clientY),v=e.x/window.innerWidth-.5,i=-(e.y/window.innerHeight-.5);null==t||t.stop(),(t=new n2.kX(d.position).to({x:h+.2*v,y:f+.2*i},0)).start(),d.updateProjectionMatrix()},{signal:this.abortController.signal}),console.timeEnd("load panorama scene")}dispose(){var n;this.scene.clear(),null==(n=this.worldRenderer)||n.destroy(),this.abortController.abort()}constructor(n,t,e=!1){(0,x._)(this,"documentRenderer",void 0),(0,x._)(this,"options",void 0),(0,x._)(this,"doWorldBlocksPanorama",void 0),(0,x._)(this,"camera",void 0),(0,x._)(this,"scene",void 0),(0,x._)(this,"ambientLight",void 0),(0,x._)(this,"directionalLight",void 0),(0,x._)(this,"panoramaGroup",void 0),(0,x._)(this,"time",void 0),(0,x._)(this,"abortController",void 0),(0,x._)(this,"worldRenderer",void 0),(0,x._)(this,"WorldRendererClass",void 0),(0,x._)(this,"startTimes",void 0),this.documentRenderer=n,this.options=t,this.doWorldBlocksPanorama=e,this.panoramaGroup=null,this.time=0,this.abortController=new AbortController,this.WorldRendererClass=iB,this.startTimes=new Map,this.scene=new nN.x,this.scene.background=new nS.I(3294568),this.ambientLight=new nY.M(0xcccccc),this.scene.add(this.ambientLight),this.directionalLight=new nH.O(0xffffff,.5),this.directionalLight.position.set(1,1,.5).normalize(),this.directionalLight.castShadow=!0,this.scene.add(this.directionalLight),this.camera=new B.c(85,this.documentRenderer.canvas.width/this.documentRenderer.canvas.height,.05,1e3),this.camera.position.set(0,0,0),this.camera.rotation.set(0,0,0)}}var iQ=e(14224);np.ep.enabled=!1,globalThis.THREE=S;let iL=n=>({updateMap:n.entities.updateMap.bind(n.entities),updateCustomBlock:n.updateCustomBlock.bind(n),getBlockInfo:n.getBlockInfo.bind(n),playEntityAnimation:n.entities.playAnimation.bind(n.entities),damageEntity:n.entities.handleDamageEvent.bind(n.entities),updatePlayerSkin:n.entities.updatePlayerSkin.bind(n.entities),changeHandSwingingState:n.changeHandSwingingState.bind(n),getHighestBlocks:n.getHighestBlocks.bind(n),reloadWorld:n.reloadWorld.bind(n),updateEntityModel:n.entities.updateEntityModel.bind(n.entities),playEntityModelAnimation:n.entities.playEntityModelAnimation.bind(n.entities),addMedia:n.media.addMedia.bind(n.media),destroyMedia:n.media.destroyMedia.bind(n.media),setControlMode:n.media.setControlMode.bind(n.media),setVideoPlaying:n.media.setVideoPlaying.bind(n.media),setVideoSeeking:n.media.setVideoSeeking.bind(n.media),setVideoVolume:n.media.setVideoVolume.bind(n.media),setVideoSpeed:n.media.setVideoSpeed.bind(n.media),handleUserClick:n.media.handleUserClick.bind(n.media),addSectionAnimation(t,e){n.sectionsOffsetsAnimations[t]=e},removeSectionAnimation(t){delete n.sectionsOffsetsAnimations[t]},shakeFromDamage:n.cameraShake.shakeFromDamage.bind(n.cameraShake),onPageInteraction:n.media.onPageInteraction.bind(n.media),downloadMesherLog:n.downloadMesherLog.bind(n),explodeFirework:n.fireworksLegacy.explode.bind(n.fireworksLegacy),explodeFireworkFacingCamera:n.fireworksLegacy.explodeFacingCamera.bind(n.fireworksLegacy),addWaypoint:n.waypoints.addWaypoint.bind(n.waypoints),removeWaypoint:n.waypoints.removeWaypoint.bind(n.waypoints),startCinimaticScript:n.cinimaticScript.startScript.bind(n.cinimaticScript),stopCinimaticScript:n.cinimaticScript.stopScript.bind(n.cinimaticScript),launchFirework:n.fireworks.launchFirework.bind(n.fireworks),setSkyboxImage:n.skyboxRenderer.setSkyboxImage.bind(n.skyboxRenderer),async loadGeometryExport(t){let{applyWorldGeometryExport:v}=await Promise.resolve().then(e.bind(e,48892));return v(n,t)}}),iV=[nm],ij=()=>{let n,t=null,e=null,v=null,i=null,s=(e,v)=>{t=new tf(n=td?nC(e,iV,globalThis):e,null==v?void 0:v.canvas),globalThis.renderer=t.renderer,globalThis.documentRenderer=t,globalThis.threeJsBackend=l,globalThis.resourcesManager=n.resourcesManager,iW("default",l)},a=async()=>{if(!t)throw Error("Document renderer not initialized");!v&&(e||(e=new iO(t,n,!!iQ.env.SINGLE_FILE_BUILD_MODE),globalThis.panoramaRenderer=e,iW("panoramaCreated",e),await e.start(),iW("panoramaReady",e)))},r=async s=>{let a=td?nC(s,iV,globalThis):s;if(!t)throw Error("Document renderer not initialized");t.nonReactiveState=a.nonReactiveState,e&&(e.dispose(),e=null),v=new iB(t.renderer,n,a),await v.worldReadyPromise,i=new nR(a.nonReactiveState),globalThis.frameTimingCollector=i;let r=t.render;t.render=function(n){r.call(this,n),null==i||i.markFrameStart(),a.inWorldRenderingConfig.paused||null==v||v.render(n),null==i||i.markFrameEnd(),null==i||i.markFrameDisplay()},t.inWorldRenderingConfig=a.inWorldRenderingConfig,globalThis.world=v,iW("worldReady",v)},o=()=>{e&&(e.dispose(),e=null),t&&t.dispose(),v&&(v.destroy(),v=null)},l={id:"threejs",displayName:`three.js ${nb.UZH}`,startPanorama:a,startWorld:r,disconnect:o,setRendering(n){t.setPaused(!n),v&&(v.renderingActive=n)},getDebugOverlay:()=>({get entitiesString(){return null==v?void 0:v.entities.getDebugString()}}),updateCamera(n,t,e){null==i||i.markCameraUpdate(!n),null==v||v.setFirstPersonCamera(n,t,e)},get soundSystem(){return null==v?void 0:v.soundSystem},get backendMethods(){if(!v)return;return iL(v)}};return{main:{init:s,backend:l},workerProxy:()=>(function(n,t){let e=(void 0)??globalThis;return e.addEventListener("message",t=>{let{type:v,args:i,msgId:s}=t.data;if(n[v]){let t=n[v](...i);t instanceof Promise&&t.then(n=>{e.postMessage({type:"result",msgId:s,args:[n]})})}}),null})({init(n,t){s(n,{canvas:t})},updateSizeExternal(n,e,v){null==t||t.updateSizeExternal(n,e,v)},startPanorama:a,startWorld:r,disconnect:o,setRendering:l.setRendering,updateCamera(n,t,e){let v=n?new R.A(n.x,n.y,n.z):null;null==i||i.markCameraUpdate(!v),l.updateCamera(v,t,e)},async callBackendMethod(n){for(var t=arguments.length,e=Array(t>1?t-1:0),i=1;i<t;i++)e[i-1]=arguments[i];if(!v)throw Error("World renderer not initialized");let s=iL(v)[n];if(!s)throw Error(`Backend method ${String(n)} is unavailable`);return s(...e)}})}},iG=n=>{let{main:t}=ij();return t.init(n),t.backend},iW=function(n){for(var t,e,v=arguments.length,i=Array(v>1?v-1:0),s=1;s<v;s++)i[s-1]=arguments[s];for(let v of Object.values(globalThis.loadedMods??{}))try{null==(e=v.threeJsBackendModule)||null==(t=e[n])||t.call(e,...i)}catch(t){throw Error(`[mod three.js] Error calling ${n} on ${v.name}: ${t}`)}};iG.id="threejs",parseInt(nb.UZH.replaceAll(/\D+/g,""),10),nX.j,window.THREE=S;let iN=[iG],iY=["1.16.5"];class iH{get worldRenderer(){return window.world}get worldConfig(){return this.appViewer.inWorldRenderingConfig}set worldConfig(n){Object.assign(this.appViewer.inWorldRenderingConfig,n)}onParamsUpdate(n,t){}updateQs(n,t){if(this.skipUpdateQs)return;let e=new URLSearchParams(window.location.search);for(let[i,s]of Object.entries({[n]:t})){var v;"function"==typeof s||(null==(v=this.params.skipQs)?void 0:v.includes(i))||this.alwaysIgnoreQs.includes(i)||(s?e.set(i,s):e.delete(i))}window.history.replaceState({},"",`${window.location.pathname}?${e.toString()}`)}renderFinish(){this.requestRender()}initGui(){let n=new URLSearchParams(window.location.search);for(let t of Object.keys(this.params)){let e=n.get(t);if(!e)continue;let v=/^-?\d+$/.test(e)?Number(e):"true"===e||"false"!==e&&e;this.params[t]=v}for(let n of Object.keys(this.params)){let t=this.paramOptions[n];null!=t&&t.hide||this.gui.add(this.params,n,(null==t?void 0:t.options)??(null==t?void 0:t.min),null==t?void 0:t.max)}window.innerHeight<700?this.gui.open(!1):setTimeout(()=>{this.gui.domElement.classList.remove("transition")},500),this.gui.onChange(n=>{let{property:t,object:e}=n;if(e===this.params){var v,i,s;null==(v=(i=this.onParamUpdate)[t])||v.call(i),this.onParamsUpdate(t,e);let n=this.params[t];(null==(s=this.paramOptions[t])?void 0:s.reloadOnChange)&&("boolean"==typeof n||this.paramOptions[t].options)&&setTimeout(()=>{window.location.reload()}),this.updateQs(t,n)}else this.onParamsUpdate(t,e)})}setupWorld(){}sceneReset(){}addWorldBlock(n,t,e,v,i){if(n>16||t>16||e>16)throw Error("Offset too big");let s=i?this.Block.fromProperties(this.mcData.blocksByName[v].id,i??{},0):this.Block.fromStateId(this.mcData.blocksByName[v].defaultState,0);this.world.setBlock(this.targetPos.offset(n,t,e),s)}syncCameraToBackend(){let n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.appViewer.backend||!this.camera)return;let t=new z.P(0,0,-1);t.applyQuaternion(this.camera.quaternion);let e=Math.atan2(-t.x,-t.z),v=Math.asin(t.y);if(n)return void this.appViewer.backend.updateCamera(null,e,v);let i=new R.A(this.camera.position.x,this.camera.position.y,this.camera.position.z);this.appViewer.backend.updateCamera(i,e,v)}resetCamera(){var n,t;if(!this.camera)return;let{targetPos:e}=this;null==(n=this.controls)||n.target.set(e.x+.5,e.y+.5,e.z+.5);let v=e.offset(2,2,2);this.camera.position.set(v.x+.5,v.y+.5,v.z+.5),this.camera.lookAt(e.x+.5,e.y+.5,e.z+.5),null==(t=this.controls)||t.update(),this.syncCameraToBackend()}async initData(){var n,t,e,v,i;let s=P()(this.version);this.mcData=s,window.loadedData=window.mcData=s,this.Chunk=U()(this.version),this.Block=T()(this.version);let a=G(this.version);if(a.setBlockStateId(this.targetPos,0),this.world=a,this.initGui(),this.appViewer.resourcesManager.currentConfig={version:this.version,noInventoryGui:!0},await (null==(n=(t=this.appViewer.resourcesManager).loadSourceData)?void 0:n.call(t,this.version)),await (null==(e=(v=this.appViewer.resourcesManager).updateAssetsData)?void 0:e.call(v,{})),this.appViewer.backend||await this.appViewer.loadBackend(iN[0]),await this.appViewer.startWorld(a,this.viewDistance,(0,u.sj)(H()),this.targetPos),this.worldView=this.appViewer.worldView,this.camera=new B.c(this.appViewer.inWorldRenderingConfig.fov||75,window.innerWidth/window.innerHeight,.1,1e3),this.setupWorld(),this.worldView&&(this.worldView.addWaitTime=0,await this.worldView.init(this.targetPos)),this.enableCameraControls){let n=document.querySelector("#viewer-canvas");if(n){let t=this.enableCameraOrbitControl?new D.z(this.camera,n):void 0;this.controls=t,this.resetCamera();let e=this.params.camera||localStorage.camera;if(e){let[n,t,v,s,a]=e.split(",").map(Number);this.camera.position.set(n,t,v),this.camera.rotation.set(s,a,0,"ZYX"),null==(i=this.controls)||i.update()}let v=L().throttle(()=>{this.camera&&(localStorage.camera=[this.camera.position.x.toFixed(2),this.camera.position.y.toFixed(2),this.camera.position.z.toFixed(2),this.camera.rotation.x.toFixed(2),this.camera.rotation.y.toFixed(2)].join(","))},200);if(this.controls){let n=L().throttle(()=>{},16);this.controls.addEventListener("change",()=>{n(),v(),this.requestRender()})}else setInterval(()=>{v()},200)}}if(!this.enableCameraOrbitControl&&this.camera){let n=0;setInterval(()=>{n=0},1e3),window.addEventListener("pointermove",t=>{t.target.closest(".lil-gui")||((1===t.buttons||"touch"===t.pointerType)&&(n++,this.camera.rotation.x-=t.movementY/100,this.camera.rotation.y-=t.movementX/100,this.camera.rotation.x<-Math.PI/2&&(this.camera.rotation.x=-Math.PI/2),this.camera.rotation.x>Math.PI/2&&(this.camera.rotation.x=Math.PI/2),this.syncCameraToBackend(!0)),2===t.buttons&&(this.camera.position.set(0,0,0),this.syncCameraToBackend()))})}this.onResize(),window.addEventListener("resize",()=>this.onResize()),this.setupDebugFpsGui(),this.renderFinish(),this.mainDebugLoop()}mainDebugLoop(){requestAnimationFrame(()=>this.mainDebugLoop()),this.trackFrame()}loop(){this.continuousRender&&!this.windowHidden&&(this.requestRender(),requestAnimationFrame(()=>this.loop()))}requestRender(){}setupDebugFpsGui(){this.debugFpsElement=document.createElement("div"),this.debugFpsElement.style.position="fixed",this.debugFpsElement.style.bottom="0",this.debugFpsElement.style.left="0",this.debugFpsElement.style.zIndex="1000",this.debugFpsElement.style.backgroundColor="rgba(0, 0, 0, 0.7)",this.debugFpsElement.style.color="#fff",this.debugFpsElement.style.padding="4px 6px",this.debugFpsElement.style.fontFamily="monospace",this.debugFpsElement.style.fontSize="11px",this.debugFpsElement.style.lineHeight="1.2",this.debugFpsElement.style.pointerEvents="none",this.debugFpsElement.style.userSelect="none",this.debugFpsElement.textContent="FPS: 0 | Max: 0 ms",document.body.appendChild(this.debugFpsElement),setInterval(()=>{this.updateDebugInfo()},1e3)}trackFrame(){let n=performance.now();if(this.frameTimes.push(n),this.frameCount++,this.frameTimes.length>1){let t=n-this.frameTimes.at(-2);t>this.maxFrameDelay&&(this.maxFrameDelay=t)}let t=n-1e3;this.frameTimes=this.frameTimes.filter(n=>n>t)}updateDebugInfo(){if(!this.debugFpsElement)return;let n=this.frameTimes.length;this.currentFps=n;let t=this.maxFrameDelay>150?`<span style="color: #ff4444;">${this.maxFrameDelay.toFixed(0)}ms</span>`:`${this.maxFrameDelay.toFixed(0)}ms`;this.debugFpsElement.innerHTML=`FPS: ${n} | Max Delay: ${t}`,this.lastSecondTime=performance.now(),this.maxFrameDelay=0,this.frameCount=0}render(){arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.requestRender()}addKeyboardShortcuts(){document.addEventListener("keydown",n=>{if(!n.shiftKey&&!n.ctrlKey&&!n.altKey&&!n.metaKey){if("KeyR"===n.code){var t;null==(t=this.controls)||t.reset(),this.resetCamera()}"KeyE"===n.code&&this.worldView.setBlockStateId(this.targetPos,this.world.getBlockStateId(this.targetPos)),"KeyF"===n.code&&(this.sceneReset(),this.worldView.unloadAllChunks(),this.worldView.init(this.targetPos))}}),document.addEventListener("visibilitychange",()=>{this.windowHidden="hidden"===document.visibilityState}),document.addEventListener("blur",()=>{this.windowHidden=!0}),document.addEventListener("focus",()=>{this.windowHidden=!1});let n=new Set;setInterval(()=>{var t;if(n.has("ControlLeft")||n.has("MetaLeft")||!this.camera)return;let e=new z.P(0,0,0);n.has("KeyW")&&(e.z=-.5),n.has("KeyS")&&(e.z+=.5),n.has("KeyA")&&(e.x-=.5),n.has("KeyD")&&(e.x+=.5),n.has("ShiftLeft")&&(this.camera.position.y-=.5),n.has("Space")&&(this.camera.position.y+=.5),e.applyQuaternion(this.camera.quaternion),e.y=0,n.has("ShiftLeft")&&(e.y*=2,e.x*=2,e.z*=2),this.camera.position.add(e.normalize()),null==(t=this.controls)||t.update(),this.syncCameraToBackend(),this.requestRender()},50);let t=t=>{let{code:e}=t;"keydown"===t.type?n.add(e):n.delete(e)};window.addEventListener("keydown",t),window.addEventListener("keyup",t),window.addEventListener("blur",()=>{for(let e of n)t(new KeyboardEvent("keyup",{code:e}))})}onResize(){this.requestRender()}constructor(n={}){if((0,x._)(this,"appViewer",new ng({config:{statsVisible:2}})),(0,x._)(this,"mcData",void 0),(0,x._)(this,"continuousRender",!1),(0,x._)(this,"stopRender",!1),(0,x._)(this,"windowHidden",!1),(0,x._)(this,"viewDistance",0),(0,x._)(this,"targetPos",new R.A(2,90,2)),(0,x._)(this,"version",new URLSearchParams(window.location.search).get("version")??iY.at(-1)),(0,x._)(this,"Chunk",void 0),(0,x._)(this,"Block",void 0),(0,x._)(this,"world",void 0),(0,x._)(this,"gui",new O.ZP),(0,x._)(this,"params",{}),(0,x._)(this,"paramOptions",{}),(0,x._)(this,"onParamUpdate",{}),(0,x._)(this,"alwaysIgnoreQs",[]),(0,x._)(this,"skipUpdateQs",!1),(0,x._)(this,"enableCameraControls",!0),(0,x._)(this,"enableCameraOrbitControl",!0),(0,x._)(this,"controls",void 0),(0,x._)(this,"camera",void 0),(0,x._)(this,"worldView",void 0),(0,x._)(this,"debugFpsElement",void 0),(0,x._)(this,"frameCount",0),(0,x._)(this,"lastSecondTime",performance.now()),(0,x._)(this,"frameTimes",[]),(0,x._)(this,"currentFps",0),(0,x._)(this,"maxFrameDelay",0),n.version&&(this.version=n.version),!this.version)throw Error("Minecraft version is not set");void 0!==n.viewDistance&&(this.viewDistance=n.viewDistance),n.targetPos&&(this.targetPos=n.targetPos),void 0!==n.enableCameraControls&&(this.enableCameraControls=n.enableCameraControls),void 0!==n.enableCameraOrbitControl&&(this.enableCameraOrbitControl=n.enableCameraOrbitControl),n.worldConfig&&Object.assign(this.appViewer.inWorldRenderingConfig,n.worldConfig),this.appViewer.inWorldRenderingConfig.showHand=!1,this.appViewer.inWorldRenderingConfig.isPlayground=!0,this.appViewer.inWorldRenderingConfig.instantCameraUpdate=this.enableCameraOrbitControl,this.appViewer.config.statsVisible=2,void 0!==n.continuousRender&&(this.continuousRender=n.continuousRender),this.initData().then(()=>{this.addKeyboardShortcuts()})}}let iK=["1.16.5"],iq=class extends iH{initGui(){this.params={skipQs:"",block:"",metadata:0,supportBlock:!1,entity:"",removeEntity(){this.entity=""},entityRotate:!1,camera:"",playSound(){},blockIsomorphicRenderBundle(){},modelVariant:0},this.metadataGui=this.gui.add(this.params,"metadata"),this.paramOptions={version:{options:iK,hide:!1},block:{options:this.mcData.blocksArray.map(n=>n.name).sort((n,t)=>n.localeCompare(t))},entity:{options:this.mcData.entitiesArray.map(n=>n.name).sort((n,t)=>n.localeCompare(t))},camera:{hide:!0}},super.initGui()}entityUpdateShared(){if(this.worldRenderer.entities.clear(),!this.params.entity)return;this.worldView.emit("entity",{id:"id",name:this.params.entity,pos:this.targetPos.offset(.5,1,.5),width:1,height:1,username:localStorage.testUsername,yaw:Math.PI,pitch:0});let n=t=>{let{children:e,isSkeletonHelper:v}=t;if(Array.isArray(e)){if(v){t.visible=!0;return}for(let t of e)"object"==typeof t&&n(t)}};n(this.worldRenderer.entities.entities.id),setTimeout(()=>{this.render()},120)}getBlock(){return this.mcData.blocksByName[this.params.block||"air"]}onParamsUpdate(n,t){var e,v;let i,s=null==(e=this.getBlock())?void 0:e.id;if("metadata"===n)for(let n of(i=new this.Block(s,0,this.params.metadata),Object.assign(this.blockProps,i.getProperties()),this.metadataFolder.children))n.updateDisplay();else try{i=this.Block.fromProperties(s??-1,this.blockProps,0)}catch(n){console.error(n),i=this.Block.fromStateId(0,0)}this.worldView.setBlockStateId(this.targetPos,i.stateId??0),console.log("up stateId",i.stateId),this.params.metadata=i.metadata,null==(v=this.metadataGui)||v.updateDisplay()}renderFinish(){for(let n of Object.values(this.onParamUpdate))n();this.onParamsUpdate("",{}),this.gui.openAnimated()}blockIsomorphicRenderBundle(){let{renderer:n}=this.worldRenderer,t=n.domElement,e=!confirm("Ok - render all blocks, Cancel - render only current one"),v=prompt("Size","512");if(!v)return;let i=parseInt(v,10);t.width=i,t.height=i,n.setSize(i,i),this.worldRenderer.camera=new M.i(-1,1,1,-1,0,10),this.worldRenderer.scene.background=null;let s=C.M8.degToRad(-120);this.worldRenderer.directionalLight.position.set(Math.cos(s),Math.sin(s),.2).normalize(),this.worldRenderer.directionalLight.intensity=1;let a=this.targetPos.offset(2,2,2),r=C.M8.degToRad(-30),o=C.M8.degToRad(45);this.worldRenderer.camera.rotation.set(r,o,0,"ZYX"),this.worldRenderer.camera.position.set(a.x+1,a.y+.5,a.z+1);let l=this.mcData.blocksArray.map(n=>n.name),d=1,h=l[0],f=()=>{this.params.block=h};this.worldRenderer.waitForChunksToRender().then(async()=>{await new Promise(n=>{setTimeout(n,0)}),e?(this.render(),m()):(this.worldRenderer.renderUpdateEmitter.addListener("update",m),f())});let u=new JSZip;u.file("description.txt","Generated with mcraft.fun/playground");let c=async()=>{let n=document.createElement("a"),t=await u.generateAsync({type:"blob"}),e=URL.createObjectURL(t);n.href=e,n.download="blocks_render.zip",n.click(),URL.revokeObjectURL(e),console.log("end"),this.worldRenderer.renderUpdateEmitter.removeListener("update",m)};async function m(){let n=t.toDataURL("image/png");u.file(`${h}.png`,n.split(",")[1],{base64:!0}),e?c():g()}let g=async()=>{h=l[d++],console.log(l.length,"/",d,h),d%5==0&&await new Promise(n=>{setTimeout(n,100)}),h?f():c()}}constructor(...n){super(...n),(0,x._)(this,"blockProps",{}),(0,x._)(this,"metadataFolder",void 0),(0,x._)(this,"metadataGui",void 0),(0,x._)(this,"onParamUpdate",{version(){},block:()=>{var n,t;this.blockProps={},null==(n=this.metadataFolder)||n.destroy();let e=this.mcData.blocksByName[this.params.block];if(!e)return;console.log("block",e.name);let v=new this.Block(e.id,0,0).getProperties(),{states:i}=this.mcData.blocksByStateId[null==(t=this.getBlock())?void 0:t.minStateId]??{};if(this.metadataFolder=this.gui.addFolder("metadata"),i)for(let n of i){let t;if(n.values)t=n.values[0];else switch(n.type){case"bool":t=!1;break;case"int":t=0;break;case"direction":t="north";break;default:continue}this.blockProps[n.name]=t,n.values?this.metadataFolder.add(this.blockProps,n.name,n.values):this.metadataFolder.add(this.blockProps,n.name)}else for(let[n,t]of Object.entries(v))this.blockProps[n]=t,this.metadataFolder.add(this.blockProps,n);console.log("props",this.blockProps),this.metadataFolder.open()},entity:()=>{this.continuousRender="player"===this.params.entity,this.entityUpdateShared(),this.params.entity&&("player"===this.params.entity&&(this.worldRenderer.entities.updatePlayerSkin("id",this.worldRenderer.entities.entities.id.username,void 0,!0,!0),this.worldRenderer.entities.playAnimation("id","running")),vl.getStaticData(this.params.entity))},supportBlock:()=>{this.worldView.setBlockStateId(this.targetPos.offset(0,-1,0),+!!this.params.supportBlock)},modelVariant:()=>{this.worldRenderer.worldRendererConfig.debugModelVariant=0===this.params.modelVariant?void 0:[this.params.modelVariant]}})}};class iJ extends iH{setupWorld(){this.addWorldBlock(0,0,0,"cobweb"),this.addWorldBlock(0,-1,0,"cobweb"),this.addWorldBlock(1,-1,0,"cobweb"),this.addWorldBlock(1,0,0,"cobweb"),this.addWorldBlock(0,0,1,"powered_rail",{shape:"north_south",waterlogged:!1}),this.addWorldBlock(0,0,2,"powered_rail",{shape:"ascending_south",waterlogged:!1}),this.addWorldBlock(0,1,3,"powered_rail",{shape:"north_south",waterlogged:!1})}}let iZ=new URLSearchParams(window.location.search).get("scene"),iX=iZ?i[iZ]:iq;y.scenes=["main","railsCobweb","floorRandom","lightingStarfield","transparencyIssue","entities","frequentUpdates","slabsOptimization","allEntities","geometryExport"],y.selected=iZ??"main";let i$=new iX;globalThis.scene=i$},79997:function(n,t,e){n.exports={pc:{"1.16.5":{get attributes(){return e(42065)},get blocks(){return e(23625)},get blockCollisionShapes(){return e(58431)},get biomes(){return e(3867)},get effects(){return e(39542)},get items(){return e(80220)},get enchantments(){return e(71116)},get recipes(){return e(26901)},get instruments(){return e(55729)},get materials(){return e(14841)},get language(){return e(32464)},get entities(){return e(15082)},get protocol(){return e(31610)},get windows(){return e(62833)},get version(){return e(39640)},get foods(){return e(55737)},get particles(){return e(75455)},get blockLoot(){return e(92885)},get entityLoot(){return e(18208)},get loginPacket(){return e(35652)},get tints(){return e(53880)},get mapIcons(){return e(47373)},get sounds(){return e(69)}}}}},48892:function(n,t,e){"use strict";e.d(t,{applyWorldGeometryExport:()=>c,p9:()=>h}),e(69047),e(95922),e(95790),e(40542),e(24705),e(53346),e(23712),e(12989),e(78873),e(58207),e(98497),e(84269),e(90758),e(7652),e(12516),e(83450),e(26110),e(91292),e(52777),e(33975),e(60398),e(44505),e(10020),e(71698),e(42973),e(21428);var v=e(58894),i=e(31180),s=e(86227),a=e(57511),r=e(30730),o=e(76197),l=e(76804);let d="geometry-export-root";function h(n,t,e){let v=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"world-geometry.json",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=new Blob([JSON.stringify(function(n,t,e){let v=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=[];for(let[t,e]of Object.entries(n.sectionObjects)){let n=e.children.find(n=>"mesh"===n.name);if(!(null==n?void 0:n.geometry))continue;let{geometry:v}=n,s=v.getAttribute("position"),a=v.getAttribute("normal"),r=v.getAttribute("color"),o=v.getAttribute("uv"),l=v.index;s&&l&&i.push({key:t,position:{x:n.position.x,y:n.position.y,z:n.position.z},geometry:{positions:[...s.array],normals:a?[...a.array]:[],colors:r?[...r.array]:[],uvs:o?[...o.array]:[],indices:[...l.array]}})}let s={version:n.version??"unknown",exportedAt:new Date().toISOString(),camera:{position:t,rotation:e},sections:i};if(v&&n.material.map){let t=document.createElement("canvas"),{image:e}=n.material.map;e&&(t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),s.textureAtlasDataUrl=t.toDataURL("image/png"))}return s}(n,t,e,i))],{type:"application/json"}),a=URL.createObjectURL(s),r=document.createElement("a");r.href=a,r.download=v,r.click(),URL.revokeObjectURL(a)}async function f(n){return new Promise((t,e)=>{let v=new Image;v.onload=()=>{let n=new r.x(v);n.magFilter=o.TyD,n.minFilter=o.TyD,n.needsUpdate=!0,n.flipY=!1,t(n)},v.onerror=e,v.src=n})}let u=n=>{var t,e,v;n.traverse(n=>{if(n.isMesh){var t;null==(t=n.geometry)||t.dispose()}});let i=null==(t=n.userData)?void 0:t.geometryExportMaterial;if(i){let n=i.map;null==n||null==(e=n.dispose)||e.call(n),null==(v=i.dispose)||v.call(i)}};async function c(n,t){let e,{scene:r,renderUpdateEmitter:o,material:h}=n,c=r.getObjectByName(d);c&&(r.remove(c),u(c));let m=!!t.textureAtlasDataUrl;if(m&&t.textureAtlasDataUrl){let n=await f(t.textureAtlasDataUrl);(e=new l.Y({map:n,vertexColors:!0,transparent:!0,alphaTest:.1})).name="geometry-export-material"}else e=h;let g=function(n,t){let e=[];for(let r of n.sections){let n=new v.u;n.setAttribute("position",new i.a$(r.geometry.positions,3)),r.geometry.normals.length&&n.setAttribute("normal",new i.a$(r.geometry.normals,3)),r.geometry.colors.length&&n.setAttribute("color",new i.a$(r.geometry.colors,3)),r.geometry.uvs.length&&n.setAttribute("uv",new i.a$(r.geometry.uvs,2));let o=Math.max(...r.geometry.indices)>65535?Uint32Array:Uint16Array;n.setIndex(new i.Tl(new o(r.geometry.indices),1));let l=new s.K(n,t);l.position.set(r.position.x,r.position.y,r.position.z),l.name="mesh";let d=new a.Z;d.name="chunk",d.add(l),e.push(d)}return e}(t,e),p=new a.Z;for(let n of(p.name=d,m&&(p.userData.geometryExportMaterial=e),g))p.add(n);return r.add(p),o.emit("update"),g.length}},84404:function(){},11706:function(){}},t={};function e(v){var i=t[v];if(void 0!==i)return i.exports;var s=t[v]={id:v,loaded:!1,exports:{}};return n[v].call(s.exports,s,s.exports,e),s.loaded=!0,s.exports}e.m=n,e.n=n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return e.d(t,{a:t}),t},(()=>{var n,t=Object.getPrototypeOf?n=>Object.getPrototypeOf(n):n=>n.__proto__;e.t=function(v,i){if(1&i&&(v=this(v)),8&i||"object"==typeof v&&v&&(4&i&&v.__esModule||16&i&&"function"==typeof v.then))return v;var s=Object.create(null);e.r(s);var a={};n=n||[null,t({}),t([]),t(t)];for(var r=2&i&&v;"object"==typeof r&&!~n.indexOf(r);r=t(r))Object.getOwnPropertyNames(r).forEach(n=>{a[n]=()=>v[n]});return a.default=()=>v,e.d(s,a),s}})(),e.d=(n,t)=>{for(var v in t)e.o(t,v)&&!e.o(n,v)&&Object.defineProperty(n,v,{enumerable:!0,get:t[v]})},e.f={},e.e=n=>Promise.all(Object.keys(e.f).reduce((t,v)=>(e.f[v](n,t),t),[])),e.u=n=>"static/js/async/"+n+".efa27644.js",e.miniCssF=n=>""+n+".css",e.h=()=>"f5e9c48d993a2179",e.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(n){if("object"==typeof window)return window}})(),e.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),(()=>{var n={},t="minecraft-renderer:";e.l=function(v,i,s,a){if(n[v])return void n[v].push(i);if(void 0!==s)for(var r,o,l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var h=l[d];if(h.getAttribute("src")==v||h.getAttribute("data-webpack")==t+s){r=h;break}}r||(o=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,e.nc&&r.setAttribute("nonce",e.nc),r.setAttribute("data-webpack",t+s),r.src=v),n[v]=[i];var f=function(t,e){r.onerror=r.onload=null,clearTimeout(u);var i=n[v];if(delete n[v],r.parentNode&&r.parentNode.removeChild(r),i&&i.forEach(function(n){return n(e)}),t)return t(e)},u=setTimeout(f.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=f.bind(null,r.onerror),r.onload=f.bind(null,r.onload),o&&document.head.appendChild(r)}})(),e.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.nmd=n=>(n.paths=[],n.children||(n.children=[]),n),(()=>{var n=[];e.O=(t,v,i,s)=>{if(v){s=s||0;for(var a=n.length;a>0&&n[a-1][2]>s;a--)n[a]=n[a-1];n[a]=[v,i,s];return}for(var r=1/0,a=0;a<n.length;a++){for(var[v,i,s]=n[a],o=!0,l=0;l<v.length;l++)(!1&s||r>=s)&&Object.keys(e.O).every(n=>e.O[n](v[l]))?v.splice(l--,1):(o=!1,s<r&&(r=s));if(o){n.splice(a--,1);var d=i();void 0!==d&&(t=d)}}return t}})(),e.p="./",e.rv=()=>"1.3.3",(()=>{var n={980:0};e.f.j=function(t,v){var i=e.o(n,t)?n[t]:void 0;if(0!==i)if(i)v.push(i[2]);else{var s=new Promise((e,v)=>i=n[t]=[e,v]);v.push(i[2]=s);var a=e.p+e.u(t),r=Error();e.l(a,function(v){if(e.o(n,t)&&(0!==(i=n[t])&&(n[t]=void 0),i)){var s=v&&("load"===v.type?"missing":v.type),a=v&&v.target&&v.target.src;r.message="Loading chunk "+t+" failed.\n("+s+": "+a+")",r.name="ChunkLoadError",r.type=s,r.request=a,i[1](r)}},"chunk-"+t,t)}},e.O.j=t=>0===n[t];var t=(t,v)=>{var i,s,[a,r,o]=v,l=0;if(a.some(t=>0!==n[t])){for(i in r)e.o(r,i)&&(e.m[i]=r[i]);if(o)var d=o(e)}for(t&&t(v);l<a.length;l++)s=a[l],e.o(n,s)&&n[s]&&n[s][0](),n[s]=0;return e.O(d)},v=self.webpackChunkminecraft_renderer=self.webpackChunkminecraft_renderer||[];v.forEach(t.bind(null,0)),v.push=t.bind(null,v.push.bind(v))})(),e.ruid="bundler=rspack@1.3.3";var v=e.O(void 0,["126","361","365"],function(){return e(81569)});v=e.O(v)})();
|
|
56
|
+
}`})}}var iT=e(62005);let iF=new Date,iU=11===iF.getMonth()&&iF.getDate()>=24&&26>=iF.getDate(),iD=["panorama_3.webp","panorama_1.webp","panorama_4.webp","panorama_5.webp","panorama_0.webp","panorama_2.webp"];class iO{async start(){var n=this;this.doWorldBlocksPanorama?await this.worldBlocksPanorama():this.addClassicPanorama(),this.documentRenderer.render=function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];t&&(n.camera.aspect=n.documentRenderer.canvas.width/n.documentRenderer.canvas.height,n.camera.updateProjectionMatrix()),n.documentRenderer.renderer.render(n.scene,n.camera)}}async debugImageInFrontOfCamera(){let n=await tC((0,iT.join)("background","panorama_0.webp")),t=new nT.K(new nW._(1e3,1e3),new nD.v({map:n}));t.position.set(0,0,-500),t.rotation.set(0,0,0),this.scene.add(t)}addClassicPanorama(){let n=new nU.D(1e3,1e3,1e3),t=[];for(let n of iD)(async()=>{let{texture:e}=tM((0,iT.join)("background",iU?"christmas":"",n));e.matrixAutoUpdate=!1,e.matrix.set(-1,0,1,0,1,0,0,0,1),e.wrapS=nb.uWy,e.wrapT=nb.uWy,e.minFilter=nb.wem,e.magFilter=nb.wem;let v=new nD.v({map:e,transparent:!0,side:nb.ehD,depthWrite:!1,opacity:0});this.startTimes.set(v,Date.now()),t.push(v)})();let e=new nT.K(n,t);e.onBeforeRender=()=>{for(let n of(this.time+=.01,e.rotation.y=Math.PI+.01*this.time,e.rotation.z=.001*Math.sin(-(.001*this.time)),t)){let t=this.startTimes.get(n);t&&(n.opacity=Math.min(1,(Date.now()-t)/200))}};let v=new nB.T;if(v.add(e),!iU)for(let n=0;n<20;n++){let n=new vl("1.16.4","squid").mesh;n.position.set(30*Math.random()-15,20*Math.random()-10,10*Math.random()-17),n.rotation.set(0,Math.PI+Math.random(),-Math.PI/4,"ZYX");let t=.01*Math.random();n.children[0].onBeforeRender=()=>{n.rotation.y+=t,n.rotation.z=Math.cos(3*e.rotation.y)*Math.PI/4-Math.PI/2},v.add(n)}this.scene.add(v),this.panoramaGroup=v}async worldBlocksPanorama(){var n;let t,v="1.21.4",i=this.options.resourcesManager;if(i.currentConfig={version:v,noInventoryGui:!0},await (null==(n=i.updateAssetsData)?void 0:n.call(i,{})),this.abortController.signal.aborted)return;console.time("load panorama scene");let s=G(v),a=e(66512)(v),r=globalThis.mcData.blocksArray.filter(n=>{var t;if(!n.name.includes("stained_glass"))return!1;let e=a.fromStateId(n.defaultState,0);if((null==(t=e.shapes)?void 0:t.length)!==1)return!1;let v=e.shapes[0];return 0===v[0]&&0===v[1]&&0===v[2]&&1===v[3]&&1===v[4]&&1===v[5]});for(let n=-100;n<100;n++)for(let t=-100;t<100;t++){let e=r[Math.floor(Math.random()*r.length)];s.setBlockStateId(new R.A(n,t,-15),e.defaultState)}this.camera.updateProjectionMatrix(),this.camera.position.set(.5,50.5,.5),this.camera.rotation.set(0,0,0);let o=new R.A(...this.camera.position.toArray()),l=new nt(s,2,o);if(this.abortController.signal.aborted||(this.worldRenderer=new this.WorldRendererClass(this.documentRenderer.renderer,this.options,{version:v,worldView:l,inWorldRenderingConfig:tD,playerStateReactive:q().reactive,rendererState:Y().reactive,nonReactiveState:Y().nonReactive}),this.worldRenderer instanceof iB&&(this.scene=this.worldRenderer.scene),l.init(o),await this.worldRenderer.waitForChunksToRender(),this.abortController.signal.aborted))return;let{camera:d}=this,h=d.position.x,f=d.position.y;document.body.addEventListener("pointermove",n=>{if("mouse"!==n.pointerType)return;let e=new nz.F(n.clientX,n.clientY),v=e.x/window.innerWidth-.5,i=-(e.y/window.innerHeight-.5);null==t||t.stop(),(t=new n2.kX(d.position).to({x:h+.2*v,y:f+.2*i},0)).start(),d.updateProjectionMatrix()},{signal:this.abortController.signal}),console.timeEnd("load panorama scene")}dispose(){var n;this.scene.clear(),null==(n=this.worldRenderer)||n.destroy(),this.abortController.abort()}constructor(n,t,e=!1){(0,x._)(this,"documentRenderer",void 0),(0,x._)(this,"options",void 0),(0,x._)(this,"doWorldBlocksPanorama",void 0),(0,x._)(this,"camera",void 0),(0,x._)(this,"scene",void 0),(0,x._)(this,"ambientLight",void 0),(0,x._)(this,"directionalLight",void 0),(0,x._)(this,"panoramaGroup",void 0),(0,x._)(this,"time",void 0),(0,x._)(this,"abortController",void 0),(0,x._)(this,"worldRenderer",void 0),(0,x._)(this,"WorldRendererClass",void 0),(0,x._)(this,"startTimes",void 0),this.documentRenderer=n,this.options=t,this.doWorldBlocksPanorama=e,this.panoramaGroup=null,this.time=0,this.abortController=new AbortController,this.WorldRendererClass=iB,this.startTimes=new Map,this.scene=new nN.x,this.scene.background=new nS.I(3294568),this.ambientLight=new nY.M(0xcccccc),this.scene.add(this.ambientLight),this.directionalLight=new nH.O(0xffffff,.5),this.directionalLight.position.set(1,1,.5).normalize(),this.directionalLight.castShadow=!0,this.scene.add(this.directionalLight),this.camera=new B.c(85,this.documentRenderer.canvas.width/this.documentRenderer.canvas.height,.05,1e3),this.camera.position.set(0,0,0),this.camera.rotation.set(0,0,0)}}var iQ=e(14224);np.ep.enabled=!1,globalThis.THREE=S;let iL=n=>({updateMap:n.entities.updateMap.bind(n.entities),updateCustomBlock:n.updateCustomBlock.bind(n),getBlockInfo:n.getBlockInfo.bind(n),playEntityAnimation:n.entities.playAnimation.bind(n.entities),damageEntity:n.entities.handleDamageEvent.bind(n.entities),updatePlayerSkin:n.entities.updatePlayerSkin.bind(n.entities),changeHandSwingingState:n.changeHandSwingingState.bind(n),getHighestBlocks:n.getHighestBlocks.bind(n),reloadWorld:n.reloadWorld.bind(n),updateEntityModel:n.entities.updateEntityModel.bind(n.entities),playEntityModelAnimation:n.entities.playEntityModelAnimation.bind(n.entities),addMedia:n.media.addMedia.bind(n.media),destroyMedia:n.media.destroyMedia.bind(n.media),setControlMode:n.media.setControlMode.bind(n.media),setVideoPlaying:n.media.setVideoPlaying.bind(n.media),setVideoSeeking:n.media.setVideoSeeking.bind(n.media),setVideoVolume:n.media.setVideoVolume.bind(n.media),setVideoSpeed:n.media.setVideoSpeed.bind(n.media),handleUserClick:n.media.handleUserClick.bind(n.media),addSectionAnimation(t,e){n.sectionsOffsetsAnimations[t]=e},removeSectionAnimation(t){delete n.sectionsOffsetsAnimations[t]},shakeFromDamage:n.cameraShake.shakeFromDamage.bind(n.cameraShake),onPageInteraction:n.media.onPageInteraction.bind(n.media),downloadMesherLog:n.downloadMesherLog.bind(n),explodeFirework:n.fireworksLegacy.explode.bind(n.fireworksLegacy),explodeFireworkFacingCamera:n.fireworksLegacy.explodeFacingCamera.bind(n.fireworksLegacy),addWaypoint:n.waypoints.addWaypoint.bind(n.waypoints),removeWaypoint:n.waypoints.removeWaypoint.bind(n.waypoints),startCinimaticScript:n.cinimaticScript.startScript.bind(n.cinimaticScript),stopCinimaticScript:n.cinimaticScript.stopScript.bind(n.cinimaticScript),launchFirework:n.fireworks.launchFirework.bind(n.fireworks),setSkyboxImage:n.skyboxRenderer.setSkyboxImage.bind(n.skyboxRenderer),async loadGeometryExport(t){let{applyWorldGeometryExport:v}=await Promise.resolve().then(e.bind(e,48892));return v(n,t)}}),iV=[nm],ij=()=>{let n,t=null,e=null,v=null,i=null,s=(e,v)=>{t=new tf(n=td?nC(e,iV,globalThis):e,null==v?void 0:v.canvas),globalThis.renderer=t.renderer,globalThis.documentRenderer=t,globalThis.threeJsBackend=l,globalThis.resourcesManager=n.resourcesManager,iW("default",l)},a=async()=>{if(!t)throw Error("Document renderer not initialized");!v&&(e||(e=new iO(t,n,!!iQ.env.SINGLE_FILE_BUILD_MODE),globalThis.panoramaRenderer=e,iW("panoramaCreated",e),await e.start(),iW("panoramaReady",e)))},r=async s=>{let a=td?nC(s,iV,globalThis):s;if(!t)throw Error("Document renderer not initialized");t.nonReactiveState=a.nonReactiveState,e&&(e.dispose(),e=null),v=new iB(t.renderer,n,a),await v.worldReadyPromise,i=new nR(a.nonReactiveState),globalThis.frameTimingCollector=i;let r=t.render;t.render=function(n){r.call(this,n),null==i||i.markFrameStart(),a.inWorldRenderingConfig.paused||null==v||v.render(n),null==i||i.markFrameEnd(),null==i||i.markFrameDisplay()},t.inWorldRenderingConfig=a.inWorldRenderingConfig,globalThis.world=v,iW("worldReady",v)},o=()=>{e&&(e.dispose(),e=null),t&&t.dispose(),v&&(v.destroy(),v=null)},l={id:"threejs",displayName:`three.js ${nb.UZH}`,startPanorama:a,startWorld:r,disconnect:o,setRendering(n){t.setPaused(!n),v&&(v.renderingActive=n)},getDebugOverlay:()=>({get entitiesString(){return null==v?void 0:v.entities.getDebugString()}}),updateCamera(n,t,e){null==i||i.markCameraUpdate(!n),null==v||v.setFirstPersonCamera(n,t,e)},get soundSystem(){return null==v?void 0:v.soundSystem},get backendMethods(){if(!v)return;return iL(v)}};return{main:{init:s,backend:l},workerProxy:()=>(function(n,t){let e=(void 0)??globalThis;return e.addEventListener("message",t=>{let{type:v,args:i,msgId:s}=t.data;if(n[v]){let t=n[v](...i);t instanceof Promise&&t.then(n=>{e.postMessage({type:"result",msgId:s,args:[n]})})}}),null})({init(n,t){s(n,{canvas:t})},updateSizeExternal(n,e,v){null==t||t.updateSizeExternal(n,e,v)},startPanorama:a,startWorld:r,disconnect:o,setRendering:l.setRendering,updateCamera(n,t,e){let v=n?new R.A(n.x,n.y,n.z):null;null==i||i.markCameraUpdate(!v),l.updateCamera(v,t,e)},async callBackendMethod(n){for(var t=arguments.length,e=Array(t>1?t-1:0),i=1;i<t;i++)e[i-1]=arguments[i];if(!v)throw Error("World renderer not initialized");let s=iL(v)[n];if(!s)throw Error(`Backend method ${String(n)} is unavailable`);return s(...e)}})}},iG=n=>{let{main:t}=ij();return t.init(n),t.backend},iW=function(n){for(var t,e,v=arguments.length,i=Array(v>1?v-1:0),s=1;s<v;s++)i[s-1]=arguments[s];for(let v of Object.values(globalThis.loadedMods??{}))try{null==(e=v.threeJsBackendModule)||null==(t=e[n])||t.call(e,...i)}catch(t){throw Error(`[mod three.js] Error calling ${n} on ${v.name}: ${t}`)}};iG.id="threejs",parseInt(nb.UZH.replaceAll(/\D+/g,""),10),nX.j,window.THREE=S;let iN=[iG],iY=["1.16.5"];class iH{get worldRenderer(){return window.world}get worldConfig(){return this.appViewer.inWorldRenderingConfig}set worldConfig(n){Object.assign(this.appViewer.inWorldRenderingConfig,n)}onParamsUpdate(n,t){}updateQs(n,t){if(this.skipUpdateQs)return;let e=new URLSearchParams(window.location.search);for(let[i,s]of Object.entries({[n]:t})){var v;"function"==typeof s||(null==(v=this.params.skipQs)?void 0:v.includes(i))||this.alwaysIgnoreQs.includes(i)||(s?e.set(i,s):e.delete(i))}window.history.replaceState({},"",`${window.location.pathname}?${e.toString()}`)}renderFinish(){this.requestRender()}initGui(){let n=new URLSearchParams(window.location.search);for(let t of Object.keys(this.params)){let e=n.get(t);if(!e)continue;let v=/^-?\d+$/.test(e)?Number(e):"true"===e||"false"!==e&&e;this.params[t]=v}for(let n of Object.keys(this.params)){let t=this.paramOptions[n];null!=t&&t.hide||this.gui.add(this.params,n,(null==t?void 0:t.options)??(null==t?void 0:t.min),null==t?void 0:t.max)}window.innerHeight<700?this.gui.open(!1):setTimeout(()=>{this.gui.domElement.classList.remove("transition")},500),this.gui.onChange(n=>{let{property:t,object:e}=n;if(e===this.params){var v,i,s;null==(v=(i=this.onParamUpdate)[t])||v.call(i),this.onParamsUpdate(t,e);let n=this.params[t];(null==(s=this.paramOptions[t])?void 0:s.reloadOnChange)&&("boolean"==typeof n||this.paramOptions[t].options)&&setTimeout(()=>{window.location.reload()}),this.updateQs(t,n)}else this.onParamsUpdate(t,e)})}setupWorld(){}sceneReset(){}addWorldBlock(n,t,e,v,i){if(n>16||t>16||e>16)throw Error("Offset too big");let s=i?this.Block.fromProperties(this.mcData.blocksByName[v].id,i??{},0):this.Block.fromStateId(this.mcData.blocksByName[v].defaultState,0);this.world.setBlock(this.targetPos.offset(n,t,e),s)}syncCameraToBackend(){let n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.appViewer.backend||!this.camera)return;let t=new z.P(0,0,-1);t.applyQuaternion(this.camera.quaternion);let e=Math.atan2(-t.x,-t.z),v=Math.asin(t.y);if(n)return void this.appViewer.backend.updateCamera(null,e,v);let i=new R.A(this.camera.position.x,this.camera.position.y,this.camera.position.z);this.appViewer.backend.updateCamera(i,e,v)}resetCamera(){var n,t;if(!this.camera)return;let{targetPos:e}=this;null==(n=this.controls)||n.target.set(e.x+.5,e.y+.5,e.z+.5);let v=e.offset(2,2,2);this.camera.position.set(v.x+.5,v.y+.5,v.z+.5),this.camera.lookAt(e.x+.5,e.y+.5,e.z+.5),null==(t=this.controls)||t.update(),this.syncCameraToBackend()}async initData(){var n,t,e,v,i;let s=P()(this.version);this.mcData=s,window.loadedData=window.mcData=s,this.Chunk=U()(this.version),this.Block=T()(this.version);let a=G(this.version);if(a.setBlockStateId(this.targetPos,0),this.world=a,this.initGui(),this.appViewer.resourcesManager.currentConfig={version:this.version,noInventoryGui:!0},await (null==(n=(t=this.appViewer.resourcesManager).loadSourceData)?void 0:n.call(t,this.version)),await (null==(e=(v=this.appViewer.resourcesManager).updateAssetsData)?void 0:e.call(v,{})),this.appViewer.backend||await this.appViewer.loadBackend(iN[0]),await this.appViewer.startWorld(a,this.viewDistance,(0,u.sj)(H()),this.targetPos),this.worldView=this.appViewer.worldView,this.camera=new B.c(this.appViewer.inWorldRenderingConfig.fov||75,window.innerWidth/window.innerHeight,.1,1e3),this.setupWorld(),this.worldView&&(this.worldView.addWaitTime=0,await this.worldView.init(this.targetPos)),this.enableCameraControls){let n=document.querySelector("#viewer-canvas");if(n){let t=this.enableCameraOrbitControl?new D.z(this.camera,n):void 0;this.controls=t,this.resetCamera();let e=this.params.camera||localStorage.camera;if(e){let[n,t,v,s,a]=e.split(",").map(Number);this.camera.position.set(n,t,v),this.camera.rotation.set(s,a,0,"ZYX"),null==(i=this.controls)||i.update()}let v=L().throttle(()=>{this.camera&&(localStorage.camera=[this.camera.position.x.toFixed(2),this.camera.position.y.toFixed(2),this.camera.position.z.toFixed(2),this.camera.rotation.x.toFixed(2),this.camera.rotation.y.toFixed(2)].join(","))},200);if(this.controls){let n=L().throttle(()=>{},16);this.controls.addEventListener("change",()=>{n(),v(),this.requestRender()})}else setInterval(()=>{v()},200)}}if(!this.enableCameraOrbitControl&&this.camera){let n=0;setInterval(()=>{n=0},1e3),window.addEventListener("pointermove",t=>{t.target.closest(".lil-gui")||((1===t.buttons||"touch"===t.pointerType)&&(n++,this.camera.rotation.x-=t.movementY/100,this.camera.rotation.y-=t.movementX/100,this.camera.rotation.x<-Math.PI/2&&(this.camera.rotation.x=-Math.PI/2),this.camera.rotation.x>Math.PI/2&&(this.camera.rotation.x=Math.PI/2),this.syncCameraToBackend(!0)),2===t.buttons&&(this.camera.position.set(0,0,0),this.syncCameraToBackend()))})}this.onResize(),window.addEventListener("resize",()=>this.onResize()),this.setupDebugFpsGui(),this.renderFinish(),this.mainDebugLoop()}mainDebugLoop(){requestAnimationFrame(()=>this.mainDebugLoop()),this.trackFrame()}loop(){this.continuousRender&&!this.windowHidden&&(this.requestRender(),requestAnimationFrame(()=>this.loop()))}requestRender(){}setupDebugFpsGui(){this.debugFpsElement=document.createElement("div"),this.debugFpsElement.style.position="fixed",this.debugFpsElement.style.bottom="0",this.debugFpsElement.style.left="0",this.debugFpsElement.style.zIndex="1000",this.debugFpsElement.style.backgroundColor="rgba(0, 0, 0, 0.7)",this.debugFpsElement.style.color="#fff",this.debugFpsElement.style.padding="4px 6px",this.debugFpsElement.style.fontFamily="monospace",this.debugFpsElement.style.fontSize="11px",this.debugFpsElement.style.lineHeight="1.2",this.debugFpsElement.style.pointerEvents="none",this.debugFpsElement.style.userSelect="none",this.debugFpsElement.textContent="FPS: 0 | Max: 0 ms",document.body.appendChild(this.debugFpsElement),setInterval(()=>{this.updateDebugInfo()},1e3)}trackFrame(){let n=performance.now();if(this.frameTimes.push(n),this.frameCount++,this.frameTimes.length>1){let t=n-this.frameTimes.at(-2);t>this.maxFrameDelay&&(this.maxFrameDelay=t)}let t=n-1e3;this.frameTimes=this.frameTimes.filter(n=>n>t)}updateDebugInfo(){if(!this.debugFpsElement)return;let n=this.frameTimes.length;this.currentFps=n;let t=this.maxFrameDelay>150?`<span style="color: #ff4444;">${this.maxFrameDelay.toFixed(0)}ms</span>`:`${this.maxFrameDelay.toFixed(0)}ms`;this.debugFpsElement.innerHTML=`FPS: ${n} | Max Delay: ${t}`,this.lastSecondTime=performance.now(),this.maxFrameDelay=0,this.frameCount=0}render(){arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.requestRender()}addKeyboardShortcuts(){document.addEventListener("keydown",n=>{if(!n.shiftKey&&!n.ctrlKey&&!n.altKey&&!n.metaKey){if("KeyR"===n.code){var t;null==(t=this.controls)||t.reset(),this.resetCamera()}"KeyE"===n.code&&this.worldView.setBlockStateId(this.targetPos,this.world.getBlockStateId(this.targetPos)),"KeyF"===n.code&&(this.sceneReset(),this.worldView.unloadAllChunks(),this.worldView.init(this.targetPos))}}),document.addEventListener("visibilitychange",()=>{this.windowHidden="hidden"===document.visibilityState}),document.addEventListener("blur",()=>{this.windowHidden=!0}),document.addEventListener("focus",()=>{this.windowHidden=!1});let n=new Set;setInterval(()=>{var t;if(n.has("ControlLeft")||n.has("MetaLeft")||!this.camera)return;let e=new z.P(0,0,0);n.has("KeyW")&&(e.z=-.5),n.has("KeyS")&&(e.z+=.5),n.has("KeyA")&&(e.x-=.5),n.has("KeyD")&&(e.x+=.5),n.has("ShiftLeft")&&(this.camera.position.y-=.5),n.has("Space")&&(this.camera.position.y+=.5),e.applyQuaternion(this.camera.quaternion),e.y=0,n.has("ShiftLeft")&&(e.y*=2,e.x*=2,e.z*=2),this.camera.position.add(e.normalize()),null==(t=this.controls)||t.update(),this.syncCameraToBackend(),this.requestRender()},50);let t=t=>{let{code:e}=t;"keydown"===t.type?n.add(e):n.delete(e)};window.addEventListener("keydown",t),window.addEventListener("keyup",t),window.addEventListener("blur",()=>{for(let e of n)t(new KeyboardEvent("keyup",{code:e}))})}onResize(){this.requestRender()}constructor(n={}){if((0,x._)(this,"appViewer",new ng({config:{statsVisible:2}})),(0,x._)(this,"mcData",void 0),(0,x._)(this,"continuousRender",!1),(0,x._)(this,"stopRender",!1),(0,x._)(this,"windowHidden",!1),(0,x._)(this,"viewDistance",0),(0,x._)(this,"targetPos",new R.A(2,90,2)),(0,x._)(this,"version",new URLSearchParams(window.location.search).get("version")??iY.at(-1)),(0,x._)(this,"Chunk",void 0),(0,x._)(this,"Block",void 0),(0,x._)(this,"world",void 0),(0,x._)(this,"gui",new O.ZP),(0,x._)(this,"params",{}),(0,x._)(this,"paramOptions",{}),(0,x._)(this,"onParamUpdate",{}),(0,x._)(this,"alwaysIgnoreQs",[]),(0,x._)(this,"skipUpdateQs",!1),(0,x._)(this,"enableCameraControls",!0),(0,x._)(this,"enableCameraOrbitControl",!0),(0,x._)(this,"controls",void 0),(0,x._)(this,"camera",void 0),(0,x._)(this,"worldView",void 0),(0,x._)(this,"debugFpsElement",void 0),(0,x._)(this,"frameCount",0),(0,x._)(this,"lastSecondTime",performance.now()),(0,x._)(this,"frameTimes",[]),(0,x._)(this,"currentFps",0),(0,x._)(this,"maxFrameDelay",0),n.version&&(this.version=n.version),!this.version)throw Error("Minecraft version is not set");void 0!==n.viewDistance&&(this.viewDistance=n.viewDistance),n.targetPos&&(this.targetPos=n.targetPos),void 0!==n.enableCameraControls&&(this.enableCameraControls=n.enableCameraControls),void 0!==n.enableCameraOrbitControl&&(this.enableCameraOrbitControl=n.enableCameraOrbitControl),n.worldConfig&&Object.assign(this.appViewer.inWorldRenderingConfig,n.worldConfig),this.appViewer.inWorldRenderingConfig.showHand=!1,this.appViewer.inWorldRenderingConfig.isPlayground=!0,this.appViewer.inWorldRenderingConfig.instantCameraUpdate=this.enableCameraOrbitControl,this.appViewer.config.statsVisible=2,void 0!==n.continuousRender&&(this.continuousRender=n.continuousRender),this.initData().then(()=>{this.addKeyboardShortcuts()})}}let iK=["1.16.5"],iq=class extends iH{initGui(){this.params={skipQs:"",block:"",metadata:0,supportBlock:!1,entity:"",removeEntity(){this.entity=""},entityRotate:!1,camera:"",playSound(){},blockIsomorphicRenderBundle(){},modelVariant:0},this.metadataGui=this.gui.add(this.params,"metadata"),this.paramOptions={version:{options:iK,hide:!1},block:{options:this.mcData.blocksArray.map(n=>n.name).sort((n,t)=>n.localeCompare(t))},entity:{options:this.mcData.entitiesArray.map(n=>n.name).sort((n,t)=>n.localeCompare(t))},camera:{hide:!0}},super.initGui()}entityUpdateShared(){if(this.worldRenderer.entities.clear(),!this.params.entity)return;this.worldView.emit("entity",{id:"id",name:this.params.entity,pos:this.targetPos.offset(.5,1,.5),width:1,height:1,username:localStorage.testUsername,yaw:Math.PI,pitch:0});let n=t=>{let{children:e,isSkeletonHelper:v}=t;if(Array.isArray(e)){if(v){t.visible=!0;return}for(let t of e)"object"==typeof t&&n(t)}};n(this.worldRenderer.entities.entities.id),setTimeout(()=>{this.render()},120)}getBlock(){return this.mcData.blocksByName[this.params.block||"air"]}onParamsUpdate(n,t){var e,v;let i,s=null==(e=this.getBlock())?void 0:e.id;if("metadata"===n)for(let n of(i=new this.Block(s,0,this.params.metadata),Object.assign(this.blockProps,i.getProperties()),this.metadataFolder.children))n.updateDisplay();else try{i=this.Block.fromProperties(s??-1,this.blockProps,0)}catch(n){console.error(n),i=this.Block.fromStateId(0,0)}this.worldView.setBlockStateId(this.targetPos,i.stateId??0),console.log("up stateId",i.stateId),this.params.metadata=i.metadata,null==(v=this.metadataGui)||v.updateDisplay()}renderFinish(){for(let n of Object.values(this.onParamUpdate))n();this.onParamsUpdate("",{}),this.gui.openAnimated()}blockIsomorphicRenderBundle(){let{renderer:n}=this.worldRenderer,t=n.domElement,e=!confirm("Ok - render all blocks, Cancel - render only current one"),v=prompt("Size","512");if(!v)return;let i=parseInt(v,10);t.width=i,t.height=i,n.setSize(i,i),this.worldRenderer.camera=new M.i(-1,1,1,-1,0,10),this.worldRenderer.scene.background=null;let s=C.M8.degToRad(-120);this.worldRenderer.directionalLight.position.set(Math.cos(s),Math.sin(s),.2).normalize(),this.worldRenderer.directionalLight.intensity=1;let a=this.targetPos.offset(2,2,2),r=C.M8.degToRad(-30),o=C.M8.degToRad(45);this.worldRenderer.camera.rotation.set(r,o,0,"ZYX"),this.worldRenderer.camera.position.set(a.x+1,a.y+.5,a.z+1);let l=this.mcData.blocksArray.map(n=>n.name),d=1,h=l[0],f=()=>{this.params.block=h};this.worldRenderer.waitForChunksToRender().then(async()=>{await new Promise(n=>{setTimeout(n,0)}),e?(this.render(),m()):(this.worldRenderer.renderUpdateEmitter.addListener("update",m),f())});let u=new JSZip;u.file("description.txt","Generated with mcraft.fun/playground");let c=async()=>{let n=document.createElement("a"),t=await u.generateAsync({type:"blob"}),e=URL.createObjectURL(t);n.href=e,n.download="blocks_render.zip",n.click(),URL.revokeObjectURL(e),console.log("end"),this.worldRenderer.renderUpdateEmitter.removeListener("update",m)};async function m(){let n=t.toDataURL("image/png");u.file(`${h}.png`,n.split(",")[1],{base64:!0}),e?c():g()}let g=async()=>{h=l[d++],console.log(l.length,"/",d,h),d%5==0&&await new Promise(n=>{setTimeout(n,100)}),h?f():c()}}constructor(...n){super(...n),(0,x._)(this,"blockProps",{}),(0,x._)(this,"metadataFolder",void 0),(0,x._)(this,"metadataGui",void 0),(0,x._)(this,"onParamUpdate",{version(){},block:()=>{var n,t;this.blockProps={},null==(n=this.metadataFolder)||n.destroy();let e=this.mcData.blocksByName[this.params.block];if(!e)return;console.log("block",e.name);let v=new this.Block(e.id,0,0).getProperties(),{states:i}=this.mcData.blocksByStateId[null==(t=this.getBlock())?void 0:t.minStateId]??{};if(this.metadataFolder=this.gui.addFolder("metadata"),i)for(let n of i){let t;if(n.values)t=n.values[0];else switch(n.type){case"bool":t=!1;break;case"int":t=0;break;case"direction":t="north";break;default:continue}this.blockProps[n.name]=t,n.values?this.metadataFolder.add(this.blockProps,n.name,n.values):this.metadataFolder.add(this.blockProps,n.name)}else for(let[n,t]of Object.entries(v))this.blockProps[n]=t,this.metadataFolder.add(this.blockProps,n);console.log("props",this.blockProps),this.metadataFolder.open()},entity:()=>{this.continuousRender="player"===this.params.entity,this.entityUpdateShared(),this.params.entity&&("player"===this.params.entity&&(this.worldRenderer.entities.updatePlayerSkin("id",this.worldRenderer.entities.entities.id.username,void 0,!0,!0),this.worldRenderer.entities.playAnimation("id","running")),vl.getStaticData(this.params.entity))},supportBlock:()=>{this.worldView.setBlockStateId(this.targetPos.offset(0,-1,0),+!!this.params.supportBlock)},modelVariant:()=>{this.worldRenderer.worldRendererConfig.debugModelVariant=0===this.params.modelVariant?void 0:[this.params.modelVariant]}})}};class iJ extends iH{setupWorld(){this.addWorldBlock(0,0,0,"cobweb"),this.addWorldBlock(0,-1,0,"cobweb"),this.addWorldBlock(1,-1,0,"cobweb"),this.addWorldBlock(1,0,0,"cobweb"),this.addWorldBlock(0,0,1,"powered_rail",{shape:"north_south",waterlogged:!1}),this.addWorldBlock(0,0,2,"powered_rail",{shape:"ascending_south",waterlogged:!1}),this.addWorldBlock(0,1,3,"powered_rail",{shape:"north_south",waterlogged:!1})}}let iZ=new URLSearchParams(window.location.search).get("scene"),iX=iZ?i[iZ]:iq;y.scenes=["main","railsCobweb","floorRandom","lightingStarfield","transparencyIssue","entities","frequentUpdates","slabsOptimization","allEntities","geometryExport"],y.selected=iZ??"main";let i$=new iX;globalThis.scene=i$},79997:function(n,t,e){n.exports={pc:{"1.16.5":{get attributes(){return e(42065)},get blocks(){return e(23625)},get blockCollisionShapes(){return e(58431)},get biomes(){return e(3867)},get effects(){return e(39542)},get items(){return e(80220)},get enchantments(){return e(71116)},get recipes(){return e(26901)},get instruments(){return e(55729)},get materials(){return e(14841)},get language(){return e(32464)},get entities(){return e(15082)},get protocol(){return e(31610)},get windows(){return e(62833)},get version(){return e(39640)},get foods(){return e(55737)},get particles(){return e(75455)},get blockLoot(){return e(92885)},get entityLoot(){return e(18208)},get loginPacket(){return e(35652)},get tints(){return e(53880)},get mapIcons(){return e(47373)},get sounds(){return e(69)}}}}},48892:function(n,t,e){"use strict";e.d(t,{applyWorldGeometryExport:()=>c,p9:()=>h}),e(69047),e(95922),e(95790),e(40542),e(24705),e(53346),e(23712),e(12989),e(78873),e(58207),e(98497),e(84269),e(90758),e(7652),e(12516),e(83450),e(26110),e(91292),e(52777),e(33975),e(60398),e(44505),e(10020),e(71698),e(42973),e(21428);var v=e(58894),i=e(31180),s=e(86227),a=e(57511),r=e(30730),o=e(76197),l=e(76804);let d="geometry-export-root";function h(n,t,e){let v=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"world-geometry.json",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=new Blob([JSON.stringify(function(n,t,e){let v=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=[];for(let[t,e]of Object.entries(n.sectionObjects)){let n=e.children.find(n=>"mesh"===n.name);if(!(null==n?void 0:n.geometry))continue;let{geometry:v}=n,s=v.getAttribute("position"),a=v.getAttribute("normal"),r=v.getAttribute("color"),o=v.getAttribute("uv"),l=v.index;s&&l&&i.push({key:t,position:{x:n.position.x,y:n.position.y,z:n.position.z},geometry:{positions:[...s.array],normals:a?[...a.array]:[],colors:r?[...r.array]:[],uvs:o?[...o.array]:[],indices:[...l.array]}})}let s={version:n.version??"unknown",exportedAt:new Date().toISOString(),camera:{position:t,rotation:e},sections:i};if(v&&n.material.map){let t=document.createElement("canvas"),{image:e}=n.material.map;e&&(t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),s.textureAtlasDataUrl=t.toDataURL("image/png"))}return s}(n,t,e,i))],{type:"application/json"}),a=URL.createObjectURL(s),r=document.createElement("a");r.href=a,r.download=v,r.click(),URL.revokeObjectURL(a)}async function f(n){return new Promise((t,e)=>{let v=new Image;v.onload=()=>{let n=new r.x(v);n.magFilter=o.TyD,n.minFilter=o.TyD,n.needsUpdate=!0,n.flipY=!1,t(n)},v.onerror=e,v.src=n})}let u=n=>{var t,e,v;n.traverse(n=>{if(n.isMesh){var t;null==(t=n.geometry)||t.dispose()}});let i=null==(t=n.userData)?void 0:t.geometryExportMaterial;if(i){let n=i.map;null==n||null==(e=n.dispose)||e.call(n),null==(v=i.dispose)||v.call(i)}};async function c(n,t){let e,{scene:r,renderUpdateEmitter:o,material:h}=n,c=r.getObjectByName(d);c&&(r.remove(c),u(c));let m=!!t.textureAtlasDataUrl;if(m&&t.textureAtlasDataUrl){let n=await f(t.textureAtlasDataUrl);(e=new l.Y({map:n,vertexColors:!0,transparent:!0,alphaTest:.1})).name="geometry-export-material"}else e=h;let g=function(n,t){let e=[];for(let r of n.sections){let n=new v.u;n.setAttribute("position",new i.a$(r.geometry.positions,3)),r.geometry.normals.length&&n.setAttribute("normal",new i.a$(r.geometry.normals,3)),r.geometry.colors.length&&n.setAttribute("color",new i.a$(r.geometry.colors,3)),r.geometry.uvs.length&&n.setAttribute("uv",new i.a$(r.geometry.uvs,2));let o=Math.max(...r.geometry.indices)>65535?Uint32Array:Uint16Array;n.setIndex(new i.Tl(new o(r.geometry.indices),1));let l=new s.K(n,t);l.position.set(r.position.x,r.position.y,r.position.z),l.name="mesh";let d=new a.Z;d.name="chunk",d.add(l),e.push(d)}return e}(t,e),p=new a.Z;for(let n of(p.name=d,m&&(p.userData.geometryExportMaterial=e),g))p.add(n);return r.add(p),o.emit("update"),g.length}},84404:function(){},11706:function(){}},t={};function e(v){var i=t[v];if(void 0!==i)return i.exports;var s=t[v]={id:v,loaded:!1,exports:{}};return n[v].call(s.exports,s,s.exports,e),s.loaded=!0,s.exports}e.m=n,e.n=n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return e.d(t,{a:t}),t},(()=>{var n,t=Object.getPrototypeOf?n=>Object.getPrototypeOf(n):n=>n.__proto__;e.t=function(v,i){if(1&i&&(v=this(v)),8&i||"object"==typeof v&&v&&(4&i&&v.__esModule||16&i&&"function"==typeof v.then))return v;var s=Object.create(null);e.r(s);var a={};n=n||[null,t({}),t([]),t(t)];for(var r=2&i&&v;"object"==typeof r&&!~n.indexOf(r);r=t(r))Object.getOwnPropertyNames(r).forEach(n=>{a[n]=()=>v[n]});return a.default=()=>v,e.d(s,a),s}})(),e.d=(n,t)=>{for(var v in t)e.o(t,v)&&!e.o(n,v)&&Object.defineProperty(n,v,{enumerable:!0,get:t[v]})},e.f={},e.e=n=>Promise.all(Object.keys(e.f).reduce((t,v)=>(e.f[v](n,t),t),[])),e.u=n=>"static/js/async/"+n+".efa27644.js",e.miniCssF=n=>""+n+".css",e.h=()=>"bd8d5523fb19dca4",e.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(n){if("object"==typeof window)return window}})(),e.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),(()=>{var n={},t="minecraft-renderer:";e.l=function(v,i,s,a){if(n[v])return void n[v].push(i);if(void 0!==s)for(var r,o,l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var h=l[d];if(h.getAttribute("src")==v||h.getAttribute("data-webpack")==t+s){r=h;break}}r||(o=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,e.nc&&r.setAttribute("nonce",e.nc),r.setAttribute("data-webpack",t+s),r.src=v),n[v]=[i];var f=function(t,e){r.onerror=r.onload=null,clearTimeout(u);var i=n[v];if(delete n[v],r.parentNode&&r.parentNode.removeChild(r),i&&i.forEach(function(n){return n(e)}),t)return t(e)},u=setTimeout(f.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=f.bind(null,r.onerror),r.onload=f.bind(null,r.onload),o&&document.head.appendChild(r)}})(),e.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.nmd=n=>(n.paths=[],n.children||(n.children=[]),n),(()=>{var n=[];e.O=(t,v,i,s)=>{if(v){s=s||0;for(var a=n.length;a>0&&n[a-1][2]>s;a--)n[a]=n[a-1];n[a]=[v,i,s];return}for(var r=1/0,a=0;a<n.length;a++){for(var[v,i,s]=n[a],o=!0,l=0;l<v.length;l++)(!1&s||r>=s)&&Object.keys(e.O).every(n=>e.O[n](v[l]))?v.splice(l--,1):(o=!1,s<r&&(r=s));if(o){n.splice(a--,1);var d=i();void 0!==d&&(t=d)}}return t}})(),e.p="./",e.rv=()=>"1.3.3",(()=>{var n={980:0};e.f.j=function(t,v){var i=e.o(n,t)?n[t]:void 0;if(0!==i)if(i)v.push(i[2]);else{var s=new Promise((e,v)=>i=n[t]=[e,v]);v.push(i[2]=s);var a=e.p+e.u(t),r=Error();e.l(a,function(v){if(e.o(n,t)&&(0!==(i=n[t])&&(n[t]=void 0),i)){var s=v&&("load"===v.type?"missing":v.type),a=v&&v.target&&v.target.src;r.message="Loading chunk "+t+" failed.\n("+s+": "+a+")",r.name="ChunkLoadError",r.type=s,r.request=a,i[1](r)}},"chunk-"+t,t)}},e.O.j=t=>0===n[t];var t=(t,v)=>{var i,s,[a,r,o]=v,l=0;if(a.some(t=>0!==n[t])){for(i in r)e.o(r,i)&&(e.m[i]=r[i]);if(o)var d=o(e)}for(t&&t(v);l<a.length;l++)s=a[l],e.o(n,s)&&n[s]&&n[s][0](),n[s]=0;return e.O(d)},v=self.webpackChunkminecraft_renderer=self.webpackChunkminecraft_renderer||[];v.forEach(t.bind(null,0)),v.push=t.bind(null,v.push.bind(v))})(),e.ruid="bundler=rspack@1.3.3";var v=e.O(void 0,["126","361","365"],function(){return e(81569)});v=e.O(v)})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minecraft-renderer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "The most Modular Minecraft world renderer with Three.js WebGL backend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"keywords": [
|
|
14
14
|
"minecraft",
|
|
15
15
|
"renderer",
|
|
16
|
+
"3d-engine",
|
|
16
17
|
"threejs",
|
|
17
18
|
"webgl",
|
|
18
19
|
"prismarine"
|
package/src/examples/README.md
CHANGED
|
@@ -24,8 +24,8 @@ import { WorldView, WorldProvider, WorldViewWorker } from '../worldView'
|
|
|
24
24
|
import { getInitialPlayerState } from './playerState'
|
|
25
25
|
import { defaultWorldRendererConfig, defaultGraphicsBackendConfig, getDefaultRendererState } from './config'
|
|
26
26
|
import type { WorldRendererConfig } from '../lib/worldrendererCommon'
|
|
27
|
-
import { PlayerStateReactive } from '
|
|
28
|
-
import { ResourcesManager, ResourcesManagerTransferred } from '
|
|
27
|
+
import { PlayerStateReactive } from '../playerState/playerState'
|
|
28
|
+
import { ResourcesManager, ResourcesManagerTransferred } from '../resourcesManager'
|
|
29
29
|
|
|
30
30
|
export interface AppViewerOptions {
|
|
31
31
|
config?: Partial<GraphicsBackendConfig>
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* Core types for the graphics backend system.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { WorldRendererConfig } from '
|
|
8
|
-
import { PlayerStateReactive } from '
|
|
9
|
-
import { ResourcesManagerTransferred } from '
|
|
10
|
-
import { WorldViewWorker } from '
|
|
7
|
+
import { WorldRendererConfig } from '../lib/worldrendererCommon'
|
|
8
|
+
import { PlayerStateReactive } from '../playerState/playerState'
|
|
9
|
+
import { ResourcesManagerTransferred } from '../resourcesManager'
|
|
10
|
+
import { WorldViewWorker } from '../worldView'
|
|
11
11
|
import { Vec3 } from 'vec3'
|
|
12
12
|
|
|
13
13
|
// ============================================================================
|
package/src/index.ts
CHANGED
|
@@ -72,7 +72,7 @@ export * from './modules'
|
|
|
72
72
|
// Three.js Backend (re-exported for convenience)
|
|
73
73
|
// ============================================================================
|
|
74
74
|
export {
|
|
75
|
-
createGraphicsBackend,
|
|
75
|
+
default as createGraphicsBackend,
|
|
76
76
|
createGraphicsBackendBase
|
|
77
77
|
} from './three/graphicsBackend'
|
|
78
78
|
|
package/src/lib/guiRenderer.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { getLoadedBlockstatesStore, getLoadedModelsStore } from 'mc-assets/dist/
|
|
|
7
7
|
import { makeTextureAtlas } from 'mc-assets/dist/atlasCreator'
|
|
8
8
|
import { proxy, ref } from 'valtio'
|
|
9
9
|
import { getItemDefinition } from 'mc-assets/dist/itemDefinitions'
|
|
10
|
-
import { AppViewer } from '
|
|
10
|
+
import { AppViewer } from '../graphicsBackend/appViewer'
|
|
11
11
|
|
|
12
12
|
export const getNonFullBlocksModels = (appViewer: AppViewer) => {
|
|
13
13
|
let version = appViewer.resourcesManager.currentResources!.version ?? 'latest'
|
package/src/lib/items.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import mojangson from 'mojangson'
|
|
2
2
|
import nbt from 'prismarine-nbt'
|
|
3
3
|
import { fromFormattedString } from '@xmcl/text-component'
|
|
4
|
-
import { getItemSelector } from '
|
|
4
|
+
import { getItemSelector } from '../playerState/playerState'
|
|
5
5
|
import { getItemDefinition } from 'mc-assets/dist/itemDefinitions'
|
|
6
|
-
import { ResourcesManagerCommon } from '
|
|
7
|
-
import { ItemSpecificContextProperties } from '
|
|
8
|
-
import { PlayerStateRenderer } from '
|
|
6
|
+
import { ResourcesManagerCommon } from '../resourcesManager'
|
|
7
|
+
import { ItemSpecificContextProperties } from '../playerState/types'
|
|
8
|
+
import { PlayerStateRenderer } from '../playerState/playerState'
|
|
9
9
|
|
|
10
10
|
type RenderSlotComponent = {
|
|
11
11
|
type: string,
|
|
@@ -18,7 +18,7 @@ type PlayerStateUtils = ReturnType<typeof getPlayerStateUtils>
|
|
|
18
18
|
import { MesherLogReader } from './mesherlogReader'
|
|
19
19
|
import { setSkinsConfig } from './utils/skins'
|
|
20
20
|
import { generateSpiralMatrix, WorldViewWorker } from '../worldView'
|
|
21
|
-
import { PlayerStateReactive } from '
|
|
21
|
+
import { PlayerStateReactive } from '../playerState/playerState'
|
|
22
22
|
|
|
23
23
|
function mod(x, n) {
|
|
24
24
|
return ((x % n) + n) % n
|
package/src/mesher/models.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Vec3 } from 'vec3'
|
|
2
2
|
import worldBlockProvider, { WorldBlockProvider } from 'mc-assets/dist/worldBlockProvider'
|
|
3
3
|
import legacyJson from '../lib/preflatMap.json'
|
|
4
|
-
import { BlockType } from '
|
|
4
|
+
import { BlockType } from '../playground/shared'
|
|
5
5
|
import { World, BlockModelPartsResolved, WorldBlock as Block, WorldBlock, worldColumnKey } from './world'
|
|
6
6
|
import { BlockElement, buildRotationMatrix, elemFaces, matmul3, matmulmat3, vecadd3, vecsub3 } from './modelsGeometryCommon'
|
|
7
7
|
import { INVISIBLE_BLOCKS } from './worldConstants'
|
|
@@ -27,7 +27,7 @@ type Tiles = {
|
|
|
27
27
|
[blockPos: string]: BlockType
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
function prepareTints
|
|
30
|
+
function prepareTints(tints) {
|
|
31
31
|
const map = new Map()
|
|
32
32
|
const defaultValue = tintToGl(tints.default)
|
|
33
33
|
for (let { keys, color } of tints.data) {
|
|
@@ -37,14 +37,14 @@ function prepareTints (tints) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
return new Proxy(map, {
|
|
40
|
-
get
|
|
40
|
+
get(target, key) {
|
|
41
41
|
return target.has(key) ? target.get(key) : defaultValue
|
|
42
42
|
}
|
|
43
43
|
})
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
const calculatedBlocksEntries = Object.entries(legacyJson.clientCalculatedBlocks)
|
|
47
|
-
export function preflatBlockCalculation
|
|
47
|
+
export function preflatBlockCalculation(block: Block, world: World, position: Vec3) {
|
|
48
48
|
const type = calculatedBlocksEntries.find(([name, blocks]) => blocks.includes(block.name))?.[0]
|
|
49
49
|
if (!type) return
|
|
50
50
|
switch (type) {
|
|
@@ -96,14 +96,14 @@ export function preflatBlockCalculation (block: Block, world: World, position: V
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
function tintToGl
|
|
99
|
+
function tintToGl(tint) {
|
|
100
100
|
const r = (tint >> 16) & 0xff
|
|
101
101
|
const g = (tint >> 8) & 0xff
|
|
102
102
|
const b = tint & 0xff
|
|
103
103
|
return [r / 255, g / 255, b / 255]
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
function getLiquidRenderHeight
|
|
106
|
+
function getLiquidRenderHeight(world: World, block: WorldBlock | null, type: number, pos: Vec3, isWater: boolean, isRealWater: boolean) {
|
|
107
107
|
if ((isWater && !isRealWater) || (block && isBlockWaterlogged(block))) return 8 / 9
|
|
108
108
|
if (!block || block.type !== type) return 1 / 9
|
|
109
109
|
if (block.metadata === 0) { // source block
|
|
@@ -132,7 +132,7 @@ const getVec = (v: Vec3, dir: Vec3) => {
|
|
|
132
132
|
return v.plus(dir)
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
function renderLiquid
|
|
135
|
+
function renderLiquid(world: World, cursor: Vec3, texture: any | undefined, type: number, biome: string, water: boolean, attr: MesherGeometryOutput, isRealWater: boolean) {
|
|
136
136
|
const heights: number[] = []
|
|
137
137
|
for (let z = -1; z <= 1; z++) {
|
|
138
138
|
for (let x = -1; x <= 1; x++) {
|
|
@@ -269,7 +269,7 @@ const identicalCull = (currentElement: BlockElement, neighbor: Block, direction:
|
|
|
269
269
|
|
|
270
270
|
let needSectionRecomputeOnChange = false
|
|
271
271
|
|
|
272
|
-
function renderElement
|
|
272
|
+
function renderElement(world: World, cursor: Vec3, element: BlockElement, doAO: boolean, attr: MesherGeometryOutput, globalMatrix: any, globalShift: any, block: Block, biome: string) {
|
|
273
273
|
const position = cursor
|
|
274
274
|
// const key = `${position.x},${position.y},${position.z}`
|
|
275
275
|
// if (!globalThis.allowedBlocks.includes(key)) return
|
|
@@ -519,7 +519,7 @@ const isBlockWaterlogged = (block: Block) => {
|
|
|
519
519
|
}
|
|
520
520
|
|
|
521
521
|
let unknownBlockModel: BlockModelPartsResolved
|
|
522
|
-
export function getSectionGeometry
|
|
522
|
+
export function getSectionGeometry(sx: number, sy: number, sz: number, world: World) {
|
|
523
523
|
let delayedRender = [] as Array<() => void>
|
|
524
524
|
|
|
525
525
|
const attr: MesherGeometryOutput = {
|
|
@@ -744,11 +744,11 @@ export function getSectionGeometry (sx: number, sy: number, sz: number, world: W
|
|
|
744
744
|
}
|
|
745
745
|
|
|
746
746
|
// copied from three.js
|
|
747
|
-
function arrayNeedsUint32
|
|
747
|
+
function arrayNeedsUint32(array) {
|
|
748
748
|
|
|
749
749
|
// assumes larger values usually on last
|
|
750
750
|
|
|
751
|
-
for (let i = array.length - 1; i >= 0; --
|
|
751
|
+
for (let i = array.length - 1; i >= 0; --i) {
|
|
752
752
|
|
|
753
753
|
if (array[i] >= 65_535) return true // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
|
|
754
754
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityMesh, rendererSpecialHandled, EntityDebugFlags } from '
|
|
1
|
+
import { EntityMesh, rendererSpecialHandled, EntityDebugFlags } from '../three/entity/EntityMesh'
|
|
2
2
|
|
|
3
3
|
export const displayEntitiesDebugList = (version: string) => {
|
|
4
4
|
// Create results container
|
|
@@ -11,11 +11,11 @@ import { OrbitControls } from 'three/addons/controls/OrbitControls.js'
|
|
|
11
11
|
// eslint-disable-next-line import/no-named-as-default
|
|
12
12
|
import GUI from 'lil-gui'
|
|
13
13
|
import _ from 'lodash'
|
|
14
|
-
import { defaultWorldRendererConfig, WorldRendererConfig } from '
|
|
14
|
+
import { defaultWorldRendererConfig, WorldRendererConfig } from '../lib/worldrendererCommon'
|
|
15
15
|
import { getSyncWorld } from './shared'
|
|
16
|
-
import { AppViewer, getInitialPlayerState } from '
|
|
17
|
-
import { WorldView } from '
|
|
18
|
-
import { createGraphicsBackend } from '
|
|
16
|
+
import { AppViewer, getInitialPlayerState } from '../graphicsBackend'
|
|
17
|
+
import { WorldView } from '../worldView'
|
|
18
|
+
import { createGraphicsBackend } from '../three'
|
|
19
19
|
|
|
20
20
|
window.THREE = THREE
|
|
21
21
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { isMobile } from '
|
|
2
|
-
import useLongPress from '
|
|
1
|
+
import { isMobile } from '../lib/simpleUtils'
|
|
2
|
+
import useLongPress from './reactUtils'
|
|
3
3
|
import { renderToDom } from '@zardoy/react-util'
|
|
4
4
|
import { useEffect, useState } from 'react'
|
|
5
5
|
import { proxy, useSnapshot } from 'valtio'
|
|
@@ -68,6 +68,7 @@ function SceneSelector () {
|
|
|
68
68
|
left: 0,
|
|
69
69
|
display: 'flex',
|
|
70
70
|
alignItems: 'flex-start',
|
|
71
|
+
zIndex: 1
|
|
71
72
|
}} {...longPressEvents}>
|
|
72
73
|
<div style={{ display: 'flex', flexDirection: 'column' }}>
|
|
73
74
|
{scenes.map(scene => <div
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import GUI, { Controller } from 'lil-gui'
|
|
3
3
|
import * as THREE from 'three'
|
|
4
4
|
import { BasePlaygroundScene } from '../baseScene'
|
|
5
|
-
import { TWEEN_DURATION } from '
|
|
6
|
-
import { EntityMesh } from '
|
|
5
|
+
import { TWEEN_DURATION } from '../../three/entities'
|
|
6
|
+
import { EntityMesh } from '../../three/entity/EntityMesh'
|
|
7
7
|
|
|
8
8
|
const includedVersions = globalThis.includedVersions
|
|
9
9
|
|
package/src/three/appShared.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BlockModel } from 'mc-assets/dist/types'
|
|
2
|
-
import { ItemSpecificContextProperties } from '
|
|
3
|
-
import { PlayerStateRenderer } from '
|
|
4
|
-
import { GeneralInputItem, getItemModelName } from '
|
|
5
|
-
import { ResourcesManager, ResourcesManagerTransferred } from '
|
|
2
|
+
import { ItemSpecificContextProperties } from '../playerState/types'
|
|
3
|
+
import { PlayerStateRenderer } from '../playerState/playerState'
|
|
4
|
+
import { GeneralInputItem, getItemModelName } from '../lib/items'
|
|
5
|
+
import { ResourcesManager, ResourcesManagerTransferred } from '../resourcesManager'
|
|
6
6
|
import { renderSlot } from './renderSlot'
|
|
7
7
|
|
|
8
8
|
export const getItemUv = (item: Record<string, any>, specificProps: ItemSpecificContextProperties, resourcesManager: ResourcesManagerTransferred, playerState: PlayerStateRenderer): {
|
package/src/three/entities.ts
CHANGED
|
@@ -26,7 +26,7 @@ import { disposeObject, loadTexture, loadThreeJsTextureFromUrl } from './threeJs
|
|
|
26
26
|
import { armorModel, armorTextures, elytraTexture } from './entity/armorModels'
|
|
27
27
|
import { WorldRendererThree } from './worldRendererThree'
|
|
28
28
|
import { IndexedData } from 'minecraft-data'
|
|
29
|
-
import { ItemSpecificContextProperties } from '
|
|
29
|
+
import { ItemSpecificContextProperties } from '../playerState/types'
|
|
30
30
|
|
|
31
31
|
// Type for entity metadata - simplified version
|
|
32
32
|
type EntityMetadataVersions = {
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
|
|
12
12
|
import * as THREE from 'three'
|
|
13
13
|
import { Vec3 } from 'vec3'
|
|
14
|
-
import type { GraphicsBackendLoader, GraphicsBackend, GraphicsInitOptions, DisplayWorldOptions } from '
|
|
15
|
-
import { createWorkerProxy, restoreTransferred } from '
|
|
16
|
-
import { ResourcesManager } from '
|
|
17
|
-
// import { WorldViewWorker } from '
|
|
18
|
-
import { FrameTimingCollector } from '
|
|
14
|
+
import type { GraphicsBackendLoader, GraphicsBackend, GraphicsInitOptions, DisplayWorldOptions } from '../graphicsBackend'
|
|
15
|
+
import { createWorkerProxy, restoreTransferred } from '../lib/workerProxy'
|
|
16
|
+
import { ResourcesManager } from '../resourcesManager'
|
|
17
|
+
// import { WorldViewWorker } from '../worldView'
|
|
18
|
+
import { FrameTimingCollector } from '../lib/frameTimingCollector'
|
|
19
19
|
import { WorldRendererThree } from './worldRendererThree'
|
|
20
20
|
import { DocumentRenderer, isWebWorker, ThreeRendererMainData } from './documentRenderer'
|
|
21
21
|
import { PanoramaRenderer } from './panorama'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as THREE from 'three'
|
|
2
|
-
import { GraphicsBackend, GraphicsBackendLoader } from '
|
|
3
|
-
import { useWorkerProxy, deepPrepareForTransfer, findProblemTransfer } from '
|
|
4
|
-
import { initMesherWorker, meshersSendMcData } from '
|
|
5
|
-
import { dynamicMcDataFiles } from '
|
|
6
|
-
import { addNewStat } from '
|
|
2
|
+
import { GraphicsBackend, GraphicsBackendLoader } from '../graphicsBackend'
|
|
3
|
+
import { useWorkerProxy, deepPrepareForTransfer, findProblemTransfer } from '../lib/workerProxy'
|
|
4
|
+
import { initMesherWorker, meshersSendMcData } from '../lib/worldrendererCommon'
|
|
5
|
+
import { dynamicMcDataFiles } from '../lib/buildSharedConfig.mjs'
|
|
6
|
+
import { addNewStat } from '../lib/ui/newStats'
|
|
7
7
|
import { createGraphicsBackendBase, type ThreeJsBackendMethods } from './graphicsBackend'
|
|
8
8
|
import { addCanvasForWorker } from './documentRenderer'
|
|
9
9
|
|
|
@@ -10,9 +10,9 @@ import { WorldRendererConfig } from '../lib/worldrendererCommon'
|
|
|
10
10
|
import { getMyHand } from './hand'
|
|
11
11
|
import { WorldRendererThree } from './worldRendererThree'
|
|
12
12
|
import { disposeObject } from './threeJsUtils'
|
|
13
|
-
import { HandItemBlock, MovementState } from '
|
|
14
|
-
import { PlayerStateRenderer } from '
|
|
15
|
-
import { getThreeBlockModelGroup } from '
|
|
13
|
+
import { HandItemBlock, MovementState } from '../playerState/types'
|
|
14
|
+
import { PlayerStateRenderer } from '../playerState/playerState'
|
|
15
|
+
import { getThreeBlockModelGroup } from '../mesher/standaloneRenderer'
|
|
16
16
|
|
|
17
17
|
const rotationPositionData = {
|
|
18
18
|
itemRight: {
|
package/src/three/renderSlot.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getRenamedData } from 'mineflayer-mouse/dist/blockRenames'
|
|
2
2
|
import { BlockModel } from 'mc-assets'
|
|
3
3
|
import { versionToNumber } from 'mc-assets/dist/utils'
|
|
4
|
-
import type { ResourcesManagerCommon } from '
|
|
4
|
+
import type { ResourcesManagerCommon } from '../resourcesManager'
|
|
5
5
|
|
|
6
6
|
export type ResolvedItemModelRender = {
|
|
7
7
|
modelName: string,
|
package/src/three/starField.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as THREE from 'three'
|
|
2
2
|
import { WorldRendererThree } from './worldRendererThree'
|
|
3
|
-
import { SoundSystem } from '
|
|
3
|
+
import { SoundSystem } from '../graphicsBackend/types'
|
|
4
4
|
|
|
5
5
|
export class ThreeJsSound implements SoundSystem {
|
|
6
6
|
audioListener: THREE.AudioListener | undefined
|
|
@@ -13,7 +13,7 @@ import destroyStage6 from '../../assets/destroy_stage_6.png'
|
|
|
13
13
|
import destroyStage7 from '../../assets/destroy_stage_7.png'
|
|
14
14
|
import destroyStage8 from '../../assets/destroy_stage_8.png'
|
|
15
15
|
import destroyStage9 from '../../assets/destroy_stage_9.png'
|
|
16
|
-
import { BlockShape, BlocksShapes } from '
|
|
16
|
+
import { BlockShape, BlocksShapes } from '../../playerState/types'
|
|
17
17
|
|
|
18
18
|
export class CursorBlock {
|
|
19
19
|
_cursorLinesHidden = false
|
|
@@ -5,12 +5,12 @@ import PrismarineChatLoader from 'prismarine-chat'
|
|
|
5
5
|
import * as tweenJs from '@tweenjs/tween.js'
|
|
6
6
|
import { Biome } from 'minecraft-data'
|
|
7
7
|
import { renderSign } from '../sign-renderer'
|
|
8
|
-
import { DisplayWorldOptions, GraphicsInitOptions } from '
|
|
8
|
+
import { DisplayWorldOptions, GraphicsInitOptions } from '../graphicsBackend/types'
|
|
9
9
|
import { chunkPos, sectionPos } from '../lib/simpleUtils'
|
|
10
10
|
import { WorldRendererCommon } from '../lib/worldrendererCommon'
|
|
11
11
|
import { addNewStat } from '../lib/ui/newStats'
|
|
12
12
|
import { MesherGeometryOutput } from '../mesher/shared'
|
|
13
|
-
import { ItemSpecificContextProperties } from '
|
|
13
|
+
import { ItemSpecificContextProperties } from '../playerState/types'
|
|
14
14
|
import { setBlockPosition } from '../mesher/standaloneRenderer'
|
|
15
15
|
import { getBannerTexture, createBannerMesh, releaseBannerTexture } from './bannerRenderer'
|
|
16
16
|
import { getMyHand } from './hand'
|