minecraft-renderer 0.1.60 → 0.1.61

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.
@@ -716,7 +716,7 @@ void main() {
716
716
  @font-face {
717
717
  font-family: "lil-gui";
718
718
  src: url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUsAAsAAAAACJwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAH4AAADAImwmYE9TLzIAAAGIAAAAPwAAAGBKqH5SY21hcAAAAcgAAAD0AAACrukyyJBnbHlmAAACvAAAAF8AAACEIZpWH2hlYWQAAAMcAAAAJwAAADZfcj2zaGhlYQAAA0QAAAAYAAAAJAC5AHhobXR4AAADXAAAABAAAABMAZAAAGxvY2EAAANsAAAAFAAAACgCEgIybWF4cAAAA4AAAAAeAAAAIAEfABJuYW1lAAADoAAAASIAAAIK9SUU/XBvc3QAAATEAAAAZgAAAJCTcMc2eJxVjbEOgjAURU+hFRBK1dGRL+ALnAiToyMLEzFpnPz/eAshwSa97517c/MwwJmeB9kwPl+0cf5+uGPZXsqPu4nvZabcSZldZ6kfyWnomFY/eScKqZNWupKJO6kXN3K9uCVoL7iInPr1X5baXs3tjuMqCtzEuagm/AAlzQgPAAB4nGNgYRBlnMDAysDAYM/gBiT5oLQBAwuDJAMDEwMrMwNWEJDmmsJwgCFeXZghBcjlZMgFCzOiKOIFAB71Bb8AeJy1kjFuwkAQRZ+DwRAwBtNQRUGKQ8OdKCAWUhAgKLhIuAsVSpWz5Bbkj3dEgYiUIszqWdpZe+Z7/wB1oCYmIoboiwiLT2WjKl/jscrHfGg/pKdMkyklC5Zs2LEfHYpjcRoPzme9MWWmk3dWbK9ObkWkikOetJ554fWyoEsmdSlt+uR0pCJR34b6t/TVg1SY3sYvdf8vuiKrpyaDXDISiegp17p7579Gp3p++y7HPAiY9pmTibljrr85qSidtlg4+l25GLCaS8e6rRxNBmsnERunKbaOObRz7N72ju5vdAjYpBXHgJylOAVsMseDAPEP8LYoUHicY2BiAAEfhiAGJgZWBgZ7RnFRdnVJELCQlBSRlATJMoLV2DK4glSYs6ubq5vbKrJLSbGrgEmovDuDJVhe3VzcXFwNLCOILB/C4IuQ1xTn5FPilBTj5FPmBAB4WwoqAHicY2BkYGAA4sk1sR/j+W2+MnAzpDBgAyEMQUCSg4EJxAEAwUgFHgB4nGNgZGBgSGFggJMhDIwMqEAYAByHATJ4nGNgAIIUNEwmAABl3AGReJxjYAACIQYlBiMGJ3wQAEcQBEV4nGNgZGBgEGZgY2BiAAEQyQWEDAz/wXwGAAsPATIAAHicXdBNSsNAHAXwl35iA0UQXYnMShfS9GPZA7T7LgIu03SSpkwzYTIt1BN4Ak/gKTyAeCxfw39jZkjymzcvAwmAW/wgwHUEGDb36+jQQ3GXGot79L24jxCP4gHzF/EIr4jEIe7wxhOC3g2TMYy4Q7+Lu/SHuEd/ivt4wJd4wPxbPEKMX3GI5+DJFGaSn4qNzk8mcbKSR6xdXdhSzaOZJGtdapd4vVPbi6rP+cL7TGXOHtXKll4bY1Xl7EGnPtp7Xy2n00zyKLVHfkHBa4IcJ2oD3cgggWvt/V/FbDrUlEUJhTn/0azVWbNTNr0Ens8de1tceK9xZmfB1CPjOmPH4kitmvOubcNpmVTN3oFJyjzCvnmrwhJTzqzVj9jiSX911FjeAAB4nG3HMRKCMBBA0f0giiKi4DU8k0V2GWbIZDOh4PoWWvq6J5V8If9NVNQcaDhyouXMhY4rPTcG7jwYmXhKq8Wz+p762aNaeYXom2n3m2dLTVgsrCgFJ7OTmIkYbwIbC6vIB7WmFfAAAA==") format("woff");
719
- }`;function h7(n){let e=document.createElement("style");e.innerHTML=n;let t=document.querySelector("head link[rel=stylesheet], head style");t?document.head.insertBefore(e,t):document.head.appendChild(e)}var Ps=!1,ni=class n{constructor({parent:e,autoPlace:t=e===void 0,container:r,width:i,title:s="Controls",closeFolders:o=!1,injectStyles:v=!0,touchStyles:a=!0}={}){if(this.parent=e,this.root=e?e.root:this,this.children=[],this.controllers=[],this.folders=[],this._closed=!1,this._hidden=!1,this.domElement=document.createElement("div"),this.domElement.classList.add("lil-gui"),this.$title=document.createElement("div"),this.$title.classList.add("title"),this.$title.setAttribute("role","button"),this.$title.setAttribute("aria-expanded",!0),this.$title.setAttribute("tabindex",0),this.$title.addEventListener("click",()=>this.openAnimated(this._closed)),this.$title.addEventListener("keydown",l=>{(l.code==="Enter"||l.code==="Space")&&(l.preventDefault(),this.$title.click())}),this.$title.addEventListener("touchstart",()=>{},{passive:!0}),this.$children=document.createElement("div"),this.$children.classList.add("children"),this.domElement.appendChild(this.$title),this.domElement.appendChild(this.$children),this.title(s),this.parent){this.parent.children.push(this),this.parent.folders.push(this),this.parent.$children.appendChild(this.domElement);return}this.domElement.classList.add("root"),a&&this.domElement.classList.add("allow-touch-styles"),!Ps&&v&&(h7(f7),Ps=!0),r?r.appendChild(this.domElement):t&&(this.domElement.classList.add("autoPlace"),document.body.appendChild(this.domElement)),i&&this.domElement.style.setProperty("--width",i+"px"),this._closeFolders=o}add(e,t,r,i,s){if(Object(r)===r)return new ri(this,e,t,r);switch(typeof e[t]){case"number":return new ti(this,e,t,r,i,s);case"boolean":return new Xr(this,e,t);case"string":return new ii(this,e,t);case"function":return new R5(this,e,t)}}addColor(e,t,r=1){return new ei(this,e,t,r)}addFolder(e){let t=new n({parent:this,title:e});return this.root._closeFolders&&t.close(),t}load(e,t=!0){return e.controllers&&this.controllers.forEach(r=>{r instanceof R5||r._name in e.controllers&&r.load(e.controllers[r._name])}),t&&e.folders&&this.folders.forEach(r=>{r._title in e.folders&&r.load(e.folders[r._title])}),this}save(e=!0){let t={controllers:{},folders:{}};return this.controllers.forEach(r=>{if(!(r instanceof R5)){if(r._name in t.controllers)throw new Error(`Cannot save GUI with duplicate property "${r._name}"`);t.controllers[r._name]=r.save()}}),e&&this.folders.forEach(r=>{if(r._title in t.folders)throw new Error(`Cannot save GUI with duplicate folder "${r._title}"`);t.folders[r._title]=r.save()}),t}open(e=!0){return this._setClosed(!e),this.$title.setAttribute("aria-expanded",!this._closed),this.domElement.classList.toggle("closed",this._closed),this}close(){return this.open(!1)}_setClosed(e){this._closed!==e&&(this._closed=e,this._callOnOpenClose(this))}show(e=!0){return this._hidden=!e,this.domElement.style.display=this._hidden?"none":"",this}hide(){return this.show(!1)}openAnimated(e=!0){return this._setClosed(!e),this.$title.setAttribute("aria-expanded",!this._closed),requestAnimationFrame(()=>{let t=this.$children.clientHeight;this.$children.style.height=t+"px",this.domElement.classList.add("transition");let r=s=>{s.target===this.$children&&(this.$children.style.height="",this.domElement.classList.remove("transition"),this.$children.removeEventListener("transitionend",r))};this.$children.addEventListener("transitionend",r);let i=e?this.$children.scrollHeight:0;this.domElement.classList.toggle("closed",!e),requestAnimationFrame(()=>{this.$children.style.height=i+"px"})}),this}title(e){return this._title=e,this.$title.innerHTML=e,this}reset(e=!0){return(e?this.controllersRecursive():this.controllers).forEach(r=>r.reset()),this}onChange(e){return this._onChange=e,this}_callOnChange(e){this.parent&&this.parent._callOnChange(e),this._onChange!==void 0&&this._onChange.call(this,{object:e.object,property:e.property,value:e.getValue(),controller:e})}onFinishChange(e){return this._onFinishChange=e,this}_callOnFinishChange(e){this.parent&&this.parent._callOnFinishChange(e),this._onFinishChange!==void 0&&this._onFinishChange.call(this,{object:e.object,property:e.property,value:e.getValue(),controller:e})}onOpenClose(e){return this._onOpenClose=e,this}_callOnOpenClose(e){this.parent&&this.parent._callOnOpenClose(e),this._onOpenClose!==void 0&&this._onOpenClose.call(this,e)}destroy(){this.parent&&(this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.folders.splice(this.parent.folders.indexOf(this),1)),this.domElement.parentElement&&this.domElement.parentElement.removeChild(this.domElement),Array.from(this.children).forEach(e=>e.destroy())}controllersRecursive(){let e=Array.from(this.controllers);return this.folders.forEach(t=>{e=e.concat(t.controllersRecursive())}),e}foldersRecursive(){let e=Array.from(this.folders);return this.folders.forEach(t=>{e=e.concat(t.foldersRecursive())}),e}},si=ni;var ke=class{constructor(e,t,r,i){d(this,"gui",null);d(this,"storageKey","");d(this,"target");d(this,"params",[]);d(this,"paramsMeta",{});d(this,"_visible",!1);d(this,"initialValues",{});d(this,"initialized",!1);if(!l0){this.gui=new si,this.storageKey=`debug_params_${e}`,this.target=t,this.paramsMeta=i??{},this.params=r??Object.keys(t);for(let s of this.params)this.initialValues[s]=t[s];this.gui.domElement.style.display="none"}}activate(){return l0?this:(!this.initialized&&this.gui&&(this.loadSavedValues(),this.setupControls(),this.initialized=!0),this.show(),this)}get visible(){return l0?!1:this._visible}set visible(e){l0||!this.gui||(this._visible=e,this.gui.domElement.style.display=e?"block":"none",this.saveVisibility())}loadSavedValues(){if(!l0)try{let e=localStorage.getItem(this.storageKey);if(e){let t=JSON.parse(e);for(let r of this.params)if(r in t){let i=t[r];i!==null&&(this.target[r]=i)}}}catch{}}saveValues(e=!1){if(!l0)try{let t={};for(let r of this.params)t[r]=this.target[r];e?localStorage.removeItem(this.storageKey):localStorage.setItem(this.storageKey,JSON.stringify(t))}catch{}}saveVisibility(){if(!l0)try{localStorage.setItem(`${this.storageKey}_visible`,this._visible.toString())}catch{}}setupControls(){if(!(l0||!this.gui)){this.gui.add(this,"visible").name("Show Controls"),this.gui.add({resetAll:()=>{if(this.gui){for(let e of this.params)this.target[e]=this.initialValues[e];this.saveValues(!0),this.gui.destroy(),this.gui=new si,this.setupControls()}}},"resetAll").name("Reset All Parameters");for(let e of this.params){let t=this.target[e],r=this.paramsMeta[e]??{};if(typeof t=="number"){let i=r.min??t-Math.abs(t*2),s=r.max??t+Math.abs(t*2),o=r.step??Math.abs(t)/100;this.gui.add(this.target,e,i,s,o).onChange(()=>this.saveValues())}else if(typeof t=="boolean")this.gui.add(this.target,e).onChange(()=>this.saveValues());else if(typeof t=="string"&&["x","y","z"].includes(e)){let i=r.min??-10,s=r.max??10,o=r.step??.1;this.gui.add(this.target,e,i,s,o).onChange(()=>this.saveValues())}else Array.isArray(t)&&this.gui.add(this.target,e,t).onChange(()=>this.saveValues())}}}save(){l0||(this.saveValues(),this.saveVisibility())}destroy(){l0||!this.gui||(this.saveVisibility(),this.gui.destroy())}toggle(){this.visible=!this.visible}show(){this.visible=!0}hide(){this.visible=!1}};E();x();k();R();E();x();k();R();var b1=class{constructor(){d(this,"currentAnimation",null);d(this,"isAnimating",!1);d(this,"cancelRequested",!1);d(this,"completionCallbacks",[]);d(this,"currentCancelCallback",null)}async startAnimation(e,t){return this.isAnimating&&await this.cancelCurrentAnimation(),new Promise(r=>{this.isAnimating=!0,this.cancelRequested=!1,this.currentCancelCallback=t??null,this.currentAnimation=e(),this.completionCallbacks.push(()=>{this.isAnimating=!1,this.currentAnimation=null,r()})})}async cancelCurrentAnimation(){if(this.isAnimating){if(this.currentCancelCallback){let e=this.currentCancelCallback;this.currentCancelCallback=null,e()}return new Promise(e=>{this.cancelRequested=!0,this.completionCallbacks.push(()=>{e()})})}}animationCycleFinish(){this.cancelRequested&&this.forceFinish()}forceFinish(e=!0){if(!this.isAnimating)return;if(this.currentAnimation){for(let r of this.currentAnimation.getAll())r.stop();this.currentAnimation.removeAll(),this.currentAnimation=null}this.isAnimating=!1,this.cancelRequested=!1;let t=[...this.completionCallbacks];if(this.completionCallbacks=[],e)for(let r of t)r()}update(){this.currentAnimation&&this.currentAnimation.update()}get isActive(){return this.isAnimating}get shouldCancel(){return this.cancelRequested}};var m7={x:3e3,y:3e3,z:3e3,rotation:Math.PI,scale:1,default:3e3},lt=class{constructor(e,t,r){this.getState=e;this.setState=t;d(this,"animationController",new b1);d(this,"defaultState");d(this,"speeds");d(this,"currentStateName","");d(this,"transitioningToStateName","");this.speeds={...m7},r&&Object.assign(this.speeds,r),this.defaultState=this.getState()}calculateDuration(e){let t=0,r=this.getState();for(let[i,s]of Object.entries(e)){let o=r[i],v=Math.abs(s-o),a=this.getPropertySpeed(i),l=v/a*1e3;t=Math.max(t,l)}return Math.min(Math.max(t,200),2e3)}getPropertySpeed(e){return e in this.speeds?this.speeds[e]:e.toLowerCase().includes("rotation")?this.speeds.rotation:e.toLowerCase().includes("scale")?this.speeds.scale:e.toLowerCase()==="x"||e.toLowerCase()==="y"||e.toLowerCase()==="z"?this.speeds[e]:this.speeds.default}startTransition(e,t,r,i=H0.Linear.None,s){this.isTransitioning&&this.animationController.forceFinish(!1),this.transitioningToStateName=t??"";let o=this.getState(),v=this.calculateDuration(e);this.animationController.startAnimation(()=>{let a=new Mt;return new F0(o,a).to(e,v).easing(i).onUpdate(l=>{for(let c of Object.keys(l))this.setState(c,l[c])}).onComplete(()=>{this.animationController.forceFinish(),this.currentStateName=this.transitioningToStateName,this.transitioningToStateName="",r?.()}).start(),a},s)}reset(){this.startTransition(this.defaultState)}update(){this.animationController.update()}forceFinish(){this.animationController.forceFinish()}transitionTo(e,t,r,i){this.startTransition(e,t,r,H0.Linear.None,i)}getCurrentValue(e){return this.getState()[e]}get isTransitioning(){return this.animationController.isActive}};E();x();k();R();import{subscribeKey as p7}from"valtio/utils";function y1(n,e,t,r,i){let s=0,o,v=async()=>{let a=++s,l=await n(e[t]);a===s?(o&&i?.(o),r(l),o=l):i?.(l)};return v(),p7(e,t,v)}E();x();k();R();var Is=Math.PI/180;function _1(n){let{walkDist:e,prevWalkDist:t,bob:r,prevBob:i,partialTick:s}=n,o=e-t,v=-(e+o*s),a=i+(r-i)*s,l=Math.sin(v*Math.PI),c=Math.cos(v*Math.PI);return{position:{x:l*a*.5,y:-Math.abs(c*a)},rotation:{x:Math.abs(Math.cos(v*Math.PI-.2)*a)*5*Is,z:l*a*3*Is}}}E();x();k();R();var w1=n=>({"minecraft:display_context":"firstperson","minecraft:use_duration":n.playerStateReactive.itemUsageTicks,"minecraft:using_item":!!n.playerStateReactive.itemUsageTicks}),g7=()=>({"minecraft:display_context":"firstperson"}),Ot=(n,e)=>{if(!e)return"empty";if(e.type==="hand")return"hand";let t=e.name??(e.id!==void 0?`#${e.id}`:"unknown");if(!n.resourcesManager.currentResources)return`${e.type}:${t}`;let r=n.getItemRenderData({...e.fullItem,itemId:e.id},g7());return`${e.type}:${t}:${r.modelName}`};var j0=new C0.Matrix4,Hs=n=>(n=(n+Math.PI)%(Math.PI*2),n<0&&(n+=Math.PI*2),n-Math.PI);function b7(n,e){let t=new C0.Matrix4,r=1,i=Math.sqrt(n),s=-.3*Math.sin(i*Math.PI),o=.4*Math.sin(i*2*Math.PI),v=-.4*Math.sin(n*Math.PI);return t.multiply(j0.makeTranslation(r*(s+.64),o-.6+e*-.6,v-.72)),t.multiply(j0.makeRotationY(r*45*Math.PI/180)),t.multiply(j0.makeRotationY(r*Math.sin(i*Math.PI)*70*Math.PI/180)),t.multiply(j0.makeRotationZ(r*Math.sin(n*n*Math.PI)*-20*Math.PI/180)),t.multiply(j0.makeTranslation(r*-1,3.6,3.5)),t.multiply(j0.makeRotationZ(r*120*Math.PI/180)),t.multiply(j0.makeRotationX(200*Math.PI/180)),t.multiply(j0.makeRotationY(r*-135*Math.PI/180)),t.multiply(j0.makeTranslation(r*5.6,0,0)),t.multiply(j0.makeTranslation(r*-5/16,2/16,0)),t}function y7(n,e){let t=new C0.Matrix4,r=1,i=Math.sqrt(n),s=-.4*Math.sin(i*Math.PI),o=.2*Math.sin(i*2*Math.PI),v=-.2*Math.sin(n*Math.PI);t.multiply(j0.makeTranslation(r*s,o,v)),t.multiply(j0.makeTranslation(r*.56,-.52+e*-.6,-.72));let a=Math.sin(n*n*Math.PI),l=Math.sin(i*Math.PI);return t.multiply(j0.makeRotationY(r*(45+a*-20)*Math.PI/180)),t.multiply(j0.makeRotationZ(r*l*-20*Math.PI/180)),t.multiply(j0.makeRotationX(l*-80*Math.PI/180)),t.multiply(j0.makeRotationY(r*-45*Math.PI/180)),t}var T5=class{constructor(e,t=!1){this.worldRenderer=e;this.offHand=t;d(this,"holdingBlock");d(this,"blockSwapAnimation");d(this,"cameraGroup",new C0.Mesh);d(this,"armTransformGroup",new C0.Group);d(this,"camera",new C0.PerspectiveCamera(70,1,.05,100));d(this,"equipProgress",0);d(this,"stopUpdate",!1);d(this,"lastHeldItem");d(this,"lastHeldItemRenderKey");d(this,"currentDisplayType","hand");d(this,"isSwinging",!1);d(this,"nextIterStopCallbacks");d(this,"idleAnimator");d(this,"ready",!1);d(this,"lastUpdate",0);d(this,"xBob",0);d(this,"yBob",0);d(this,"lastBobUpdateTime",0);d(this,"lastBobWalkDist",0);d(this,"lastBobTickTime",0);d(this,"playerHand");d(this,"offHandDisplay",!1);d(this,"offHandModeLegacy",!1);d(this,"swingAnimator");d(this,"config");d(this,"disposed",!1);d(this,"unsubs",[]);d(this,"lastItemModelName");d(this,"switchRequest",0);this.initCameraGroup(),this.swingAnimator=new oi,this.unsubs.push(this.worldRenderer.onReactivePlayerStateUpdated("heldItemMain",()=>{this.offHand||this.updateItem()},!1),this.worldRenderer.onReactivePlayerStateUpdated("heldItemOff",()=>{this.offHand&&this.updateItem()},!1)),this.config=e.displayOptions.inWorldRenderingConfig,this.offHandDisplay=this.offHand,this.offHand||x5().then(r=>{this.disposed||(this.playerHand=r,this.updateItem())}).then(()=>{if(this.disposed)return;let r=y1(async()=>x5(this.worldRenderer.playerStateReactive.playerSkin,this.worldRenderer.playerStateReactive.onlineMode?this.worldRenderer.playerStateReactive.username:void 0),this.worldRenderer.playerStateReactive,"playerSkin",i=>{i&&(this.playerHand=i,this.updateItem())},i=>{k0(i,!0)});this.unsubs.push(r)})}dispose(){this.disposed=!0,this.unsubs.forEach(e=>e()),this.unsubs=[],this.idleAnimator?.destroy(),this.idleAnimator=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.blockSwapAnimation?.switcher.forceFinish(),this.blockSwapAnimation=void 0,k0(this.cameraGroup,!0),this.holdingBlock&&this.holdingBlock!==this.playerHand&&k0(this.holdingBlock,!0),this.holdingBlock=void 0,this.playerHand&&(k0(this.playerHand,!0),this.playerHand=void 0),this.ready=!1}updateItem(){if(!this.ready)return;let e=this.offHand?this.worldRenderer.playerStateReactive.heldItemOff:this.worldRenderer.playerStateReactive.heldItemMain;e?this.setNewItem(e):this.offHand?this.setNewItem():this.setNewItem({type:"hand"})}initCameraGroup(){this.cameraGroup=new C0.Mesh,this.armTransformGroup=new C0.Group,this.armTransformGroup.matrixAutoUpdate=!1,this.cameraGroup.add(this.armTransformGroup)}startSwing(){this.swingAnimator?.startSwing()}stopSwing(){this.swingAnimator?.stopSwing()}render(e,t,r,i){if(!this.lastHeldItem)return;let s=performance.now();this.lastUpdate&&s-this.lastUpdate>50&&this.replaceItemModel(this.lastHeldItem),(this.swingAnimator?.isCurrentlySwinging()||this.swingAnimator?.debugParams.animationStage)&&this.swingAnimator?.update(),this.blockSwapAnimation?.switcher.update();let o=new C0.Scene;o.add(this.cameraGroup);let v=t.getSize(new C0.Vector2),a=v.height>v.width;a?this.camera.aspect!==1&&(this.camera.aspect=1,this.camera.updateProjectionMatrix()):this.camera.aspect!==e.aspect&&(this.camera.aspect=e.aspect,this.camera.updateProjectionMatrix()),this.updateCameraGroup(),o.add(r.clone()),o.add(i.clone());let{offHandDisplay:l}=this;if(l&&(this.cameraGroup.scale.x=-1),t.autoClear=!1,t.clearDepth(),a){let c=Math.min(v.width,v.height);l?t.setViewport(0,0,c,c):t.setViewport(v.width-c,0,c,c)}t.render(o,this.camera),a&&t.setViewport(0,0,v.width,v.height),l&&(this.cameraGroup.scale.x=1)}async playBlockSwapAnimation(e){this.blockSwapAnimation??(this.blockSwapAnimation={switcher:new lt(()=>({progress:this.equipProgress}),(i,s)=>{i==="progress"&&(this.equipProgress=s)},{progress:4})});let t=e==="disappeared"?1:0,r=!1;return new Promise(i=>{this.blockSwapAnimation.switcher.transitionTo({progress:t},e,()=>{r||i(!0)},()=>{r=!0,i(!1)})})}isDifferentItem(e){return this.lastHeldItemRenderKey!==Ot(this.worldRenderer,e)}updateCameraGroup(){if(this.stopUpdate)return;let{camera:e}=this,t=performance.now(),r=this.worldRenderer.cameraShake.getBaseRotation(),i=r.pitch,s=r.yaw;if(this.lastBobUpdateTime===0)this.xBob=i,this.yBob=s;else{let f=Math.min((t-this.lastBobUpdateTime)/1e3,.1),p=1-Math.pow(.5,f*28),g=1-Math.pow(.5,f*36);this.xBob+=(i-this.xBob)*p,this.yBob+=Hs(s-this.yBob)*g}this.lastBobUpdateTime=t;let o=(i-this.xBob)*-.05,v=Hs(s-this.yBob)*-.035;if(this.cameraGroup.position.copy(e.position),this.cameraGroup.rotation.copy(e.rotation),this.worldRenderer.displayOptions.inWorldRenderingConfig.viewBobbing){let f=this.worldRenderer.playerStateReactive;f.walkDist!==this.lastBobWalkDist&&(this.lastBobTickTime=t,this.lastBobWalkDist=f.walkDist);let p=Math.min((t-this.lastBobTickTime)/50,1),g=1.8,y=_1({walkDist:f.walkDist*g,prevWalkDist:f.prevWalkDist*g,bob:f.bob,prevBob:f.prevBob,partialTick:p});this.cameraGroup.position.x+=y.position.x,this.cameraGroup.position.y+=y.position.y,this.cameraGroup.rotation.z+=y.rotation.z,this.cameraGroup.rotation.x+=y.rotation.x}this.cameraGroup.rotation.x+=o,this.cameraGroup.rotation.y+=v;let l=this.currentDisplayType,c=this.swingAnimator?.getSwingProgress()??0,u;l==="hand"?u=b7(c,this.equipProgress):u=y7(c,this.equipProgress),this.armTransformGroup.matrix.copy(u),this.armTransformGroup.matrixWorldNeedsUpdate=!0}async createItemModel(e){if(this.lastUpdate=performance.now(),!e||e.type==="hand"&&!this.playerHand)return;let t;if(e.type==="item"||e.type==="block"){let r=this.worldRenderer.entities.getItemMesh({...e.fullItem,itemId:e.id},w1(this.worldRenderer),!1,this.lastItemModelName);if(r){let{mesh:i,isBlock:s,modelName:o}=r;s?(t=i,e.type="block"):(t=i,e.type="item"),this.lastItemModelName=o}}else t=this.playerHand;if(t){if(e.type==="item"||e.type==="block"){let r=new C0.Group;r.name="displayTransform",e.type==="item"?(r.position.set(1.13/16,3.2/16,1.13/16),r.rotation.set(0,C0.MathUtils.degToRad(-90),C0.MathUtils.degToRad(25),"XYZ"),r.scale.set(.68,.68,.68)):(r.rotation.set(0,C0.MathUtils.degToRad(45),0,"XYZ"),r.scale.set(.4,.4,.4)),r.add(t),t=r}return t.name="holdingBlock",{model:t,type:e.type}}}async replaceItemModel(e){if(this.blockSwapAnimation?.switcher.isTransitioning)return;if(!e){this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0,this.currentDisplayType="hand";let r=this.swingAnimator;r?.stopSwing(),r&&(r.type="hand"),this.idleAnimator=void 0;return}let t=await this.createItemModel(e);t&&(this.holdingBlock?.removeFromParent(),this.holdingBlock=t.model,this.currentDisplayType=t.type,this.armTransformGroup.add(t.model))}testUnknownBlockSwitch(){this.setNewItem({type:"item",name:"minecraft:some-unknown-block",id:0,fullItem:{}})}async setNewItem(e){let t=Ot(this.worldRenderer,e),r=this.lastHeldItemRenderKey!==t;if(this.lastHeldItem=e,!r)return;this.lastHeldItemRenderKey=t,this.lastItemModelName=void 0;let i=++this.switchRequest,s=!1;if(this.holdingBlock){if(s=!0,!await this.playBlockSwapAnimation("disappeared"))return;this.holdingBlock.removeFromParent(),this.holdingBlock!==this.playerHand&&k0(this.holdingBlock,!1),this.holdingBlock=void 0}if(!e){this.currentDisplayType="hand";let a=this.swingAnimator;a?.stopSwing(),a&&(a.type="hand"),this.idleAnimator=void 0,this.blockSwapAnimation=void 0;return}if(i!==this.switchRequest)return;let o=await this.createItemModel(e);if(!o||i!==this.switchRequest)return;this.holdingBlock=o.model,this.currentDisplayType=o.type,this.armTransformGroup.add(this.holdingBlock),s&&await this.playBlockSwapAnimation("appeared");let v=this.swingAnimator;v&&(v.type=o.type),this.idleAnimator=void 0}};var oi=class{constructor(){d(this,"animationTimer",0);d(this,"lastTime",0);d(this,"isAnimating",!1);d(this,"stopRequested",!1);d(this,"swingProgress",0);d(this,"type","hand");d(this,"debugParams",{animationTime:250,animationStage:0});d(this,"debugGui");this.debugGui=new ke("hand_animator",this.debugParams,void 0,{animationStage:{min:0,max:1,step:.01}})}update(){if(!this.isAnimating&&!this.debugParams.animationStage){this.swingProgress=0;return}let e=performance.now(),t=(e-this.lastTime)/1e3;this.lastTime=e,this.animationTimer+=t*1e3;let r=this.debugParams.animationStage||Math.min(this.animationTimer/this.debugParams.animationTime,1);if(r>=1){if(this.stopRequested){this.isAnimating=!1,this.stopRequested=!1,this.animationTimer=0,this.swingProgress=0;return}this.animationTimer=0,this.swingProgress=0;return}this.swingProgress=r}getSwingProgress(){return this.swingProgress}startSwing(){this.stopRequested=!1,!this.isAnimating&&(this.isAnimating=!0,this.animationTimer=0,this.lastTime=performance.now())}stopSwing(){this.isAnimating&&(this.stopRequested=!0)}isCurrentlySwinging(){return this.isAnimating}},Os=(n,e,t,r,i)=>{let s=r.transformModel(e,{name:t,properties:{}});return qr(n,[[s]],void 0,"plains",i)};E();x();k();R();import*as u0 from"three";import{subscribeKey as C3}from"valtio/utils";E();x();k();R();import*as L0 from"three";E();x();k();R();import Pi from"prismarine-nbt";import*as V from"three";E();x();k();R();E();x();k();R();import{BoxGeometry as Y0,DoubleSide as ui,FrontSide as Ds,Group as ve,Mesh as N0,MeshStandardMaterial as M5,Vector2 as A1}from"three";function fi(n,e,t,r,i,s,o,v){let a=(B,H,G,O)=>[new A1(B/o,1-O/v),new A1(G/o,1-O/v),new A1(G/o,1-H/v),new A1(B/o,1-H/v)],l=a(e+s,t,e+r+s,t+s),c=a(e+r+s,t,e+r*2+s,t+s),u=a(e,t+s,e+s,t+s+i),f=a(e+s,t+s,e+r+s,t+s+i),p=a(e+r+s,t+s,e+r+s*2,t+i+s),g=a(e+r+s*2,t+s,e+r*2+s*2,t+i+s),y=n.attributes.uv,A=[p[3],p[2],p[0],p[1]],b=[u[3],u[2],u[0],u[1]],_=[l[3],l[2],l[0],l[1]],S=[c[0],c[1],c[3],c[2]],C=[f[3],f[2],f[0],f[1]],M=[g[3],g[2],g[0],g[1]],P=[];for(let B of[A,b,_,S,C,M])for(let H of B)P.push(H.x,H.y);y.set(new Float32Array(P)),y.needsUpdate=!0}function ae(n,e,t,r,i,s){fi(n,e,t,r,i,s,64,64)}function ai(n,e,t,r,i,s){fi(n,e,t,r,i,s,64,32)}var Te=class extends ve{constructor(e,t){super(),Object.defineProperty(this,"innerLayer",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"outerLayer",{enumerable:!0,configurable:!0,writable:!0,value:t}),e.name="inner",t.name="outer"}},vi=class extends ve{constructor(){super(),Object.defineProperty(this,"head",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"body",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rightArm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"leftArm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rightLeg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"leftLeg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"modelListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"slim",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_map",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"layer1Material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layer1MaterialBiased",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layer2Material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layer2MaterialBiased",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.layer1Material=new M5({side:Ds}),this.layer2Material=new M5({side:ui,transparent:!0,alphaTest:1e-5}),this.layer1MaterialBiased=this.layer1Material.clone(),this.layer1MaterialBiased.polygonOffset=!0,this.layer1MaterialBiased.polygonOffsetFactor=1,this.layer1MaterialBiased.polygonOffsetUnits=1,this.layer2MaterialBiased=this.layer2Material.clone(),this.layer2MaterialBiased.polygonOffset=!0,this.layer2MaterialBiased.polygonOffsetFactor=1,this.layer2MaterialBiased.polygonOffsetUnits=1;let e=new Y0(8,8,8);ae(e,0,0,8,8,8);let t=new N0(e,this.layer1Material),r=new Y0(9,9,9);ae(r,32,0,8,8,8);let i=new N0(r,this.layer2Material);this.head=new Te(t,i),this.head.name="head",this.head.add(t,i),t.position.y=4,i.position.y=4,this.add(this.head);let s=new Y0(8,12,4);ae(s,16,16,8,12,4);let o=new N0(s,this.layer1Material),v=new Y0(8.5,12.5,4.5);ae(v,16,32,8,12,4);let a=new N0(v,this.layer2Material);this.body=new Te(o,a),this.body.name="body",this.body.add(o,a),this.body.position.y=-6,this.add(this.body);let l=new Y0,c=new N0(l,this.layer1MaterialBiased);this.modelListeners.push(()=>{c.scale.x=this.slim?3:4,c.scale.y=12,c.scale.z=4,ae(l,40,16,this.slim?3:4,12,4)});let u=new Y0,f=new N0(u,this.layer2MaterialBiased);this.modelListeners.push(()=>{f.scale.x=this.slim?3.5:4.5,f.scale.y=12.5,f.scale.z=4.5,ae(u,40,32,this.slim?3:4,12,4)});let p=new ve;p.add(c,f),this.modelListeners.push(()=>{p.position.x=this.slim?-.5:-1}),p.position.y=-4,this.rightArm=new Te(c,f),this.rightArm.name="rightArm",this.rightArm.add(p),this.rightArm.position.x=-5,this.rightArm.position.y=-2,this.add(this.rightArm);let g=new Y0,y=new N0(g,this.layer1MaterialBiased);this.modelListeners.push(()=>{y.scale.x=this.slim?3:4,y.scale.y=12,y.scale.z=4,ae(g,32,48,this.slim?3:4,12,4)});let A=new Y0,b=new N0(A,this.layer2MaterialBiased);this.modelListeners.push(()=>{b.scale.x=this.slim?3.5:4.5,b.scale.y=12.5,b.scale.z=4.5,ae(A,48,48,this.slim?3:4,12,4)});let _=new ve;_.add(y,b),this.modelListeners.push(()=>{_.position.x=this.slim?.5:1}),_.position.y=-4,this.leftArm=new Te(y,b),this.leftArm.name="leftArm",this.leftArm.add(_),this.leftArm.position.x=5,this.leftArm.position.y=-2,this.add(this.leftArm);let S=new Y0(4,12,4);ae(S,0,16,4,12,4);let C=new N0(S,this.layer1MaterialBiased),M=new Y0(4.5,12.5,4.5);ae(M,0,32,4,12,4);let P=new N0(M,this.layer2MaterialBiased),B=new ve;B.add(C,P),B.position.y=-6,this.rightLeg=new Te(C,P),this.rightLeg.name="rightLeg",this.rightLeg.add(B),this.rightLeg.position.x=-1.9,this.rightLeg.position.y=-12,this.rightLeg.position.z=-.1,this.add(this.rightLeg);let H=new Y0(4,12,4);ae(H,16,48,4,12,4);let G=new N0(H,this.layer1MaterialBiased),O=new Y0(4.5,12.5,4.5);ae(O,0,48,4,12,4);let j=new N0(O,this.layer2MaterialBiased),J=new ve;J.add(G,j),J.position.y=-6,this.leftLeg=new Te(G,j),this.leftLeg.name="leftLeg",this.leftLeg.add(J),this.leftLeg.position.x=1.9,this.leftLeg.position.y=-12,this.leftLeg.position.z=-.1,this.add(this.leftLeg),this.modelType="default"}get map(){return this._map}set map(e){this._map=e,this.layer1Material.map=e,this.layer1Material.needsUpdate=!0,this.layer1MaterialBiased.map=e,this.layer1MaterialBiased.needsUpdate=!0,this.layer2Material.map=e,this.layer2Material.needsUpdate=!0,this.layer2MaterialBiased.map=e,this.layer2MaterialBiased.needsUpdate=!0}get modelType(){return this.slim?"slim":"default"}set modelType(e){this.slim=e==="slim",this.modelListeners.forEach(t=>t())}getBodyParts(){return this.children.filter(e=>e instanceof Te)}setInnerLayerVisible(e){this.getBodyParts().forEach(t=>t.innerLayer.visible=e)}setOuterLayerVisible(e){this.getBodyParts().forEach(t=>t.outerLayer.visible=e)}resetJoints(){this.head.rotation.set(0,0,0),this.leftArm.rotation.set(0,0,0),this.rightArm.rotation.set(0,0,0),this.leftLeg.rotation.set(0,0,0),this.rightLeg.rotation.set(0,0,0),this.body.rotation.set(0,0,0),this.head.position.y=0,this.body.position.y=-6,this.body.position.z=0,this.rightArm.position.x=-5,this.rightArm.position.y=-2,this.rightArm.position.z=0,this.leftArm.position.x=5,this.leftArm.position.y=-2,this.leftArm.position.z=0,this.rightLeg.position.x=-1.9,this.rightLeg.position.y=-12,this.rightLeg.position.z=-.1,this.leftLeg.position.x=1.9,this.leftLeg.position.y=-12,this.leftLeg.position.z=-.1}},li=class extends ve{constructor(){super(),Object.defineProperty(this,"cape",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.material=new M5({side:ui,transparent:!0,alphaTest:1e-5});let e=new Y0(10,16,1);ai(e,0,0,10,16,1),this.cape=new N0(e,this.material),this.cape.position.y=-8,this.cape.position.z=.5,this.add(this.cape)}get map(){return this.material.map}set map(e){this.material.map=e,this.material.needsUpdate=!0}},ci=class extends ve{constructor(){super(),Object.defineProperty(this,"leftWing",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rightWing",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.material=new M5({side:ui,transparent:!0,alphaTest:1e-5});let e=new Y0(12,22,4);ai(e,22,0,10,20,2);let t=new N0(e,this.material);t.position.x=-5,t.position.y=-10,t.position.z=-1,this.leftWing=new ve,this.leftWing.add(t),this.add(this.leftWing);let r=new Y0(12,22,4);ai(r,22,0,10,20,2);let i=new N0(r,this.material);i.scale.x=-1,i.position.x=5,i.position.y=-10,i.position.z=-1,this.rightWing=new ve,this.rightWing.add(i),this.add(this.rightWing),this.leftWing.position.x=5,this.leftWing.rotation.x=.2617994,this.resetJoints()}resetJoints(){this.leftWing.rotation.y=.01,this.leftWing.rotation.z=.2617994,this.updateRightWing()}updateRightWing(){this.rightWing.position.x=-this.leftWing.position.x,this.rightWing.position.y=this.leftWing.position.y,this.rightWing.rotation.x=this.leftWing.rotation.x,this.rightWing.rotation.y=-this.leftWing.rotation.y,this.rightWing.rotation.z=-this.leftWing.rotation.z}get map(){return this.material.map}set map(e){this.material.map=e,this.material.needsUpdate=!0}},di=class extends ve{constructor(){super(),Object.defineProperty(this,"rightEar",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"leftEar",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.material=new M5({side:Ds});let e=new Y0(8,8,4/3);fi(e,0,0,6,6,1,14,7),this.rightEar=new N0(e,this.material),this.rightEar.name="rightEar",this.rightEar.position.x=-6,this.add(this.rightEar),this.leftEar=new N0(e,this.material),this.leftEar.name="leftEar",this.leftEar.position.x=6,this.add(this.leftEar)}get map(){return this.material.map}set map(e){this.material.map=e,this.material.needsUpdate=!0}},Fs=10.8*Math.PI/180,Ft=class extends ve{constructor(){super(),Object.defineProperty(this,"skin",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cape",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"elytra",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"ears",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.skin=new vi,this.skin.name="skin",this.skin.position.y=8,this.add(this.skin),this.cape=new li,this.cape.name="cape",this.cape.position.y=8,this.cape.position.z=-2,this.cape.rotation.x=Fs,this.cape.rotation.y=Math.PI,this.add(this.cape),this.elytra=new ci,this.elytra.name="elytra",this.elytra.position.y=8,this.elytra.position.z=-2,this.elytra.visible=!1,this.add(this.elytra),this.ears=new di,this.ears.name="ears",this.ears.position.y=10,this.ears.position.z=2/3,this.ears.visible=!1,this.skin.head.add(this.ears)}get backEquipment(){return this.cape.visible?"cape":this.elytra.visible?"elytra":null}set backEquipment(e){this.cape.visible=e==="cape",this.elytra.visible=e==="elytra"}resetJoints(){this.skin.resetJoints(),this.cape.rotation.x=Fs,this.cape.position.y=8,this.cape.position.z=-2,this.elytra.position.y=8,this.elytra.position.z=-2,this.elytra.rotation.x=0,this.elytra.resetJoints()}};E();x();k();R();import{Color as Jp,PointLight as Zp,EquirectangularReflectionMapping as qp,Group as Xp,NearestFilter as $p,PerspectiveCamera as eg,Scene as tg,Texture as rg,Vector2 as ig,WebGLRenderer as ng,AmbientLight as sg,CanvasTexture as og,WebGLRenderTarget as ag,FloatType as vg,DepthTexture as lg,Clock as cg,Object3D as dg,ColorManagement as ug}from"three";import{OrbitControls as hg}from"three/examples/jsm/controls/OrbitControls.js";import{EffectComposer as pg}from"three/examples/jsm/postprocessing/EffectComposer.js";import"three/examples/jsm/postprocessing/Pass.js";import{RenderPass as _g}from"three/examples/jsm/postprocessing/RenderPass.js";import{ShaderPass as Ag}from"three/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as xg}from"three/examples/jsm/shaders/FXAAShader.js";E();x();k();R();var E1=class{constructor(){Object.defineProperty(this,"speed",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"paused",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"progress",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"currentId",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"progress0",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"animationObjects",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}update(e,t){if(this.paused)return;let r=t*this.speed;this.animate(e,r),this.animationObjects.forEach((i,s)=>{let o=this.progress0.get(s);i(e,this.progress-o,s)}),this.progress+=r}addAnimation(e){let t=this.currentId++;return this.progress0.set(t,this.progress),this.animationObjects.set(t,e),t}removeAnimation(e){e!=null&&(this.animationObjects.delete(e),this.progress0.delete(e))}};E();x();k();R();import{CanvasTexture as Hp,NearestFilter as Op,Sprite as Fp,SpriteMaterial as Dp}from"three";E();x();k();R();var _7=Object.defineProperty,w7=(n,e,t)=>e in n?_7(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,_0=(n,e,t)=>(w7(n,typeof e!="symbol"?e+"":e,t),t);function hi(n){let e=[n];if(n.extra&&n.extra.length!==0)for(let t of n.extra)e.push(...hi(t));return e}var q=class{constructor(n,e,t,r,i,s){this.key=n,this.value=e,this.name=t,this.code=r,this.cssForeground=i,this.cssBackground=s}applyToStyle(n){n[this.key]=this.value}matchStyle(n){return n[this.key]===this.value}static fromCode(n){let t="0123456789abcdefklmnor".indexOf(n);if(t)return this.list[t]}toString(){return`${q.CONTROL_STRING}${this.code}`}},w0=q;_0(w0,"CONTROL_STRING","\xA7");_0(w0,"BLACK",new q("color","black","BLACK","0",{color:"#000000"},{color:"#000000"}));_0(w0,"DARK_BLUE",new q("color","dark_blue","DARK_BLUE","1",{color:"#0000AA"},{color:"#00002A"}));_0(w0,"DARK_GREEN",new q("color","dark_green","DARK_GREEN","2",{color:"#00AA00"},{color:"#002A00"}));_0(w0,"DARK_AQUA",new q("color","dark_aqua","DARK_AQUA","3",{color:"#00AAAA"},{color:"#002A2A"}));_0(w0,"DARK_RED",new q("color","dark_red","DARK_RED","4",{color:"#AA0000"},{color:"#2A0000"}));_0(w0,"DARK_PURPLE",new q("color","dark_purple","DARK_PURPLE","5",{color:"#AA00AA"},{color:"#2A002A"}));_0(w0,"GOLD",new q("color","gold","GOLD","6",{color:"#FFAA00"},{color:"#2A2A00"}));_0(w0,"GRAY",new q("color","gray","GRAY","7",{color:"#AAAAAA"},{color:"#2A2A2A"}));_0(w0,"DARK_GRAY",new q("color","dark_gray","DARK_GRAY","8",{color:"#555555"},{color:"#151515"}));_0(w0,"BLUE",new q("color","blue","BLUE","9",{color:"#5555FF"},{color:"#15153F"}));_0(w0,"GREEN",new q("color","green","GREEN","a",{color:"#55FF55"},{color:"#153F15"}));_0(w0,"AQUA",new q("color","aqua","AQUA","b",{color:"#55FFFF"},{color:"#153F3F"}));_0(w0,"RED",new q("color","red","RED","c",{color:"#FF5555"},{color:"#3F1515"}));_0(w0,"LIGHT_PURPLE",new q("color","light_purple","LIGHT_PURPLE","d",{color:"#FF55FF"},{color:"#3F153F"}));_0(w0,"YELLOW",new q("color","yellow","YELLOW","e",{color:"#FFFF55"},{color:"#3F3F15"}));_0(w0,"WHITE",new q("color","white","WHITE","f",{color:"#FFFFFF"},{color:"#3F3F3F"}));_0(w0,"OBFUSCATED",new q("obfuscated",!0,"OBFUSCATED","k",{}));_0(w0,"BOLD",new q("bold",!0,"BOLD","l",{"font-weight":"bold"}));_0(w0,"STRIKETHROUGH",new q("strikethrough",!0,"STRIKETHROUGH","m",{"text-decoration":"line-through"}));_0(w0,"UNDERLINE",new q("underlined",!0,"UNDERLINE","n",{"text-decoration":"underline"}));_0(w0,"ITALIC",new q("italic",!0,"ITALIC","o",{"font-style":"italic"}));_0(w0,"RESET",{name:"RESET",code:"r",applyToStyle(n){n.bold=!1,n.strikethrough=!1,n.underlined=!1,n.italic=!1,n.obfuscated=!1,n.color=void 0},matchStyle(n){return!1},cssBackground:{},cssForeground:{},toString(){return`${q.CONTROL_STRING}r`}});_0(w0,"list",[q.BLACK,q.DARK_BLUE,q.DARK_GREEN,q.DARK_AQUA,q.DARK_RED,q.DARK_PURPLE,q.GOLD,q.GRAY,q.DARK_GRAY,q.BLUE,q.GREEN,q.AQUA,q.RED,q.LIGHT_PURPLE,q.YELLOW,q.WHITE,q.OBFUSCATED,q.BOLD,q.STRIKETHROUGH,q.UNDERLINE,q.ITALIC,q.RESET]);var F5=a5(mi(),1);yi();var R3=a5(vo(),1);import k3 from"prismarine-chat";E();x();k();R();import*as _i from"three";E();x();k();R();var Nt=n=>Math.max(0,Math.min(1,n)),lo=(n,e,t)=>Math.max(e,Math.min(t,n)),te=(n,e,t)=>n+(e-n)*t,o8=n=>(n=(n+Math.PI)%(Math.PI*2),n<0&&(n+=Math.PI*2),n-Math.PI);function a8(n){let e=n?.elytra;if(!e)return;if(typeof e.updateRightWing=="function"){e.updateRightWing();return}if(typeof e.updateRightWingRotation=="function"){e.updateRightWingRotation();return}let t=e.leftWing,r=e.rightWing;!t?.rotation||!r?.rotation||typeof r.rotation.copy=="function"&&(r.rotation.copy(t.rotation),r.rotation.z*=-1)}var I5=class extends E1{constructor(){super(...arguments);d(this,"switchAnimationCallback");d(this,"isRunning",!1);d(this,"isMoving",!0);d(this,"isCrouched",!1);d(this,"moveAmount",0);d(this,"runAmount",0);d(this,"lookYaw",0);d(this,"lookPitch",0);d(this,"_dt",0);d(this,"_phase",0);d(this,"_idlePhase",0);d(this,"_moveBlend",0);d(this,"_runBlend",0);d(this,"_crouchBlend",0);d(this,"_lookYawBlend",0);d(this,"_lookPitchBlend",0);d(this,"_swingTime",null);d(this,"_swingDuration",.25);d(this,"_defaults",null)}update(t,r){this._dt=r,super.update(t,r)}swingArm(){this._swingTime=0}resetLocomotion(){this._moveBlend=0,this._runBlend=0,this._crouchBlend=0,this._phase=0}_captureDefaults(t){let r=t?.skin;this._defaults={playerRot:t?.rotation?.clone?.(),bodyPos:r?.body?.position?.clone?.(),bodyRot:r?.body?.rotation?.clone?.(),leftArmPos:r?.leftArm?.position?.clone?.(),leftArmRot:r?.leftArm?.rotation?.clone?.(),rightArmPos:r?.rightArm?.position?.clone?.(),rightArmRot:r?.rightArm?.rotation?.clone?.(),leftLegPos:r?.leftLeg?.position?.clone?.(),leftLegRot:r?.leftLeg?.rotation?.clone?.(),rightLegPos:r?.rightLeg?.position?.clone?.(),rightLegRot:r?.rightLeg?.rotation?.clone?.(),headPos:r?.head?.position?.clone?.(),headRot:r?.head?.rotation?.clone?.(),capePos:t?.cape?.position?.clone?.(),capeRot:t?.cape?.rotation?.clone?.(),elytraPos:t?.elytra?.position?.clone?.(),elytraRot:t?.elytra?.rotation?.clone?.()}}_applyDefaults(t){let r=this._defaults;if(!r)return;let i=t?.skin,s=t?.cape,o=t?.elytra;r.playerRot&&t?.rotation&&t.rotation.copy(r.playerRot),r.bodyPos&&i?.body?.position&&i.body.position.copy(r.bodyPos),r.bodyRot&&i?.body?.rotation&&i.body.rotation.copy(r.bodyRot),r.leftArmPos&&i?.leftArm?.position&&i.leftArm.position.copy(r.leftArmPos),r.leftArmRot&&i?.leftArm?.rotation&&i.leftArm.rotation.copy(r.leftArmRot),r.rightArmPos&&i?.rightArm?.position&&i.rightArm.position.copy(r.rightArmPos),r.rightArmRot&&i?.rightArm?.rotation&&i.rightArm.rotation.copy(r.rightArmRot),r.leftLegPos&&i?.leftLeg?.position&&i.leftLeg.position.copy(r.leftLegPos),r.leftLegRot&&i?.leftLeg?.rotation&&i.leftLeg.rotation.copy(r.leftLegRot),r.rightLegPos&&i?.rightLeg?.position&&i.rightLeg.position.copy(r.rightLegPos),r.rightLegRot&&i?.rightLeg?.rotation&&i.rightLeg.rotation.copy(r.rightLegRot),r.headPos&&i?.head?.position&&i.head.position.copy(r.headPos),r.headRot&&i?.head?.rotation&&i.head.rotation.copy(r.headRot),r.capePos&&s?.position&&s.position.copy(r.capePos),r.capeRot&&s?.rotation&&s.rotation.copy(r.capeRot),r.elytraPos&&o?.position&&o.position.copy(r.elytraPos),r.elytraRot&&o?.rotation&&o.rotation.copy(r.elytraRot)}animate(t){let r=this._dt||0;this._defaults||this._captureDefaults(t),this._applyDefaults(t);let i=typeof this.moveAmount=="number"?this.moveAmount:this.isMoving?1:0,s=typeof this.runAmount=="number"?this.runAmount:this.isRunning?1:0,o=Nt(i),v=Nt(s),a=this.isCrouched?1:0,l=Math.min(1,r*8),c=Math.min(1,r*6),u=Math.min(1,r*7);this._moveBlend+=(o-this._moveBlend)*l,this._runBlend+=(v-this._runBlend)*c,this._crouchBlend+=(a-this._crouchBlend)*u;let f=Nt(this._moveBlend),p=Nt(this._runBlend),g=Nt(this._crouchBlend),y=te(8,10,p),A=te(1,.55,g),b=y*A;this._phase+=r*b*f,this._phase+=r*b*f,this._idlePhase+=r*1.15;let _=this._phase+(p>.5?Math.PI*.5:0);if(this.switchAnimationCallback&&Math.abs(Math.sin(_))<.02){let O=this.switchAnimationCallback;this.switchAnimationCallback=null,O?.()}l8(t,g);let S=80*Math.PI/180,C=75*Math.PI/180,M=lo(o8(this.lookYaw||0),-S,S),P=lo(this.lookPitch||0,-C,C),B=Math.min(1,r*14);this._lookYawBlend+=(M-this._lookYawBlend)*B,this._lookPitchBlend+=(P-this._lookPitchBlend)*B,t?.skin?.head?.rotation&&(t.skin.head.rotation.y+=this._lookYawBlend,t.skin.head.rotation.x+=this._lookPitchBlend);let H=(1-f)*(1-.25*p);if(H>1e-4&&t?.skin){let G=Math.sin(this._idlePhase);t.skin.body.rotation.x+=G*.02*H,t.skin.head.rotation.x+=-G*.015*H,t.skin.leftArm.rotation.x+=G*.03*H,t.skin.rightArm.rotation.x+=-G*.03*H,t?.cape?.rotation&&(t.cape.rotation.x+=Math.sin(this._idlePhase*.7)*.03*H)}if(f>1e-4&&t?.skin){let G=te(1,.85,g),O=te(1,.7,g),j=Math.sin(_)*.5,J=Math.sin(_+Math.PI)*.5,Z=Math.cos(_+Math.PI)*1.3,X=Math.cos(_)*1.3;t.skin.leftLeg.rotation.x+=te(j,Z,p)*f*G,t.skin.rightLeg.rotation.x+=te(J,X,p)*f*G;let d0=Math.sin(_+Math.PI)*.5,a0=Math.sin(_)*.5,v0=Math.cos(_)*1.5,g0=Math.cos(_+Math.PI)*1.5;t.skin.leftArm.rotation.x+=te(d0,v0,p)*f*O,t.skin.rightArm.rotation.x+=te(a0,g0,p)*f*O;let E0=Math.PI*.02,n0=Math.PI*.1,Y=te(E0,n0,p),o0=Math.cos(_)*.03+E0,b0=Math.cos(_+Math.PI)*.03-E0,G0=Math.cos(_)*.1+n0,O0=Math.cos(_+Math.PI)*.1-n0;t.skin.leftArm.rotation.z+=(te(o0,G0,p)*f+Y*.15*f)*O,t.skin.rightArm.rotation.z+=(te(b0,O0,p)*f-Y*.15*f)*O,this._defaults?.playerRot&&(t.rotation.z=this._defaults.playerRot.z+Math.cos(_+Math.PI)*.01*p*f);let q0=te(Math.PI*.06,Math.PI*.3,p),h0=te(Math.sin(_/1.5)*.06,Math.sin(_*2)*.1,p);t?.cape?.rotation&&(t.cape.rotation.x+=(q0+h0)*f)}if(this._swingTime!==null){this._swingTime+=r;let G=Math.min(this._swingTime/this._swingDuration,1);v8.animate(G,t,f>.2),G>=1&&(this._swingTime=null)}}},v8={animate(n,e,t){if(!e?.skin?.rightArm?.rotation)return;let r=n*18;if(e.skin.rightArm.rotation.x=-.4537860552*2+2*Math.sin(r+Math.PI)*.3,!t){let i=.01*Math.PI+.06;e.skin.rightArm.rotation.z=-Math.cos(r)*.403+i,e.skin.body.rotation.y=-Math.cos(r)*.06,e.skin.leftArm.rotation.x=Math.sin(r+Math.PI)*.077,e.skin.leftArm.rotation.z=-Math.cos(r)*.015+.13-.05,e.skin.leftArm.position.z=Math.cos(r)*.3,e.skin.leftArm.position.x=5-Math.cos(r)*.05}}};function l8(n,e){let t=n?.skin,r=n?.cape,i=n?.elytra;if(!t||!r)return;let s=Nt(e),o=Math.abs(Math.sin(s*Math.PI/2));if(o<=1e-6)return;t.body.rotation.x+=.4537860552*o,t.body.position.z+=(1.3256181-3.4500310377)*o,t.body.position.y+=-2.103677462*o,r.position.y+=-1.851236166577372*o,r.rotation.x+=.294220265771*o,r.position.z+=(3.786619432-3.4500310377)*o,i?.position&&i.position.copy(r.position),i?.rotation&&i.rotation.copy(r.rotation),i?.rotation&&(i.rotation.x-=10.8*Math.PI/180),i?.leftWing?.rotation&&(i.leftWing.rotation.z=te(.72,.26179944+.4582006,o)),a8(n),t.head.position.y+=-3.618325234674*o;let v=.1*o,a=(3.618325234674-3.4500310377)*o,l=-2.53943318*o;t.leftArm.position.z+=a,t.rightArm.position.z+=a,t.leftArm.rotation.x+=.410367746202*o,t.rightArm.rotation.x+=.410367746202*o,t.leftArm.rotation.z+=v,t.rightArm.rotation.z+=-v,t.leftArm.position.y+=l,t.rightArm.position.y+=l,t.rightLeg.position.z+=-3.4500310377*o,t.leftLeg.position.z+=-3.4500310377*o}function wi(n){let e=n.skin,t=[e.layer1Material,e.layer1MaterialBiased,e.layer2Material,e.layer2MaterialBiased];for(let r of t)r.transparent=!0,r.alphaTest=.1,r.depthWrite=!0}E();x();k();R();import*as s0 from"three";function c8(n,e){if(typeof document<"u"){let t=document.createElement("canvas");return t.width=n,t.height=e,t}return new OffscreenCanvas(n,e)}function d8(n,e){let{depth:t,pixelSize:r}=e;if(n.width<=0||n.height<=0)throw new Error(`Invalid canvas dimensions: ${n.width}x${n.height}`);let s=n.getContext("2d").getImageData(0,0,n.width,n.height),{data:o}=s,v=n.width,a=n.height,l=t/2,c=r??1/Math.max(v,a),u=(B,H)=>{if(B<0||H<0||B>=v||H>=a)return!1;let G=(H*v+B)*4;return o[G+3]>128},f=[],p=[],g=[],y=[],A=0,b=(B,H,G,O,j,J,Z,X)=>(f.push(B,H,G),g.push(O,j),y.push(J,Z,X),A++),_=(B,H,G,O)=>{p.push(B,H,G,B,G,O)},S=(B,H)=>{let G=(B/v-.5)*c*v,O=-(H/a-.5)*c*a;return{x:G,y:O}},C=Array.from({length:a+1},()=>Array.from({length:v+1},()=>null)),M=Array.from({length:a+1},()=>Array.from({length:v+1},()=>null));for(let B=0;B<=a;B++)for(let H=0;H<=v;H++){let{x:G,y:O}=S(H-.5,B-.5),j=H/v,J=B/a,Z=!1,X=[[H-1,B-1],[H,B-1],[H-1,B],[H,B]];for(let[d0,a0]of X)if(u(d0,a0)){Z=!0;break}Z&&(C[B][H]=b(G,O,l,j,J,0,0,1),M[B][H]=b(G,O,-l,j,J,0,0,-1))}for(let B=0;B<a;B++)for(let H=0;H<v;H++){if(!u(H,B))continue;let G=C[B][H],O=C[B][H+1],j=C[B+1][H+1],J=C[B+1][H],Z=M[B][H],X=M[B][H+1],d0=M[B+1][H+1],a0=M[B+1][H];G!==null&&O!==null&&j!==null&&J!==null&&_(G,O,j,J),Z!==null&&X!==null&&d0!==null&&a0!==null&&_(X,Z,a0,d0)}for(let B=0;B<a;B++)for(let H=0;H<v;H++){if(!u(H,B))continue;let G=(H+.5)/v,O=(B+.5)/a;if(!u(H-1,B)){let j=C[B][H],J=C[B+1][H],Z=M[B][H],X=M[B+1][H];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,-1,0,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,-1,0,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,-1,0,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,-1,0,0);_(d0,a0,v0,g0)}}if(!u(H+1,B)){let j=C[B+1][H+1],J=C[B][H+1],Z=M[B+1][H+1],X=M[B][H+1];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,1,0,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,1,0,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,1,0,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,1,0,0);_(d0,a0,v0,g0)}}if(!u(H,B-1)){let j=C[B][H],J=C[B][H+1],Z=M[B][H],X=M[B][H+1];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,0,-1,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,0,-1,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,0,-1,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,0,-1,0);_(d0,a0,v0,g0)}}if(!u(H,B+1)){let j=C[B+1][H+1],J=C[B+1][H],Z=M[B+1][H+1],X=M[B+1][H];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,0,1,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,0,1,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,0,1,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,0,1,0);_(d0,a0,v0,g0)}}}let P=new s0.BufferGeometry;return P.setAttribute("position",new s0.Float32BufferAttribute(f,3)),P.setAttribute("uv",new s0.Float32BufferAttribute(g,2)),P.setAttribute("normal",new s0.Float32BufferAttribute(y,3)),P.setIndex(p),P.computeVertexNormals(),{geometry:P,totalVertices:A,totalTriangles:p.length/3}}function u8(n,e){let{u:t,v:r,sizeX:i,sizeY:s}=e,o=Math.max(1,Math.floor(i*n.image.width)),v=Math.max(1,Math.floor(s*n.image.height)),a=c8(o,v),l=a.getContext("2d");if(!l)throw new Error("Failed to get 2d context for item texture canvas");return l.imageSmoothingEnabled=!1,l.drawImage(n.image,t*n.image.width,r*n.image.height,i*n.image.width,s*n.image.height,0,0,a.width,a.height),a}function co(n,e,t={}){let{faceCamera:r=!1,use3D:i=!0,depth:s=.04}=t,{u:o,v,sizeX:a,sizeY:l}=e;if(r){let y=n.clone();y.flipY=!0,y.offset.set(o,1-v-l),y.repeat.set(a,l),y.needsUpdate=!0,y.magFilter=s0.NearestFilter,y.minFilter=s0.NearestFilter;let A=new s0.SpriteMaterial({map:y,transparent:!0,alphaTest:.1});return{mesh:new s0.Sprite(A),itemsTexture:y,cleanup(){y.dispose()}}}if(i)try{let y=u8(n,e),{geometry:A}=d8(y,{depth:s}),b=new s0.CanvasTexture(y);b.magFilter=s0.NearestFilter,b.minFilter=s0.NearestFilter,b.wrapS=b.wrapT=s0.ClampToEdgeWrapping,b.flipY=!1,b.needsUpdate=!0;let _=new s0.MeshStandardMaterial({map:b,side:s0.DoubleSide,transparent:!0,alphaTest:.1});return{mesh:new s0.Mesh(A,_),itemsTexture:b,cleanup(){b.dispose(),A.dispose(),_.map&&_.map.dispose(),_.dispose()}}}catch{}let c=n.clone();c.flipY=!0,c.offset.set(o,1-v-l),c.repeat.set(a,l),c.needsUpdate=!0,c.magFilter=s0.NearestFilter,c.minFilter=s0.NearestFilter;let u=c.clone();u.repeat.x*=-1,u.needsUpdate=!0,u.offset.set(o+a,1-v-l);let f=new s0.MeshStandardMaterial({map:c,transparent:!0,alphaTest:.1}),p=new s0.MeshStandardMaterial({map:u,transparent:!0,alphaTest:.1});return{mesh:new s0.Mesh(new s0.BoxGeometry(1,1,0),[new s0.MeshBasicMaterial({color:0}),new s0.MeshBasicMaterial({color:0}),new s0.MeshBasicMaterial({color:0}),new s0.MeshBasicMaterial({color:0}),f,p]),itemsTexture:c,itemsTextureFlipped:u,cleanup(){c.dispose(),u.dispose(),f.dispose(),p.dispose()}}}E();x();k();R();import*as t0 from"three";E();x();k();R();E();x();k();R();import{REVISION as f8}from"three";var uo=parseInt(f8.replace(/\D+/g,""));E();x();k();R();import{Loader as h8,FileLoader as m8,Group as p8,BufferGeometry as fo,Float32BufferAttribute as Wt,LineBasicMaterial as Ai,Material as ho,PointsMaterial as C1,MeshPhongMaterial as g8,LineSegments as mo,Points as Ei,Mesh as po,Vector3 as H5}from"three";var b8=/^[og]\s*(.+)?/,y8=/^mtllib /,_8=/^usemtl /,w8=/^usemap /,go=new H5,xi=new H5,bo=new H5,yo=new H5,le=new H5;function A8(){let n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}let r=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(i,s){let o=this._finalize(!1);o&&(o.inherited||o.groupCount<=0)&&this.materials.splice(o.index,1);let v={index:this.materials.length,name:i||"",mtllib:Array.isArray(s)&&s.length>0?s[s.length-1]:"",smooth:o!==void 0?o.smooth:this.smooth,groupStart:o!==void 0?o.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(a){let l={index:typeof a=="number"?a:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return l.clone=this.clone.bind(l),l}};return this.materials.push(v),v},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(i){let s=this.currentMaterial();if(s&&s.groupEnd===-1&&(s.groupEnd=this.geometry.vertices.length/3,s.groupCount=s.groupEnd-s.groupStart,s.inherited=!1),i&&this.materials.length>1)for(let o=this.materials.length-1;o>=0;o--)this.materials[o].groupCount<=0&&this.materials.splice(o,1);return i&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),s}},r&&r.name&&typeof r.clone=="function"){let i=r.clone(0);i.inherited=!0,this.object.materials.push(i)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){let r=parseInt(e,10);return(r>=0?r-1:r+t/3)*3},parseNormalIndex:function(e,t){let r=parseInt(e,10);return(r>=0?r-1:r+t/3)*3},parseUVIndex:function(e,t){let r=parseInt(e,10);return(r>=0?r-1:r+t/2)*2},addVertex:function(e,t,r){let i=this.vertices,s=this.object.geometry.vertices;s.push(i[e+0],i[e+1],i[e+2]),s.push(i[t+0],i[t+1],i[t+2]),s.push(i[r+0],i[r+1],i[r+2])},addVertexPoint:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,r){let i=this.normals,s=this.object.geometry.normals;s.push(i[e+0],i[e+1],i[e+2]),s.push(i[t+0],i[t+1],i[t+2]),s.push(i[r+0],i[r+1],i[r+2])},addFaceNormal:function(e,t,r){let i=this.vertices,s=this.object.geometry.normals;go.fromArray(i,e),xi.fromArray(i,t),bo.fromArray(i,r),le.subVectors(bo,xi),yo.subVectors(go,xi),le.cross(yo),le.normalize(),s.push(le.x,le.y,le.z),s.push(le.x,le.y,le.z),s.push(le.x,le.y,le.z)},addColor:function(e,t,r){let i=this.colors,s=this.object.geometry.colors;i[e]!==void 0&&s.push(i[e+0],i[e+1],i[e+2]),i[t]!==void 0&&s.push(i[t+0],i[t+1],i[t+2]),i[r]!==void 0&&s.push(i[r+0],i[r+1],i[r+2])},addUV:function(e,t,r){let i=this.uvs,s=this.object.geometry.uvs;s.push(i[e+0],i[e+1]),s.push(i[t+0],i[t+1]),s.push(i[r+0],i[r+1])},addDefaultUV:function(){let e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){let t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,r,i,s,o,v,a,l){let c=this.vertices.length,u=this.parseVertexIndex(e,c),f=this.parseVertexIndex(t,c),p=this.parseVertexIndex(r,c);if(this.addVertex(u,f,p),this.addColor(u,f,p),v!==void 0&&v!==""){let g=this.normals.length;u=this.parseNormalIndex(v,g),f=this.parseNormalIndex(a,g),p=this.parseNormalIndex(l,g),this.addNormal(u,f,p)}else this.addFaceNormal(u,f,p);if(i!==void 0&&i!==""){let g=this.uvs.length;u=this.parseUVIndex(i,g),f=this.parseUVIndex(s,g),p=this.parseUVIndex(o,g),this.addUV(u,f,p),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";let t=this.vertices.length;for(let r=0,i=e.length;r<i;r++){let s=this.parseVertexIndex(e[r],t);this.addVertexPoint(s),this.addColor(s)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";let r=this.vertices.length,i=this.uvs.length;for(let s=0,o=e.length;s<o;s++)this.addVertexLine(this.parseVertexIndex(e[s],r));for(let s=0,o=t.length;s<o;s++)this.addUVLine(this.parseUVIndex(t[s],i))}};return n.startObject("",!1),n}var Vt=class extends h8{constructor(e){super(e),this.materials=null}load(e,t,r,i){let s=this,o=new m8(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(v){try{t(s.parse(v))}catch(a){i&&i(a),s.manager.itemError(e)}},r,i)}setMaterials(e){return this.materials=e,this}parse(e){let t=new A8;e.indexOf(`\r
719
+ }`;function h7(n){let e=document.createElement("style");e.innerHTML=n;let t=document.querySelector("head link[rel=stylesheet], head style");t?document.head.insertBefore(e,t):document.head.appendChild(e)}var Ps=!1,ni=class n{constructor({parent:e,autoPlace:t=e===void 0,container:r,width:i,title:s="Controls",closeFolders:o=!1,injectStyles:v=!0,touchStyles:a=!0}={}){if(this.parent=e,this.root=e?e.root:this,this.children=[],this.controllers=[],this.folders=[],this._closed=!1,this._hidden=!1,this.domElement=document.createElement("div"),this.domElement.classList.add("lil-gui"),this.$title=document.createElement("div"),this.$title.classList.add("title"),this.$title.setAttribute("role","button"),this.$title.setAttribute("aria-expanded",!0),this.$title.setAttribute("tabindex",0),this.$title.addEventListener("click",()=>this.openAnimated(this._closed)),this.$title.addEventListener("keydown",l=>{(l.code==="Enter"||l.code==="Space")&&(l.preventDefault(),this.$title.click())}),this.$title.addEventListener("touchstart",()=>{},{passive:!0}),this.$children=document.createElement("div"),this.$children.classList.add("children"),this.domElement.appendChild(this.$title),this.domElement.appendChild(this.$children),this.title(s),this.parent){this.parent.children.push(this),this.parent.folders.push(this),this.parent.$children.appendChild(this.domElement);return}this.domElement.classList.add("root"),a&&this.domElement.classList.add("allow-touch-styles"),!Ps&&v&&(h7(f7),Ps=!0),r?r.appendChild(this.domElement):t&&(this.domElement.classList.add("autoPlace"),document.body.appendChild(this.domElement)),i&&this.domElement.style.setProperty("--width",i+"px"),this._closeFolders=o}add(e,t,r,i,s){if(Object(r)===r)return new ri(this,e,t,r);switch(typeof e[t]){case"number":return new ti(this,e,t,r,i,s);case"boolean":return new Xr(this,e,t);case"string":return new ii(this,e,t);case"function":return new R5(this,e,t)}}addColor(e,t,r=1){return new ei(this,e,t,r)}addFolder(e){let t=new n({parent:this,title:e});return this.root._closeFolders&&t.close(),t}load(e,t=!0){return e.controllers&&this.controllers.forEach(r=>{r instanceof R5||r._name in e.controllers&&r.load(e.controllers[r._name])}),t&&e.folders&&this.folders.forEach(r=>{r._title in e.folders&&r.load(e.folders[r._title])}),this}save(e=!0){let t={controllers:{},folders:{}};return this.controllers.forEach(r=>{if(!(r instanceof R5)){if(r._name in t.controllers)throw new Error(`Cannot save GUI with duplicate property "${r._name}"`);t.controllers[r._name]=r.save()}}),e&&this.folders.forEach(r=>{if(r._title in t.folders)throw new Error(`Cannot save GUI with duplicate folder "${r._title}"`);t.folders[r._title]=r.save()}),t}open(e=!0){return this._setClosed(!e),this.$title.setAttribute("aria-expanded",!this._closed),this.domElement.classList.toggle("closed",this._closed),this}close(){return this.open(!1)}_setClosed(e){this._closed!==e&&(this._closed=e,this._callOnOpenClose(this))}show(e=!0){return this._hidden=!e,this.domElement.style.display=this._hidden?"none":"",this}hide(){return this.show(!1)}openAnimated(e=!0){return this._setClosed(!e),this.$title.setAttribute("aria-expanded",!this._closed),requestAnimationFrame(()=>{let t=this.$children.clientHeight;this.$children.style.height=t+"px",this.domElement.classList.add("transition");let r=s=>{s.target===this.$children&&(this.$children.style.height="",this.domElement.classList.remove("transition"),this.$children.removeEventListener("transitionend",r))};this.$children.addEventListener("transitionend",r);let i=e?this.$children.scrollHeight:0;this.domElement.classList.toggle("closed",!e),requestAnimationFrame(()=>{this.$children.style.height=i+"px"})}),this}title(e){return this._title=e,this.$title.innerHTML=e,this}reset(e=!0){return(e?this.controllersRecursive():this.controllers).forEach(r=>r.reset()),this}onChange(e){return this._onChange=e,this}_callOnChange(e){this.parent&&this.parent._callOnChange(e),this._onChange!==void 0&&this._onChange.call(this,{object:e.object,property:e.property,value:e.getValue(),controller:e})}onFinishChange(e){return this._onFinishChange=e,this}_callOnFinishChange(e){this.parent&&this.parent._callOnFinishChange(e),this._onFinishChange!==void 0&&this._onFinishChange.call(this,{object:e.object,property:e.property,value:e.getValue(),controller:e})}onOpenClose(e){return this._onOpenClose=e,this}_callOnOpenClose(e){this.parent&&this.parent._callOnOpenClose(e),this._onOpenClose!==void 0&&this._onOpenClose.call(this,e)}destroy(){this.parent&&(this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.folders.splice(this.parent.folders.indexOf(this),1)),this.domElement.parentElement&&this.domElement.parentElement.removeChild(this.domElement),Array.from(this.children).forEach(e=>e.destroy())}controllersRecursive(){let e=Array.from(this.controllers);return this.folders.forEach(t=>{e=e.concat(t.controllersRecursive())}),e}foldersRecursive(){let e=Array.from(this.folders);return this.folders.forEach(t=>{e=e.concat(t.foldersRecursive())}),e}},si=ni;var ke=class{constructor(e,t,r,i){d(this,"gui",null);d(this,"storageKey","");d(this,"target");d(this,"params",[]);d(this,"paramsMeta",{});d(this,"_visible",!1);d(this,"initialValues",{});d(this,"initialized",!1);if(!l0){this.gui=new si,this.storageKey=`debug_params_${e}`,this.target=t,this.paramsMeta=i??{},this.params=r??Object.keys(t);for(let s of this.params)this.initialValues[s]=t[s];this.gui.domElement.style.display="none"}}activate(){return l0?this:(!this.initialized&&this.gui&&(this.loadSavedValues(),this.setupControls(),this.initialized=!0),this.show(),this)}get visible(){return l0?!1:this._visible}set visible(e){l0||!this.gui||(this._visible=e,this.gui.domElement.style.display=e?"block":"none",this.saveVisibility())}loadSavedValues(){if(!l0)try{let e=localStorage.getItem(this.storageKey);if(e){let t=JSON.parse(e);for(let r of this.params)if(r in t){let i=t[r];i!==null&&(this.target[r]=i)}}}catch{}}saveValues(e=!1){if(!l0)try{let t={};for(let r of this.params)t[r]=this.target[r];e?localStorage.removeItem(this.storageKey):localStorage.setItem(this.storageKey,JSON.stringify(t))}catch{}}saveVisibility(){if(!l0)try{localStorage.setItem(`${this.storageKey}_visible`,this._visible.toString())}catch{}}setupControls(){if(!(l0||!this.gui)){this.gui.add(this,"visible").name("Show Controls"),this.gui.add({resetAll:()=>{if(this.gui){for(let e of this.params)this.target[e]=this.initialValues[e];this.saveValues(!0),this.gui.destroy(),this.gui=new si,this.setupControls()}}},"resetAll").name("Reset All Parameters");for(let e of this.params){let t=this.target[e],r=this.paramsMeta[e]??{};if(typeof t=="number"){let i=r.min??t-Math.abs(t*2),s=r.max??t+Math.abs(t*2),o=r.step??Math.abs(t)/100;this.gui.add(this.target,e,i,s,o).onChange(()=>this.saveValues())}else if(typeof t=="boolean")this.gui.add(this.target,e).onChange(()=>this.saveValues());else if(typeof t=="string"&&["x","y","z"].includes(e)){let i=r.min??-10,s=r.max??10,o=r.step??.1;this.gui.add(this.target,e,i,s,o).onChange(()=>this.saveValues())}else Array.isArray(t)&&this.gui.add(this.target,e,t).onChange(()=>this.saveValues())}}}save(){l0||(this.saveValues(),this.saveVisibility())}destroy(){l0||!this.gui||(this.saveVisibility(),this.gui.destroy())}toggle(){this.visible=!this.visible}show(){this.visible=!0}hide(){this.visible=!1}};E();x();k();R();E();x();k();R();var b1=class{constructor(){d(this,"currentAnimation",null);d(this,"isAnimating",!1);d(this,"cancelRequested",!1);d(this,"completionCallbacks",[]);d(this,"currentCancelCallback",null)}async startAnimation(e,t){return this.isAnimating&&await this.cancelCurrentAnimation(),new Promise(r=>{this.isAnimating=!0,this.cancelRequested=!1,this.currentCancelCallback=t??null,this.currentAnimation=e(),this.completionCallbacks.push(()=>{this.isAnimating=!1,this.currentAnimation=null,r()})})}async cancelCurrentAnimation(){if(this.isAnimating){if(this.currentCancelCallback){let e=this.currentCancelCallback;this.currentCancelCallback=null,e()}return new Promise(e=>{this.cancelRequested=!0,this.completionCallbacks.push(()=>{e()})})}}animationCycleFinish(){this.cancelRequested&&this.forceFinish()}forceFinish(e=!0){if(!this.isAnimating)return;if(this.currentAnimation){for(let r of this.currentAnimation.getAll())r.stop();this.currentAnimation.removeAll(),this.currentAnimation=null}this.isAnimating=!1,this.cancelRequested=!1;let t=[...this.completionCallbacks];if(this.completionCallbacks=[],e)for(let r of t)r()}update(){this.currentAnimation&&this.currentAnimation.update()}get isActive(){return this.isAnimating}get shouldCancel(){return this.cancelRequested}};var m7={x:3e3,y:3e3,z:3e3,rotation:Math.PI,scale:1,default:3e3},lt=class{constructor(e,t,r){this.getState=e;this.setState=t;d(this,"animationController",new b1);d(this,"defaultState");d(this,"speeds");d(this,"currentStateName","");d(this,"transitioningToStateName","");this.speeds={...m7},r&&Object.assign(this.speeds,r),this.defaultState=this.getState()}calculateDuration(e){let t=0,r=this.getState();for(let[i,s]of Object.entries(e)){let o=r[i],v=Math.abs(s-o),a=this.getPropertySpeed(i),l=v/a*1e3;t=Math.max(t,l)}return Math.min(Math.max(t,200),2e3)}getPropertySpeed(e){return e in this.speeds?this.speeds[e]:e.toLowerCase().includes("rotation")?this.speeds.rotation:e.toLowerCase().includes("scale")?this.speeds.scale:e.toLowerCase()==="x"||e.toLowerCase()==="y"||e.toLowerCase()==="z"?this.speeds[e]:this.speeds.default}startTransition(e,t,r,i=H0.Linear.None,s){this.isTransitioning&&this.animationController.forceFinish(!1),this.transitioningToStateName=t??"";let o=this.getState(),v=this.calculateDuration(e);this.animationController.startAnimation(()=>{let a=new Mt;return new F0(o,a).to(e,v).easing(i).onUpdate(l=>{for(let c of Object.keys(l))this.setState(c,l[c])}).onComplete(()=>{this.animationController.forceFinish(),this.currentStateName=this.transitioningToStateName,this.transitioningToStateName="",r?.()}).start(),a},s)}reset(){this.startTransition(this.defaultState)}update(){this.animationController.update()}forceFinish(){this.animationController.forceFinish()}transitionTo(e,t,r,i){this.startTransition(e,t,r,H0.Linear.None,i)}getCurrentValue(e){return this.getState()[e]}get isTransitioning(){return this.animationController.isActive}};E();x();k();R();import{subscribeKey as p7}from"valtio/utils";function y1(n,e,t,r,i){let s=0,o,v=async()=>{let a=++s,l=await n(e[t]);a===s?(o&&i?.(o),r(l),o=l):i?.(l)};return v(),p7(e,t,v)}E();x();k();R();var Is=Math.PI/180;function _1(n){let{walkDist:e,prevWalkDist:t,bob:r,prevBob:i,partialTick:s}=n,o=e-t,v=-(e+o*s),a=i+(r-i)*s,l=Math.sin(v*Math.PI),c=Math.cos(v*Math.PI);return{position:{x:l*a*.5,y:-Math.abs(c*a)},rotation:{x:Math.abs(Math.cos(v*Math.PI-.2)*a)*5*Is,z:l*a*3*Is}}}E();x();k();R();var w1=n=>({"minecraft:display_context":"firstperson","minecraft:use_duration":n.playerStateReactive.itemUsageTicks,"minecraft:using_item":!!n.playerStateReactive.itemUsageTicks}),g7=()=>({"minecraft:display_context":"firstperson"}),Ot=(n,e)=>{if(!e)return"empty";if(e.type==="hand")return"hand";let t=e.name??(e.id!==void 0?`#${e.id}`:"unknown");if(!n.resourcesManager.currentResources)return`${e.type}:${t}`;let r=n.getItemRenderData({...e.fullItem,itemId:e.id},g7());return`${e.type}:${t}:${r.modelName}`};var j0=new C0.Matrix4,Hs=n=>(n=(n+Math.PI)%(Math.PI*2),n<0&&(n+=Math.PI*2),n-Math.PI);function b7(n,e){let t=new C0.Matrix4,r=1,i=Math.sqrt(n),s=-.3*Math.sin(i*Math.PI),o=.4*Math.sin(i*2*Math.PI),v=-.4*Math.sin(n*Math.PI);return t.multiply(j0.makeTranslation(r*(s+.64),o-.6+e*-.6,v-.72)),t.multiply(j0.makeRotationY(r*45*Math.PI/180)),t.multiply(j0.makeRotationY(r*Math.sin(i*Math.PI)*70*Math.PI/180)),t.multiply(j0.makeRotationZ(r*Math.sin(n*n*Math.PI)*-20*Math.PI/180)),t.multiply(j0.makeTranslation(r*-1,3.6,3.5)),t.multiply(j0.makeRotationZ(r*120*Math.PI/180)),t.multiply(j0.makeRotationX(200*Math.PI/180)),t.multiply(j0.makeRotationY(r*-135*Math.PI/180)),t.multiply(j0.makeTranslation(r*5.6,0,0)),t.multiply(j0.makeTranslation(r*-5/16,2/16,0)),t}function y7(n,e){let t=new C0.Matrix4,r=1,i=Math.sqrt(n),s=-.4*Math.sin(i*Math.PI),o=.2*Math.sin(i*2*Math.PI),v=-.2*Math.sin(n*Math.PI);t.multiply(j0.makeTranslation(r*s,o,v)),t.multiply(j0.makeTranslation(r*.56,-.52+e*-.6,-.72));let a=Math.sin(n*n*Math.PI),l=Math.sin(i*Math.PI);return t.multiply(j0.makeRotationY(r*(45+a*-20)*Math.PI/180)),t.multiply(j0.makeRotationZ(r*l*-20*Math.PI/180)),t.multiply(j0.makeRotationX(l*-80*Math.PI/180)),t.multiply(j0.makeRotationY(r*-45*Math.PI/180)),t}var T5=class{constructor(e,t=!1){this.worldRenderer=e;this.offHand=t;d(this,"holdingBlock");d(this,"blockSwapAnimation");d(this,"cameraGroup",new C0.Mesh);d(this,"armTransformGroup",new C0.Group);d(this,"camera",new C0.PerspectiveCamera(70,1,.05,100));d(this,"equipProgress",0);d(this,"stopUpdate",!1);d(this,"lastHeldItem");d(this,"lastHeldItemRenderKey");d(this,"currentDisplayType","hand");d(this,"isSwinging",!1);d(this,"nextIterStopCallbacks");d(this,"idleAnimator");d(this,"ready",!1);d(this,"lastUpdate",0);d(this,"xBob",0);d(this,"yBob",0);d(this,"lastBobUpdateTime",0);d(this,"lastBobWalkDist",0);d(this,"lastBobTickTime",0);d(this,"playerHand");d(this,"offHandDisplay",!1);d(this,"offHandModeLegacy",!1);d(this,"swingAnimator");d(this,"config");d(this,"disposed",!1);d(this,"unsubs",[]);d(this,"lastItemModelName");d(this,"switchRequest",0);this.initCameraGroup(),this.swingAnimator=new oi,this.unsubs.push(this.worldRenderer.onReactivePlayerStateUpdated("heldItemMain",()=>{this.offHand||this.updateItem()},!1),this.worldRenderer.onReactivePlayerStateUpdated("heldItemOff",()=>{this.offHand&&this.updateItem()},!1)),this.config=e.displayOptions.inWorldRenderingConfig,this.offHandDisplay=this.offHand,this.offHand||x5().then(r=>{this.disposed||(this.playerHand=r,this.updateItem())}).then(()=>{if(this.disposed)return;let r=y1(async()=>x5(this.worldRenderer.playerStateReactive.playerSkin,this.worldRenderer.playerStateReactive.onlineMode?this.worldRenderer.playerStateReactive.username:void 0),this.worldRenderer.playerStateReactive,"playerSkin",i=>{i&&(this.playerHand=i,this.updateItem())},i=>{k0(i,!0)});this.unsubs.push(r)})}dispose(){this.disposed=!0,this.unsubs.forEach(e=>e()),this.unsubs=[],this.idleAnimator?.destroy(),this.idleAnimator=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.blockSwapAnimation?.switcher.forceFinish(),this.blockSwapAnimation=void 0,k0(this.cameraGroup,!0),this.holdingBlock&&this.holdingBlock!==this.playerHand&&k0(this.holdingBlock,!0),this.holdingBlock=void 0,this.playerHand&&(k0(this.playerHand,!0),this.playerHand=void 0),this.ready=!1}updateItem(){if(!this.ready)return;let e=this.offHand?this.worldRenderer.playerStateReactive.heldItemOff:this.worldRenderer.playerStateReactive.heldItemMain;e?this.setNewItem(e):this.offHand?this.setNewItem():this.setNewItem({type:"hand"})}initCameraGroup(){this.cameraGroup=new C0.Mesh,this.armTransformGroup=new C0.Group,this.armTransformGroup.matrixAutoUpdate=!1,this.cameraGroup.add(this.armTransformGroup)}startSwing(){this.swingAnimator?.startSwing()}stopSwing(){this.swingAnimator?.stopSwing()}render(e,t,r,i){if(!this.lastHeldItem)return;let s=performance.now();this.lastUpdate&&s-this.lastUpdate>50&&this.replaceItemModel(this.lastHeldItem),(this.swingAnimator?.isCurrentlySwinging()||this.swingAnimator?.debugParams.animationStage)&&this.swingAnimator?.update(),this.blockSwapAnimation?.switcher.update();let o=new C0.Scene;o.add(this.cameraGroup);let v=t.getSize(new C0.Vector2),a=v.height>v.width;a?this.camera.aspect!==1&&(this.camera.aspect=1,this.camera.updateProjectionMatrix()):this.camera.aspect!==e.aspect&&(this.camera.aspect=e.aspect,this.camera.updateProjectionMatrix()),this.updateCameraGroup(),o.add(r.clone()),o.add(i.clone());let{offHandDisplay:l}=this;if(l&&(this.cameraGroup.scale.x=-1),t.autoClear=!1,t.clearDepth(),a){let c=Math.min(v.width,v.height);l?t.setViewport(0,0,c,c):t.setViewport(v.width-c,0,c,c)}t.render(o,this.camera),a&&t.setViewport(0,0,v.width,v.height),l&&(this.cameraGroup.scale.x=1)}async playBlockSwapAnimation(e){this.blockSwapAnimation??(this.blockSwapAnimation={switcher:new lt(()=>({progress:this.equipProgress}),(i,s)=>{i==="progress"&&(this.equipProgress=s)},{progress:4})});let t=e==="disappeared"?1:0,r=!1;return new Promise(i=>{this.blockSwapAnimation.switcher.transitionTo({progress:t},e,()=>{r||i(!0)},()=>{r=!0,i(!1)})})}isDifferentItem(e){return this.lastHeldItemRenderKey!==Ot(this.worldRenderer,e)}updateCameraGroup(){if(this.stopUpdate)return;let{camera:e}=this,t=performance.now(),r=this.worldRenderer.cameraShake.getBaseRotation(),i=r.pitch,s=r.yaw;if(this.lastBobUpdateTime===0)this.xBob=i,this.yBob=s;else{let f=Math.min((t-this.lastBobUpdateTime)/1e3,.1),p=1-Math.pow(.5,f*28),g=1-Math.pow(.5,f*36);this.xBob+=(i-this.xBob)*p,this.yBob+=Hs(s-this.yBob)*g}this.lastBobUpdateTime=t;let o=(i-this.xBob)*-.05,v=Hs(s-this.yBob)*-.035;if(this.cameraGroup.position.copy(e.position),this.cameraGroup.rotation.copy(e.rotation),this.worldRenderer.displayOptions.inWorldRenderingConfig.viewBobbing){let f=this.worldRenderer.playerStateReactive;f.walkDist!==this.lastBobWalkDist&&(this.lastBobTickTime=t,this.lastBobWalkDist=f.walkDist);let p=Math.min((t-this.lastBobTickTime)/50,1),g=1.8,y=_1({walkDist:f.walkDist*g,prevWalkDist:f.prevWalkDist*g,bob:f.bob,prevBob:f.prevBob,partialTick:p});this.cameraGroup.position.x+=y.position.x,this.cameraGroup.position.y+=y.position.y,this.cameraGroup.rotation.z+=y.rotation.z,this.cameraGroup.rotation.x+=y.rotation.x}this.cameraGroup.rotation.x+=o,this.cameraGroup.rotation.y+=v;let l=this.currentDisplayType,c=this.swingAnimator?.getSwingProgress()??0,u;l==="hand"?u=b7(c,this.equipProgress):u=y7(c,this.equipProgress),this.armTransformGroup.matrix.copy(u),this.armTransformGroup.matrixWorldNeedsUpdate=!0}async createItemModel(e){if(this.lastUpdate=performance.now(),!e||e.type==="hand"&&!this.playerHand)return;let t;if(e.type==="item"||e.type==="block"){let r=this.worldRenderer.entities.getItemMesh({...e.fullItem,itemId:e.id},w1(this.worldRenderer),!1,this.lastItemModelName);if(r){let{mesh:i,isBlock:s,modelName:o}=r;s?(t=i,e.type="block"):(t=i,e.type="item"),this.lastItemModelName=o}}else t=this.playerHand;if(t){if(e.type==="item"||e.type==="block"){let r=new C0.Group;r.name="displayTransform",e.type==="item"?(r.position.set(1.13/16,3.2/16,1.13/16),r.rotation.set(0,C0.MathUtils.degToRad(-90),C0.MathUtils.degToRad(25),"XYZ"),r.scale.set(.68,.68,.68)):(r.rotation.set(0,C0.MathUtils.degToRad(45),0,"XYZ"),r.scale.set(.4,.4,.4)),r.add(t),t=r}return t.name="holdingBlock",{model:t,type:e.type}}}async replaceItemModel(e){if(this.blockSwapAnimation?.switcher.isTransitioning)return;if(!e){this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0,this.currentDisplayType="hand";let r=this.swingAnimator;r?.stopSwing(),r&&(r.type="hand"),this.idleAnimator=void 0;return}let t=await this.createItemModel(e);t&&(this.holdingBlock?.removeFromParent(),this.holdingBlock=t.model,this.currentDisplayType=t.type,this.armTransformGroup.add(t.model))}testUnknownBlockSwitch(){this.setNewItem({type:"item",name:"minecraft:some-unknown-block",id:0,fullItem:{}})}async setNewItem(e){let t=Ot(this.worldRenderer,e),r=this.lastHeldItemRenderKey!==t;if(this.lastHeldItem=e,!r)return;this.lastHeldItemRenderKey=t,this.lastItemModelName=void 0;let i=++this.switchRequest,s=!1;if(this.holdingBlock){if(s=!0,!await this.playBlockSwapAnimation("disappeared"))return;this.holdingBlock.removeFromParent(),this.holdingBlock!==this.playerHand&&k0(this.holdingBlock,!1),this.holdingBlock=void 0}if(!e){this.currentDisplayType="hand";let a=this.swingAnimator;a?.stopSwing(),a&&(a.type="hand"),this.idleAnimator=void 0,this.blockSwapAnimation=void 0;return}if(i!==this.switchRequest)return;let o=await this.createItemModel(e);if(!o||i!==this.switchRequest)return;this.holdingBlock=o.model,this.currentDisplayType=o.type,this.armTransformGroup.add(this.holdingBlock),s&&await this.playBlockSwapAnimation("appeared");let v=this.swingAnimator;v&&(v.type=o.type),this.idleAnimator=void 0}};var oi=class{constructor(){d(this,"animationTimer",0);d(this,"lastTime",0);d(this,"isAnimating",!1);d(this,"stopRequested",!1);d(this,"swingProgress",0);d(this,"type","hand");d(this,"debugParams",{animationTime:250,animationStage:0});d(this,"debugGui");this.debugGui=new ke("hand_animator",this.debugParams,void 0,{animationStage:{min:0,max:1,step:.01}})}update(){if(!this.isAnimating&&!this.debugParams.animationStage){this.swingProgress=0;return}let e=performance.now(),t=(e-this.lastTime)/1e3;this.lastTime=e,this.animationTimer+=t*1e3;let r=this.debugParams.animationStage||Math.min(this.animationTimer/this.debugParams.animationTime,1);if(r>=1){if(this.stopRequested){this.isAnimating=!1,this.stopRequested=!1,this.animationTimer=0,this.swingProgress=0;return}this.animationTimer=0,this.swingProgress=0;return}this.swingProgress=r}getSwingProgress(){return this.swingProgress}startSwing(){this.stopRequested=!1,!this.isAnimating&&(this.isAnimating=!0,this.animationTimer=0,this.lastTime=performance.now())}stopSwing(){this.isAnimating&&(this.stopRequested=!0)}isCurrentlySwinging(){return this.isAnimating}},Os=(n,e,t,r,i)=>{let s=r.transformModel(e,{name:t,properties:{}});return qr(n,[[s]],void 0,"plains",i)};E();x();k();R();import*as u0 from"three";import{subscribeKey as C3}from"valtio/utils";E();x();k();R();import*as L0 from"three";E();x();k();R();import Pi from"prismarine-nbt";import*as V from"three";E();x();k();R();E();x();k();R();import{BoxGeometry as Y0,DoubleSide as ui,FrontSide as Ds,Group as ve,Mesh as N0,MeshStandardMaterial as M5,Vector2 as A1}from"three";function fi(n,e,t,r,i,s,o,v){let a=(B,H,G,O)=>[new A1(B/o,1-O/v),new A1(G/o,1-O/v),new A1(G/o,1-H/v),new A1(B/o,1-H/v)],l=a(e+s,t,e+r+s,t+s),c=a(e+r+s,t,e+r*2+s,t+s),u=a(e,t+s,e+s,t+s+i),f=a(e+s,t+s,e+r+s,t+s+i),p=a(e+r+s,t+s,e+r+s*2,t+i+s),g=a(e+r+s*2,t+s,e+r*2+s*2,t+i+s),y=n.attributes.uv,A=[p[3],p[2],p[0],p[1]],b=[u[3],u[2],u[0],u[1]],_=[l[3],l[2],l[0],l[1]],S=[c[0],c[1],c[3],c[2]],C=[f[3],f[2],f[0],f[1]],M=[g[3],g[2],g[0],g[1]],P=[];for(let B of[A,b,_,S,C,M])for(let H of B)P.push(H.x,H.y);y.set(new Float32Array(P)),y.needsUpdate=!0}function ae(n,e,t,r,i,s){fi(n,e,t,r,i,s,64,64)}function ai(n,e,t,r,i,s){fi(n,e,t,r,i,s,64,32)}var Te=class extends ve{constructor(e,t){super(),Object.defineProperty(this,"innerLayer",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"outerLayer",{enumerable:!0,configurable:!0,writable:!0,value:t}),e.name="inner",t.name="outer"}},vi=class extends ve{constructor(){super(),Object.defineProperty(this,"head",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"body",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rightArm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"leftArm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rightLeg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"leftLeg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"modelListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"slim",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_map",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"layer1Material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layer1MaterialBiased",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layer2Material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layer2MaterialBiased",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.layer1Material=new M5({side:Ds}),this.layer2Material=new M5({side:ui,transparent:!0,alphaTest:1e-5}),this.layer1MaterialBiased=this.layer1Material.clone(),this.layer1MaterialBiased.polygonOffset=!0,this.layer1MaterialBiased.polygonOffsetFactor=1,this.layer1MaterialBiased.polygonOffsetUnits=1,this.layer2MaterialBiased=this.layer2Material.clone(),this.layer2MaterialBiased.polygonOffset=!0,this.layer2MaterialBiased.polygonOffsetFactor=1,this.layer2MaterialBiased.polygonOffsetUnits=1;let e=new Y0(8,8,8);ae(e,0,0,8,8,8);let t=new N0(e,this.layer1Material),r=new Y0(9,9,9);ae(r,32,0,8,8,8);let i=new N0(r,this.layer2Material);this.head=new Te(t,i),this.head.name="head",this.head.add(t,i),t.position.y=4,i.position.y=4,this.add(this.head);let s=new Y0(8,12,4);ae(s,16,16,8,12,4);let o=new N0(s,this.layer1Material),v=new Y0(8.5,12.5,4.5);ae(v,16,32,8,12,4);let a=new N0(v,this.layer2Material);this.body=new Te(o,a),this.body.name="body",this.body.add(o,a),this.body.position.y=-6,this.add(this.body);let l=new Y0,c=new N0(l,this.layer1MaterialBiased);this.modelListeners.push(()=>{c.scale.x=this.slim?3:4,c.scale.y=12,c.scale.z=4,ae(l,40,16,this.slim?3:4,12,4)});let u=new Y0,f=new N0(u,this.layer2MaterialBiased);this.modelListeners.push(()=>{f.scale.x=this.slim?3.5:4.5,f.scale.y=12.5,f.scale.z=4.5,ae(u,40,32,this.slim?3:4,12,4)});let p=new ve;p.add(c,f),this.modelListeners.push(()=>{p.position.x=this.slim?-.5:-1}),p.position.y=-4,this.rightArm=new Te(c,f),this.rightArm.name="rightArm",this.rightArm.add(p),this.rightArm.position.x=-5,this.rightArm.position.y=-2,this.add(this.rightArm);let g=new Y0,y=new N0(g,this.layer1MaterialBiased);this.modelListeners.push(()=>{y.scale.x=this.slim?3:4,y.scale.y=12,y.scale.z=4,ae(g,32,48,this.slim?3:4,12,4)});let A=new Y0,b=new N0(A,this.layer2MaterialBiased);this.modelListeners.push(()=>{b.scale.x=this.slim?3.5:4.5,b.scale.y=12.5,b.scale.z=4.5,ae(A,48,48,this.slim?3:4,12,4)});let _=new ve;_.add(y,b),this.modelListeners.push(()=>{_.position.x=this.slim?.5:1}),_.position.y=-4,this.leftArm=new Te(y,b),this.leftArm.name="leftArm",this.leftArm.add(_),this.leftArm.position.x=5,this.leftArm.position.y=-2,this.add(this.leftArm);let S=new Y0(4,12,4);ae(S,0,16,4,12,4);let C=new N0(S,this.layer1MaterialBiased),M=new Y0(4.5,12.5,4.5);ae(M,0,32,4,12,4);let P=new N0(M,this.layer2MaterialBiased),B=new ve;B.add(C,P),B.position.y=-6,this.rightLeg=new Te(C,P),this.rightLeg.name="rightLeg",this.rightLeg.add(B),this.rightLeg.position.x=-1.9,this.rightLeg.position.y=-12,this.rightLeg.position.z=-.1,this.add(this.rightLeg);let H=new Y0(4,12,4);ae(H,16,48,4,12,4);let G=new N0(H,this.layer1MaterialBiased),O=new Y0(4.5,12.5,4.5);ae(O,0,48,4,12,4);let j=new N0(O,this.layer2MaterialBiased),J=new ve;J.add(G,j),J.position.y=-6,this.leftLeg=new Te(G,j),this.leftLeg.name="leftLeg",this.leftLeg.add(J),this.leftLeg.position.x=1.9,this.leftLeg.position.y=-12,this.leftLeg.position.z=-.1,this.add(this.leftLeg),this.modelType="default"}get map(){return this._map}set map(e){this._map=e,this.layer1Material.map=e,this.layer1Material.needsUpdate=!0,this.layer1MaterialBiased.map=e,this.layer1MaterialBiased.needsUpdate=!0,this.layer2Material.map=e,this.layer2Material.needsUpdate=!0,this.layer2MaterialBiased.map=e,this.layer2MaterialBiased.needsUpdate=!0}get modelType(){return this.slim?"slim":"default"}set modelType(e){this.slim=e==="slim",this.modelListeners.forEach(t=>t())}getBodyParts(){return this.children.filter(e=>e instanceof Te)}setInnerLayerVisible(e){this.getBodyParts().forEach(t=>t.innerLayer.visible=e)}setOuterLayerVisible(e){this.getBodyParts().forEach(t=>t.outerLayer.visible=e)}resetJoints(){this.head.rotation.set(0,0,0),this.leftArm.rotation.set(0,0,0),this.rightArm.rotation.set(0,0,0),this.leftLeg.rotation.set(0,0,0),this.rightLeg.rotation.set(0,0,0),this.body.rotation.set(0,0,0),this.head.position.y=0,this.body.position.y=-6,this.body.position.z=0,this.rightArm.position.x=-5,this.rightArm.position.y=-2,this.rightArm.position.z=0,this.leftArm.position.x=5,this.leftArm.position.y=-2,this.leftArm.position.z=0,this.rightLeg.position.x=-1.9,this.rightLeg.position.y=-12,this.rightLeg.position.z=-.1,this.leftLeg.position.x=1.9,this.leftLeg.position.y=-12,this.leftLeg.position.z=-.1}},li=class extends ve{constructor(){super(),Object.defineProperty(this,"cape",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.material=new M5({side:ui,transparent:!0,alphaTest:1e-5});let e=new Y0(10,16,1);ai(e,0,0,10,16,1),this.cape=new N0(e,this.material),this.cape.position.y=-8,this.cape.position.z=.5,this.add(this.cape)}get map(){return this.material.map}set map(e){this.material.map=e,this.material.needsUpdate=!0}},ci=class extends ve{constructor(){super(),Object.defineProperty(this,"leftWing",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rightWing",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.material=new M5({side:ui,transparent:!0,alphaTest:1e-5});let e=new Y0(12,22,4);ai(e,22,0,10,20,2);let t=new N0(e,this.material);t.position.x=-5,t.position.y=-10,t.position.z=-1,this.leftWing=new ve,this.leftWing.add(t),this.add(this.leftWing);let r=new Y0(12,22,4);ai(r,22,0,10,20,2);let i=new N0(r,this.material);i.scale.x=-1,i.position.x=5,i.position.y=-10,i.position.z=-1,this.rightWing=new ve,this.rightWing.add(i),this.add(this.rightWing),this.leftWing.position.x=5,this.leftWing.rotation.x=.2617994,this.resetJoints()}resetJoints(){this.leftWing.rotation.y=.01,this.leftWing.rotation.z=.2617994,this.updateRightWing()}updateRightWing(){this.rightWing.position.x=-this.leftWing.position.x,this.rightWing.position.y=this.leftWing.position.y,this.rightWing.rotation.x=this.leftWing.rotation.x,this.rightWing.rotation.y=-this.leftWing.rotation.y,this.rightWing.rotation.z=-this.leftWing.rotation.z}get map(){return this.material.map}set map(e){this.material.map=e,this.material.needsUpdate=!0}},di=class extends ve{constructor(){super(),Object.defineProperty(this,"rightEar",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"leftEar",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"material",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.material=new M5({side:Ds});let e=new Y0(8,8,4/3);fi(e,0,0,6,6,1,14,7),this.rightEar=new N0(e,this.material),this.rightEar.name="rightEar",this.rightEar.position.x=-6,this.add(this.rightEar),this.leftEar=new N0(e,this.material),this.leftEar.name="leftEar",this.leftEar.position.x=6,this.add(this.leftEar)}get map(){return this.material.map}set map(e){this.material.map=e,this.material.needsUpdate=!0}},Fs=10.8*Math.PI/180,Ft=class extends ve{constructor(){super(),Object.defineProperty(this,"skin",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cape",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"elytra",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"ears",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.skin=new vi,this.skin.name="skin",this.skin.position.y=8,this.add(this.skin),this.cape=new li,this.cape.name="cape",this.cape.position.y=8,this.cape.position.z=-2,this.cape.rotation.x=Fs,this.cape.rotation.y=Math.PI,this.add(this.cape),this.elytra=new ci,this.elytra.name="elytra",this.elytra.position.y=8,this.elytra.position.z=-2,this.elytra.visible=!1,this.add(this.elytra),this.ears=new di,this.ears.name="ears",this.ears.position.y=10,this.ears.position.z=2/3,this.ears.visible=!1,this.skin.head.add(this.ears)}get backEquipment(){return this.cape.visible?"cape":this.elytra.visible?"elytra":null}set backEquipment(e){this.cape.visible=e==="cape",this.elytra.visible=e==="elytra"}resetJoints(){this.skin.resetJoints(),this.cape.rotation.x=Fs,this.cape.position.y=8,this.cape.position.z=-2,this.elytra.position.y=8,this.elytra.position.z=-2,this.elytra.rotation.x=0,this.elytra.resetJoints()}};E();x();k();R();import{Color as Jp,PointLight as Zp,EquirectangularReflectionMapping as qp,Group as Xp,NearestFilter as $p,PerspectiveCamera as eg,Scene as tg,Texture as rg,Vector2 as ig,WebGLRenderer as ng,AmbientLight as sg,CanvasTexture as og,WebGLRenderTarget as ag,FloatType as vg,DepthTexture as lg,Clock as cg,Object3D as dg,ColorManagement as ug}from"three";import{OrbitControls as hg}from"three/examples/jsm/controls/OrbitControls.js";import{EffectComposer as pg}from"three/examples/jsm/postprocessing/EffectComposer.js";import"three/examples/jsm/postprocessing/Pass.js";import{RenderPass as _g}from"three/examples/jsm/postprocessing/RenderPass.js";import{ShaderPass as Ag}from"three/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as xg}from"three/examples/jsm/shaders/FXAAShader.js";E();x();k();R();var E1=class{constructor(){Object.defineProperty(this,"speed",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"paused",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"progress",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"currentId",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"progress0",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"animationObjects",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}update(e,t){if(this.paused)return;let r=t*this.speed;this.animate(e,r),this.animationObjects.forEach((i,s)=>{let o=this.progress0.get(s);i(e,this.progress-o,s)}),this.progress+=r}addAnimation(e){let t=this.currentId++;return this.progress0.set(t,this.progress),this.animationObjects.set(t,e),t}removeAnimation(e){e!=null&&(this.animationObjects.delete(e),this.progress0.delete(e))}};E();x();k();R();import{CanvasTexture as Hp,NearestFilter as Op,Sprite as Fp,SpriteMaterial as Dp}from"three";E();x();k();R();var _7=Object.defineProperty,w7=(n,e,t)=>e in n?_7(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,_0=(n,e,t)=>(w7(n,typeof e!="symbol"?e+"":e,t),t);function hi(n){let e=[n];if(n.extra&&n.extra.length!==0)for(let t of n.extra)e.push(...hi(t));return e}var q=class{constructor(n,e,t,r,i,s){this.key=n,this.value=e,this.name=t,this.code=r,this.cssForeground=i,this.cssBackground=s}applyToStyle(n){n[this.key]=this.value}matchStyle(n){return n[this.key]===this.value}static fromCode(n){let t="0123456789abcdefklmnor".indexOf(n);if(t)return this.list[t]}toString(){return`${q.CONTROL_STRING}${this.code}`}},w0=q;_0(w0,"CONTROL_STRING","\xA7");_0(w0,"BLACK",new q("color","black","BLACK","0",{color:"#000000"},{color:"#000000"}));_0(w0,"DARK_BLUE",new q("color","dark_blue","DARK_BLUE","1",{color:"#0000AA"},{color:"#00002A"}));_0(w0,"DARK_GREEN",new q("color","dark_green","DARK_GREEN","2",{color:"#00AA00"},{color:"#002A00"}));_0(w0,"DARK_AQUA",new q("color","dark_aqua","DARK_AQUA","3",{color:"#00AAAA"},{color:"#002A2A"}));_0(w0,"DARK_RED",new q("color","dark_red","DARK_RED","4",{color:"#AA0000"},{color:"#2A0000"}));_0(w0,"DARK_PURPLE",new q("color","dark_purple","DARK_PURPLE","5",{color:"#AA00AA"},{color:"#2A002A"}));_0(w0,"GOLD",new q("color","gold","GOLD","6",{color:"#FFAA00"},{color:"#2A2A00"}));_0(w0,"GRAY",new q("color","gray","GRAY","7",{color:"#AAAAAA"},{color:"#2A2A2A"}));_0(w0,"DARK_GRAY",new q("color","dark_gray","DARK_GRAY","8",{color:"#555555"},{color:"#151515"}));_0(w0,"BLUE",new q("color","blue","BLUE","9",{color:"#5555FF"},{color:"#15153F"}));_0(w0,"GREEN",new q("color","green","GREEN","a",{color:"#55FF55"},{color:"#153F15"}));_0(w0,"AQUA",new q("color","aqua","AQUA","b",{color:"#55FFFF"},{color:"#153F3F"}));_0(w0,"RED",new q("color","red","RED","c",{color:"#FF5555"},{color:"#3F1515"}));_0(w0,"LIGHT_PURPLE",new q("color","light_purple","LIGHT_PURPLE","d",{color:"#FF55FF"},{color:"#3F153F"}));_0(w0,"YELLOW",new q("color","yellow","YELLOW","e",{color:"#FFFF55"},{color:"#3F3F15"}));_0(w0,"WHITE",new q("color","white","WHITE","f",{color:"#FFFFFF"},{color:"#3F3F3F"}));_0(w0,"OBFUSCATED",new q("obfuscated",!0,"OBFUSCATED","k",{}));_0(w0,"BOLD",new q("bold",!0,"BOLD","l",{"font-weight":"bold"}));_0(w0,"STRIKETHROUGH",new q("strikethrough",!0,"STRIKETHROUGH","m",{"text-decoration":"line-through"}));_0(w0,"UNDERLINE",new q("underlined",!0,"UNDERLINE","n",{"text-decoration":"underline"}));_0(w0,"ITALIC",new q("italic",!0,"ITALIC","o",{"font-style":"italic"}));_0(w0,"RESET",{name:"RESET",code:"r",applyToStyle(n){n.bold=!1,n.strikethrough=!1,n.underlined=!1,n.italic=!1,n.obfuscated=!1,n.color=void 0},matchStyle(n){return!1},cssBackground:{},cssForeground:{},toString(){return`${q.CONTROL_STRING}r`}});_0(w0,"list",[q.BLACK,q.DARK_BLUE,q.DARK_GREEN,q.DARK_AQUA,q.DARK_RED,q.DARK_PURPLE,q.GOLD,q.GRAY,q.DARK_GRAY,q.BLUE,q.GREEN,q.AQUA,q.RED,q.LIGHT_PURPLE,q.YELLOW,q.WHITE,q.OBFUSCATED,q.BOLD,q.STRIKETHROUGH,q.UNDERLINE,q.ITALIC,q.RESET]);var F5=a5(mi(),1);yi();var R3=a5(vo(),1);import k3 from"prismarine-chat";E();x();k();R();import*as _i from"three";E();x();k();R();var Nt=n=>Math.max(0,Math.min(1,n)),lo=(n,e,t)=>Math.max(e,Math.min(t,n)),te=(n,e,t)=>n+(e-n)*t,o8=n=>(n=(n+Math.PI)%(Math.PI*2),n<0&&(n+=Math.PI*2),n-Math.PI);function a8(n){let e=n?.elytra;if(!e)return;if(typeof e.updateRightWing=="function"){e.updateRightWing();return}if(typeof e.updateRightWingRotation=="function"){e.updateRightWingRotation();return}let t=e.leftWing,r=e.rightWing;!t?.rotation||!r?.rotation||typeof r.rotation.copy=="function"&&(r.rotation.copy(t.rotation),r.rotation.z*=-1)}var I5=class extends E1{constructor(){super(...arguments);d(this,"switchAnimationCallback");d(this,"isRunning",!1);d(this,"isMoving",!0);d(this,"isCrouched",!1);d(this,"moveAmount",0);d(this,"runAmount",0);d(this,"lookYaw",0);d(this,"lookPitch",0);d(this,"_dt",0);d(this,"_phase",0);d(this,"_idlePhase",0);d(this,"_moveBlend",0);d(this,"_runBlend",0);d(this,"_crouchBlend",0);d(this,"_lookYawBlend",0);d(this,"_lookPitchBlend",0);d(this,"_swingTime",null);d(this,"_swingDuration",.25);d(this,"_defaults",null)}update(t,r){this._dt=r,super.update(t,r)}swingArm(){(this._swingTime===null||this._swingTime>=this._swingDuration/2)&&(this._swingTime=0)}resetLocomotion(){this._moveBlend=0,this._runBlend=0,this._crouchBlend=0,this._phase=0}_captureDefaults(t){let r=t?.skin;this._defaults={playerRot:t?.rotation?.clone?.(),bodyPos:r?.body?.position?.clone?.(),bodyRot:r?.body?.rotation?.clone?.(),leftArmPos:r?.leftArm?.position?.clone?.(),leftArmRot:r?.leftArm?.rotation?.clone?.(),rightArmPos:r?.rightArm?.position?.clone?.(),rightArmRot:r?.rightArm?.rotation?.clone?.(),leftLegPos:r?.leftLeg?.position?.clone?.(),leftLegRot:r?.leftLeg?.rotation?.clone?.(),rightLegPos:r?.rightLeg?.position?.clone?.(),rightLegRot:r?.rightLeg?.rotation?.clone?.(),headPos:r?.head?.position?.clone?.(),headRot:r?.head?.rotation?.clone?.(),capePos:t?.cape?.position?.clone?.(),capeRot:t?.cape?.rotation?.clone?.(),elytraPos:t?.elytra?.position?.clone?.(),elytraRot:t?.elytra?.rotation?.clone?.()}}_applyDefaults(t){let r=this._defaults;if(!r)return;let i=t?.skin,s=t?.cape,o=t?.elytra;r.playerRot&&t?.rotation&&t.rotation.copy(r.playerRot),r.bodyPos&&i?.body?.position&&i.body.position.copy(r.bodyPos),r.bodyRot&&i?.body?.rotation&&i.body.rotation.copy(r.bodyRot),r.leftArmPos&&i?.leftArm?.position&&i.leftArm.position.copy(r.leftArmPos),r.leftArmRot&&i?.leftArm?.rotation&&i.leftArm.rotation.copy(r.leftArmRot),r.rightArmPos&&i?.rightArm?.position&&i.rightArm.position.copy(r.rightArmPos),r.rightArmRot&&i?.rightArm?.rotation&&i.rightArm.rotation.copy(r.rightArmRot),r.leftLegPos&&i?.leftLeg?.position&&i.leftLeg.position.copy(r.leftLegPos),r.leftLegRot&&i?.leftLeg?.rotation&&i.leftLeg.rotation.copy(r.leftLegRot),r.rightLegPos&&i?.rightLeg?.position&&i.rightLeg.position.copy(r.rightLegPos),r.rightLegRot&&i?.rightLeg?.rotation&&i.rightLeg.rotation.copy(r.rightLegRot),r.headPos&&i?.head?.position&&i.head.position.copy(r.headPos),r.headRot&&i?.head?.rotation&&i.head.rotation.copy(r.headRot),r.capePos&&s?.position&&s.position.copy(r.capePos),r.capeRot&&s?.rotation&&s.rotation.copy(r.capeRot),r.elytraPos&&o?.position&&o.position.copy(r.elytraPos),r.elytraRot&&o?.rotation&&o.rotation.copy(r.elytraRot)}animate(t){let r=this._dt||0;this._defaults||this._captureDefaults(t),this._applyDefaults(t);let i=typeof this.moveAmount=="number"?this.moveAmount:this.isMoving?1:0,s=typeof this.runAmount=="number"?this.runAmount:this.isRunning?1:0,o=Nt(i),v=Nt(s),a=this.isCrouched?1:0,l=Math.min(1,r*8),c=Math.min(1,r*6),u=Math.min(1,r*7);this._moveBlend+=(o-this._moveBlend)*l,this._runBlend+=(v-this._runBlend)*c,this._crouchBlend+=(a-this._crouchBlend)*u;let f=Nt(this._moveBlend),p=Nt(this._runBlend),g=Nt(this._crouchBlend),y=te(8,10,p),A=te(1,.55,g),b=y*A;this._phase+=r*b*f,this._idlePhase+=r*1.15;let _=this._phase+(p>.5?Math.PI*.5:0);if(this.switchAnimationCallback&&Math.abs(Math.sin(_))<.02){let O=this.switchAnimationCallback;this.switchAnimationCallback=null,O?.()}l8(t,g);let S=80*Math.PI/180,C=75*Math.PI/180,M=lo(o8(this.lookYaw||0),-S,S),P=lo(this.lookPitch||0,-C,C),B=Math.min(1,r*14);this._lookYawBlend+=(M-this._lookYawBlend)*B,this._lookPitchBlend+=(P-this._lookPitchBlend)*B,t?.skin?.head?.rotation&&(t.skin.head.rotation.y+=this._lookYawBlend,t.skin.head.rotation.x+=this._lookPitchBlend);let H=(1-f)*(1-.25*p);if(H>1e-4&&t?.skin){let G=Math.sin(this._idlePhase);t.skin.body.rotation.x+=G*.02*H,t.skin.head.rotation.x+=-G*.015*H,t.skin.leftArm.rotation.x+=G*.03*H,t.skin.rightArm.rotation.x+=-G*.03*H,t?.cape?.rotation&&(t.cape.rotation.x+=Math.sin(this._idlePhase*.7)*.03*H)}if(f>1e-4&&t?.skin){let G=te(1,.85,g),O=te(1,.7,g),j=Math.sin(_)*.5,J=Math.sin(_+Math.PI)*.5,Z=Math.cos(_+Math.PI)*1.3,X=Math.cos(_)*1.3;t.skin.leftLeg.rotation.x+=te(j,Z,p)*f*G,t.skin.rightLeg.rotation.x+=te(J,X,p)*f*G;let d0=Math.sin(_+Math.PI)*.5,a0=Math.sin(_)*.5,v0=Math.cos(_)*1.5,g0=Math.cos(_+Math.PI)*1.5;t.skin.leftArm.rotation.x+=te(d0,v0,p)*f*O,t.skin.rightArm.rotation.x+=te(a0,g0,p)*f*O;let E0=Math.PI*.02,n0=Math.PI*.1,Y=te(E0,n0,p),o0=Math.cos(_)*.03+E0,b0=Math.cos(_+Math.PI)*.03-E0,G0=Math.cos(_)*.1+n0,O0=Math.cos(_+Math.PI)*.1-n0;t.skin.leftArm.rotation.z+=(te(o0,G0,p)*f+Y*.15*f)*O,t.skin.rightArm.rotation.z+=(te(b0,O0,p)*f-Y*.15*f)*O,this._defaults?.playerRot&&(t.rotation.z=this._defaults.playerRot.z+Math.cos(_+Math.PI)*.01*p*f);let q0=te(Math.PI*.06,Math.PI*.3,p),h0=te(Math.sin(_/1.5)*.06,Math.sin(_*2)*.1,p);t?.cape?.rotation&&(t.cape.rotation.x+=(q0+h0)*f)}if(this._swingTime!==null){this._swingTime+=r;let G=Math.min(this._swingTime/this._swingDuration,1);v8.animate(G,t,f>.2),G>=1&&(this._swingTime=null)}}},v8={animate(n,e,t){if(!e?.skin?.rightArm?.rotation)return;let r=Math.sin(n*Math.PI);if(e.skin.rightArm.rotation.x=-.4537860552*2-2*r*.3,!t){let i=.01*Math.PI+.06;e.skin.rightArm.rotation.z=-r*.403+i,e.skin.body.rotation.y=-r*.06,e.skin.leftArm.rotation.x=-r*.077,e.skin.leftArm.rotation.z=-r*.015+.13-.05,e.skin.leftArm.position.z=r*.3,e.skin.leftArm.position.x=5-r*.05}}};function l8(n,e){let t=n?.skin,r=n?.cape,i=n?.elytra;if(!t||!r)return;let s=Nt(e),o=Math.abs(Math.sin(s*Math.PI/2));if(o<=1e-6)return;t.body.rotation.x+=.4537860552*o,t.body.position.z+=(1.3256181-3.4500310377)*o,t.body.position.y+=-2.103677462*o,r.position.y+=-1.851236166577372*o,r.rotation.x+=.294220265771*o,r.position.z+=(3.786619432-3.4500310377)*o,i?.position&&i.position.copy(r.position),i?.rotation&&i.rotation.copy(r.rotation),i?.rotation&&(i.rotation.x-=10.8*Math.PI/180),i?.leftWing?.rotation&&(i.leftWing.rotation.z=te(.72,.26179944+.4582006,o)),a8(n),t.head.position.y+=-3.618325234674*o;let v=.1*o,a=(3.618325234674-3.4500310377)*o,l=-2.53943318*o;t.leftArm.position.z+=a,t.rightArm.position.z+=a,t.leftArm.rotation.x+=.410367746202*o,t.rightArm.rotation.x+=.410367746202*o,t.leftArm.rotation.z+=v,t.rightArm.rotation.z+=-v,t.leftArm.position.y+=l,t.rightArm.position.y+=l,t.rightLeg.position.z+=-3.4500310377*o,t.leftLeg.position.z+=-3.4500310377*o}function wi(n){let e=n.skin,t=[e.layer1Material,e.layer1MaterialBiased,e.layer2Material,e.layer2MaterialBiased];for(let r of t)r.transparent=!0,r.alphaTest=.1,r.depthWrite=!0}E();x();k();R();import*as s0 from"three";function c8(n,e){if(typeof document<"u"){let t=document.createElement("canvas");return t.width=n,t.height=e,t}return new OffscreenCanvas(n,e)}function d8(n,e){let{depth:t,pixelSize:r}=e;if(n.width<=0||n.height<=0)throw new Error(`Invalid canvas dimensions: ${n.width}x${n.height}`);let s=n.getContext("2d").getImageData(0,0,n.width,n.height),{data:o}=s,v=n.width,a=n.height,l=t/2,c=r??1/Math.max(v,a),u=(B,H)=>{if(B<0||H<0||B>=v||H>=a)return!1;let G=(H*v+B)*4;return o[G+3]>128},f=[],p=[],g=[],y=[],A=0,b=(B,H,G,O,j,J,Z,X)=>(f.push(B,H,G),g.push(O,j),y.push(J,Z,X),A++),_=(B,H,G,O)=>{p.push(B,H,G,B,G,O)},S=(B,H)=>{let G=(B/v-.5)*c*v,O=-(H/a-.5)*c*a;return{x:G,y:O}},C=Array.from({length:a+1},()=>Array.from({length:v+1},()=>null)),M=Array.from({length:a+1},()=>Array.from({length:v+1},()=>null));for(let B=0;B<=a;B++)for(let H=0;H<=v;H++){let{x:G,y:O}=S(H-.5,B-.5),j=H/v,J=B/a,Z=!1,X=[[H-1,B-1],[H,B-1],[H-1,B],[H,B]];for(let[d0,a0]of X)if(u(d0,a0)){Z=!0;break}Z&&(C[B][H]=b(G,O,l,j,J,0,0,1),M[B][H]=b(G,O,-l,j,J,0,0,-1))}for(let B=0;B<a;B++)for(let H=0;H<v;H++){if(!u(H,B))continue;let G=C[B][H],O=C[B][H+1],j=C[B+1][H+1],J=C[B+1][H],Z=M[B][H],X=M[B][H+1],d0=M[B+1][H+1],a0=M[B+1][H];G!==null&&O!==null&&j!==null&&J!==null&&_(G,O,j,J),Z!==null&&X!==null&&d0!==null&&a0!==null&&_(X,Z,a0,d0)}for(let B=0;B<a;B++)for(let H=0;H<v;H++){if(!u(H,B))continue;let G=(H+.5)/v,O=(B+.5)/a;if(!u(H-1,B)){let j=C[B][H],J=C[B+1][H],Z=M[B][H],X=M[B+1][H];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,-1,0,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,-1,0,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,-1,0,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,-1,0,0);_(d0,a0,v0,g0)}}if(!u(H+1,B)){let j=C[B+1][H+1],J=C[B][H+1],Z=M[B+1][H+1],X=M[B][H+1];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,1,0,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,1,0,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,1,0,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,1,0,0);_(d0,a0,v0,g0)}}if(!u(H,B-1)){let j=C[B][H],J=C[B][H+1],Z=M[B][H],X=M[B][H+1];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,0,-1,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,0,-1,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,0,-1,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,0,-1,0);_(d0,a0,v0,g0)}}if(!u(H,B+1)){let j=C[B+1][H+1],J=C[B+1][H],Z=M[B+1][H+1],X=M[B+1][H];if(j!==null&&J!==null&&Z!==null&&X!==null){let d0=b(f[j*3],f[j*3+1],f[j*3+2],G,O,0,1,0),a0=b(f[J*3],f[J*3+1],f[J*3+2],G,O,0,1,0),v0=b(f[X*3],f[X*3+1],f[X*3+2],G,O,0,1,0),g0=b(f[Z*3],f[Z*3+1],f[Z*3+2],G,O,0,1,0);_(d0,a0,v0,g0)}}}let P=new s0.BufferGeometry;return P.setAttribute("position",new s0.Float32BufferAttribute(f,3)),P.setAttribute("uv",new s0.Float32BufferAttribute(g,2)),P.setAttribute("normal",new s0.Float32BufferAttribute(y,3)),P.setIndex(p),P.computeVertexNormals(),{geometry:P,totalVertices:A,totalTriangles:p.length/3}}function u8(n,e){let{u:t,v:r,sizeX:i,sizeY:s}=e,o=Math.max(1,Math.floor(i*n.image.width)),v=Math.max(1,Math.floor(s*n.image.height)),a=c8(o,v),l=a.getContext("2d");if(!l)throw new Error("Failed to get 2d context for item texture canvas");return l.imageSmoothingEnabled=!1,l.drawImage(n.image,t*n.image.width,r*n.image.height,i*n.image.width,s*n.image.height,0,0,a.width,a.height),a}function co(n,e,t={}){let{faceCamera:r=!1,use3D:i=!0,depth:s=.04}=t,{u:o,v,sizeX:a,sizeY:l}=e;if(r){let y=n.clone();y.flipY=!0,y.offset.set(o,1-v-l),y.repeat.set(a,l),y.needsUpdate=!0,y.magFilter=s0.NearestFilter,y.minFilter=s0.NearestFilter;let A=new s0.SpriteMaterial({map:y,transparent:!0,alphaTest:.1});return{mesh:new s0.Sprite(A),itemsTexture:y,cleanup(){y.dispose()}}}if(i)try{let y=u8(n,e),{geometry:A}=d8(y,{depth:s}),b=new s0.CanvasTexture(y);b.magFilter=s0.NearestFilter,b.minFilter=s0.NearestFilter,b.wrapS=b.wrapT=s0.ClampToEdgeWrapping,b.flipY=!1,b.needsUpdate=!0;let _=new s0.MeshStandardMaterial({map:b,side:s0.DoubleSide,transparent:!0,alphaTest:.1});return{mesh:new s0.Mesh(A,_),itemsTexture:b,cleanup(){b.dispose(),A.dispose(),_.map&&_.map.dispose(),_.dispose()}}}catch{}let c=n.clone();c.flipY=!0,c.offset.set(o,1-v-l),c.repeat.set(a,l),c.needsUpdate=!0,c.magFilter=s0.NearestFilter,c.minFilter=s0.NearestFilter;let u=c.clone();u.repeat.x*=-1,u.needsUpdate=!0,u.offset.set(o+a,1-v-l);let f=new s0.MeshStandardMaterial({map:c,transparent:!0,alphaTest:.1}),p=new s0.MeshStandardMaterial({map:u,transparent:!0,alphaTest:.1});return{mesh:new s0.Mesh(new s0.BoxGeometry(1,1,0),[new s0.MeshBasicMaterial({color:0}),new s0.MeshBasicMaterial({color:0}),new s0.MeshBasicMaterial({color:0}),new s0.MeshBasicMaterial({color:0}),f,p]),itemsTexture:c,itemsTextureFlipped:u,cleanup(){c.dispose(),u.dispose(),f.dispose(),p.dispose()}}}E();x();k();R();import*as t0 from"three";E();x();k();R();E();x();k();R();import{REVISION as f8}from"three";var uo=parseInt(f8.replace(/\D+/g,""));E();x();k();R();import{Loader as h8,FileLoader as m8,Group as p8,BufferGeometry as fo,Float32BufferAttribute as Wt,LineBasicMaterial as Ai,Material as ho,PointsMaterial as C1,MeshPhongMaterial as g8,LineSegments as mo,Points as Ei,Mesh as po,Vector3 as H5}from"three";var b8=/^[og]\s*(.+)?/,y8=/^mtllib /,_8=/^usemtl /,w8=/^usemap /,go=new H5,xi=new H5,bo=new H5,yo=new H5,le=new H5;function A8(){let n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}let r=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(i,s){let o=this._finalize(!1);o&&(o.inherited||o.groupCount<=0)&&this.materials.splice(o.index,1);let v={index:this.materials.length,name:i||"",mtllib:Array.isArray(s)&&s.length>0?s[s.length-1]:"",smooth:o!==void 0?o.smooth:this.smooth,groupStart:o!==void 0?o.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(a){let l={index:typeof a=="number"?a:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return l.clone=this.clone.bind(l),l}};return this.materials.push(v),v},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(i){let s=this.currentMaterial();if(s&&s.groupEnd===-1&&(s.groupEnd=this.geometry.vertices.length/3,s.groupCount=s.groupEnd-s.groupStart,s.inherited=!1),i&&this.materials.length>1)for(let o=this.materials.length-1;o>=0;o--)this.materials[o].groupCount<=0&&this.materials.splice(o,1);return i&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),s}},r&&r.name&&typeof r.clone=="function"){let i=r.clone(0);i.inherited=!0,this.object.materials.push(i)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){let r=parseInt(e,10);return(r>=0?r-1:r+t/3)*3},parseNormalIndex:function(e,t){let r=parseInt(e,10);return(r>=0?r-1:r+t/3)*3},parseUVIndex:function(e,t){let r=parseInt(e,10);return(r>=0?r-1:r+t/2)*2},addVertex:function(e,t,r){let i=this.vertices,s=this.object.geometry.vertices;s.push(i[e+0],i[e+1],i[e+2]),s.push(i[t+0],i[t+1],i[t+2]),s.push(i[r+0],i[r+1],i[r+2])},addVertexPoint:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,r){let i=this.normals,s=this.object.geometry.normals;s.push(i[e+0],i[e+1],i[e+2]),s.push(i[t+0],i[t+1],i[t+2]),s.push(i[r+0],i[r+1],i[r+2])},addFaceNormal:function(e,t,r){let i=this.vertices,s=this.object.geometry.normals;go.fromArray(i,e),xi.fromArray(i,t),bo.fromArray(i,r),le.subVectors(bo,xi),yo.subVectors(go,xi),le.cross(yo),le.normalize(),s.push(le.x,le.y,le.z),s.push(le.x,le.y,le.z),s.push(le.x,le.y,le.z)},addColor:function(e,t,r){let i=this.colors,s=this.object.geometry.colors;i[e]!==void 0&&s.push(i[e+0],i[e+1],i[e+2]),i[t]!==void 0&&s.push(i[t+0],i[t+1],i[t+2]),i[r]!==void 0&&s.push(i[r+0],i[r+1],i[r+2])},addUV:function(e,t,r){let i=this.uvs,s=this.object.geometry.uvs;s.push(i[e+0],i[e+1]),s.push(i[t+0],i[t+1]),s.push(i[r+0],i[r+1])},addDefaultUV:function(){let e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){let t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,r,i,s,o,v,a,l){let c=this.vertices.length,u=this.parseVertexIndex(e,c),f=this.parseVertexIndex(t,c),p=this.parseVertexIndex(r,c);if(this.addVertex(u,f,p),this.addColor(u,f,p),v!==void 0&&v!==""){let g=this.normals.length;u=this.parseNormalIndex(v,g),f=this.parseNormalIndex(a,g),p=this.parseNormalIndex(l,g),this.addNormal(u,f,p)}else this.addFaceNormal(u,f,p);if(i!==void 0&&i!==""){let g=this.uvs.length;u=this.parseUVIndex(i,g),f=this.parseUVIndex(s,g),p=this.parseUVIndex(o,g),this.addUV(u,f,p),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";let t=this.vertices.length;for(let r=0,i=e.length;r<i;r++){let s=this.parseVertexIndex(e[r],t);this.addVertexPoint(s),this.addColor(s)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";let r=this.vertices.length,i=this.uvs.length;for(let s=0,o=e.length;s<o;s++)this.addVertexLine(this.parseVertexIndex(e[s],r));for(let s=0,o=t.length;s<o;s++)this.addUVLine(this.parseUVIndex(t[s],i))}};return n.startObject("",!1),n}var Vt=class extends h8{constructor(e){super(e),this.materials=null}load(e,t,r,i){let s=this,o=new m8(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(v){try{t(s.parse(v))}catch(a){i&&i(a),s.manager.itemError(e)}},r,i)}setMaterials(e){return this.materials=e,this}parse(e){let t=new A8;e.indexOf(`\r
720
720
  `)!==-1&&(e=e.replace(/\r\n/g,`
721
721
  `)),e.indexOf(`\\
722
722
  `)!==-1&&(e=e.replace(/\\\n/g,""));let r=e.split(`
@@ -21455,7 +21455,7 @@ f 72/204/51 67/203/51 65/202/51 70/201/51
21455
21455
  f 71/208/52 72/207/52 70/206/52 69/205/52
21456
21456
  f 70/212/53 65/211/53 66/210/53 69/209/53
21457
21457
  f 71/216/54 68/215/54 67/214/54 72/213/54`;var ki={allay:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAV1BMVEUAAAA4jNkuh9Ypg9FBnNpCm9r///+c/P+A/P9k+/9N8/hM6f9Q2f8+5eo94PdG0P821+4s1ewiz/8syf8ox/8bxPNNq+wQwf8os+hCnNpCm9oep9s0h8D7j8AOAAAABnRSTlMAoKCg3PODq/XXAAAA60lEQVR42tWP0W7DIAxFb9OtwdA6xQ3rzZL//84BD0nRljzsZdqxZCx8hLio3Lz4GwtYMWLDi4jnPM+vwogNKTTC43Elr6vgRMQ1wvM5ktsbvRPXN38wGxKHMmnI9M65vgxavwsg2WCpCvlSg6iqlCF4ceKbFEGZVC+5NFFXYUtxZzILl1xmiffoxUcA5DUHKULZp6iqsQzU6KNWYcxBUMnp8A2mwWxAhTPR0qRYFs6sDT+zTMZpWj5pO8L0wamexJ9xXvm10J27rrQ94dSdOqC0PSFXPV4JRuwRzIxGHMB38O14j4N9Wf4/vgDzpRGDwkNeQQAAAABJRU5ErkJggg==",axolotl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAACvsv+zsPmmqv+nn/+GkPXWhCt+iOyBb+d1b/9odutodOyTWuRbb+NlZfS0W0xsV+JpVuNNWc82QZ86AGw+Ir4cAAAAAXRSTlMAQObYZgAAAUdJREFUeNrtk9FugzAMRXG4twFS1jbl/791cbJUQnuAmE2VKk5cKpDukeNA9zeAhP4mwDlgahdAEoDm1dAukIzmlXaB/HBcUGbQJCBkBejgkMrt3j5WeYGD0iAglkXkehVZFlBQ2b0FkKjtE2CjIIYEUfIhESdMCUyWoyBFZPZI+Nks8OUs/f7kXSsLgCxwiRbBl9YRgddazcC5lhnc/T1VFdQObDMIwdJBRQQhYNWBTTCXYzR0AMZIyOy9c373FuQFGXLJLzYFEJQvQSHKgwKwJQAF1BWqIBC6hNlKbAg0GPXyjDHkeqoj6iVAn4DdP/NQhuHxsAr6HroAswB52QUcySTgeGQGg3J8lPY55h7Q9705XQdpEgwaHXVhtHZQX6Whew+X+mfldsn5W3fEYM9fVjfm/pXShd1g38UrdvuIGZycnJy8kW/CDQ5IMRlUUgAAAABJRU5ErkJggg==",blaze:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAJ1BMVEUAAAD//////4T/+Ef/1Sj8shf8lgDReACrdQGLNAFsMQBfAgExDgs044iSAAAAAXRSTlMAQObYZgAAAPdJREFUeNrdzzFuAjEQheH3vNR4xtCkibyQA4CSCyAlfZocIjdKm4sFxAHwGKVmQo21Ts9X//IbE1evBfpBjG9ozXDlJZkKTkAr4IpShNVkMjiJ7wuUkwEJhcAmAzFGNcTJoFisJZph6heJiG7xDLT4XKRC4KiubvSf24kY6hiLnVPMVfE+NhPbo2Y3YVBfPA2/Q3PkchGGx++H4yZvd3GdNrjBr32FeDzPUdN88Mvn7QRHHiSX9SkMwnxYNTdkq7sDlMsLkZHRBEwBGaBpKnQ6GqsVegLIfrDOfOkGI0W7gQTN6JhJQlcYCOm+oJyjHyD+F7jg7v0B5TtIgi1mkx4AAAAASUVORK5CYII=",boat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAG1BMVEX///8AAADCbT+6YzetXTKgVjCZUCuPTCqIRyg96zNeAAAAAnRSTlMAAHaTzTgAAAPOSURBVHja7VTLbus2EBX6XOcPimGzL3jG7rbIzChdFjap3GUB65Fl0ZtY/oFr67NLqoljFVDkRXFXOZZnQI/nmOYcnqL4se/7U59xyGGy+qtI+OanHDdWvOLmEkXxnWp1DKZqj43mVB2jakiroH+8EfhZgu8t2BdVC/opWCbKq6hppfbbG8F2juApxqp9RRPDp+G0f112hyF9/9tfxr+wmiF4NvZE6VmNMdyfWoAB3oHRHs4ENrsDgzYChcYc4/3eHhq1YFWOXfr+D3/mrjueIdhHgVgVhMcYu2c1a/dRY473ZwKPGYLh6Df0MzndjvFxeFoDW1glOT4Q2n6/81TcydwOyqHvhqHfH3I6NN3jcBoSDmM6Oq2GUxAqUM5OQTjEIGBhtm28b7Sq2pgnGWJbslWJ/cnP6+C5jGKKlUXvaePrh7axJmjT1ow1r7ns0kZOvpAwt4PSOyFHxBpFtL6vYQIBx6oxq1zZJ4IvVGy2s2NkgEO0ynYcY7yvg2pVNe1zp0lh+RD7/u9EMDvGath3w6k7jOkxH2I/5AMc0/HcJavZMToLEI0rckSrx+GztcGsqncQcHfuWtmskG69c3TriDlaFbvPNUSwEw5V0/bnLtLZMSqiCrOM2wgP+1A2eYSat/G2A8YcgVngChaj5G3kyxSqJ2vbRrBrD+cux7O3cXKd4+/T69z4HZFLj3u5tGvXTwmKuEXGCv0rLn9COELBlfqXSxvlvwS0oYxbGl5xSbDsieS33hP8ypG/cyBP7C/qy54I2TFUsE5xJyrKpVzUlz0RWgsEWiprrQLWUi/qy57Y79Ohp6frcsro2ov6sidSAI8GagJhAURxUV/2RG1ijM/pXcUzLurLnlhgOyeDjGVPzDqYymBSd/owHM+eOKMDAmHlHYknELtJnfvDcIz6jici7FjApQlqQGUtk/qv2RFbfccTEWqooDRkGUxUkHGbCfYyeuK8DrqzDCYqyKC+Hw9x3hMpMNYKmIIFIuBJfdkTsw4eJjKY1Jc9sQBGJbykfoJUX/TEgjw2BHKgjSM/TJDqi55I3rmNzwyUkvPkSQj5gzvv6GbZEzH6ADgK1xCDCtISlhJUbpY9EVFWdVSwxUY4WgDXMQgHrsHxCk9sX+ygzcjpctneLCL7gVhAaRaE2QRQBpeM8TXfOPWDf6VwVsN5GRe6l3VwDYHztElvuJQchgmuIaCEDdFForu3dAUBtpIHBnAevKmkzAJAa6heRTB2ytgBE6juFGBBLSwzXf+zDsaBrwUQiAnALChFwIB+DR28X/4g+CD4ILgW/wAFIWww3uybGQAAAABJRU5ErkJggg==",camel:"data:image/png;base64,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",cat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAATlBMVEXv9O3r8Oj72bPW1sz71Wf2ymD1yF7ywFnxv1jvt1Pqq0uvdh57bWJjSy9KMBc6Kh0RDxgAAADq6urOzs6vr7C+c3NanRJWU18kJDEcGCdfq47cAAAAEnRSTlMAAAAAAAAAAAAAAAAAAAAAAACVcz0/AAABUUlEQVR42t3T3VrCMAyA4Yi1SmtlSxSS+79Rkz6R0dEywTO/0rPyPst+IFhiMSJyAW+amJBFA08EEWBeBQtQ/1BKuRuY5yAusACo4ABSBUpFxbsCPkJKDgiLgAktANYYOFhyDlxQgFCFbUA6VaGg9lsAj3LExmBCi1i8MdDNBWJ5GBDmFmBhFuE7ANQWgInVY+q8B8wh58w8gy2rBxASIRJ2gVwBOOf3oAFQ6wL1kP0QeQU0AhRdIb5eAe+15V1vAWqB/X4E2PgrADtA3O/XgJ3WTSDeCJi8zcc4eAo+QroBsC7hC4AMOAspxGQNAUZdTDwAtkdAQrTdALQAMYX4FkIYA1VwoNZ+CynqCLeuIOSkAYyAqRZjFyDNAe8FytIOLuoCNv3hkLPtkP3k8xNc1RthZ6YiPwAMmmoAHUC028DGCKevkwg8DnxafwDmO/uHwDebkIAap1EwrQAAAABJRU5ErkJggg==",chicken:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAALVBMVEUAAAD////i4uL85XDT09PhzGLGxsbgu2nTrlrQqT/Bk0OWcjRjVkH/AAAAAADtfCsnAAAAAXRSTlMAQObYZgAAAO9JREFUeNrtzMFJxFAQxvFZrGAewaMwwxQg2IA7fMzZElQecxZswHZc7CAd2MM72IlJVoXEbATP+7998OMj2kmHW6LXQ9/T0AUt25UuB/D+dgQ317+AXLZ7OgxN4vmJ5vGxforGXhbgSj9ElFqjrxYXomN+GriqmqG1H3E3B7DmQN0A0Wpk0laqKlw2gKv9AdycbRNE1dgA1SOy0hTWQCIrgqaUlnGBqkLY4aeAq0FYfT/OFRBQVGERWQddAKh7ZuFVUCwqorow8166jgVzoBaZWV2FRZS5iM2BYwKwBzEfjJSYg/zOIx7hDk86948+AcUmS5dD8ZFCAAAAAElFTkSuQmCC",cod:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJFBMVEX///8AAADr2sPWxa3KtJXCqIW2lmusiVmScVqEZVEiHyYAAAB2QJV6AAAAAnRSTlMAAHaTzTgAAACbSURBVHja7coxCsJAEIXh5w18RSRiZQT7sAS8Rgyz2kbYIN5CiDBbx8CewHM6QS3sLf1hivl4yMc626+ZCgKQzENVF6eSsaCVkRCRfCiZhFYwcM4t+13SqFdOwS6/Vw+5HA3qFyz7beOqriX9ezFsKmlcySn4lFKMMQiJGYWwR9VQyTnGmggh3M7eeyGBQ0u4TwZkR/C7P/weVk/OOkCzBdD8ogAAAABJRU5ErkJggg==",creeper:"data:image/png;base64,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",dolphin:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEX///+wwc2In7V8gp1ZV3NXVHBIRWP////D0uO/0Nu9y92wxNmwwc2lutCmuc2dssmSo7qKmrGAhqJrcY4ICR+8V/49AAAAB3RSTlMAAAAAAAAAVWTqWAAAAc1JREFUeNrt1GGPokAMxvFRz9sd2+kz5fb7f9ZrmYECnuDmkn3FL0oaSf8RJaT7iB6Pz8/Hg3J3u91+mzRCITtVIJwNS3JcUzMHSlkErtfr3fQAPQxB8uhVYPAA5xHf3fQNSguU6eSLwJ9hHXBpROTXR5S7F4GcLTBd5ioQP9BuwJF4gWU/wAt2tumBpnQRINoEhGUORIHeDggE0gJlWgLKPHUvLkEEqLUCIhZAVQXsaCoAP2q38yMG1Y8vdcOg7utD9VsBFgNf9zfEcO7eCuTMvdG3bb0X+K3AL3sDzGmlFNpVZskB22xxR9sRENkGUAqA4rDWPoqPk+OngIaKWdVnaVAVo2pDBKotGl+KQhurUa1zQAQjMRHICywCE3/vSrq2h0+/8KnDvC5s95m5D6ntR4BZLpfL+BgRv7WEKKY0Y03d3UWALZ5GlLMAkjPFdBQgskCOQKbl4ThQiEoEQHlEiGkRwItA3OsKalsa07cCg+/51hBTBGQvIIJxTWHUJ0Bk/V8AEXsKpD3M8Ux1ywCI8F5AwJD/CAhUtBUkFYeNMvlXQABVf3kCHgBq1YVagQgcid2N6tIxEWGXZ+ykScdie4En6XQ6nU6n00/7C3s4RNq7Xn9vAAAAAElFTkSuQmCC",ender_dragon:"data:image/png;base64,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",enderman:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC",endermite:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAADR0lEQVRo3u2Y61ITQRCF5wGsEhESCrkloiEhITctQG4xiQQRuRuIKPrH93+Etr8OHQOloPyQbJKu6prNzu5mz+nuMz0bwpWtL+7LVqkl69lzWU5tS3IiJ9NjL+TZ0+cyF89I6LJ66di8+qoZ5mLpkIhnuqfD6KO4+e/stvse1OqFc9EXk1rpSCAD4G1Pysx46hoBq4Vv5mvZZpifzBuYvyXgtvseDHi9qF44k7N4yXwzeyicf1dsaTY0ZDW9K5WlExvVw1buOOg1YS2zF/TeUM03yaDwdun0Gvju47vuezDTP5dq/pMBfZP+YOPyy4bsvv5u55mnJJhTANKzQO5rRBaQ5fmqFBKbUkxWZGXhvUW/VmgaaH5TFmTGXFfd3kzz21K/501T3qKoGWCCSCbUVBNUtKwcOKeiJRNPZiU+MmOORiS6BDKSBADcvHjeIcEBVwqnspE9MgIgBLCTowkjITYyLVNj8zIbW2D+j7Xf80bd4lrvDv6fMyCSte/WKH0xEfMRcXPA1Hwlf3JnBiCKCOLG4kHnOZExIs8L+0gpAN6WR40+vQHgOefNEeBjj6esR/AMWEvvGQn+nChlgC53TfGRqOOoP/2BAlMCdkTB6crwWbZLF7Y6+HWsIlzLvGZA5zlRygB7YR8BbYAU+Eb2wIBxjHMe8FzD0klvwDzHdo0e+3MiQwAR5YV99PpfvVr7iaodZz7K/soP6w+cAL8G4LaXUIL8OZEigKj62O78diy9yQCAA5RmiPTmOgjgHPNEnBaZ+5wAnhMlAtidtZc7dYRONynmCjIoAUEjHzTyJpAInp3XJRPRY2QViKwRsc3cUafOKQGEDWdOI29LG0RBAOA18qb27AsgJNIEmKJfEcCIOwnUsjY7oa+NKLt6m+Jn2moPAZBDc0Oa9zMBmtotaZS/At7qmpRWAsgOAx+pxuY+GWDKXbwwEm7u7yHCxY7a7zv7BbxljupbVuimiBECEDxteoyIvrOd8qUBZROk67+pPEABTjZo+9sBjx70tfnX3tRUOSQnsmHgbCV/aV9t+Vw9M54aPAL4Xk8GaDfYG5+s/1MjZILHqE2Q7ev53Ra/Zuj7PgDxAyhC6B80BqoPGNrQhja0Qbaf/P4PM3XaxMkAAAAASUVORK5CYII=",fox:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgBAMAAACm+uYvAAAAJ1BMVEWAgIAAAAD59PTn2dPVtp/nj0G0j4PifCHMaSCwUSKOPyRWPzQGBA4kh8LGAAAAAnRSTlMAAHaTzTgAAAGUSURBVHjahdAxb9NAFAfw8wRIDLkFEsSCG4kMHVAzwAiV5W9gXUdA1omugPWOEdpwzxthaP2qLhnrD9ClHaKuvQ/Vv2OnrZuhf1myrJ/+vvdO6YcZ8p/4jdZqoKLB87AchKCQqA9X2+F1HJa3sNuCUv/3ZfRV/q3hMP4E0A8DSABN46knV1prUYm4FJGK/d4KyJgyTfP74FZQZOZvkiSfG2AA86xYwyHg4x0U9AgUtAlDZiYibvN7Mknyb5PJeKxGVQelIPM4RjVG1Ahl7CF41XU9j8e3IG77bfb9yssJYKHXAWCf5kctoIwnArySra3pdLqzI3UD7RwK0f0cTD/cAS7rwL5TK0D5HjzJfmK7TYhedoBPDCsiHfgf4b0LQWvnOE9S9n5WuAaSXazVgO/AFRn1piIuARUTGQNQEtTg2ekyAghAmAz1wXXgjSGAVFwPWU4WOPyXTeyx95R1cAaQhSZyNrWeiIoWShkB5gDObcpEM9qEfAXG9MC50ua2whlmD3ARzu2Ly+vzL5pZjuy+MPvC3QC9wfXEFSoo+QAAAABJRU5ErkJggg==",frog:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAQlBMVEUAAAD9trb/ioq+rWqxnl+mkE9/oFjlXl5zlktjkC6NdEVWgCLMPj5NgDBGaypJax46Whk3VBkxRhRGKiktJi0uHRCwcSzMAAAAAXRSTlMAQObYZgAAAadJREFUeNrFleFShDAMhBEoZ1x1Qz3f/1VtQm9qgVoZf7h0pqWXr2k2M8eQJMBwSSJSvStpow0sUmdgCHMIbEQTIgCo5CMkzNM0zaEBgPf7x0SNUfUBhHmeQwOoiq4zTPOUhk32BF+VomvAlDAPT1jY+LRxXrQlqA638G3lHkKQxFL0i501vxzus2WIyunjfidUYwb8uClU98mr7CyRFGwrh4ecUwABj61Iwlt15zcwSeHjAGgS379fILxTk+I2mt0gCRmyXpNs5qeJZ4BQKQW43ToABITgEgAU4DaOt58Bwp/fAxChlAzj0zj2gOcKGK8Brh6wyBmw6bv9SCMpAybfy408ZPB4UlUpAp/pBAEbBTiqZO7V4Nm1NESU/BFYdsDSBaQCpAvIDpAWUOwnSBDwSSTt2foUICT7SqVPjx3qaeOUsHBTjOoiAdrr0BCEGK5Ilg7wtwwgrEj3ZKXscnM9AFRCBO5JZE0IGc/+xbIpCV53v8eVjQ9K3qdgV1zro8hrtuIKkC3Cr53dPFIqcxG9EjaPTIPb1DGpVmlEaUNHa924dfgHfQFwmyc0LyT5NwAAAABJRU5ErkJggg==",ghast:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAIVBMVEUAAAD////5+fnw8PDl5OTk4uLd2trYzMydmZlzc3NLSkr5ldknAAAAAXRSTlMAQObYZgAAAYdJREFUeNp9ksGN2zAQRdmDO5iBfN95JlWAgeRuAkLOZuRNzgrcQYLdBoJVOoirjCmRYDYy8i//wIc/n+Q4J7gs6YgdJxFRBBNXVQENRE8yZZG187sKkEIGLi/z/HL5D/Blvt3mH+8Ay044ZgBeb3e90QDVCkz94QFgpbGugOmvDPy2vxNYgMPnDFCAloCoLgDXqf9wfJBgKwAfU/+M8S9AGQH9MXzDSskGYJQRgcMEurkmDSCxfSiABtCeegsssuJbQETFTKS6q6r/v/FOl/1wXSrRtQOESDh1F6aeZG12mKBvC6N9Bq6nBtA8xApM5vCJRxpXAAdgEfg6f/80/wS8wggrMCwjbCl33T09Zw+6dqolB5/Yw45p9xRAORMiaB2hQLTRlLSWHNTXBHICwD6Jv0Qg3E3CGTDWLffOJ7B9NFkTRP1ZYbTRkyCaUxiS6TCyaBhNwwgoOQGcMsp+RBRe38CE4axrhxhKAlYqALmEEqIpRA9D+SwTikQpt1n93R5IcTOKi/wBKsTOnkkgxrkAAAAASUVORK5CYII=",goat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUAAAD////6+vrw7+zq597b1cLArJCenp6ciHaDg4OFcmF0c3NXV1dNTU1APj40MzImjJ+xAAAAAXRSTlMAQObYZgAAA5JJREFUeNqNk71u7EQUx0eb9YqKZ4jOeFPchjAze4s0rObDQrcy9ngU3QKixDNaueAFaChIFFHQR4IGci2078ADoER5g0g8ANqKHs7YeONsyIqf5HP88fP5j3dt8r+ZAAOokPxVQaDgvc/J9Q8bgsQ24oCnlFehfVWYUMrAuT0CMAZVE8JpCFer8O1HfRtFCKVUFdbeVRVuZ7O+jSfQOGEdqkrHKwm2XQHAhRYFaYzOk76Nn0Kg0GCEBW2O8lnfxk8hMCK0rjJSSrNM+razBtc0vtAppOnhpG9PQlJFmjbYAiTY5bRvO4IL+BS1qWqXJ33bFVzjv7z//f5h88fHfXsREXxOxuwKIbhd4YDSyiDaDpQUAXb4TNAaBdxiQQGQ4+H5U7CZ1kbXeL0rRQqAznZCFDDC1tZWOpbzFCPE0wQKtdHZ5/H277pSUEjnczYIBxSsMVGwUbBRoGNhmrLaZeZdVdf2g4mlECk9eiuXg7Dg/tQZ8+Gytu+rWC4WgtIL9SRIu3KZD5d1cFkshRGpkmqISLLitlmFq6v2arXKYvk5M9qWehBmzrbfN6v21za2WG5xSbW3+fN3nkrgez9Myrgkw9DQ/c3h681WONCCA+wRJlQoyvcJAJwPE3zmry79zIbTlcuHCEbVdpE2tb62iTSZM8ttBJdCkZ4UZG3lRKZHRh+OItgQYebSGj0t7Fzb5RAhmIRBcM464xPvTf20BsqVGtbw5/2P95vN8NoPEamiQP4TCsAAIMUe97oXmo/d7rQCzijITq2QYiSkwAAFilWim9LT6+vrchwRBd7BUKAvBQZM/itIBhyi8CyCoUGV4lwA7okXE1IZ71NKCRFn6fnuBCrRUFpbISSTUnUTKoA363Uv8KKUkluFApOqKBcVMhbUpCykKpVdCCnL4sAQJKF8K9hJXZbleSEW87K059OcRIQ+GYR8mkxre14sjua2TqakF7R+txVwYELK6fz4GDseJwhRNApbEjIlx8tlMhwlREIU9sDYyX4B2Jsd4eGGjPnk79eF7v1N/+oaQnpuvrm5ITPnvD9be8Uov+DATXMLKem5++nujiSZ83W+/oqDMJVm9LP3t1yMJySLrC5z/wUHjjD6aeX5gvQ8/vb4SMjbk18u4mdhBLLQzjmddZ9dTvBTuCekyZOWtHi+MsY4pLWOEGqEJJuHzYaQszyZkbZFpaNt16EhhLuFIhuEoDF78ZP9A0Obf2KBegjhAAAAAElFTkSuQmCC",guardian:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAhFBMVEX///+rjEZQjnQtWUcAAADX1c/Y1cvX1czX1MzX08vW083X08rW08vX0snW0snV0crAuq7Auq3Auaq+ua3dkET/gi+DpZy5k2Syk0/wdyjecipqlYPsZCqFhmBmiYDLZSNdf3XeSSh4dVCmXCxOeWbUQSDKPBxBcVpkW1BgVko5ZVJ5CxKoxgN0AAAABXRSTlMAAAAAAMJrBrEAAAOASURBVHjapZaJcttIDAW5lvfIHtnLYiLDee4kzwsL+///F45I66AkW467akSoIHRhhjOkuq5bLper4fL/wHAhiscBItiMIYSgm+j76GOga1xdXXWD4PNy2epHQ9q1HrAz0+mneCswfeB+K/i8Wi6HsZoEA4vFojtP4E1vO8GmvvWw5QUBEd4TrFabBj53F9LbEfZOcLt8WN2ubi8WTEu7J1g9DPUPt5cLPBM83N3e3g2C6+tu4PqYmaCPxk5w99/9XRsvCaLR9+G0Y8ID3f3916/DuO8azwmMgTA4WuQWp7uvEy8KYFObOQpsR4K7S4kJ7Izod1MYaSvwetoivk2wWAyCGR4PUNmZbawHnOWLBTQeqxgZj3PBWQEHbhPRD2TfrlNuOqCmPQs2I6M/I0hCAleAgtwKNrmeMhIux1lBLwklknpy1l0rbfXinMD0SEDTxDwXLlVt2tubwrrbY02fNZFxlEMoKpB2gsfDHz2G/fev735+/6/NcU6yC0lxVtDbv7z78aff39s6EiRylRFxdgoB//z25x/v/kKa5ygD0T778/tAYMCS5rmKsoTKz9wFYRc4kee3OBU0byJtBZr9SFkViAqsnG8yQGpDz0whWqmi0DynPU4eJmy6xUDLffz06UueP+xnBMkueXPz4UvW9ws+thZEveaBkmV2325ubj59gXqFgPV6r4OhhQ9DD4cCIZ0XPK7Xj/MO8lDgFwWzNcjZDBC6cArddBcOkcyld6Htgx+6GXq+g2z6Z8HivEDPCSyxGchInN3K50A22Iim8ZNAESnFgKTjg5URaEyiAZA4mEK4CtPcCs97rngqEukcW5gJsgzGZTEThBKaYaynEjutQ0FRxs4T5z8kmbGF5nJVumYCtdo28NFDVEjpafZ22lQWsw5Mtmo4fg8IcE6fzjKm8EwALrBPvQckV1S5QrgYMDYHAoHBzjqeQogKRVRIY49ZTjQT2K288NEiQiE1C5AeV6o83wdNXRiYC4KUhFNIZELl0SLKgKn2oflG0saaaMCYsdOZYCQlceo9gJTQrttvB4JdOAVItCcTgl0sYIqRnuKUOBJk2i1pp/fi9BS3a/va4nK6uxqReqHFq7naCix5X3B9kiNB9yToUzJvEVi8SSBDvlXwpjVAAl19h6BX3wNm2ng4/SqB3MCVU5T1OgGokfb0/LVpczpVfuqPyjdt8tQvCjuwWwAAAABJRU5ErkJggg==",horse:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAAAD///+lpaWGhoareS2nbh92dnZxcXGPaR1jY2OKVS6AXCJyVBp2SShRUVFvQh9hOh1FPC9ZMxc2NDdOLBM2MCZTJQ5OIgsrKi1JHwkqJR0/Gwg6GAUhHiEfHBcuEwQpDwMjEQcmDQEiDgMbDQUcCAAZBgAPBwMNBgMQAgAIAAABAQEAAAAaegGbAAAAAXRSTlMAQObYZgAABHpJREFUeNqllouaojgQhTOzuurYitKsNCS7pR1lF2fe//n21CUBvMznN3MISYVQP5VKEN0LKitT6Z6rKovNZlMUm6KsnCtgVlVRpbFduYMw8qIKq0zlDkAgd+WrgNKqDNiIilcBmwXXi6rAPARQKOD1CCqroNVWAd++IYJfBVQ7+IOwq55M+PmF1WKLUlRlWRRlWRUPAbufXNiutihlIRE8m8KiwjLxQqHCWVaLtJgFlr6sxqtfoYstURQvRQBgwcAxgB/GusvY8wvVo8HX9Tog+IASRTfbetp9Dqjr3wL4+nCofYxEU8BisX3anQLgf/CRoOjqEELycCuzcvex6voARKQQKGImaPJWUmPoPpb41xQgIplJ3jvuJQXOQTAAKcCErTdspPtljMT5R+w1/CPbZB03SPfv47cRLl9+IHYR1T++AKEdDO7/Ev2TWqci6G8U7XiJAM6ASASeuKOA5Xw2my/b1I4AHyjaCd5z1BFCg04g7WCwnWoCiNEAsnJZ3LPufgh9ZCbA+8fH+yQRCB1Rj7Wftfv5DKHP25Hpa68FHnzYLmDdAdoW5etXhD4yzZGLVAZgZFAAP2e5tAiW6z//WC/bkalugpDWpnA6Se7uALP523qmUzDT3P10CieIRi/yev325vZwBA2lHZleUiA1ceN42U7fz+fvJ1kPKAN0/RFPOzLFjbimyC0DTud/z+f/zifyQnCm9qE83EicI/lIEQA6nUUAgKAAn0VpfxiY/YiiFhwOPichIAuyMl4BbB/QC1GVART1iAQBENAogOS9NACccaCPYQtBAeFGznSAyBLQNPIDpYBAcQLYrlar7Ttqad+3E0CMY4AiAKABcDwenQn29YrmBgAnTgNcFZEB4RlA36JHABQFxEcR9N3n8fjZ9RNAfpsBgIQShEB3EbA/E6QT4x0gzyFQAlxVvZYLnAG5TACQ8Q2AIhEIub/KgdKhvly6z8/ucuFbWYEoeC/mQWQNACFCaDq4dz28u65Hm3IgN3ueqnxf1c8A0wjgBoB4d5DlIEWARFoEYwQ6CMAAcNPH94zIOZBlgz8RI2ALoc4QW0YMX3sGcLniHHIAwS2IP9zNURGyjBkAP10CnNMcjJJoADFqi0AUCF62kHzc5MBLEjUJFoFUDEhz0EejdGxMc+DtwyxmbRGg4CAK9tGSh+dqkgOLIJg3BAMCwFNMe/k60ZCDNIc8AwPAm68TO0O3gCEH+isfIEFoIoM0zKXhbcTbi9OanIMUAE2SCJjNLAPIwdFOFOSg7zkHtvJp8sZLyyjmeEwb7/PX0Y23b9PoLmzYsMVoGrXQGgMyf4/Dwc67rpGmwc2ocBm12kIffic9hEpax3Zjg3Kr5L6BakHZ7jSKAOEScGraXEAl4UkcHDp8feOZYIZctBswPV0ye/0AgDSGPMXGs4TTsKFJys8PqvRXLAihEQQqGPII8UTRAGVA86H+pAcMRyR7WEOGPGTQZECNDcsgsYJVLnLrs9hBx1hqycUkHrUvqxgONt9iUv+p7ocjlD66/wNdcSNfhkmkngAAAABJRU5ErkJggg==",llama:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAMAAADlCI9NAAAAVFBMVEUAAAD868b14rjx3K/v2anr057jypXMqX7EonmlpaW6mnOvkW2liWaGhoareS2nbh92dnaiayOPaR2AXCJyVBpjUT1FPC9BOy82MCYzKSMqJR0fHBcP+iOkAAAAAXRSTlMAQObYZgAAA3lJREFUeNrtV0t22zAMJDAg+0ulxm7URr3/PYsPmUiMXja0vPJYJMbyAiOAGjynN7ACCmVkPO0AButlC1ueRnEkgBydAHBA45afIICJ8bEG/htvdhHRcI4APIGU7wVAauUB4wJiUX6OgAIymjaACLNLEBjPxJRZTjkDh4Ag5EHEuCUvym8pgOgTAZFWdw3Gc4EU3LQCpPhEQJbs2TXGpxTbbyygKNIhcom8UpRVbiwNQxS0AytEuvaqMs+YlWz4jQQwMdEL8wuRUgaaAIFyhkjN27ILwgvcjIhsx5AAZiL+8kWDUiiqAHddAL0AAM2TiWvVBgXw9x9PTz++814Ac61H2SFMUAFiplq2dAaYTctRC/RCawCFbQ1B4oFaopwC4OZ9uwJ49+HpowWg0QqAHCgVKdCsf18CEYn7cWbIdx61QQf3AhQQRc67FrgEA9roHK0AVXQCwIAAbj8NSt2R2xvC8R6eI6COYOwFZEEMZmlngGm0BYi3Gf0hjFZDcu58KH7xJhA5GRmCBLCjFpRqTGK3cHgEAGZhrkYA8Fjx+etXIl1MtaDOkgCsS7JsBcRcZF+ul2ngDEROejUBrxTgGuMQKnojMgAMRdWMsRYwRSt1cSy/m9gSSVbsBCjEhHH1oiEfgCVn9h3vb3bMl3oCvABdE9pAYpACAxUAwTP7jhbIQvJBAM3fIfttqS4wZkQIv4+AoI0nWP2lHEDCDaoCDAgQ1ONskQXuL4ibSRD171sQXYCA6ykEBgRYqpAB1tWiHD/U8tfxr8U0imimeNoMiImp3+VtIG3cebnM0zRf1hbTKCQjQ0R0N6Iri4SoQwFrhzSKLJLjgywwgqzL4wcBy3vplf65SRcsP8xbxFjRLS7lBwKmdZknLf28bmgaQv2H4SEr8Ri8pN6ZlnXV69u31eNyky54Ul1xOQ1eckm9M9ljX66/fl4vq9Hn5+d5uAKezD7FVv1W99Q7k2Wd5t/XaV6DXqZpVEDpbCZvQuqdabHE02xZGx0X8AlS70xLvP/zrPGdpvPQO9N6hFMF9M50bxw4033RO9PRMDoVvTMdDaNT0TvT0TA6Fb0zbSbQcpcu9M7kE8hH0LqhZwrosJlAm7mU7od47FmH0Bpz6eev6+XuAqbpMmt0ev2t9J4CZheg17qh6X6ICTSHDzR6TwHrIdIDDzzwwAMPjOA/NfpDB1xAY2EAAAAASUVORK5CYII=",minecart:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEUAAADBxMW2ubqvsrOprq+epKaUl5iMkJKFiYt1g4ludXlsdHhham5SVVZNUVI/QkMaGx04QmSDAAAAAXRSTlMAQObYZgAAATFJREFUeNrtk9FuwyAMRVMa7jWzwf3/rx3QLmsiOlpV2lOPk+BYypFRzLIs53A6hXA617sSzsurEABTSkRPsLxGAIEYI0ACiCAC4tqp5fbARGApJavRsLoggLHGyrWvmAoOIPSWtiamgmw7MgIhcQuAM0G+U+TcBERcY+wNgJwJPO9wBAq3Blo+E+wM7ghSIRqkVGaCPV3w9RsTQUVAMRMC+MlkUHusISVfLlkoW8ZRbRmTRFXNTG9YZ1wdCoTqXsy8dNysuJtQ7Z6JoBTV0rlmrk3gB0zHW2gCU7XS6ZlrugrKxp+Ccuyg3ATljscC0eLtM/d+aX+tVfOy46GAQwGfFsiwA5HnBRwK+O4W/k/w/m+U4SDJ84MkMhxlmY7y8TCVGy8fpsR+WnXDGuPq8mHIN8fuL8tkDiT4AAAAAElFTkSuQmCC",parrot:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/////7nn/6j3/5TPGxsa7u7vZra23t7ewsLCoqKienp6ZmZmWlpaRkZGQkJD3cwmGhoYlJSUPDw8AAAD7udxiAAAAAXRSTlMAQObYZgAAANJJREFUeNrN0tEKwjAMBdDGxpnbZqtx/v+32jYMN9QKPnkhYdBDk0EDHSIQ0CGBDkEV/pFgahtgBhxEZu7nSGj1Ajg6SAmpVQe4M98hgHCMVUAgqklbObgyXwGhXczUWlXg10Z+bj/4i3X19gra1KJrDfVGakcARdFyqyEHS353w35J2oGiBRO8++miqrU2MJdZIN6pJy+Lz3Cgs04yeaees6qeByMypZQo548jLDdl9mnE8D18B+EyBiG4+AGMduBwCi2/g+BiAAJ/BTwEW/4XPABsMA1LwNN2rAAAAABJRU5ErkJggg==",piglin:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEUAAAD/gID/////7aj/5bX12iryuobMzIPCwnTooHTVlXreihzJgmWHh1e6ZkWtVTKiWTplXEOhPjiESzOXQyKNNQ1rOSR6JiF2Kw08OS5TKxpgIwo6GgwhHhyEOBusAAAAAnRSTlMABHH+CSEAAAKgSURBVHja7ZZxU9swDMXDWAMSRspwYiDQ7/81pyd5Vzzf3Oz4t78GRU2kF9m5Hm8y7h8sMM34zMQrcKZj3BvTRHMVoHVVJwRm41n1eSDwYFSB2QW0AoG4psY0JgRAK5BeiV7TWCD2wLt7AXkhehE1Du1BL6CPKT0quL4HgMgFxIBAy6xt3hICsYniHBRIzET+6Ij1jxg3/NUyXxEwiK0wiITZBJC3And3d10uzCzKjOkNOzGrX6wKJoUVpiTJQ5MbVseyqpX9SEQWmHUV+4obhI8LQCd5aHJDBALCRLIaQuRfWSRhBK51M7bKQ5MbqwpLjAyB5Kmw6AoFToZAgNCE0OQQMIXEGHkFtU3UUsUU9XX6DnlocgNNql4HvEuRAzWO/Kx342xMFXbibWwb81TJOS+oOyQg9reK8mafqbLkJR8UEFEW3nRjzDBV8nJwAgGs1qoY5DKB0QrEukrJZc9BcXz7S6AiolspC8AMIJeLQME9xC9JJppL3FmKen/J1moPsOhFzfi4gXNZvMuKdiL0xmPLVjBaHTBiK1DQH8lealfyB1mIsbEqIABcBETQKjiDYsRi84I0WwYp6yeilFgSp/iFBgJVSMchBeTsR82RVgFiCIAJgMRkihBn/w0XI9ZS+/GxtK1LXyaQVnkHn3acLDhlh6TIkQms6s05/Tw9vQUfJzs+3v45Aa4mXCTCCnh3nj73T0wQOY6oQyT080WAqcKO70H2F9tsQq3zpzdLOJ/P7+/nX+84I8SqvT//2QKEv+umGzdu3ABH/cLAFxwVGPuC4xMs353AGAmM/ELvC8b0fqHzBUN6v9D7gjG9X+h8wZjeL3S+YEzvFzpfMKb3C91/5TG9XxD5zgTy3xP0fqHzBWN6v9D5gjG9X7jmC34DNs5yRa6KJBYAAAAASUVORK5CYII=",pillager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEWnra0CAgIAAAD////Hzs6Trq2VoKCVnJyVm5uTmZmQlpaOk5OLkZGKkJCIjo6EiYlmh4VzeXlwdXVobm5nbm5SWFhQVlYyZjx2QypfNiEmR0daLzg5Ojk5OTlPKxlLJi0fNjYqKikeKio+Hg8lJSU2GB4yFwkeHRwjEBQUFBN24XvqAAAAA3RSTlMAAAD6dsTeAAACP0lEQVR42u2VYZOaMBCG1TOCDUYQemeqRDEq8v//YN9laQYckaAzbT/ckyPEmXsfdhlnnUwbwlBKGS7CBjmZfn6m6WQ6G2DiBHUegrTmFUHIpGeQSorT9fcEixANvCt4rwVm4V5ig7/AvQRJ+AuQQPOSgjjwzYHPw4Im267AnaW3wIXbdxINC9zDZUPbADwEHMnztZTrPOc467wEa+SJc54vl3l+bgqADPgJJHf78SXl1wd/oDgb1sMCeg4yifqxXC5Vwk93DAsSMoBE/QQqkZxPEvrDNSxIWJGyIOW4Y1gwG+BfCS4Nt4YXBJso2ngLTsBe7bUlQB6GMQLkrYfAvwJq4Z0KYEDeR3C6QzOGBEb/wQCtRwjMZbVabQ7G5Qk/weFCa3fYIb874Nxa/YLj0QkuN1r49/0eEZxbq1dw/AWDp8C/haLwbMGa7XarjTa2UwGWXwXNW7a6Zqu7EQ8BPfoKDDSEfcJDAYWtIQlTMBVvXR4KIDaoHApotLmWTFWUZVGVXXoEhquHgS4nAF6C2Qi+Bd8CYi60ibIoe1mAvAmy4C2BzWB4XSCszdDDaAGHxVzE2jCxGC2IYyHimAcOBPFoAWY34MFJuxMU+5pyPhei5PPDCcRD9niiHaP34AQlJg+oRFGIqgA9A6Q9XGlrC0oSxKCi/FiBfcJdC27R5gQ49662gN8VV0ibE7jCUOWzH5KiNrgOuwJXEZ7aJ7jd4QT3pfa1oJTKAqWCDPcsU9noL5IKAhUFUaRqAvX/TKTfnHu1gRak8lQAAAAASUVORK5CYII=",rabbit:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAMFBMVEUAAAD02ezy2Ovx1unxzue0pZSkjXOUgWKUfWKLdVp7aUpqWUFjVENhU0NZTDtSSDkNYhzDAAAAAXRSTlMAQObYZgAAAYBJREFUeNp10L1uE0EUxfERBdhQ0PAivAFPgUJHFT5ewC7TBJ8LBW4i3TM0VEgz09B6ptiOV+ARkjJt5GJyNbubtZLdv7zro52fJWtdq5aqENe3prV37vl2v959dK2SCsERQBrYwtoNwOdAP4AVrAsDZ7iUAWSG6B/AZtsAvsgl6VqBjGkEL84/NcAPvBoBlSnFfmL37z/Exxi/xj8x9kBVUsptBsX1DRjtCIAbUkjqSptZYflSyikA0HVdm8dM0pdaK87x7WwC9qTNZ+/ckH7G1Xv7RVCIj+3emXrzdgT0geJczaH9JcKnarlHGSDhoynOg2PJQYUqPpVuDtRjUVGIip3PAedrf7kVLtz0NYXarkUAEBBgGQgVBBeBMlKC+kUQfLQPEyGK3WYLi3RT2adDyr7kYAAbWD6dgpJKLnYr2UBfKqegDh0jx2JH96TVz9tpzLX+MYJf8+Bl+juNuV7FEeQFcPg9jbleH/YDuNvPA3s+jcd9L+1FqEiqVlZMZ/eZmCL8uK8JdAAAAABJRU5ErkJggg==",shulker:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAzFBMVEWOYI4AAAD////m8K3h6KjT1ZrHw426tnmzr3GsqGujdqOjdKOjcqOec56ecp6ecZ6ecJ6ebp6ebZ6Xa5eXapeXaZeXZ5eXZpeXZZePZ4+PZo+PZY+PZI+OZI6PY4+OY46OYY6OYI6MYYyMYIyMXoyJYImHYYeJX4mHYIeHX4eHXoeHXIeHW4d/XH+BWoF/W3+BWYF/Wn9/WX9/WH9/V39/Vn93V3d3VXd3VHd3Und3UHdwUHBwT3BwTnBuT25wTHBuTG5uS25uSm4AAADM1DMFAAAAAnRSTlMAAHaTzTgAAASDSURBVHja5ZN/e5s2EMdpk2Xrthg8dKfYuMVet4U7sTr86CRskuL2/b+nnUiN/Xh7nhT2574guNOdPjoJEby6ULFYlEWSbGtp5Sr5ayM6xnr7QsFlR9I4JtswuYbZunITBOc5LwMWlhGZpOUKjK1HAwpCpTWAQq2U4v1oQM3gpQBiRMzay/iLgJUlRAWAKBi2xWjA0rGK1R2AFga5ajSgYI34fAMCP44H0B0opTQqQEQevweJywCw3wJUxpWjAe8aAwBKAfR7UE/YAwC8Q+URCBOWUFKMKlaACCJqzw+SmJtv+Iy50szSSEPWlKMBya5h43ZM1nJmXTEaYIu6bauybevicV9V7Yu/c7EMk+JduCyW0bJIwmybhCtvl8l8IbGsTEKxZ6tiEa2KJJK45C3mSz9uu5xlwdKxJUeWHTnecbtyxpkdu9yxv/ZLlzXkjDXea8w+OeY6FovaYE6NQdMwsDOKXBlJBMUG6t/lTOiaLSuWnMyVoXEEvS9viQeJ7Q8/+AuQWqkIUWkQyYPalTWAIF3gZSSegyiOAaVTKiiNQp+qfBa7emsQlEIEgdyxqwqGGJWSBNCKmqrIUAN6Oorv6iBxJI4IY60cp0njfQ+RHsebd45RpMUFbWm9sKRVjH4IgvhBRE5s6YoRFdsqMo1CD9DyMk01zy0o6NNjJFuGPl8jgC+LXOUrSDdp2jdQ1EoF6dr78lTQ70mart9u0rdpisD7lSXx5ZIbNbfB1sBwOEK/5uzkz8X/kzE9+rfUFIWBwZ/5Cu6dSQeAy9f3jk6+zHYvbQBak0r+egA43gRzY0/E3FUh2VMCuTLkZohHZMsod+sBmLsy+N09nBJ+/dDeu4chIfztw/7efThN8P7h031zlv/+YR9441Kbr/L2oTscum64uxf/xkt1xCLKmTNmw58nALr80PX6fOj4MAXAncmNlxgvL2Fz4XZ5ZwTiJSR+Gg/gjg7S2AjniSdUIOP6S9afT1qCr5sOxhdiDjQNcJDLc7ibAqDOPLEcJpnfs0YDpOp+C5npMKkCX7c/SE9yC2LCUc46zpmIc8PUTQHQ8U96kuckALHpb5GhlwGXv3Mnkqll+v7570d5dhtGURRGx85ZeBvezue3Rz+chdE8nIdDfC7ZMmQAhICgENNhACoFZ/6tUggAp3iM+hgPnhMkrPTwBSONWqtzICAinIAQK1QDwBMV4NkMMwRBxCfAnfZTDBP8on3B6hmwXcoKNUAMAD8nW1Mns9DPqATy07L4Y5tE8xkoP0D9uCqzIpHFgxaiBolnQWIpZkdgHGtyvF5YFtsAO5ZG6dLbO4O0Y2QrccnLXQ7kqI8HBTfsZIQ8M0u23LKTniZrSHrJlaWxfUTiufRVEheW5R1Jy3ZlsEyrtkzL9mNayPvjp9W6eqylr07rtko/7pO0fpT4XmJttSnbZVpLbvlYie/7vh6k6+urq+vrm5s3b25uXo3SEXAl+i+Aq17/V4Df/3Ndf9W3A64uNBbw/T/0Q68RS/B6/eXq6svrZ/u7XiMBNzd+CycDjhs5BfA3y7f3PUOzujsAAAAASUVORK5CYII=",sniffer:"data:image/png;base64,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",spider:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAKlBMVEUAAACSiX+MgndgVEhPRTxHPjWoDg49NC0yKyYmIBsmHxoaFA88AgIiAADotIQjAAAAAXRSTlMAQObYZgAAAgpJREFUeNp10rFu1EAQBuB7B8RDUCIs0tB5rUuUNAivfBKvkI5b/eNLyVkzg6hQYGfyAkn6oDwAFUUqUvA4rHTGthTlb7b4P+3urHZV4uqqsuKbHdNNz3S9A5V1NUVIVW0leQfOCuQvhNzTDJhF3W6RlUvJV5R7przjBSBxu5KbHmV73OJaUc7DBDIVIKs5zuSU4nSIkYotgSUox25z0GAtfe+qk+GWN0PCARhI1fgwyJhjpOb7QDQBN0DVJ9BRiJmhB8CQAlhlAfZNaxAfb8ziwuSLQeqmrdx8BMJi0qsvBrms6hP3AuZIFxNYRJBj6L5W9d8UYg8SGcGmjSlRFuOB1/vqz7v6mLYbcscIEoYOAjNLoB+/6urtbwarGabB2q4juBnR5dnj+fnZ4wlDM2QEbQhdVHXOoLr69PBwVFfM0sNmgEE9g5Ve34U3dTh9IcZu/0Gsw2atboDL6f37u48vL+7E4c4jaD80YU2ult0v/NvP01d+707CGMG2DVVH5uNrPk0a2oog7vYM4G1qgN6FngEAgZmc8aQKMTSBgY62KbShCwIKaTODGPhztU6csA11FTgJQhNpBuGoNM2QIGDsQx0ktfF4ARKDIiKYmUAhdMZtxzIDYN+g5xLJVO4Aw8BYAG9L7waQeiaQGwlIZ5ARu9g7a9Yc0wYFK+kCeAbgDvfegdK7qyy+4z9b0kGP3NmJngAAAABJRU5ErkJggg==",tadpole:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAABtUz1jSTNTOSNJLxlEKhQWCgDfr9AwAAAAAXRSTlMAQObYZgAAADdJREFUeNpjYGAyCglgAAFGRVcHMINNzMgARBuliSUZGQEZzkZGxsHODNiAs6KwA5RlYsBAOQAAqGUGQPKmAvcAAAAASUVORK5CYII=",turtle:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAMFBMVEUAAAD////K0JHCt4ComnNHv0qUi2OCiFQ/pEI4jTopfUkwcj8gakMlZDMbWzExMTA/pVLKAAAAAXRSTlMAQObYZgAABDNJREFUeNqd1s9r40YUB/DAZr1Z3JT+By2S6XnRiJyD9ZjmtBRSUbWnQITMQlgKXeJL6aGxlpltD2VZjKY2uRW2JodAlxAxm9DD4satYnKuI7OH0qUkEfQ/6Iwk/7isrNnvSUb2h5n3pHlekqkG9AVC60vvnLuEPJsCDxMRL01pYIWQ1hRwo+T6leeBixUA234MsJV98Cxdxx5YFuDSwG3b/tzFX8nLigtoDZngpdlSAHYbOYCMmoZMBaAa+LaIQ0/i+GKpsm1ouqYhFYARCRCWAZamGcLACkD4ITn+nvzXyQCUAWvlgdWQBQGlrBNLYFn8WO7BVABGTQ/Aa56kQAUAtBoAzgHl3DI0rV4XVVQDVvyWtT4FdE0dcDbr9yaAbiJ1wN80Pkqv7riWoWsIGmrAXX9Py4BbKN2CjhQBsolmQE0dWAlaZlaDZWTUTFNDpirwDNazGnhQr2mAVWsQMjf7cgWQ2IJuYjWgGoZTwHIxbIMqwHl7AmCrpmMFYBkAHhx5YfpSt971ZL7tt8yC35Y5Vfdq97JLxoiFkNwBqJyq5Ds9B8IgIIQ89lzLQGZ5wHmqTQBGbZ+0AOmarius4CnKAR4y33E+Qyapm6R8DeietZ4DzJft2CAy5YcjbYEEKp5nU992GKEAIMu4VRLotPGP2aWF0AZlbQCsMl2rnaMJQEQC9gIZCFQAfvTgMAd8/wvKfpU9MKHkXCSs7fE2iGx8uuQ4NmX8uGVstJA5edpNE0q/W7IHtHNMZPIVpPMaewtr8tYuWHJezwD1pPN6rRiocnbm22TQ4SPO/2XsivOLOcAwFgNhNyBdxnnMTznrnPITNWCV8796vd6IixE75pyfxvEMSOf1x8XAe6PLg2ESHYwuo+RG7CJOrn+b3kznNS4G7kT9YZIk/eh3r/FtEg2T5lzT5bxetIJlgETkbxDBjWbTA1ifA3StEKiOX0H28oDIcMSvB75t0+jqMAd0ExUC798IADdFdgVwniSsG9hOl+2/zu6n8xoXrSDuAzSaMi7g81HI6B+93oCyw5IPUvXkDVgZsA2f3PAwePLcdnpkBtQWAWNAzTRfm/djzsgvsgbPaX5EyHm9CHCnwMOYd3uB/Ov600EOuHJee4VFvGx4GbDb2ImTq5eBWAHp8kkR5bzGBcDqOJqtYGcYhzSSXRjQvAbpvMaFW7h8NAW+kTVwRBfOnEkN0nldCPB5YCQAW3Th5ylQcQGKpr0EmtMapMCXogZPJFCQghXsR2kbD4blANmFeUB0IRgQ26FnndclAdkFKwdAdiH44YyQSD6JpSK70NjNa9DciTlnpBtFAe2UB8YwXcF9CTCxggErD8RvADLgkXiZRjzsMkK7jJcFVuN/5l7nm3icRCFjL4fJRdkuXPfngCi54uxP1hEzonQX4v7sRMLnMefhfpIwXrAFhXyw4P7/kgmYSeJwxJwAAAAASUVORK5CYII=",vex:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFBMVEUAAABthJtgeY9Ta4H////z+Pzg6fHG2eqivNWUrMOGn7eCl6t5kqp6j6RthJtgcoMKluMvAAAABHRSTlMAoKCgEjok+wAAAPlJREFUeNq1yL1Kw1AAhuE3hxYrRYm5gmivQL0Hwa1LnAtCFpdOjuKY4KBjfnYhIUPWEnIBhgxZRSjHC8hp3KWxkg5ndfD5pu8FDqNAKQkwKXIE9Fuj3zCQjECYDCaPs4tOQP9pDME4B1MAbIwTgJEwv2yixPcCPw2igGkcljlZ3YfP33WSJTB9yhG25HaJPLUBtkCdvl5fpVlVVRy3ntdQZW+eX6e77UIcNqAke0eq+JCgGvam4apoUGqtHtC067K9Q1O+l2WMJl9RvPAnl7+0L5Ao9NBB16GxZpZloTGFeWYC47l7DzrXcUF3sHTQjW9YoHMW4zn/5QeNK1xt8XQSVQAAAABJRU5ErkJggg==",villager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAbFBMVEX///++iGy3gnKze2J6enpra2thYWFUVFRUU1NISElMODM9LSkAAAD///++iGy3gnKUj4m1e2eze2KBfXl/e3eja01vbWqQXkNjYmAAlhFUU1N1Ry93QjVcQjpISElMODM9LSkzJBEjIyMjGBTjk4HHAAAADXRSTlMAAAAAAAAAAAAAAAAA7Uh4SAAAAn9JREFUeNrtlN1ymzAQRm3cuG5C9oMFJIW0idu+/zt2/wieiTNAk0ufgdEKs0cryWJXB0RguUEO1/Xzc871Irs3AViTQdnYLgAzGfmPkFnT9V4tiAI+IyCB/19AVgA+KyCaF9FZL3iDlfUCAl0AjpYmFgWagjkJfjNCtCwgml7niyrmcJ0gho7mQkDrBJALsAhwyYY1IAP4bahgdmKFgBme8PjE/PRI3mMGG1gWxMpnE3GetmFiWQA/yJl/CpzJutggYAYYIjAyQfu8XlAv8DWCb5sFqW2Btk2llJSKctwqIAFJ8oVFQRL+ChcCEKGlKwJSQLRfENBHFYCMZYG+2F6tAOauFgRtC8K1RYSdVqhgd6eCUmIUxTtdKknySXchOYOQEhkAmNmm4YJ5FPWM0nRdbKNGZRxHH2KElx8CRmWCvu+7roxd17nADE1qhdR0RfP1mQZMbAqwnxcT9KnYS5Lc903Tq0U6jVTt+Xo5SesWCUMvIheUMvh5GnwqqpKUJPU0jUSik57jnyswABWgitMYU2MjZlw0X9ppDbpOTMSkwCCQCXw+FBe4uGGUdehGy3950ScaEC4/duwCaWHPorEdGSM/0mMRRlKYogD2bZzGZvuJIa+/SFIQYfCjqvb7w6EKDiYAGe5h4DU4/3o9ezSzF94JGK4IC84Tr+d3PHzwTbTqvQVkqjMlSEa5KjhYLUElPJxOD8r9/cmjGQJxJmMgQVN2B0UCbUxxPJ2+OyI4BnfKEcAwxF95mARL1BcAnJmcTIRqq0DzQsCZwJsEUIgGFUCIKmiTQEceZsGwRlBPQGHY3EOQB2Jalz9XAB11crFWUH+Sm+AmuAlugi8T/AM2/NtEbUTDnAAAAABJRU5ErkJggg==",warden:"data:image/png;base64,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",witch:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAmVBMVEUAAAD///+2qJWrn42rnYmmmoijlIOgkoCPj4+YiXeWdliWdFcltDWUc1Z6d3eAcl6PbFNra2uQXkN6XnBhYWFoWUwMixp1Ry8vaDVaTTZMTExHT0hQQy0/Pz9IPCc6OjpANSQkQCg1Lh0dPAkxKRwoKCgsKRg2F1guJxonJiYwFE0YKRoTLgEeHh4oEEIdCy8REREVByUKDAvCurIkAAAAAXRSTlMAQObYZgAAA1lJREFUeNrtloFS2kAQhiPphVJbKVq10XDG2Ba4mjvx/R+u/+5yR1U0d2SqYyefgcuO+T/2NoYxyw4PMyLPlVL5KN+gsuz8/Pg46+bw65dPtEoeginjBdFAkAvTEkwVxen1eoJRjg30FfTbgjAKQ0wlD0NQTEKQNq98ntcANhU3fQkVile1talogRJBkQsiIFG3QPnrVQHkNBhAt8BHCgKFxBURJSh8/hcjFeULECXwMzs4KYqTAwpLXgxFtwBXkWM6/gDGU0kHugUTMoDpeHx6Oh5PleQnExy0dAsmrICAmUp8S/ZeKQum/BFIFUyYWIEGP0GMYAEM+OeCgnkVQQNqCJrlcqlBDXBWqVGuKlSE1lVZVpW2wAtoeSxoWEB1XZVaKV2WqEBVleCBwNEaBFoEsm4Epaa3RgQlTvHmSGCQdxCYIKglWEOAbpdNAxclaoR8hWZwOGedgcABWkVQe0ENFY4lIIFmgVQaabw4CPzKglrX/MkNTuigAJpmQaUbrl4WIMXD07JKhHagMfiGigYmHFXVIahl9UNssANUAGdIw7FTgMslSAMAItAiCDpsCT/ZLubzppHcfD4D4tFVSV1UGwHycOwWXMwR/Hg0w3JBAuwaR83AQhORHtDjbgGYHc1mtH4DMjbN1DpUPKnseRZ+eRFjrbPWGKx88vev4gQGOQPYZJIFoQO7swNZXsSGLTzpYNEpcIA7gEHOxRY7RBFgBs4L/BycW6P0HaBar52VLxz7tAMJiUC6ySwiEBiZMucd8oR5IkAqCMS1EVi+2iwMFw5hEUTAAkuC2xsIaENUCdEC9EICRGy6wPEMsGkvWKcK1jKDrcAlbmENgoArt7/A7CFwDwRuDwFP0W+BJ5J+GyEwj+6CSRQYEZitgH6iBU4ExgtMssAaayCgR5QqK/8B2PgtWMsCePhhIB+wCX8H4PYGQdKJAG9JHYjAypNhKQ0ShshXs8DtIXCISMECrliYpbEK3AcSBS2zv6C9Y9pB8IaC/rfRkyZYRfKsoI0kspGOzrtuQdtHcEe8R0H/GfS/C23gd/uYNMH19+u9BFcbLs8+n11ePSSpgxU6WLUeea6TJsiz2xd88tsJ+m8h9osj+gvl3QnA6j7rBQ+uD9z2wMDAwMDAwH/EH571WWMJHeH4AAAAAElFTkSuQmCC",wolf:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAw1BMVEXt5+jk3t/c3Nzf2dnW0NHKxsfIwsO3t7ferIWzs7Nu1Je3q6WhoaGdnU10oIaBgYEatVh+dnBegyJlZi1iWkAodi5WVlZUVFRERERHQjs+PTBENiY5ODVDNSWAAHY/MCQzMzMtLSg1Kh8sLCo0KR4ZGRkAAAD////k2Nnd2tvV0NDTz8/Kx8jJwcLBvr7UtaTOr5bEq5ywqqefmpaalZGnj36ajIiVhnmheFuUe2iBdm2Mb1JJQjk5PD85ODUtLSgSFBY76smzAAAAJ3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi/HzzAAADR0lEQVR42s2UbXfbNgyF6Wli41WZqm3NtkQOZ3ZVwwCFbShO6r6k/v+/ahdwtjOp/dJvvZT5gqP7HAC2GYZhWFDBYBIilsvLy5Ty8HsPiY4yirIQBgtfX1/HLlbD/xUcQIXh51JI1ut1TumiXyz6SKKkAi4AzEQGCLH7AhCpFDxMmBmAlNIffYw9MlMgPewrAPDHKWCxiAtmEFjYyogIrNd//frixU8/lyKIF4htdUAIsxIETiEAfMPGQRmDC0HzGt1Xz6AKUwAXJxC8VAgkb+TgIgIacV//7UE1K8Fsb477/fGN+Q1HAFw9e5auErZi5KcVANcsA+D3H+7vP+yFvA9CvBZhr8qmU4dP9Ukx3AzABP/DAwjE9hbGb1TcYnYCynCOksJYpwCR/cM9QfcPe3lSApWwAgJ5AbazPhhqCkgpvdwddnjOzlLKOZnEatH/CKKEgJ0w5CuA7WHrgL8dkNMVLMKj18BWxegBIgVHZQrIOb/cHDYO+CGfAIl1VMHjDYRvFATYQ9hMAb9Am08bJHF2dg6Z/wqq+9j3nf3wYmhjFWOoY+xirOowBWw3Nzc3R3w22+1utz0fHqFl09Z919e1WAqS61hBDsA6B4Bg/g36cNidP5bySKVtYmeDCkSr6nl8jiy6PkYsU8Dh+Omk4+EEIHosVFV17LouFhKlEioQapj7LoZYTwE2NaucXl9cvLa9XwSLUHW9DaERDayRd4ghdH++whzngM+f373LKwA+fnz/dvCLIIaqRgv6qGKAEJxQhVcd0ghfBSQHvH2P0I8h4O3Tt6Cqo+riZK8i9MV98HThcVZMQsyDiLVO7CjYEGYqSlSFAABYUwDx6T/YwEesTANWOIRxNCuRFLZWLtGqpmmW7QxAzGZdqllUDFBOAMvA9pgVuTRt2yyXmOYZCDOsjYqjeGAqEBPEBSIERkCaJue2BWbeA7jwcYACMbAl4CWI+NYBVAyQVmkOuNPxTvVubAUWJZQAJxh2ZAD8RKNyaVv7r+c5AH6MUbMKwW5NZKtamP26RgiPjkwruLMxpgBhvr29ZTEAmwsAtq3gMdbpNDIjfSBWaTUFrFJOVlvGQHrAm9XNPmEAwCqc7UWbpoDh2/WdAf4B+LQj08eGOFAAAAAASUVORK5CYII=",zombie:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAclBMVEUAAAAAzMyPj495nGVxlVtvlVxtlVtnkFYAr69ph1Z6d3cAqKgAnp5ae0gAmZlra2tXdUdOezZhYWFIdTJJcTVWScwAf39KaS0+aS07Yi9MTExGOqU2WiUAaGg4UiYAW1s/Pz86MYkwKHImIVsoKCgaGho5R/XAAAAAAXRSTlMAQObYZgAAAkJJREFUeNrtk2FzmzAMhpPNm+0akmjVqFRGEsPy///iXtnlml27laRfeWwswZ0eI3NsZkRFVWwUdHMrIqzKitKC3C4gVjhgOQLVOwQEAcvdAmViwZQiuKOFsj2J3i1gZWEVrAqEbxaIlkHMAni5QK15VRSpwTI/UFuYFnx/q2ZCQYyMEq5PSKWMJW8gZSv//av75rneqcJFxMqLemdiiq1zLraR6llimEtk2fdnpvZycfFyaeGScggkqKclLQjqWShG1RhR/XIKCEgWtCByLJs96tOTPiIROoogMhEvO0QWqf+AWqXdsQIEWfhP/AS/wXy//VXYji/Mz8N2G5iIPxYcC28EW0CsnxOwqnyqhTf/yQhy3/fjNE096Lru1CRl0dR0oGlSCAn5bteZYI7vCcYiGIYuhUa1CQH5kFIAVRbAHP8S9FeCoQhC2XgAKSDB8h9BroIMQc79aRhOwQwoqzkyTMt3Ke3m+CrIVWAxwzacTiZIRQBCgwyXgAgEtGAzk/tcdh6R2ETNkEyAOSCfBcykLjovyuy9j68CVPUAS4lWZB3AkQa8b1WlJMzqW9eykvhD9O8IkM1foR5Bg3wwlzlQJ967loQ0Ru+vD7EKMjJggnJsuKosYZpA2TsXiVnjdQvnsxVa+fm8B93QdbanlRUBkoBFWMk574RF/PUbPJ9R+OVhj/BsgnEap1xIoZsmyO1EcyYI0IFXQTz4+CoA+4f93uIPAMHYF3JTcyRokkmodbFVEo6HeNisrKysrKysrPyDP68WY0lh7YK7AAAAAElFTkSuQmCC",zombie_villager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAt1BMVEVskkNwbWdVczVjW1tWYC5jVC9IYC4/WChUSSg4TSM4OyExPSUuNyQAAAD///+Iqlt3oEd2kk9skkOCe3RyhFFmij9ffzdwbWdedUVXdUdVczVjW1tUZkBOazBgXjhOaC1HZTdQVzdUTU1PUTNBWSiZKys/WChcQjpURypDTCQ4TSNKPj42TCpJQSRMODNCNzcxRB8vQh44OyExPSUsPRw7MTEyNyQqOSE9LSk2MiAzJBEgKxgjIyNApSiHAAAADnRSTlMAAAAAAAAAAAAAAAAAAKroblcAAAMeSURBVHja7dF/X9s2EMfxrGs3oGtxHXTSztIuE+mtyG1+2HNKxp7/49pXIoHSUhxe65/52E6cmHs7MpMXuxxR3p0iFF6+3Gz+vPztlxdP9AZN9h8IfQ1c/vEMgMkgItV/kYbN5upys/nw4dWhAOarGkS4Ay6vthmYfL8HAHNViD2w3VxdbbfPAGoMV1VVuz2w/fTpeUBt6ro6r4yWwtnZycnJ2dmrgwHMwqjODbmADgeIqrx6Q5XBKvALSlRyOCZjAJM5ZyJig0dgKkN3sw4HjwMEwTAFNlRfuIpDnkIF4DAOMAsRgGAMuYvzEBwmQRTG0SGAGlYX5hfv8AjfzYMT54QzwJ4OAkRFHc//Kc2ZhJQ9xvHCBwDCAkGE3r4P4f1bkuxB9ThRFR4FNCVFqQ9zFHp8wr7OX616XBsFUt+vUwbmf6M5ZtI6rYHgwqpfrQ4BUhb6eanv0rpba5dS32G8GwdOT1+f5iYjjQG/PvmHTwE/o5/Q5EFWhVnUNnc9FxBCfChgUd91/et7gDGu9AjgyNHnm8833wIQvgDoe7+A6to9CnQQvgQYgDwCmLqmGwhjS1Bh4scAMiQPgCZnse2zdmqbiHkS2Qm2URG11iEict47T6gAbRObaNvYNjhpbIyxzIsw42War8a4U/M8Nod5vQdibNs4DC0MGzNgpzGlJEiTLfMQUIwYNo68I3WexO2BdgCgQ3awNVlJuzrcGpP5FVkhckCIRLGLuwVaTaopJLyBGuK9gPmptRbfNFMc1qozZfFCglQKoIgDOeagA7Ym3zEOXa7MN1gASBBRlQwZQ96JOBwF4MCeidg5puQ4YMELPNgO5UeXsWVEgAYVJlMALkIBKIAAwHnH0SI8FE2xybddYr5tmzZFJAwAeWYIorcACzE5KC4wBwDLYVgu24gwPeR57KlFHpN1XRsiZgehACKz2wUJ+xnOF7uu/1pcL77Kq6caZUD2/0ZFAk9zM9XrfYvrb1L1TPXvNbFnhwqQEPOKZbVKaZW0aWIpvy+bZVOypUYT7vFx9tGz9zOcFuDN/+gIHIEjcASOwBH44cB/1lQM4ZNhKecAAAAASUVORK5CYII="};E();x();k();R();import*as z0 from"three";var Ti=class{constructor(e,t){this.object=e;this.animations=t;d(this,"clock",new z0.Clock);d(this,"animatedObjects",new Set);d(this,"state")}createAnimationState(){let e=new z0.AnimationMixer(this.object),t=new Map;for(let r of this.animations)t.set(r.name,e.clipAction(r));return this.state={mixer:e,animations:this.animations,actions:t,speed:1,loop:!0},this.object.traverse(r=>{if(r instanceof z0.Mesh||r instanceof z0.Line||r instanceof z0.Points||r instanceof z0.Sprite){let i=r.onBeforeRender;r.onBeforeRender=(s,o,v,a,l,c)=>{let u=this.clock.getDelta();e.update(u),i?.(s,o,v,a,l,c)}}}),this.animatedObjects.add(this.object),this.state}playAnimation(e,t,r){let i=this.state.actions.get(e);if(!i)return!1;this.state.mixer.stopAllAction();let s=t??this.state.loop;return i.setLoop(s?z0.LoopRepeat:z0.LoopOnce,1/0),i.clampWhenFinished=!s,r===void 0?i.timeScale=this.state.speed:i.timeScale=r,i.reset().fadeIn(.1).play(),!0}updateAnimationParams(e,t){e!==void 0&&(this.state.speed=e),t!==void 0&&(this.state.loop=t);for(let r of this.state.actions.values())e!==void 0&&(r.timeScale=e),t!==void 0&&(r.setLoop(t?z0.LoopRepeat:z0.LoopOnce,1/0),r.clampWhenFinished=!t)}stopAnimations(){this.state.mixer.stopAllAction()}getDelta(){return this.clock.getDelta()}};function h3(n,e){let t=new Ti(n,e);return t.createAnimationState(),t}function E4(n){return"parts"in n&&Array.isArray(n.parts)?n.parts:[n]}var x4={up:{dir:[0,1,0],u0:[0,0,1],v0:[0,0,0],u1:[1,0,1],v1:[0,0,1],corners:[[0,1,1,0,0],[1,1,1,1,0],[0,1,0,0,1],[1,1,0,1,1]]},down:{dir:[0,-1,0],u0:[1,0,1],v0:[0,0,0],u1:[2,0,1],v1:[0,0,1],corners:[[1,0,1,0,0],[0,0,1,1,0],[1,0,0,0,1],[0,0,0,1,1]]},east:{dir:[1,0,0],u0:[0,0,0],v0:[0,0,1],u1:[0,0,1],v1:[0,1,1],corners:[[1,1,1,0,0],[1,0,1,0,1],[1,1,0,1,0],[1,0,0,1,1]]},west:{dir:[-1,0,0],u0:[1,0,1],v0:[0,0,1],u1:[1,0,2],v1:[0,1,1],corners:[[0,1,0,0,0],[0,0,0,0,1],[0,1,1,1,0],[0,0,1,1,1]]},north:{dir:[0,0,-1],u0:[0,0,1],v0:[0,0,1],u1:[1,0,1],v1:[0,1,1],corners:[[1,0,0,0,1],[0,0,0,1,1],[1,1,0,0,0],[0,1,0,1,0]]},south:{dir:[0,0,1],u0:[1,0,2],v0:[0,0,1],u1:[2,0,2],v1:[0,1,1],corners:[[0,0,1,0,1],[1,0,1,1,1],[0,1,1,0,0],[1,1,1,1,0]]}};function m3(n,e){return n[0]*e[0]+n[1]*e[1]+n[2]*e[2]}function R4(n,e,t,r,i=!1,s=64,o=64,v=!1,a=[]){let l=new t0.Euler(0,0,0);r.rotation&&(l.x=-r.rotation[0]*Math.PI/180,l.y=-r.rotation[1]*Math.PI/180,l.z=-r.rotation[2]*Math.PI/180);for(let{dir:c,corners:u,u0:f,v0:p,u1:g,v1:y}of Object.values(x4)){let A=Math.floor(n.positions.length/3),b=c[0]!==0,_=[];for(let S of u){let C,M;i?(C=(r.uv[0]+S[3]*r.size[0])/s,M=(r.uv[1]+S[4]*r.size[1])/o):(C=(r.uv[0]+m3(S[3]?g:f,r.size))/s,M=(r.uv[1]+m3(S[4]?y:p,r.size))/o);let P=b&&v?S[0]^1:S[0],B=S[1],H=b&&v?S[2]^1:S[2],G=r.inflate??0,O=new t0.Vector3(r.origin[0]+P*r.size[0]+(P?G:-G),r.origin[1]+B*r.size[1]+(B?G:-G),r.origin[2]+H*r.size[2]+(H?G:-G));O=O.applyEuler(l),O=O.sub(t.position),O=O.applyEuler(t.rotation),O=O.add(t.position),n.positions.push(O.x,O.y,O.z),n.normals.push(c[0],c[1],c[2]),_.push(C,M),n.skinIndices.push(e,0,0,0),n.skinWeights.push(1,0,0,0)}if(v)for(let S=0;S+1<u.length;S+=2){let C=S*2,M=_.slice(C,C+4);_[C]=M[2],_[C+1]=M[b?1:3],_[C+2]=M[0],_[C+3]=M[b?3:1]}n.uvs.push(..._),n.indices.push(A,A+1,A+2,A+2,A+1,A+3)}}function Fe(n,e,t,r={},i={}){let s=t.texturewidth??64,o=t.textureheight??64,v,a=e.startsWith("block:"),l=n?.material.map;if(a){if(!n)throw new Error("worldRenderer is required for block textures");let _=e.slice(6),S=n.resourcesManager.currentResources.blocksAtlasJson.textures[_];S&&(s=l?.image.width??s,o=l?.image.height??o,v=[S.u,S.v])}let c={},u={positions:[],normals:[],uvs:[],indices:[],skinIndices:[],skinWeights:[]},f=0;for(let _ of t.bones){let S=new t0.Bone;if(_.pivot&&(S.position.x=_.pivot[0],S.position.y=_.pivot[1],S.position.z=_.pivot[2]),_.bind_pose_rotation?(S.rotation.x=-_.bind_pose_rotation[0]*Math.PI/180,S.rotation.y=-_.bind_pose_rotation[1]*Math.PI/180,S.rotation.z=-_.bind_pose_rotation[2]*Math.PI/180):_.rotation&&(S.rotation.x=-_.rotation[0]*Math.PI/180,S.rotation.y=-_.rotation[1]*Math.PI/180,S.rotation.z=-_.rotation[2]*Math.PI/180),r.rotation?.[_.name]&&(S.rotation.x-=(r.rotation[_.name].x??0)*Math.PI/180,S.rotation.y-=(r.rotation[_.name].y??0)*Math.PI/180,S.rotation.z-=(r.rotation[_.name].z??0)*Math.PI/180),S.name=`bone_${_.name}`,c[_.name]=S,_.cubes)for(let C of _.cubes){let M=[];R4(u,f,S,C,a,s,o,_.mirror,M),M.length&&(i.errors??(i.errors=[]),i.errors.push(...M.map(P=>`Bone ${_.name}: ${P}`)))}f++}let p=[];for(let _ of t.bones)_.parent&&c[_.parent]?c[_.parent].add(c[_.name]):p.push(c[_.name]);let g=new t0.Skeleton(Object.values(c)),y=new t0.BufferGeometry;y.setAttribute("position",new t0.Float32BufferAttribute(u.positions,3)),y.setAttribute("normal",new t0.Float32BufferAttribute(u.normals,3)),y.setAttribute("uv",new t0.Float32BufferAttribute(u.uvs,2)),y.setAttribute("skinIndex",new t0.Uint16BufferAttribute(u.skinIndices,4)),y.setAttribute("skinWeight",new t0.Float32BufferAttribute(u.skinWeights,4)),y.setIndex(u.indices);let A=new t0.MeshLambertMaterial({transparent:!0,alphaTest:.1,side:t0.DoubleSide}),b=new t0.SkinnedMesh(y,A);if(b.add(...p),b.bind(g),b.scale.set(1/16,1/16,1/16),v){let _=l.clone();_.offset.set(v[0],v[1]),_.needsUpdate=!0,A.map=_}else c1(e,_=>{A.map||(_.magFilter=t0.NearestFilter,_.minFilter=t0.NearestFilter,_.flipY=!1,_.wrapS=t0.RepeatWrapping,_.wrapT=t0.RepeatWrapping,A.map=_)},()=>{let _=A.map.image.width;_&&s!==_&&(A.map.repeat.x=s/_);let S=A.map.image.height;S&&o!==S&&(A.map.repeat.y=o/S),A.needsUpdate=!0});return b}var k4=[{pattern:"furnace_minecart",target:"minecart"},{pattern:"spawner_minecart",target:"minecart"},{pattern:"chest_minecart",target:"minecart"},{pattern:"hopper_minecart",target:"minecart"},{pattern:"command_block_minecart",target:"minecart"},{pattern:"tnt_minecart",target:"minecart"},{pattern:"glow_item_frame",target:"item_frame"},{pattern:"glow_squid",target:"squid"},{pattern:"trader_llama",target:"llama"},{pattern:"chest_boat",target:"boat"},{pattern:"spectral_arrow",target:"arrow"},{pattern:"husk",target:"zombie"},{pattern:"zombie_horse",target:"horse"},{pattern:"donkey",target:"horse"},{pattern:"skeleton_horse",target:"horse"},{pattern:"mule",target:"horse"},{pattern:"ocelot",target:"cat"},{pattern:/_minecraft$/,target:"minecraft"},{pattern:/_boat$/,target:"boat"},{pattern:/_raft$/,target:"boat"},{pattern:/_horse$/,target:"horse"},{pattern:/_zombie$/,target:"zombie"},{pattern:/_arrow$/,target:"zombie"}];function p3(n){for(let e of k4)if(typeof e.pattern=="string"){if(e.pattern===n)return e.target}else if(e.pattern.test(n))return e.target}var g3=n=>Co[n],b3={zombie:1.85,husk:1.85,arrow:.0025},T4={zombie:new I1(0,1,0),husk:new I1(0,1,0),boat:new I1(0,-1,0),arrow:new I1(0,-.9,0)},Me=class{constructor(e,t,r,i={},s={}){d(this,"mesh");d(this,"animations");d(this,"animationControllers",[]);let o=t,v=p3(t);if(v&&(t=v,s.tempMap=v),i.customModel){let l=E4(i.customModel);this.mesh=new t0.Object3D;for(let c=0;c<l.length;c++){let{modelPath:u,modelType:f,metadata:p}=l[c],g=new t0.Object3D;switch(g.name=`custom_part_${c}`,f){case"gltf":{new g4().parseAsync(u,"").then(A=>{if(g.add(A.scene),p?.scale){let b=p.scale;g.scale.set(b,b,b)}if(p?.offset){let{x:b=0,y:_=0,z:S=0}=p.offset;g.position.set(b,_,S)}if(p?.texture){let b=Bt(p.texture);g.traverse(_=>{_ instanceof t0.Mesh&&(_.material=new t0.MeshBasicMaterial({map:b,transparent:!0,alphaTest:.1}))})}if(A.animations?.length){this.animations=[...this.animations??[],...A.animations];let b=h3(g,A.animations);this.animationControllers.push(b);let _=p?.animation,S=p?.animationLoop??!0;_?b.playAnimation(_,S):b.playAnimation(A.animations[0].name,S)}}).catch(A=>{});break}case"obj":{let A=new Vt().parse(u);if(p?.scale){let{scale:b}=p;A.scale.set(b,b,b)}if(p?.offset){let{x:b=0,y:_=0,z:S=0}=p.offset;A.position.set(b,_,S)}if(p?.texture){let b=Bt(p.texture),_=new t0.MeshBasicMaterial({map:b,transparent:!0,alphaTest:.1});A.traverse(S=>{S instanceof t0.Mesh&&(S.material=_)})}g.add(A);break}case"bedrock":{let y=JSON.parse(u);if(p?.scale&&g.scale.set(p.scale,p.scale,p.scale),p?.offset){let{x:A=0,y:b=0,z:_=0}=p.offset;g.position.set(A,b,_)}for(let[A,b]of Object.entries(y.geometry)){let _=p?.textures?.[A]??y.textures?.[A];if(!_)continue;let S=Fe(r,_.endsWith(".png")||_.startsWith("data:image/")||_.startsWith("block:")?_:_+".png",b,i,s);S.name=`geometry_${A}`,g.add(S)}break}}this.mesh.add(g)}s.type=l.length===1?l[0].modelType:"special";return}if(jt[t]){let l=new Vt,c={zombie_horse:`textures/${e}/entity/horse/horse_zombie.png`,husk:b4,skeleton_horse:`textures/${e}/entity/horse/horse_skeleton.png`,donkey:`textures/${e}/entity/horse/donkey.png`,mule:`textures/${e}/entity/horse/mule.png`,ocelot:y4,arrow:_4,spectral_arrow:w4,tipped_arrow:A4},u=c[o]||c[t];u&&(s.textureMap=!0);let f=u||ki[t];if(ki[t]&&(s.isHardcodedTexture=!0),!f)throw new Error(`No texture for ${t}`);let p=Bt(f),g=new t0.MeshBasicMaterial({map:p,transparent:!0,alphaTest:.1}),y=l.parse(jt[t]),A=b3[o]||b3[t];A&&y.scale.set(A,A,A);let b=T4[o];b&&y.position.set(b.x,b.y,b.z),y.traverse(_=>{_ instanceof t0.Mesh&&(_.material=g,_.name==="Head layer"&&(_.visible=!1),_.name==="Head"&&i.rotation?.head&&(_.rotation.x-=(i.rotation.head.x??0)*Math.PI/180,_.rotation.y-=(i.rotation.head.y??0)*Math.PI/180,_.rotation.z-=(i.rotation.head.z??0)*Math.PI/180))}),this.mesh=y,s.type="obj";return}let a=g3(t);if(a){this.mesh=new t0.Object3D;for(let[l,c]of Object.entries(a.geometry)){let u=i.textures?.[l]??a.textures[l];if(!u)continue;let f=Fe(r,u.endsWith(".png")||u.startsWith("data:image/")||u.startsWith("block:")?u:u+".png",c,i,s);f.name=`geometry_${l}`,this.mesh.add(f)}s.type="bedrock"}}playAnimation(e,t=!1){if(!this.animationControllers.length)return;let r=!1;for(let i of this.animationControllers)i.playAnimation(e,t)&&(r=!0)}update(e){}static getStaticData(e){if(e=p3(e)||e,jt[e])return{boneNames:[]};let t=g3(e);if(!t)throw new Error(`Unknown entity ${e}`);return{boneNames:Object.values(t.geometry).flatMap(r=>r.name)}}};globalThis.EntityMesh=Me;E();x();k();R();import{default as C4}from"mc-assets/dist/other-textures/latest/models/armor/chainmail_layer_1.png";import{default as B4}from"mc-assets/dist/other-textures/latest/models/armor/chainmail_layer_2.png";import{default as P4}from"mc-assets/dist/other-textures/latest/models/armor/diamond_layer_1.png";import{default as I4}from"mc-assets/dist/other-textures/latest/models/armor/diamond_layer_2.png";import{default as H4}from"mc-assets/dist/other-textures/latest/models/armor/gold_layer_1.png";import{default as O4}from"mc-assets/dist/other-textures/latest/models/armor/gold_layer_2.png";import{default as F4}from"mc-assets/dist/other-textures/latest/models/armor/iron_layer_1.png";import{default as D4}from"mc-assets/dist/other-textures/latest/models/armor/iron_layer_2.png";import{default as z4}from"mc-assets/dist/other-textures/latest/models/armor/leather_layer_1.png";import{default as L4}from"mc-assets/dist/other-textures/latest/models/armor/leather_layer_1_overlay.png";import{default as U4}from"mc-assets/dist/other-textures/latest/models/armor/leather_layer_2.png";import{default as G4}from"mc-assets/dist/other-textures/latest/models/armor/leather_layer_2_overlay.png";import{default as N4}from"mc-assets/dist/other-textures/latest/models/armor/netherite_layer_1.png";import{default as W4}from"mc-assets/dist/other-textures/latest/models/armor/netherite_layer_2.png";import{default as V4}from"mc-assets/dist/other-textures/latest/models/armor/turtle_layer_1.png";import{default as _3}from"mc-assets/dist/other-textures/latest/entity/elytra.png";var De={skull:{bones:[{name:"head",pivot:[0,12,0],cubes:[{origin:[-4,0,-4],size:[8,8,8],uv:[0,0],inflate:1}]},{name:"overlay",parent:"head",pivot:[0,12,0],cubes:[{origin:[-4,0,-4],size:[8,8,8],uv:[32,0],inflate:1.2}]}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},head:{bones:[{name:"armor",pivot:[0,12,0]},{name:"head",parent:"armor",pivot:[0,12,0],cubes:[{origin:[-4,23,-4],size:[8,8,8],uv:[0,0],inflate:1}]},{name:"overlay",parent:"head",pivot:[0,12,0],cubes:[{origin:[-4,23,-4],size:[8,8,8],uv:[32,0],inflate:1.2}]}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},chest:{bones:[{name:"armor",pivot:[0,12,0]},{name:"body",parent:"armor",pivot:[0,13,0],cubes:[{origin:[-4,12,-2],size:[8,12,4],uv:[16,16],inflate:1}]},{name:"leftarm",parent:"armor",pivot:[5,10,0],cubes:[{origin:[4,12,-2],size:[4,12,4],uv:[40,16],inflate:.85}]},{name:"rightarm",parent:"armor",pivot:[-5,10,0],cubes:[{origin:[-8,12,-2],size:[4,12,4],uv:[40,16],inflate:.85}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},legs:{bones:[{name:"armor",pivot:[0,12,0]},{name:"body",parent:"armor",pivot:[0,13,0],cubes:[{origin:[-4,12,-2],size:[8,12,4],uv:[16,16],inflate:.5}]},{name:"leftleg",parent:"armor",pivot:[1.9,1,0],cubes:[{origin:[-.1,0,-2],size:[4,12,4],uv:[0,16],inflate:.5}]},{name:"rightleg",parent:"armor",pivot:[-1.9,1,0],cubes:[{origin:[-3.9,0,-2.01],size:[4,12,4],uv:[0,16],inflate:.5}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},feet:{bones:[{name:"armor",pivot:[0,12,0]},{name:"leftleg",parent:"armor",pivot:[1.9,1,0],cubes:[{origin:[-.1,0,-2],size:[4,12,4],uv:[0,16],inflate:.8}]},{name:"rightleg",parent:"armor",pivot:[-1.9,1,0],cubes:[{origin:[-3.9,.01,-2.01],size:[4,12,4],uv:[0,16],inflate:.8}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32}};var y3={leather_layer_1:z4,leather_layer_1_overlay:L4,leather_layer_2:U4,leather_layer_2_overlay:G4,chainmail_layer_1:C4,chainmail_layer_2:B4,iron_layer_1:F4,iron_layer_2:D4,diamond_layer_1:P4,diamond_layer_2:I4,golden_layer_1:H4,golden_layer_2:O4,netherite_layer_1:N4,netherite_layer_2:W4,turtle_layer_1:V4};var T3=Ct($0),j4=120,Mi=n=>n*(Math.PI/180),Si=n=>Math.max(0,Math.min(1,n)),Ci=(n,e,t)=>Math.max(e,Math.min(t,n)),Yt=n=>(n=(n+Math.PI)%(Math.PI*2),n<0&&(n+=Math.PI*2),n-Math.PI);function Y4(n){return n<0&&(n=4294967295+n+1>>>0),n.toString(16)}function Q4(n){if(n===void 0)return;if(parseInt(n,10)===0)return"rgba(0, 0, 0, 0)";let e=Y4(parseInt(n,10));return e.length===8?`#${e.slice(2,8)}${e.slice(0,2)}`:`#${e}`}function w3(n,e){return n===void 0?e:n instanceof V.Quaternion?n:Array.isArray(n)?new V.Quaternion(n[0],n[1],n[2],n[3]):new V.Quaternion(n.x,n.y,n.z,n.w)}function _e(n,e){return n===void 0?e??new V.Euler:n instanceof V.Euler?n:n.yaw!==void 0&&n.pitch!==void 0&&n.roll!==void 0?new V.Euler(-Mi(n.pitch),-Mi(n.yaw),Mi(n.roll),"ZYX"):n.x!==void 0&&n.y!==void 0&&n.z!==void 0?new V.Euler(n.z,n.y,n.x,"ZYX"):Array.isArray(n)?new V.Euler(n[0],n[1],n[2]):e??new V.Euler}var H1=Math.PI*2;function A3(n,e){let t=((e-n)%H1+H1)%H1;return t>Math.PI?t-H1:t}function M3({username:n,nameTagBackgroundColor:e="rgba(0, 0, 0, 0.3)",nameTagTextOpacity:t=255},{fontFamily:r="mojangles"},i){let s=V0(64,64),o=k3(i),v=s.getContext("2d");if(!v)throw new Error("Could not get 2d context");let a=48,l=5;v.font=`${a}px ${r}`;let c=String(typeof n=="string"?n:new o(n).toString()).split(`
21458
- `),u=0;for(let p of c){let g=v.measureText(p).width+l*2;g>u&&(u=g)}if(s.width=u,s.height=(a+l)*c.length,v.fillStyle=e,v.fillRect(0,0,s.width,s.height),v.globalAlpha=t/255,!!Gr(n,o,s,a,"white",-l+a))return v.globalAlpha=1,s}globalThis.getUsernameTexture=M3;var F1=(n,e,t,r)=>{for(let a of t.children)a.name==="nametag"&&a.removeFromParent();if(n.username===void 0||n.username===null||(typeof n.username=="string"?n.username:new(k3(r))(n.username).toString()).startsWith("EMPTY"))return;let s=M3(n,e,r);if(!s)return;let o=new V.Texture(s);o.needsUpdate=!0;let v;if(n.nameTagFixed){let a=new V.PlaneGeometry,l=new V.MeshBasicMaterial({map:o});l.transparent=!0,v=new V.Mesh(a,l),v.rotation.set(n.pitch,V.MathUtils.degToRad(n.yaw+180),0),v.position.y+=n.height+.3}else{let a=new V.SpriteMaterial({map:o});v=new V.Sprite(a),v.position.y+=n.height+.6}return v.renderOrder=1e3,v.scale.set(s.width*.005,s.height*.005,1),n.nameTagRotationRight&&v.applyQuaternion(n.nameTagRotationRight),n.nameTagScale&&v.scale.multiply(n.nameTagScale),n.nameTagRotationLeft&&v.applyQuaternion(n.nameTagRotationLeft),n.nameTagTranslation&&v.position.add(n.nameTagTranslation),v.name="nametag",t.add(v),v},E3={},K4=n=>n.charAt(0)===n.charAt(0).toUpperCase();function x3(n){if(n!=null){if(Array.isArray(n))return n;if(typeof n=="object"){let e=n,t=Object.keys(e).filter(r=>/^\d+$/.test(r)).map(Number).sort((r,i)=>r-i);if(t.length&&t[0]===0&&t.every((r,i)=>r===i))return t.map(r=>e[String(r)])}}}function J4(n,e,t,r,i){if(e.name)try{let l=(K4(e.name)?bi(e.name):e.name).toLowerCase(),c=new Me("1.16.4",l,t,i);if(c.mesh)return F1(e,r,c.mesh,t.version),c.mesh}catch(l){reportError?.(l)}if(!n||!(0,R3.isEntityAttackable)(n,e))return;let s=new V.BoxGeometry(e.width,e.height,e.width);s.translate(0,e.height/2,0);let o=new V.MeshBasicMaterial({color:16711935}),v=new V.Mesh(s,o);return(E3[e.name]=(E3[e.name]||0)+1)<6&&F1({username:e.name,height:e.height},r,v,t.version),v}var D1=class{constructor(e,t){this.worldRenderer=e;this.mcData=t;d(this,"entities",{});d(this,"playerEntity",null);d(this,"entitiesOptions",{fontFamily:"mojangles"});d(this,"debugMode");d(this,"onSkinUpdate");d(this,"clock",new V.Clock);d(this,"currentlyRendering",!0);d(this,"cachedMapsImages",{});d(this,"itemFrameMaps",{});d(this,"pendingModelOverrides",new Map);d(this,"motionCache",new Map);d(this,"_wasThirdPerson",!1);d(this,"_tpBodyYaw",0);d(this,"_tpHasBodyYaw",!1);d(this,"uuidPerSkinUrlsCache",{});d(this,"currentSkinUrls",{});d(this,"loadedSkinEntityIds",new Set);d(this,"playerPerAnimation",{});this.debugMode="none",this.onSkinUpdate=()=>{},this.watchResourcesUpdates()}updateAutoWalkFlags(e,t,r,i){if(!t.playerObject?.animation)return;let s=t.playerObject.animation;if(r<=0)return;let o=i??t.position,v=this.motionCache.get(e);if(!v){this.motionCache.set(e,{pos:o.clone(),speed:0}),s.isMoving=!1,s.isRunning=!1,s.moveAmount=0,s.runAmount=0;return}let a=o.x-v.pos.x,l=o.z-v.pos.z;v.pos.copy(o);let c=Math.hypot(a,l)/Math.max(r,1e-6),u=1-Math.exp(-r*12);v.speed+=(c-v.speed)*u;let f=v.speed,p=(C,M,P)=>{let B=Si((P-C)/(M-C));return B*B*(3-2*B)},g=.08,y=.6,A=4.3,b=5.6,_=p(g,y,f),S=p(A,b,f);s.moveAmount=_,s.runAmount=S,s.isMoving=_>.15,s.isRunning=S>.55}getLocalSneak(){let e=this.worldRenderer.playerStateReactive;return e?.movementState==="SNEAKING"||e?.movementState==="CROUCHING"||!!e?.isSneaking||!!e?.sneaking||!!e?.isCrouching||!!e?.crouching||!!e?.controls?.sneak||!!e?.controlState?.sneak}updateThirdPersonHeadAndBody(e,t){let r=e.playerObject?.animation,i=this.worldRenderer.cameraShake.getBaseRotation(),s=i.yaw,o=i.pitch,v=Si(r?.moveAmount??(r?.isMoving?1:0)),a=Si(r?.runAmount??(r?.isRunning?1:0)),l=v>.15;if(this._tpHasBodyYaw||(this._tpHasBodyYaw=!0,this._tpBodyYaw=s),l){let g=1-Math.exp(-t*(18+10*a));this._tpBodyYaw=this._tpBodyYaw+Yt(s-this._tpBodyYaw)*g,e.rotation.set(0,this._tpBodyYaw,0);let y=(25-8*a)*Math.PI/180,A=Ci(Yt(s-this._tpBodyYaw),-y,y);r&&"lookYaw"in r&&(r.lookYaw=A),r&&"lookPitch"in r&&(r.lookPitch=-o);return}let c=85*Math.PI/180,u=55*Math.PI/180,f=Yt(s-this._tpBodyYaw);f=Ci(f,-c,c);let p=Math.abs(f)-u;if(p>0){let g=p/(c-u),y=s-Math.sign(f)*u,A=1-Math.exp(-t*(6+10*g));this._tpBodyYaw=this._tpBodyYaw+Yt(y-this._tpBodyYaw)*A,f=Yt(s-this._tpBodyYaw),f=Ci(f,-c,c)}else{let g=1-Math.exp(-t*5);this._tpBodyYaw=this._tpBodyYaw+Yt(s-this._tpBodyYaw)*(g*.15)}e.rotation.set(0,this._tpBodyYaw,0),r&&"lookYaw"in r&&(r.lookYaw=f),r&&"lookPitch"in r&&(r.lookPitch=-o)}get entitiesByName(){let e={};for(let t of Object.values(this.entities))t.realName&&(e[t.realName]=e[t.realName]||[],e[t.realName].push(t));return e}get entitiesRenderingCount(){return Object.values(this.entities).filter(e=>e.visible).length}getDebugString(){let e=Object.keys(this.entities).length,t=this.entitiesRenderingCount,r=Object.values(this.entities).filter(s=>s.playerObject),i=r.filter(s=>s.visible);return`${t}/${e} ${i.length}/${r.length}`}handlePlayerEntity(e){if(!this.playerEntity){let t=new V.Group;t.originalEntity={...e,name:"player"};let r=new V.Group,i=this.setupPlayerObject(e,r,{});t.playerObject=i,t.add(r),t.name="player_entity",this.playerEntity=t,this.worldRenderer.scene.add(t),this.updatePlayerSkin(e.id,e.username,e.uuid??void 0,$0)}this.playerEntity.originalEntity={...e,name:"player"},e.position&&(this.worldRenderer.sceneOrigin.getWorldPosition(this.playerEntity)||this.worldRenderer.sceneOrigin.track(this.playerEntity),this.playerEntity.position.set(e.position.x,e.position.y,e.position.z)),e.yaw!==void 0&&(this.playerEntity.rotation.y=e.yaw),this.updateEntityEquipment(this.playerEntity,e)}clear(){for(let e of Object.values(this.entities))this.worldRenderer.sceneOrigin.removeAndUntrack(e),k0(e);this.entities={},this.currentSkinUrls={},this.motionCache.clear(),this._wasThirdPerson=!1,this._tpHasBodyYaw=!1,this.playerEntity&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.playerEntity),k0(this.playerEntity),this.playerEntity=null)}reloadEntities(){for(let e of Object.values(this.entities))this.update({...e.originalEntity,delete:!0},{}),this.update(e.originalEntity,{})}watchResourcesUpdates(){this.worldRenderer.resourcesManager.on("assetsTexturesUpdated",()=>this.reloadEntities()),this.worldRenderer.resourcesManager.on("assetsInventoryReady",()=>this.reloadEntities())}setDebugMode(e,t=null){this.debugMode=e;for(let r of t?[t]:Object.values(this.entities)){let i=r.children.find(s=>s.name==="debug");i.visible=!1,this.debugMode==="basic"&&(i.visible=!0)}}setRendering(e,t=null){this.currentlyRendering=e;for(let r of t?[t]:Object.values(this.entities))e?this.worldRenderer.scene.children.includes(r)||this.worldRenderer.scene.add(r):this.worldRenderer.scene.remove(r)}playEntityModelAnimation(e,t,r=!1){let i=this.entities[e];i&&i.traverse(s=>{s instanceof Me&&s.playAnimation(t,r)})}render(){let e=this.worldRenderer.worldRendererConfig.renderEntities;e!==this.currentlyRendering&&this.setRendering(e);let t=this.clock.getDelta(),r=Math.min(t,1/30),i=this.worldRenderer.viewerChunkPosition,s=10*10,o=this.worldRenderer.playerStateUtils.isThirdPerson();if(o!==this._wasThirdPerson){this._wasThirdPerson=o;let v=String(this.playerEntity?.originalEntity.id??"player_entity");this.motionCache.delete(v);let a=this.playerEntity?.playerObject?.animation;a?.resetLocomotion&&a.resetLocomotion(),this._tpHasBodyYaw=!1}for(let[v,a]of[...Object.entries(this.entities),["player_entity",this.playerEntity]]){if(!a)continue;let l=v==="player_entity",c=String(l?this.playerEntity?.originalEntity.id??"player_entity":v);if(l)if(a.visible=o,o){let f=this.worldRenderer.playerStateReactive.eyeHeight;a.position.set(this.worldRenderer.cameraWorldPos.x,this.worldRenderer.cameraWorldPos.y-f,this.worldRenderer.cameraWorldPos.z);let p=this.worldRenderer.playerStateReactive.position;if(p&&typeof p.x=="number")this.updateAutoWalkFlags(c,a,t,new V.Vector3(p.x,p.y,p.z));else{let g=this.worldRenderer.sceneOrigin.getWorldPosition(a);this.updateAutoWalkFlags(c,a,t,g?new V.Vector3(g.x,g.y,g.z):a.position)}this.updateThirdPersonHeadAndBody(a,r)}else{let f=this.worldRenderer.sceneOrigin.getWorldPosition(a);this.updateAutoWalkFlags(c,a,t,f?new V.Vector3(f.x,f.y,f.z):a.position)}else{let f=this.worldRenderer.sceneOrigin.getWorldPosition(a);this.updateAutoWalkFlags(c,a,t,f?new V.Vector3(f.x,f.y,f.z):a.position)}let{playerObject:u}=a;if(u?.animation){let f=u.animation,g=(Number(a.originalEntity?.metadata?.[0]??0)&2)!==0,y=this.getLocalSneak();"isCrouched"in f&&(f.isCrouched=l?y:g),u.animation.update(u,r)}if(a.traverse(f=>{f instanceof Me&&f.update(r)}),!l&&i&&a.position){let f=a.position.x-i.x,p=a.position.y-i.y,g=a.position.z-i.z,y=f*f+p*p+g*g;a.visible=!!(y<s||this.worldRenderer.shouldObjectVisible(a)),this.maybeRenderPlayerSkin(v)}a.visible&&this.syncArmorPositions(a)}}syncArmorPositions(e){e.playerObject&&e.traverse(t=>{if(!t.name.startsWith("geometry_armor_"))return;let{skin:r}=e.playerObject;switch(t.name){case"geometry_armor_head":t.children[0]?.children[0]&&t.children[0].children[0].rotation.set(-r.head.rotation.x,r.head.rotation.y,r.head.rotation.z,r.head.rotation.order);break;case"geometry_armor_legs":t.children[0]&&(t.children[0].children[2]&&t.children[0].children[2].rotation.set(-r.leftLeg.rotation.x,r.leftLeg.rotation.y,r.leftLeg.rotation.z,r.leftLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-r.rightLeg.rotation.x,r.rightLeg.rotation.y,r.rightLeg.rotation.z,r.rightLeg.rotation.order));break;case"geometry_armor_feet":t.children[0]&&(t.children[0].children[0]&&t.children[0].children[0].rotation.set(-r.rightLeg.rotation.x,r.rightLeg.rotation.y,r.rightLeg.rotation.z,r.rightLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-r.leftLeg.rotation.x,r.leftLeg.rotation.y,-r.leftLeg.rotation.z,r.leftLeg.rotation.order));break}})}getPlayerObject(e){return this.playerEntity?.originalEntity.id===e?this.playerEntity?.playerObject:this.entities[e]?.playerObject}isCanvasBlank(e){return!e.getContext("2d")?.getImageData(0,0,e.width,e.height).data.some(t=>t!==0)}async updatePlayerSkin(e,t,r,i,s=void 0){i!==$0&&this.loadedSkinEntityIds.add(String(e)),r&&((typeof i=="string"||typeof s=="string")&&(this.uuidPerSkinUrlsCache[r]={}),typeof i=="string"&&(this.uuidPerSkinUrlsCache[r].skinUrl=i),typeof s=="string"&&(this.uuidPerSkinUrlsCache[r].capeUrl=s),i===!0&&(i=this.uuidPerSkinUrlsCache[r]?.skinUrl??i),s??(s=this.uuidPerSkinUrlsCache[r]?.capeUrl));let v=this.getPlayerObject(e);if(!v)return;if(i===!0){if(!t)return;let l=await He(t,"skin");if(!this.getPlayerObject(e)||!l)return;i=l}if(typeof i!="string")throw new Error("Invalid skin url");if(this.currentSkinUrls[String(e)]===i){if(s){if(s===!0&&t){let l=await He(t,"cape");if(!this.getPlayerObject(e)||!l)return;s=l}typeof s=="string"&&this.loadAndApplyCape(e,s)}return}i!==$0&&(this.currentSkinUrls[String(e)]=i);let a=this.worldRenderer.worldRendererConfig.renderEars||t==="deadmau5";this.loadAndApplySkin(e,i,a).then(async()=>{if(s){if(s===!0&&t){let l=await He(t,"cape");if(!this.getPlayerObject(e)||!l)return;s=l}typeof s=="string"&&this.loadAndApplyCape(e,s)}}),v.cape.visible=!1,s||(v.backEquipment=null,v.elytra.map=null,v.cape.map&&v.cape.map.dispose(),v.cape.map=null)}async loadAndApplySkin(e,t,r){let i=this.getPlayerObject(e);if(i)try{let s;if(i=this.getPlayerObject(e),!i)return;let o,v;if(t===$0){let l=await ye($0);s=l.image,o=new V.CanvasTexture(l.canvas),v=l.canvas}else{let{canvas:l,image:c}=await ye(t);s=c,o=new V.CanvasTexture(l),v=l}o.magFilter=V.NearestFilter,o.minFilter=V.NearestFilter,o.needsUpdate=!0,i.skin.map=o,i.skin.modelType=zr(v),i.skin.isCustom=t!==$0,wi(i);let a;if(s?r&&(a=V0(64,64),Lr(a,s),r=!this.isCanvasBlank(a)):r=!1,r){let l=new V.CanvasTexture(a);l.magFilter=V.NearestFilter,l.minFilter=V.NearestFilter,l.needsUpdate=!0,i.ears.map=l,i.ears.visible=!0}else i.ears.map=null,i.ears.visible=!1;this.onSkinUpdate?.()}catch{}}async loadAndApplyCape(e,t){let r=this.getPlayerObject(e);if(r)try{let{canvas:i,image:s}=await ye(t);if(r=this.getPlayerObject(e),!r)return;Dr(i,s);let o=new V.CanvasTexture(i);o.magFilter=V.NearestFilter,o.minFilter=V.NearestFilter,o.needsUpdate=!0,r.cape.map=o,r.cape.visible=!0,r.elytra.map=o,this.onSkinUpdate?.(),r.backEquipment||(r.backEquipment="cape")}catch{}}debugSwingArm(){let e=Object.values(this.entities).find(r=>r.playerObject?.animation);if(!e||!e.playerObject?.animation)return;let t=e.playerObject.animation;t.swingArm&&t.swingArm()}playAnimation(e,t){let r=String(e);if(this.playerPerAnimation[r]===t)return;if(this.playerPerAnimation[r]=t,e==="player_entity"&&this.playerEntity?.playerObject){let{playerObject:s}=this.playerEntity;if(t==="oneSwing"){s.animation&&s.animation.swingArm&&s.animation.swingArm();return}s.animation&&s.animation.switchAnimationCallback!==void 0&&(s.animation.switchAnimationCallback=()=>{let o=s.animation;o&&(o.isMoving=t==="walking"||t==="running"||t==="crouchWalking",o.isRunning=t==="running",o.isCrouched=t==="crouch"||t==="crouchWalking")});return}let i=this.getPlayerObject(e);if(i){if(t==="oneSwing"){i.animation&&i.animation.swingArm&&i.animation.swingArm();return}i.animation&&i.animation.switchAnimationCallback!==void 0&&(i.animation.switchAnimationCallback=()=>{let s=i.animation;s&&(s.isMoving=t==="walking"||t==="running"||t==="crouchWalking",s.isRunning=t==="running",s.isCrouched=t==="crouch"||t==="crouchWalking")});return}if(this.playerEntity?.playerObject){let{playerObject:s}=this.playerEntity;if(t==="oneSwing"){s.animation&&s.animation.swingArm&&s.animation.swingArm();return}s.animation&&s.animation.switchAnimationCallback!==void 0&&(s.animation.switchAnimationCallback=()=>{let o=s.animation;o&&(o.isMoving=t==="walking"||t==="running"||t==="crouchWalking",o.isRunning=t==="running",o.isCrouched=t==="crouch"||t==="crouchWalking")})}}parseEntityLabel(e){if(e)try{if(e.type==="string")return e.value;let t=typeof e=="string"?F5.default.simplify(F5.default.parse(e)):Pi.simplify(e);return hi(t).map(this.textFromComponent).join("")}catch{return e}}textFromComponent(e){return typeof e=="string"?e:e.text??""}getItemMesh(e,t,r=!1,i){!e.nbt&&e.nbtData&&(e.nbt=e.nbtData);let s=this.worldRenderer.getItemRenderData(e,t);if(!(i&&i===s?.modelName)){if(s&&"resolvedModel"in s){let o=Os(this.worldRenderer.material,s.resolvedModel,s.modelName,this.worldRenderer.resourcesManager.currentResources.worldBlockProvider,this.worldRenderer.resourcesManager.currentResources.mcData),v=1;t["minecraft:display_context"]==="ground"?v=.5:t["minecraft:display_context"]==="thirdperson"&&(v=6),o.scale.set(v,v,v);let a=new V.Group;return a.add(o),{mesh:a,isBlock:!0,modelName:s.modelName}}if(s){let o=s.renderInfo?.texture==="blocks"?this.worldRenderer.material.map:this.worldRenderer.itemsTexture,{u:v,v:a,su:l,sv:c}=s,p=co(o,{u:v,v:a,sizeX:l??1,sizeY:c??1},{faceCamera:r,use3D:!r}),g=1;return t["minecraft:display_context"]==="ground"?g=.5:t["minecraft:display_context"]==="thirdperson"&&(g=6),p.mesh.scale.set(g,g,g),{mesh:p.mesh,isBlock:!1,modelName:s.modelName,cleanup:p.cleanup}}}}setVisible(e,t){t?e.scale.set(1,1,1):e.scale.set(0,0,0)}update(e,t){let r=e.name==="player";(e.name==="zombie_villager"||e.name==="husk")&&(t.texture=`textures/1.16.4/entity/${e.name==="zombie_villager"?"zombie_villager/zombie_villager.png":`zombie/${e.name}.png`}`),e.name==="glow_item_frame"&&(t.textures||(t.textures=[]),t.textures.background="block:glow_item_frame");let i=this.entities[e.id],s=!i;if(e.delete){if(!i)return;i.userData._posTween?.stop(),i.additionalCleanup&&i.additionalCleanup(),i.traverse(g=>{g.additionalCleanup&&g.additionalCleanup()}),this.onRemoveEntity(e),this.worldRenderer.sceneOrigin.removeAndUntrack(i),k0(i),delete this.entities[e.id];return}let o;if(i===void 0){this.beforeEntityAdded(e);let g=new V.Group;if(g.originalEntity=e,e.name==="item"||e.name==="tnt"||e.name==="falling_block"||e.name==="snowball"||e.name==="egg"||e.name==="ender_pearl"||e.name==="experience_bottle"||e.name==="splash_potion"||e.name==="lingering_potion"){let b=e.name==="tnt"||e.type==="projectile"?{name:e.name}:e.name==="falling_block"?{blockState:e.objectData}:x3(e.metadata)?.find(_=>typeof _=="object"&&_?.itemCount);if(b){let _=this.getItemMesh(b,{"minecraft:display_context":"ground"},e.type==="projectile");if(_){if(o=_.mesh,e.name==="item"||e.type==="projectile"?(o.scale.set(.5,.5,.5),o.position.set(0,e.name==="item"?.2:.1,0)):(o.scale.set(2,2,2),o.position.set(0,.5,0)),e.name==="item"){let S=new V.Clock;o.onBeforeRender=()=>{let C=S.getDelta();o.rotation.y+=C}}g.additionalCleanup=()=>{_.cleanup&&_.cleanup()}}}}else if(r){let b=new V.Group,_=this.setupPlayerObject(e,b,t);if(g.playerObject=_,o=b,e.username){let S=F1(e,{fontFamily:"mojangles"},b,this.worldRenderer.version);S&&(S.position.y=_.position.y+_.scale.y*16+3,S.scale.multiplyScalar(12))}}else o=J4(this.mcData,e,this.worldRenderer,this.entitiesOptions,{...t,customModel:e.customModel});if(!o)return;o.name="mesh";let y=e.pos??e.position;this.worldRenderer.sceneOrigin.track(g),g.position.set(y.x,y.y,y.z);let A=new V.BoxHelper(o,e.type==="hostile"?16711680:e.type==="mob"?65280:e.type==="player"?255:16753920);A.name="debug",g.add(o),g.add(A),A.visible=!1,this.worldRenderer.scene.add(g),i=g,i.name="entity",i.realName=e.name,this.entities[e.id]=i,r&&this.updatePlayerSkin(e.id,e.username,t?.texture?e.uuid:void 0,t?.texture||$0),this.setDebugMode(this.debugMode,g),this.setRendering(this.currentlyRendering,g),this.afterAddEntity(e)}else o=i.children.find(g=>g.name==="mesh");this.updateEntityEquipment(i,e);let v=S3(e,this.mcData),l=(x3(e.metadata)?.[0]??e.metadata?.[0]??0)&32||this.worldRenderer.playerStateReactive.cameraSpectatingEntity===e.id&&this.worldRenderer.playerStateUtils.isSpectator();for(let g of o.children??[])g.name!=="nametag"&&(g.visible=!l);v.baby?i.scale.set(.5,.5,.5):i.scale.set(1,1,1);let c=O1("text_display",e,this.mcData),u=c?.text||v.custom_name_visible&&v.custom_name;if(e.name!=="player"&&u){let g=c&&(c.billboard_render_constraints==="fixed"||!c.billboard_render_constraints),y=c&&!(parseInt(c.style_flags,10)&4)?Q4(c.background_color):void 0,A;if(c?.text_opacity){let b=parseInt(c?.text_opacity,10);A=b>0?b:256-b}F1({...e,username:typeof u=="string"?F5.default.simplify(F5.default.parse(u)):Pi.simplify(u),nameTagBackgroundColor:y,nameTagTextOpacity:A,nameTagFixed:g,nameTagScale:c?.scale,nameTagTranslation:c&&(c.translation||new V.Vector3(0,0,0)),nameTagRotationLeft:w3(c?.left_rotation),nameTagRotationRight:w3(c?.right_rotation)},this.entitiesOptions,o,this.worldRenderer.version)}let f=O1("armor_stand",e,this.mcData);if(f){let g=(parseInt(f.client_flags,10)&1)!==0,y=(parseInt(f.client_flags,10)&4)!==0,A=(parseInt(f.client_flags,10)&8)===0,b=(parseInt(f.client_flags,10)&16)!==0;o.castShadow=!b,o.receiveShadow=!b,g?i.scale.set(.5,.5,.5):i.scale.set(1,1,1),i.traverse(_=>{switch(_.name){case"bone_baseplate":this.setVisible(_,A),_.rotation.y=-i.rotation.y;break;case"bone_head":f.head_pose&&_.setRotationFromEuler(_e(f.head_pose));break;case"bone_body":f.body_pose&&_.setRotationFromEuler(_e(f.body_pose));break;case"bone_rightarm":_.parent?.name!=="bone_armor"&&this.setVisible(_,y),f.left_arm_pose?_.setRotationFromEuler(_e(f.left_arm_pose)):_.setRotationFromEuler(_e({yaw:-10,pitch:-10,roll:0}));break;case"bone_leftarm":_.parent?.name!=="bone_armor"&&this.setVisible(_,y),f.right_arm_pose?_.setRotationFromEuler(_e(f.right_arm_pose)):_.setRotationFromEuler(_e({yaw:10,pitch:-10,roll:0}));break;case"bone_rightleg":f.left_leg_pose?_.setRotationFromEuler(_e(f.left_leg_pose)):_.setRotationFromEuler(_e({yaw:-1,pitch:-1,roll:0}));break;case"bone_leftleg":f.right_leg_pose?_.setRotationFromEuler(_e(f.right_leg_pose)):_.setRotationFromEuler(_e({yaw:1,pitch:1,roll:0}));break}})}let p=O1("item_frame",e,this.mcData);if(p||(p=O1("glow_item_frame",e,this.mcData)),p){let g=p?.item??e.metadata?.[8];if(o.scale.set(1,1,1),o.position.set(0,0,-.5),i.rotation.x=-e.pitch,i.children.find(y=>{if(y.name.startsWith("map_")){k0(y);let A=parseInt(y.name.split("_")[1],10);return this.itemFrameMaps[A]=this.itemFrameMaps[A]?.filter(b=>b!==y),y instanceof V.Mesh&&y.material?.map?.dispose(),!0}else if(y.name==="item")return k0(y),!0;return!1})?.removeFromParent(),g&&(g.itemId??g.blockId??0)!==0){let y=p.rotation??0,A=g.nbtData?.value?.map?.value??g.components?.find(b=>b.type==="map_id")?.data;if(A)o.scale.set(16/12,16/12,1),this.addMapModel(i,A,y);else{let b=this.getItemMesh(g,{"minecraft:display_context":"fixed"});b&&(b.mesh.position.set(0,0,-.05),b.isBlock?b.mesh.scale.set(.25,.25,.25):b.mesh.scale.set(.5,.5,.5),b.mesh.rotateY(Math.PI),b.mesh.rotateZ(-y*Math.PI/4),b.mesh.name="item",i.add(b.mesh))}}}e.username!==void 0&&(i.username=e.username),this.updateNameTagVisibility(i),this.updateEntityPosition(e,s,t)}updateEntityPosition(e,t,r){let i=this.entities[e.id];if(!i)return;let s=t?0:j4;if(e.position){let o=this.worldRenderer.sceneOrigin.getWorldPosition(i)??{x:e.position.x,y:e.position.y,z:e.position.z};i.userData._tweenTarget||(i.userData._tweenTarget={x:o.x,y:o.y,z:o.z}),i.userData._posTween?.stop(),i.userData._posTween=new F0(i.userData._tweenTarget).to({x:e.position.x,y:e.position.y,z:e.position.z},s).onUpdate(()=>{i.position.set(i.userData._tweenTarget.x,i.userData._tweenTarget.y,i.userData._tweenTarget.z)}).start()}if(typeof e.yaw=="number"&&Number.isFinite(e.yaw)){let o=A3(i.rotation.y,e.yaw);new F0(i.rotation).to({y:i.rotation.y+o},s).start()}if(i?.playerObject&&r?.rotation?.head){let{playerObject:o}=i,v=r.rotation.head.y,a=typeof v=="number"&&Number.isFinite(v)?v:e.yaw,l=typeof a=="number"&&typeof e.yaw=="number"&&Number.isFinite(a)&&Number.isFinite(e.yaw)?A3(e.yaw,a):0;o.skin.head.rotation.y=l;let c=r.rotation.head.x;o.skin.head.rotation.x=typeof c=="number"&&Number.isFinite(c)?-c:0}}afterAddEntity(e){}beforeEntityAdded(e){let t=this.pendingModelOverrides.get(e.id.toString());if(t){let{parts:r}=t;e.customModel=r.length===1?r[0]:{parts:r},this.pendingModelOverrides.delete(e.id.toString())}}maybeRenderPlayerSkin(e){let t=this.entities[e];if(e==="player_entity"&&(t=this.playerEntity,e=this.playerEntity?.originalEntity.id),!t||!t.playerObject||!t.visible)return;let r=128,i=this.worldRenderer.getCameraPosition(),s=this.worldRenderer.sceneOrigin.getWorldPosition(t),v=(s?new V.Vector3(s.x,s.y,s.z):t.position.clone().add(new V.Vector3(this.worldRenderer.sceneOrigin.x,this.worldRenderer.sceneOrigin.y,this.worldRenderer.sceneOrigin.z))).distanceTo(i);if(v<r&&v<this.worldRenderer.viewDistance*16){if(this.loadedSkinEntityIds.has(String(e)))return;this.updatePlayerSkin(e,t.playerObject.realUsername,t.playerObject.realPlayerUuid,!0,!0)}}onRemoveEntity(e){this.loadedSkinEntityIds.delete(e.id.toString()),delete this.currentSkinUrls[e.id.toString()],this.motionCache.delete(e.id.toString())}updateMap(e,t){this.cachedMapsImages[e]=t;let r=this.itemFrameMaps[e];if(r&&(r=r.filter(i=>i.parent),this.itemFrameMaps[e]=r,r))for(let i of r)i.material.map=this.loadMap(t),i.material.needsUpdate=!0,i.visible=!0}updateNameTagVisibility(e){let t=this.worldRenderer.playerStateReactive.team,r=e.originalEntity.team,i=r?.nameTagVisibility||"always",s=i==="always"||i==="hideForOwnTeam"&&r?.team!==t?.team||i==="hideForOtherTeams"&&(r?.team===t?.team||t===void 0);e.traverse(o=>{o.name==="nametag"&&(o.visible=s)})}addMapModel(e,t,r){let i=this.cachedMapsImages?.[t],s=null;i&&(s=this.loadMap(i));let o={transparent:!0,alphaTest:.1};s&&(o.map=s);let v=new V.MeshLambertMaterial(o),a=new V.Mesh(new V.PlaneGeometry(1,1),v);a.rotation.set(0,Math.PI,0),e.add(a);let l=!0;e.traverseVisible(c=>{c.name==="geometry_frame"&&(l=!1)}),l?a.position.set(0,0,.499):a.position.set(0,0,.437),a.rotateZ(Math.PI*2-r*Math.PI/2),a.name=`map_${t}`,s||(a.visible=!1),this.itemFrameMaps[t]||(this.itemFrameMaps[t]=[]),this.itemFrameMaps[t].push(a)}loadMap(e){let t=Bt(e);return t.needsUpdate=!0,t}addItemModel(e,t,r,i=!1){let s=`bone_${t}item`,o=`custom_item_${t}`;if(e.traverse(a=>{a.name===o&&(a.removeFromParent(),a.additionalCleanup&&a.additionalCleanup())}),!r)return;let v=this.getItemMesh(r,{"minecraft:display_context":"thirdperson"});v?.mesh&&e.traverse(a=>{if(a.name.toLowerCase()===s||a.name===`${t}Arm`){let l=new V.Object3D;l.additionalCleanup=()=>{v.cleanup&&v.cleanup()};let c=v.mesh;l.rotation.z=-Math.PI/16,v.isBlock?l.rotation.y=Math.PI/4:(c.rotation.z=-Math.PI/4,l.rotation.y=Math.PI/2,l.scale.multiplyScalar(2)),i&&(l.position.y=-8,l.position.z=5,l.position.x=t==="left"?1:-1,l.rotation.x=Math.PI),l.add(c),l.name=o,a.add(l)}})}handleDamageEvent(e,t){let r=this.entities[e]?.children.find(i=>i.name==="mesh");r&&r.traverse(i=>{if(i instanceof V.Mesh&&i.material.clone){i.material.clone().dispose(),i.material=i.material.clone();let o=i.material.color.clone();i.material.color.set(16711680),new F0(i.material.color).to(o,500).start()}})}raycastSceneDebug(){let e=new V.Raycaster;return e.setFromCamera(new V.Vector2(0,0),this.worldRenderer.camera),e.intersectObjects(this.worldRenderer.scene.children)[0]?.object}updateEntityModel(e,t,r,i){let s=Array.isArray(t)?t:[{modelPath:t,modelType:r,metadata:i}];this.pendingModelOverrides.set(e,{parts:s});let o=this.entities[e];o&&(this.update({...o.originalEntity,delete:!0},{}),this.update(o.originalEntity,{}))}setupPlayerObject(e,t,r){let i=new Ft;i.realPlayerUuid=e.uuid??"",i.realUsername=e.username??"",i.position.set(0,16,0),wi(i),t.add(i);let s=1/16;return t.scale.set(s,s,s),t.rotation.set(0,Math.PI,0),i.animation=new I5,i.animation.isMoving=!1,i}updateEntityEquipment(e,t){if(!e||!t.equipment)return;let r=t.type==="player";if(this.addItemModel(e,r?"right":"left",t.equipment[0],r),this.addItemModel(e,r?"left":"right",t.equipment[1],r),D5(this.worldRenderer,e,"feet",t.equipment[2]),D5(this.worldRenderer,e,"legs",t.equipment[3],2),D5(this.worldRenderer,e,"chest",t.equipment[4]),D5(this.worldRenderer,e,"head",t.equipment[5]),r&&e.playerObject){let{playerObject:i}=e;i.backEquipment=t.equipment.some(s=>s?.name==="elytra")?"elytra":"cape",i.backEquipment==="elytra"&&this.loadAndApplyCape(t.id,_3),i.cape.map===null&&(i.cape.visible=!1)}}};function S3(n,e){let t=e?.entitiesByName[n.name];return new Proxy({},{get(r,i,s){if(typeof i!="string"||!t)return;let o=t.metadataKeys?.indexOf(i);return n.metadata?.[o??-1]}})}function O1(n,e,t){if(e.name===n)return S3(e,t)}function D5(n,e,t,r,i=1,s=!1){if(!r){Bi(e,t);return}let o=r.name.split("_"),v,a=t==="head"&&r.name==="player_head";if(a)if(Bi(e,t),r.nbt){let g=Pi.simplify(r.nbt);try{let y;if(g.SkullOwner?y=g.SkullOwner.Properties.textures[0]?.Value:y=g["minecraft:profile"]?.Properties?.find(A=>A.name==="textures")?.value,y){v=JSON.parse(z.from(y,"base64").toString()).textures?.SKIN?.url;let{skinTexturesProxy:b}=n.worldRendererConfig;b&&(v=v?.replace("http://textures.minecraft.net/",b).replace("https://textures.minecraft.net/",b))}}catch{}}else v=$0;let l=o[0];if(!v){let g=`${l}_layer_${i}${s?"_overlay":""}`;v=n.resourcesManager.currentResources.customTextures.armor?.textures[g]?.src??y3[g]}if(!v||!De[t]){Bi(e,t);return}let c=`geometry_armor_${t}${s?"_overlay":""}`,u=e.children.findLast(g=>g.name===c),f;if(u?(f=u.material,c1(v,g=>{g.magFilter=V.NearestFilter,g.minFilter=V.NearestFilter,g.flipY=!1,g.wrapS=V.MirroredRepeatWrapping,g.wrapT=V.MirroredRepeatWrapping,f.map=g})):(u=Fe(n,v,De[t]),t==="head"&&(u.children[0].position.y+=.01),u.name=c,f=u.material,a||(f.side=V.DoubleSide)),l==="leather"&&!s){let g=r.nbt?.value?.display?.value?.color?.value;if(g){let y=g>>16&255,A=g>>8&255,b=g&255;f.color.setRGB(y/255,A/255,b/255)}else f.color.setHex(11890001);D5(n,e,t,r,i,!0)}else f.color.setHex(16777215);let p=new V.Object3D;p.name=`armor_${t}${s?"_overlay":""}`,p.add(u),e.add(u)}function Bi(n,e){for(let t of n.children)(t.name===`geometry_armor_${e}`||t.name===`geometry_armor_${e}_overlay`)&&t.removeFromParent()}var Ii=async(n,e)=>{let t;if(!n&&!e)t=await T3;else{if(n||(n=await He(e,"skin")),!n)return;let{canvas:a}=await ye(n);t=new L0.CanvasTexture(a)}t.magFilter=L0.NearestFilter,t.minFilter=L0.NearestFilter;let r=new L0.BoxGeometry,i=new L0.MeshStandardMaterial,s=!1,o=new L0.Mesh(r,i);o.scale.x=s?3:4,o.scale.y=12,o.scale.z=4,q4(r,40,16,s?3:4,12,4),i.map=t,i.needsUpdate=!0;let v=new L0.Group;return v.add(o),v.scale.set(.1,.1,.1),o.rotation.z=Math.PI,v};function Z4(n,e,t,r,i,s,o,v){let a=(B,H,G,O)=>[new L0.Vector2(B/o,1-O/v),new L0.Vector2(G/o,1-O/v),new L0.Vector2(G/o,1-H/v),new L0.Vector2(B/o,1-H/v)],l=a(e+s,t,e+r+s,t+s),c=a(e+r+s,t,e+r*2+s,t+s),u=a(e,t+s,e+s,t+s+i),f=a(e+s,t+s,e+r+s,t+s+i),p=a(e+r+s,t+s,e+r+s*2,t+i+s),g=a(e+r+s*2,t+s,e+r*2+s*2,t+i+s),y=n.attributes.uv,A=[p[3],p[2],p[0],p[1]],b=[u[3],u[2],u[0],u[1]],_=[l[3],l[2],l[0],l[1]],S=[c[0],c[1],c[3],c[2]],C=[f[3],f[2],f[0],f[1]],M=[g[3],g[2],g[0],g[1]],P=[];for(let B of[A,b,_,S,C,M])for(let H of B)P.push(H.x,H.y);y.set(new Float32Array(P)),y.needsUpdate=!0}function q4(n,e,t,r,i,s){Z4(n,e,t,r,i,s,64,64)}var B3={itemRight:{rotation:[0,-90,25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},itemLeft:{rotation:[0,90,-25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},blockRight:{rotation:[0,45,0],translation:[0,0,0],scale:[.4,.4,.4]},blockLeft:{rotation:[0,225,0],translation:[0,0,0],scale:[.4,.4,.4]}},z5=class{constructor(e,t=!1){this.worldRenderer=e;this.offHand=t;d(this,"holdingBlock");d(this,"blockSwapAnimation");d(this,"cameraGroup",new u0.Mesh);d(this,"objectOuterGroup",new u0.Group);d(this,"objectInnerGroup",new u0.Group);d(this,"holdingBlockInnerGroup",new u0.Group);d(this,"camera",new u0.PerspectiveCamera(75,1,.1,100));d(this,"stopUpdate",!1);d(this,"lastHeldItem");d(this,"lastHeldItemRenderKey");d(this,"isSwinging",!1);d(this,"nextIterStopCallbacks");d(this,"idleAnimator");d(this,"ready",!1);d(this,"lastUpdate",0);d(this,"playerHand");d(this,"offHandDisplay",!1);d(this,"offHandModeLegacy",!1);d(this,"swingAnimator");d(this,"config");d(this,"disposed",!1);d(this,"unsubs",[]);d(this,"lastItemModelName");d(this,"switchRequest",0);this.initCameraGroup(),this.unsubs.push(C3(this.worldRenderer.playerStateReactive,"heldItemMain",()=>{this.offHand||this.updateItem()})),this.unsubs.push(C3(this.worldRenderer.playerStateReactive,"heldItemOff",()=>{this.offHand&&this.updateItem()})),this.config=e.displayOptions.inWorldRenderingConfig,this.offHandDisplay=this.offHand,this.offHand||Ii().then(r=>{this.disposed||(this.playerHand=r,this.updateItem())}).then(()=>{if(this.disposed)return;let r=y1(async()=>Ii(this.worldRenderer.playerStateReactive.playerSkin,this.worldRenderer.playerStateReactive.onlineMode?this.worldRenderer.playerStateReactive.username:void 0),this.worldRenderer.playerStateReactive,"playerSkin",i=>{i&&(this.playerHand=i,this.updateItem())},i=>{k0(i,!0)});this.unsubs.push(r)})}updateItem(){if(!this.ready)return;let e=this.offHand?this.worldRenderer.playerStateReactive.heldItemOff:this.worldRenderer.playerStateReactive.heldItemMain;e?this.setNewItem(e):this.offHand?this.setNewItem():this.setNewItem({type:"hand"})}initCameraGroup(){this.cameraGroup=new u0.Mesh}startSwing(){this.swingAnimator?.startSwing()}stopSwing(){this.swingAnimator?.stopSwing()}render(e,t,r,i){if(!this.lastHeldItem)return;let s=performance.now();this.lastUpdate&&s-this.lastUpdate>50&&this.replaceItemModel(this.lastHeldItem),this.swingAnimator?.isCurrentlySwinging()||this.swingAnimator?.debugParams.animationStage?this.swingAnimator?.update():this.idleAnimator?.update(),this.blockSwapAnimation?.switcher.update();let o=new u0.Scene;o.add(this.cameraGroup),this.updateCameraGroup(),o.add(r.clone()),o.add(i.clone());let v=t.getSize(new u0.Vector2),a=Math.min(v.width,v.height),l=v.width-a,{offHandDisplay:c}=this;if(c&&(this.cameraGroup.scale.x=-1),t.autoClear=!1,t.clearDepth(),this.offHandDisplay)t.setViewport(0,0,a,a);else{let u=v.width-a;t.setViewport(u,0,a,a)}t.render(o,this.camera),t.setViewport(0,0,v.width,v.height),c&&(this.cameraGroup.scale.x=1)}async playBlockSwapAnimation(e){this.blockSwapAnimation??(this.blockSwapAnimation={switcher:new lt(()=>({y:this.objectInnerGroup.position.y}),(s,o)=>{s==="y"&&(this.objectInnerGroup.position.y=o)},{y:16})});let t=e,r=this.objectInnerGroup.position.y+this.objectInnerGroup.scale.y*1.5*(t==="appeared"?1:-1),i=!1;return new Promise(s=>{this.blockSwapAnimation.switcher.transitionTo({y:r},t,()=>{i||s(!0)},()=>{i=!0,s(!1)})})}isDifferentItem(e){return this.lastHeldItemRenderKey!==Ot(this.worldRenderer,e)}updateCameraGroup(){if(this.stopUpdate)return;let{camera:e}=this;this.cameraGroup.position.copy(e.position),this.cameraGroup.rotation.copy(e.rotation);let t=1,{position:r,scale:i}=this.getHandHeld3d(),s=-r.z,o=this.offHandModeLegacy?-1:1;this.objectOuterGroup.position.set(s*r.x*t*o,s*r.y,-s);let v=i*2.22*.2;this.objectOuterGroup.scale.set(v,v,v)}async createItemModel(e){if(this.lastUpdate=performance.now(),!e||e.type==="hand"&&!this.playerHand)return;let t;if(e.type==="item"||e.type==="block"){let i=this.worldRenderer.entities.getItemMesh({...e.fullItem,itemId:e.id},w1(this.worldRenderer),!1,this.lastItemModelName);if(i){let{mesh:s,isBlock:o,modelName:v}=i;o?(t=s,e.type="block"):(s.position.set(.5,.5,.5),t=s,e.type="item"),this.lastItemModelName=v}}else t=this.playerHand;if(!t)return;t.name="holdingBlock";let r=this.getHandHeld3d().rotation;return t.rotation.x=u0.MathUtils.degToRad(r.x),t.rotation.y=u0.MathUtils.degToRad(r.y),t.rotation.z=u0.MathUtils.degToRad(r.z),{model:t,type:e.type}}async replaceItemModel(e){if(this.blockSwapAnimation?.switcher.isTransitioning)return;if(!e){this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0;return}let t=await this.createItemModel(e);t&&(this.holdingBlock?.removeFromParent(),this.holdingBlock=t.model,this.holdingBlockInnerGroup.add(t.model))}testUnknownBlockSwitch(){this.setNewItem({type:"item",name:"minecraft:some-unknown-block",id:0,fullItem:{}})}async setNewItem(e){let t=Ot(this.worldRenderer,e),r=this.lastHeldItemRenderKey!==t;if(this.lastHeldItem=e,!r)return;this.lastHeldItemRenderKey=t,this.lastItemModelName=void 0;let i=++this.switchRequest,s=!1;if(this.holdingBlock){if(s=!0,!await this.playBlockSwapAnimation("disappeared"))return;this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0}if(!e){this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0,this.blockSwapAnimation=void 0;return}if(i!==this.switchRequest)return;let o=await this.createItemModel(e);if(!o||i!==this.switchRequest)return;let v=new u0.Group;this.holdingBlockInnerGroup.removeFromParent(),this.holdingBlockInnerGroup=new u0.Group,this.holdingBlockInnerGroup.add(o.model),v.add(this.holdingBlockInnerGroup),this.holdingBlock=o.model,this.objectInnerGroup=new u0.Group,this.objectInnerGroup.add(v),this.objectInnerGroup.position.set(-.5,-.5,-.5),s&&(this.objectInnerGroup.position.y-=this.objectInnerGroup.scale.y*1.5),Object.assign(v.position,{x:.5,y:.5,z:.5}),this.objectOuterGroup=new u0.Group,this.objectOuterGroup.add(this.objectInnerGroup),this.cameraGroup.add(this.objectOuterGroup);let a=this.getHandHeld3d().rotation;this.objectOuterGroup.rotation.y=u0.MathUtils.degToRad(a.yOuter),s&&await this.playBlockSwapAnimation("appeared"),this.swingAnimator??(this.swingAnimator=new Oi(this.holdingBlockInnerGroup)),this.swingAnimator.setHandMesh(this.holdingBlockInnerGroup),this.swingAnimator.type=o.type,this.config.viewBobbing&&(this.idleAnimator=new Hi(this.holdingBlockInnerGroup,this.worldRenderer.playerStateReactive))}getHandHeld3d(){let e=this.lastHeldItem?.type??"hand",t=this.offHandModeLegacy?"Left":"Right",r=.8*1.15,i={x:.4,y:-.7,z:-.45},s={x:-32.4,y:42.8,z:-41.3,yOuter:0};if(e==="item"){let o=B3[`item${t}`];i={x:-.05,y:-.7,z:-.45},s={x:o.rotation[0],y:o.rotation[1],z:o.rotation[2],yOuter:0},r=o.scale[0]*1.15}else if(e==="block"){let o=B3[`block${t}`];i={x:.4,y:-.7,z:-.45},s={x:o.rotation[0],y:o.rotation[1],z:o.rotation[2],yOuter:0},r=o.scale[0]*1.15}return{rotation:s,position:i,scale:r}}dispose(){this.disposed=!0,this.ready=!1,this.unsubs.forEach(e=>e()),this.unsubs=[],this.idleAnimator?.destroy(),this.idleAnimator=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.blockSwapAnimation?.switcher.forceFinish(),this.blockSwapAnimation=void 0,k0(this.cameraGroup,!0),k0(this.objectOuterGroup,!0),k0(this.objectInnerGroup,!0),k0(this.holdingBlockInnerGroup,!0),this.holdingBlock=void 0,this.playerHand&&(k0(this.playerHand,!0),this.playerHand=void 0)}},Hi=class{constructor(e,t){this.handMesh=e;this.playerState=t;d(this,"globalTime",0);d(this,"lastTime",0);d(this,"currentState");d(this,"targetState");d(this,"defaultPosition");d(this,"idleOffset",{y:0,rotationZ:0});d(this,"tween",new Mt);d(this,"idleTween",null);d(this,"stateSwitcher");d(this,"debugParams",{walkingSpeed:8,sprintingSpeed:16,walkingAmplitude:{x:1/30,y:1/10,rotationZ:.25},sprintingAmplitude:{x:1/30,y:1/10,rotationZ:.4}});d(this,"debugGui");d(this,"updated",!1);this.handMesh=e,this.globalTime=0,this.currentState="NOT_MOVING",this.targetState="NOT_MOVING",this.defaultPosition={x:e.position.x,y:e.position.y,z:e.position.z,rotationX:e.rotation.x,rotationY:e.rotation.y,rotationZ:e.rotation.z},this.stateSwitcher=new lt(()=>({x:this.handMesh.position.x,y:this.handMesh.position.y,z:this.handMesh.position.z,rotationX:this.handMesh.rotation.x,rotationY:this.handMesh.rotation.y,rotationZ:this.handMesh.rotation.z}),(r,i)=>{switch(r){case"x":this.handMesh.position.x=i;break;case"y":this.handMesh.position.y=i;break;case"z":this.handMesh.position.z=i;break;case"rotationX":this.handMesh.rotation.x=i;break;case"rotationY":this.handMesh.rotation.y=i;break;case"rotationZ":this.handMesh.rotation.z=i;break}},{x:2,y:2,z:2,rotation:Math.PI}),this.debugGui=new ke("idle_animator",this.debugParams)}startIdleAnimation(){this.idleTween&&this.idleTween.stop(),this.idleOffset.y=this.handMesh.position.y-this.defaultPosition.y,this.idleOffset.rotationZ=this.handMesh.rotation.z-this.defaultPosition.rotationZ,this.idleTween=new F0(this.idleOffset,this.tween).to({y:.05,rotationZ:.05},3e3).easing(H0.Sinusoidal.InOut).yoyo(!0).repeat(1/0).start()}stopIdleAnimation(){this.idleTween&&(this.idleTween.stop(),this.idleOffset.y=0,this.idleOffset.rotationZ=0)}getStateTransform(e,t){switch(e){case"NOT_MOVING":case"SNEAKING":return{x:this.defaultPosition.x,y:this.defaultPosition.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ};case"WALKING":case"SPRINTING":{let r=e==="SPRINTING"?this.debugParams.sprintingSpeed:this.debugParams.walkingSpeed,i=e==="SPRINTING"?this.debugParams.sprintingAmplitude:this.debugParams.walkingAmplitude;return{x:this.defaultPosition.x+Math.sin(t*r)*i.x,y:this.defaultPosition.y-Math.abs(Math.cos(t*r))*i.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ}}}}setState(e){if(e===this.targetState)return;this.targetState=e;let t=!1;if(this.currentState!==e){if(this.stopIdleAnimation(),!t){let r=this.getStateTransform(e,this.globalTime);this.stateSwitcher.transitionTo(r,e)}this.currentState=e}}update(){this.stateSwitcher.update();let e=performance.now(),t=(e-this.lastTime)/1e3;if(this.lastTime=e,!this.stateSwitcher.isTransitioning)switch(this.currentState){case"NOT_MOVING":case"SNEAKING":this.globalTime=Math.PI/4;break;case"SPRINTING":case"WALKING":this.globalTime+=t;break}if(this.playerState){let r=this.playerState.movementState;r!==this.targetState&&this.setState(r)}if(!this.stateSwitcher.isTransitioning&&(this.currentState==="NOT_MOVING"||this.currentState==="SNEAKING")&&(this.idleTween?.isPlaying()||this.startIdleAnimation(),this.tween.update(),this.handMesh.position.y=this.defaultPosition.y+this.idleOffset.y,this.handMesh.rotation.z=this.defaultPosition.rotationZ+this.idleOffset.rotationZ),!this.stateSwitcher.isTransitioning&&(this.currentState==="WALKING"||this.currentState==="SPRINTING")){let r=this.getStateTransform(this.currentState,this.globalTime);Object.assign(this.handMesh.position,r),Object.assign(this.handMesh.rotation,{x:r.rotationX,y:r.rotationY,z:r.rotationZ})}}getCurrentState(){return this.currentState}destroy(){this.stopIdleAnimation(),this.stateSwitcher.forceFinish()}},Oi=class{constructor(e){this.handMesh=e;d(this,"PI",Math.PI);d(this,"animationTimer",0);d(this,"lastTime",0);d(this,"isAnimating",!1);d(this,"stopRequested",!1);d(this,"originalRotation");d(this,"originalPosition");d(this,"originalScale");d(this,"debugParams",{animationTime:250,animationStage:0,useClassicSwing:!0,itemSwingXPosScale:-.8,itemSwingYPosScale:.2,itemSwingZPosScale:-.2,itemHeightScale:-.6,itemPreswingRotY:45,itemSwingXRotAmount:-30,itemSwingYRotAmount:-35,itemSwingZRotAmount:-5,armSwingXPosScale:-.3,armSwingYPosScale:.4,armSwingZPosScale:-.4,armSwingYRotAmount:70,armSwingZRotAmount:-20,armHeightScale:-.6});d(this,"debugGui");d(this,"type","hand");this.handMesh=e,this.originalRotation=e.rotation.clone(),this.originalPosition=e.position.clone(),this.originalScale=e.scale.clone(),this.debugGui=new ke("hand_animator",this.debugParams,void 0,{animationStage:{min:0,max:1,step:.01},itemSwingXPosScale:{min:-2,max:2,step:.1},itemSwingYPosScale:{min:-2,max:2,step:.1},itemSwingZPosScale:{min:-2,max:2,step:.1},itemHeightScale:{min:-2,max:2,step:.1},itemPreswingRotY:{min:-180,max:180,step:5},itemSwingXRotAmount:{min:-180,max:180,step:5},itemSwingYRotAmount:{min:-180,max:180,step:5},itemSwingZRotAmount:{min:-180,max:180,step:5},armSwingXPosScale:{min:-2,max:2,step:.1},armSwingYPosScale:{min:-2,max:2,step:.1},armSwingZPosScale:{min:-2,max:2,step:.1},armSwingYRotAmount:{min:-180,max:180,step:5},armSwingZRotAmount:{min:-180,max:180,step:5},armHeightScale:{min:-2,max:2,step:.1}})}setHandMesh(e){this.handMesh=e,this.originalRotation.copy(e.rotation),this.originalPosition.copy(e.position),this.originalScale.copy(e.scale)}update(){if(!this.isAnimating&&!this.debugParams.animationStage){this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}let e=performance.now(),t=(e-this.lastTime)/1e3;this.lastTime=e,this.animationTimer+=t*1e3;let r=this.debugParams.animationStage||Math.min(this.animationTimer/this.debugParams.animationTime,1);if(r>=1){if(this.stopRequested){this.isAnimating=!1,this.stopRequested=!1,this.animationTimer=0,this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}this.animationTimer=0;return}this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);let i=r,s=Math.sqrt(i),o=Math.sin(i*this.PI),v=Math.sin(s*this.PI);if(this.type==="hand"){let a=this.debugParams.armSwingXPosScale*v,l=this.debugParams.armSwingYPosScale*Math.sin(s*this.PI*2),c=this.debugParams.armSwingZPosScale*o;this.handMesh.position.x+=a,this.handMesh.position.y+=l+this.debugParams.armHeightScale*i,this.handMesh.position.z+=c,this.handMesh.rotation.y+=u0.MathUtils.degToRad(this.debugParams.armSwingYRotAmount*v),this.handMesh.rotation.z+=u0.MathUtils.degToRad(this.debugParams.armSwingZRotAmount*o)}else{let a=this.debugParams.itemSwingXPosScale*v,l=this.debugParams.itemSwingYPosScale*Math.sin(s*this.PI*2),c=this.debugParams.itemSwingZPosScale*o;this.handMesh.position.x+=a,this.handMesh.position.y+=l+this.debugParams.itemHeightScale*i,this.handMesh.position.z+=c,this.handMesh.rotation.y+=u0.MathUtils.degToRad(this.debugParams.itemPreswingRotY),this.handMesh.rotation.x+=u0.MathUtils.degToRad(this.debugParams.itemSwingXRotAmount*o),this.handMesh.rotation.y+=u0.MathUtils.degToRad(this.debugParams.itemSwingYRotAmount*v),this.handMesh.rotation.z+=u0.MathUtils.degToRad(this.debugParams.itemSwingZRotAmount*o)}}startSwing(){this.stopRequested=!1,!this.isAnimating&&(this.isAnimating=!0,this.animationTimer=0,this.lastTime=performance.now())}stopSwing(){this.isAnimating&&(this.stopRequested=!0)}isCurrentlySwinging(){return this.isAnimating}};function L5(n,e=!1){return n.displayOptions.inWorldRenderingConfig.handRenderer==="legacy"?new z5(n,e):new T5(n,e)}E();x();k();R();import*as Q0 from"three";import{Vec3 as Fi}from"vec3";var P3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALUlEQVR42mP4//8/IyWYYdSAwW6Ara3tf4oMmD179n9ChhD0AsiQ0Wgc7AYAAOqH+zNQ3r9kAAAAAElFTkSuQmCC";var I3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR42mP4//8/IyWYYdQA3AbY2tr+H1gDZs+e/R9mCD7D8IYBzBAQTXYgEvIKQQPw2T6aEqlkAADEA/W3ycLXvwAAAABJRU5ErkJggg==";var H3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQklEQVR42mP4//8/IyWYYRgbYGtr+39wGQDiYzMUpwGzZ8+GawDRID4IkxSIMEOwaSQ6FgiFBW0NIOR8osJgBOQFALo37sVTOo/LAAAAAElFTkSuQmCC";var O3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWElEQVR42mP4//8/IyWYYXAbYGtr+59sA0CaZ8+eTZkBhNg4DQApQlYIcglMDN1VWA0AKYJpQvYONi/hDUSYIfjCgmA0EooJ2hmAK9CINgBXoA2xvEAMBgBGPud3dYZtOQAAAABJRU5ErkJggg==";var F3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVR42r1TQQrAMAxyD8tL89iMHgQJoQxHewi0UsWYFFX1/CkcF4iIsgUWOTM9ASV3F3rHF+v9rK4wEVnEFoFYbwmTbRZFFN9m0B9QZBfk2THaAhqktQdTkHYL9iZe+40vs7nda+BuVOMAAAAASUVORK5CYII=";var D3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVR42rWTWwpAIQhEbWGu1MUaXRgQcXpyP8SIPI1jibu3l5DfAKrqyFgfAczsKxx5xJUCFGYFUZXMpOe9CAa8BOS+0U5UVbYQ6Siqbi0BFT0auTSRHZqNkE6BGXgEYKYtAczIbQAz8ukzXT3l3egz49IXvXQCVAAAAABJRU5ErkJggg==";var z3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeElEQVQ4jaWSQQ4AIQgD9WG8tI/tnkgaUgmuBw8YHcqERXK/nOUuI4JPAABMSESwA1qAQgAQwBygnfNjTaCpWoBzUlNZQJ07x9FUdgSlV5FaW4Cjq8isW8BJ2GgPtEuVdr0HKvLXHjiRI0An8jTKqo9dF000cnBzPgKuxXtbq/m1AAAAAElFTkSuQmCC";var L3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhUlEQVR42qWTSRKAMAgE8WF5KY/FygEL2yEp9cAhCz0wJBYRx58wbowxYsZngLvHjITsgNYpJySBrPIBUMqZSHhdSw+oQlgVa01U7VRQ7huTk67aUWZaVyaNZFsSQBCTVBW3KahLyo/lQ6KR1Y+2BTUyGqke1AXoxsSzpYlU3FW0/Exv1ie0hq53Bf15aAAAAABJRU5ErkJggg==";var U3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVR42o2SYQ6FMAiDeQfbSXdYXjSpqd869QeZQiilpbr7l2KM0cc75+xUV77YpGCjAPUqitMU3uCAXrsAlPSCcgJMbG4M0mQ1Etz/i0KlXQnmwyqpv1uH4h7fiws7ISneTYNEk0ImCxcAArGJrE4AXhypPtl7AqTdeJG8k3gHb0L6QfmK9WQTa59cSFdHRssKFHHngteV/wPDepaHIu0QVAAAAABJRU5ErkJggg==";var G3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVR42n2Tyw3AIAxD3cGYlGFTUSmV+2o4IEEAf2JQVV1rjDGq576ec5avWVdfWIW12aMPEJBEImoPv+CAvvcCODsVNWBS8wA4A5ndv1/ytciQvBLMyeTSHD3ZYXPXXH7Y0ZMdJvCxQJls5O6tKHlPPWGEfU58WZR6ive1kKSleFNC2kXGRnrcDqhTTOmPeP3pAZnTq6Oin4X0oXbfnNZu626Io6lqGCwAAAAASUVORK5CYII=";var z1=class{constructor(e){this.worldRenderer=e;d(this,"_cursorLinesHidden",!1);d(this,"cursorLineMaterial");d(this,"interactionLines",null);d(this,"prevColor");d(this,"blockBreakMesh");d(this,"breakTextures",[]);let t=[P3,I3,H3,O3,F3,D3,z3,L3,U3,G3];for(let i=0;i<10;i++)Ct(t[i]).then(s=>{s.magFilter=Q0.NearestFilter,s.minFilter=Q0.NearestFilter,this.breakTextures.push(s)});let r=new Q0.MeshBasicMaterial({transparent:!0,blending:Q0.MultiplyBlending,alphaTest:.5});this.blockBreakMesh=new Q0.Mesh(new Q0.BoxGeometry(1,1,1),r),this.blockBreakMesh.visible=!1,this.blockBreakMesh.renderOrder=999,this.blockBreakMesh.name="blockBreakMesh",this.worldRenderer.sceneOrigin.addAndTrack(this.blockBreakMesh),this.worldRenderer.onReactivePlayerStateUpdated("gameMode",()=>{this.updateLineMaterial()}),setTimeout(()=>{this.updateLineMaterial(),this.interactionLines&&this.setHighlightCursorBlock(this.interactionLines.blockPos,this.interactionLines.shapePositions,!0)})}get cursorLinesHidden(){return this._cursorLinesHidden}set cursorLinesHidden(e){this.interactionLines&&(this.interactionLines.mesh.visible=!e),this._cursorLinesHidden=e}updateLineMaterial(){let e=this.worldRenderer.playerStateReactive.gameMode==="creative",t=this.worldRenderer.renderer.getPixelRatio();this.cursorLineMaterial&&this.cursorLineMaterial.dispose(),this.cursorLineMaterial=new ft({color:(()=>{switch(this.worldRenderer.worldRendererConfig.highlightBlockColor){case"blue":return 4227327;case"classic":return 0;default:return e?4227327:0}})(),linewidth:Math.max(t*.7,1)*2}),this.prevColor=this.worldRenderer.worldRendererConfig.highlightBlockColor}updateBreakAnimation(e,t,r){if(this.hideBreakAnimation(),t===null||!e||!r)return;let{position:i,width:s,height:o,depth:v}=r,a=new Fi(i.x,i.y,i.z);this.blockBreakMesh.scale.set(s*1.001,o*1.001,v*1.001),a.add(new Fi(e.x,e.y,e.z)),this.blockBreakMesh.position.set(a.x,a.y,a.z),this.blockBreakMesh.visible=!0,this.blockBreakMesh.material.map=this.breakTextures[t]??this.breakTextures.at(-1),this.blockBreakMesh.material.needsUpdate=!0}hideBreakAnimation(){this.blockBreakMesh&&(this.blockBreakMesh.visible=!1)}updateDisplay(){if(this.cursorLineMaterial){let{renderer:e}=this.worldRenderer;this.cursorLineMaterial.resolution.set(e.domElement.width,e.domElement.height),this.cursorLineMaterial.dashOffset=performance.now()/750}}setHighlightCursorBlock(e,t,r=!1){if(e&&this.interactionLines&&e.equals(this.interactionLines.blockPos)&&vv(t??[],this.interactionLines.shapePositions??[])&&!r||(this.interactionLines!==null&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.interactionLines.mesh),this.interactionLines=null),e===null))return;let i=new Q0.Group;for(let{position:s,width:o,height:v,depth:a}of t??[]){let l=new Fi(s.x,s.y,s.z),c=[1.0001*o,1.0001*v,1.0001*a],u=new Q0.BoxGeometry(...c),f=new ut().fromEdgesGeometry(new Q0.EdgesGeometry(u)),p=new O5(f,this.cursorLineMaterial);p.position.set(l.x,l.y,l.z),p.computeLineDistances(),i.add(p)}this.worldRenderer.sceneOrigin.addAndTrack(i),i.position.set(e.x,e.y,e.z),i.visible=!this.cursorLinesHidden,this.interactionLines={blockPos:e,mesh:i,shapePositions:t}}render(){this.prevColor!==this.worldRenderer.worldRendererConfig.highlightBlockColor&&this.updateLineMaterial(),this.updateDisplay()}},vv=(n,e)=>{if(n.length!==e.length)return!1;for(let[t,r]of n.entries())if(r!==e[t])return!1;return!0};E();x();k();R();E();x();k();R();var lv=a5(mi(),1);import N3 from"prismarine-nbt";import{getItemDefinition as cv}from"mc-assets/dist/itemDefinitions";var dv=(n,e)=>{let t,r,i=n.name;i.includes(":")||(i=`minecraft:${i}`);let s=e.currentResources?.customItemModelNames[i];if(n.components){let o=new Map;for(let c of n.components)o.set(c.type,c);let v=o.get("custom_name")||o.get("item_name");v&&(t=typeof v.data=="string"?v.data:N3.simplify(v.data));let a=o.get("item_model");if(a&&(r=a.data),s){let c=o.get("custom_model_data");if(c?.data){let u;typeof c.data=="number"?u=c.data:typeof c.data=="object"&&"floats"in c.data&&Array.isArray(c.data.floats)&&c.data.floats.length>0&&(u=c.data.floats[0]),u&&s[u]&&(r=s[u])}}let l=o.get("lore");l&&(t??(t=n.displayName??n.name),t+=`
21458
+ `),u=0;for(let p of c){let g=v.measureText(p).width+l*2;g>u&&(u=g)}if(s.width=u,s.height=(a+l)*c.length,v.fillStyle=e,v.fillRect(0,0,s.width,s.height),v.globalAlpha=t/255,!!Gr(n,o,s,a,"white",-l+a))return v.globalAlpha=1,s}globalThis.getUsernameTexture=M3;var F1=(n,e,t,r)=>{for(let a of t.children)a.name==="nametag"&&a.removeFromParent();if(n.username===void 0||n.username===null||(typeof n.username=="string"?n.username:new(k3(r))(n.username).toString()).startsWith("EMPTY"))return;let s=M3(n,e,r);if(!s)return;let o=new V.Texture(s);o.needsUpdate=!0;let v;if(n.nameTagFixed){let a=new V.PlaneGeometry,l=new V.MeshBasicMaterial({map:o});l.transparent=!0,v=new V.Mesh(a,l),v.rotation.set(n.pitch,V.MathUtils.degToRad(n.yaw+180),0),v.position.y+=n.height+.3}else{let a=new V.SpriteMaterial({map:o});v=new V.Sprite(a),v.position.y+=n.height+.6}return v.renderOrder=1e3,v.scale.set(s.width*.005,s.height*.005,1),n.nameTagRotationRight&&v.applyQuaternion(n.nameTagRotationRight),n.nameTagScale&&v.scale.multiply(n.nameTagScale),n.nameTagRotationLeft&&v.applyQuaternion(n.nameTagRotationLeft),n.nameTagTranslation&&v.position.add(n.nameTagTranslation),v.name="nametag",t.add(v),v},E3={},K4=n=>n.charAt(0)===n.charAt(0).toUpperCase();function x3(n){if(n!=null){if(Array.isArray(n))return n;if(typeof n=="object"){let e=n,t=Object.keys(e).filter(r=>/^\d+$/.test(r)).map(Number).sort((r,i)=>r-i);if(t.length&&t[0]===0&&t.every((r,i)=>r===i))return t.map(r=>e[String(r)])}}}function J4(n,e,t,r,i){if(e.name)try{let l=(K4(e.name)?bi(e.name):e.name).toLowerCase(),c=new Me("1.16.4",l,t,i);if(c.mesh)return F1(e,r,c.mesh,t.version),c.mesh}catch(l){reportError?.(l)}if(!n||!(0,R3.isEntityAttackable)(n,e))return;let s=new V.BoxGeometry(e.width,e.height,e.width);s.translate(0,e.height/2,0);let o=new V.MeshBasicMaterial({color:16711935}),v=new V.Mesh(s,o);return(E3[e.name]=(E3[e.name]||0)+1)<6&&F1({username:e.name,height:e.height},r,v,t.version),v}var D1=class{constructor(e,t){this.worldRenderer=e;this.mcData=t;d(this,"entities",{});d(this,"playerEntity",null);d(this,"entitiesOptions",{fontFamily:"mojangles"});d(this,"debugMode");d(this,"onSkinUpdate");d(this,"clock",new V.Clock);d(this,"currentlyRendering",!0);d(this,"cachedMapsImages",{});d(this,"itemFrameMaps",{});d(this,"pendingModelOverrides",new Map);d(this,"motionCache",new Map);d(this,"_wasThirdPerson",!1);d(this,"_tpBodyYaw",0);d(this,"_tpHasBodyYaw",!1);d(this,"uuidPerSkinUrlsCache",{});d(this,"currentSkinUrls",{});d(this,"loadedSkinEntityIds",new Set);d(this,"playerPerAnimation",{});this.debugMode="none",this.onSkinUpdate=()=>{},this.watchResourcesUpdates()}updateAutoWalkFlags(e,t,r,i){if(!t.playerObject?.animation)return;let s=t.playerObject.animation;if(r<=0)return;let o=i??t.position,v=this.motionCache.get(e);if(!v){this.motionCache.set(e,{pos:o.clone(),speed:0}),s.isMoving=!1,s.isRunning=!1,s.moveAmount=0,s.runAmount=0;return}let a=o.x-v.pos.x,l=o.z-v.pos.z;v.pos.copy(o);let c=Math.hypot(a,l)/Math.max(r,1e-6),u=1-Math.exp(-r*12);v.speed+=(c-v.speed)*u;let f=v.speed,p=(C,M,P)=>{let B=Si((P-C)/(M-C));return B*B*(3-2*B)},g=.08,y=.6,A=4.3,b=5.6,_=p(g,y,f),S=p(A,b,f);s.moveAmount=_,s.runAmount=S,s.isMoving=_>.15,s.isRunning=S>.55}getLocalSneak(){let e=this.worldRenderer.playerStateReactive;return e?.movementState==="SNEAKING"||e?.movementState==="CROUCHING"||!!e?.isSneaking||!!e?.sneaking||!!e?.isCrouching||!!e?.crouching||!!e?.controls?.sneak||!!e?.controlState?.sneak}updateThirdPersonHeadAndBody(e,t){let r=e.playerObject?.animation,i=this.worldRenderer.cameraShake.getBaseRotation(),s=i.yaw,o=i.pitch,v=Si(r?.moveAmount??(r?.isMoving?1:0)),a=Si(r?.runAmount??(r?.isRunning?1:0)),l=v>.15;if(this._tpHasBodyYaw||(this._tpHasBodyYaw=!0,this._tpBodyYaw=s),l){let g=1-Math.exp(-t*(18+10*a));this._tpBodyYaw=this._tpBodyYaw+Yt(s-this._tpBodyYaw)*g,e.rotation.set(0,this._tpBodyYaw,0);let y=(25-8*a)*Math.PI/180,A=Ci(Yt(s-this._tpBodyYaw),-y,y);r&&"lookYaw"in r&&(r.lookYaw=A),r&&"lookPitch"in r&&(r.lookPitch=-o);return}let c=85*Math.PI/180,u=55*Math.PI/180,f=Yt(s-this._tpBodyYaw);f=Ci(f,-c,c);let p=Math.abs(f)-u;if(p>0){let g=p/(c-u),y=s-Math.sign(f)*u,A=1-Math.exp(-t*(6+10*g));this._tpBodyYaw=this._tpBodyYaw+Yt(y-this._tpBodyYaw)*A,f=Yt(s-this._tpBodyYaw),f=Ci(f,-c,c)}else{let g=1-Math.exp(-t*5);this._tpBodyYaw=this._tpBodyYaw+Yt(s-this._tpBodyYaw)*(g*.15)}e.rotation.set(0,this._tpBodyYaw,0),r&&"lookYaw"in r&&(r.lookYaw=f),r&&"lookPitch"in r&&(r.lookPitch=-o)}get entitiesByName(){let e={};for(let t of Object.values(this.entities))t.realName&&(e[t.realName]=e[t.realName]||[],e[t.realName].push(t));return e}get entitiesRenderingCount(){return Object.values(this.entities).filter(e=>e.visible).length}getDebugString(){let e=Object.keys(this.entities).length,t=this.entitiesRenderingCount,r=Object.values(this.entities).filter(s=>s.playerObject),i=r.filter(s=>s.visible);return`${t}/${e} ${i.length}/${r.length}`}handlePlayerEntity(e){if(!this.playerEntity){let t=new V.Group;t.originalEntity={...e,name:"player"};let r=new V.Group,i=this.setupPlayerObject(e,r,{});t.playerObject=i,t.add(r),t.name="player_entity",this.playerEntity=t,this.worldRenderer.scene.add(t),this.updatePlayerSkin(e.id,e.username,e.uuid??void 0,$0)}this.playerEntity.originalEntity={...e,name:"player"},e.position&&(this.worldRenderer.sceneOrigin.getWorldPosition(this.playerEntity)||this.worldRenderer.sceneOrigin.track(this.playerEntity),this.playerEntity.position.set(e.position.x,e.position.y,e.position.z)),e.yaw!==void 0&&(this.playerEntity.rotation.y=e.yaw),this.updateEntityEquipment(this.playerEntity,e)}clear(){for(let e of Object.values(this.entities))this.worldRenderer.sceneOrigin.removeAndUntrack(e),k0(e);this.entities={},this.currentSkinUrls={},this.motionCache.clear(),this._wasThirdPerson=!1,this._tpHasBodyYaw=!1,this.playerEntity&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.playerEntity),k0(this.playerEntity),this.playerEntity=null)}reloadEntities(){for(let e of Object.values(this.entities))this.update({...e.originalEntity,delete:!0},{}),this.update(e.originalEntity,{})}watchResourcesUpdates(){this.worldRenderer.resourcesManager.on("assetsTexturesUpdated",()=>this.reloadEntities()),this.worldRenderer.resourcesManager.on("assetsInventoryReady",()=>this.reloadEntities())}setDebugMode(e,t=null){this.debugMode=e;for(let r of t?[t]:Object.values(this.entities)){let i=r.children.find(s=>s.name==="debug");i.visible=!1,this.debugMode==="basic"&&(i.visible=!0)}}setRendering(e,t=null){this.currentlyRendering=e;for(let r of t?[t]:Object.values(this.entities))e?this.worldRenderer.scene.children.includes(r)||this.worldRenderer.scene.add(r):this.worldRenderer.scene.remove(r)}playEntityModelAnimation(e,t,r=!1){let i=this.entities[e];i&&i.traverse(s=>{s instanceof Me&&s.playAnimation(t,r)})}render(){let e=this.worldRenderer.worldRendererConfig.renderEntities;e!==this.currentlyRendering&&this.setRendering(e);let t=this.clock.getDelta(),r=Math.min(t,1/30),i=this.worldRenderer.viewerChunkPosition,s=10*10,o=this.worldRenderer.playerStateUtils.isThirdPerson();if(o!==this._wasThirdPerson){this._wasThirdPerson=o;let v=String(this.playerEntity?.originalEntity.id??"player_entity");this.motionCache.delete(v);let a=this.playerEntity?.playerObject?.animation;a?.resetLocomotion&&a.resetLocomotion(),this._tpHasBodyYaw=!1}for(let[v,a]of[...Object.entries(this.entities),["player_entity",this.playerEntity]]){if(!a)continue;let l=v==="player_entity",c=String(l?this.playerEntity?.originalEntity.id??"player_entity":v);if(l)if(a.visible=o,o){let f=this.worldRenderer.playerStateReactive.eyeHeight;a.position.set(this.worldRenderer.cameraWorldPos.x,this.worldRenderer.cameraWorldPos.y-f,this.worldRenderer.cameraWorldPos.z);let p=this.worldRenderer.playerStateReactive.position;if(p&&typeof p.x=="number")this.updateAutoWalkFlags(c,a,t,new V.Vector3(p.x,p.y,p.z));else{let g=this.worldRenderer.sceneOrigin.getWorldPosition(a);this.updateAutoWalkFlags(c,a,t,g?new V.Vector3(g.x,g.y,g.z):a.position)}this.updateThirdPersonHeadAndBody(a,r)}else{let f=this.worldRenderer.sceneOrigin.getWorldPosition(a);this.updateAutoWalkFlags(c,a,t,f?new V.Vector3(f.x,f.y,f.z):a.position)}else{let f=this.worldRenderer.sceneOrigin.getWorldPosition(a);this.updateAutoWalkFlags(c,a,t,f?new V.Vector3(f.x,f.y,f.z):a.position)}let{playerObject:u}=a;if(u?.animation){let f=u.animation,g=(Number(a.originalEntity?.metadata?.[0]??0)&2)!==0,y=this.getLocalSneak();"isCrouched"in f&&(f.isCrouched=l?y:g),u.animation.update(u,r)}if(a.traverse(f=>{f instanceof Me&&f.update(r)}),!l&&i&&a.position){let f=a.position.x-i.x,p=a.position.y-i.y,g=a.position.z-i.z,y=f*f+p*p+g*g;a.visible=!!(y<s||this.worldRenderer.shouldObjectVisible(a)),this.maybeRenderPlayerSkin(v)}a.visible&&this.syncArmorPositions(a)}}syncArmorPositions(e){e.playerObject&&e.traverse(t=>{if(!t.name.startsWith("geometry_armor_"))return;let{skin:r}=e.playerObject;switch(t.name){case"geometry_armor_head":t.children[0]?.children[0]&&t.children[0].children[0].rotation.set(-r.head.rotation.x,r.head.rotation.y,r.head.rotation.z,r.head.rotation.order);break;case"geometry_armor_legs":t.children[0]&&(t.children[0].children[2]&&t.children[0].children[2].rotation.set(-r.leftLeg.rotation.x,r.leftLeg.rotation.y,r.leftLeg.rotation.z,r.leftLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-r.rightLeg.rotation.x,r.rightLeg.rotation.y,r.rightLeg.rotation.z,r.rightLeg.rotation.order));break;case"geometry_armor_feet":t.children[0]&&(t.children[0].children[0]&&t.children[0].children[0].rotation.set(-r.rightLeg.rotation.x,r.rightLeg.rotation.y,r.rightLeg.rotation.z,r.rightLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-r.leftLeg.rotation.x,r.leftLeg.rotation.y,-r.leftLeg.rotation.z,r.leftLeg.rotation.order));break}})}getPlayerObject(e){return this.playerEntity?.originalEntity.id===e?this.playerEntity?.playerObject:this.entities[e]?.playerObject}isCanvasBlank(e){return!e.getContext("2d")?.getImageData(0,0,e.width,e.height).data.some(t=>t!==0)}async updatePlayerSkin(e,t,r,i,s=void 0){i!==$0&&this.loadedSkinEntityIds.add(String(e)),r&&((typeof i=="string"||typeof s=="string")&&(this.uuidPerSkinUrlsCache[r]={}),typeof i=="string"&&(this.uuidPerSkinUrlsCache[r].skinUrl=i),typeof s=="string"&&(this.uuidPerSkinUrlsCache[r].capeUrl=s),i===!0&&(i=this.uuidPerSkinUrlsCache[r]?.skinUrl??i),s??(s=this.uuidPerSkinUrlsCache[r]?.capeUrl));let v=this.getPlayerObject(e);if(!v)return;if(i===!0){if(!t)return;let l=await He(t,"skin");if(!this.getPlayerObject(e)||!l)return;i=l}if(typeof i!="string")throw new Error("Invalid skin url");if(this.currentSkinUrls[String(e)]===i){if(s){if(s===!0&&t){let l=await He(t,"cape");if(!this.getPlayerObject(e)||!l)return;s=l}typeof s=="string"&&this.loadAndApplyCape(e,s)}return}i!==$0&&(this.currentSkinUrls[String(e)]=i);let a=this.worldRenderer.worldRendererConfig.renderEars||t==="deadmau5";this.loadAndApplySkin(e,i,a).then(async()=>{if(s){if(s===!0&&t){let l=await He(t,"cape");if(!this.getPlayerObject(e)||!l)return;s=l}typeof s=="string"&&this.loadAndApplyCape(e,s)}}),v.cape.visible=!1,s||(v.backEquipment=null,v.elytra.map=null,v.cape.map&&v.cape.map.dispose(),v.cape.map=null)}async loadAndApplySkin(e,t,r){let i=this.getPlayerObject(e);if(i)try{let s;if(i=this.getPlayerObject(e),!i)return;let o,v;if(t===$0){let l=await ye($0);s=l.image,o=new V.CanvasTexture(l.canvas),v=l.canvas}else{let{canvas:l,image:c}=await ye(t);s=c,o=new V.CanvasTexture(l),v=l}o.magFilter=V.NearestFilter,o.minFilter=V.NearestFilter,o.needsUpdate=!0,i.skin.map=o,i.skin.modelType=zr(v),i.skin.isCustom=t!==$0,wi(i);let a;if(s?r&&(a=V0(64,64),Lr(a,s),r=!this.isCanvasBlank(a)):r=!1,r){let l=new V.CanvasTexture(a);l.magFilter=V.NearestFilter,l.minFilter=V.NearestFilter,l.needsUpdate=!0,i.ears.map=l,i.ears.visible=!0}else i.ears.map=null,i.ears.visible=!1;this.onSkinUpdate?.()}catch{}}async loadAndApplyCape(e,t){let r=this.getPlayerObject(e);if(r)try{let{canvas:i,image:s}=await ye(t);if(r=this.getPlayerObject(e),!r)return;Dr(i,s);let o=new V.CanvasTexture(i);o.magFilter=V.NearestFilter,o.minFilter=V.NearestFilter,o.needsUpdate=!0,r.cape.map=o,r.cape.visible=!0,r.elytra.map=o,this.onSkinUpdate?.(),r.backEquipment||(r.backEquipment="cape")}catch{}}debugSwingArm(){let e=Object.values(this.entities).find(r=>r.playerObject?.animation);if(!e||!e.playerObject?.animation)return;let t=e.playerObject.animation;t.swingArm&&t.swingArm()}playAnimation(e,t){let r=String(e);if(t!=="oneSwing"){if(this.playerPerAnimation[r]===t)return;this.playerPerAnimation[r]=t}if(e==="player_entity"&&this.playerEntity?.playerObject){let{playerObject:s}=this.playerEntity;if(t==="oneSwing"){s.animation&&s.animation.swingArm&&s.animation.swingArm();return}s.animation&&s.animation.switchAnimationCallback!==void 0&&(s.animation.switchAnimationCallback=()=>{let o=s.animation;o&&(o.isMoving=t==="walking"||t==="running"||t==="crouchWalking",o.isRunning=t==="running",o.isCrouched=t==="crouch"||t==="crouchWalking")});return}let i=this.getPlayerObject(e);if(i){if(t==="oneSwing"){i.animation&&i.animation.swingArm&&i.animation.swingArm();return}i.animation&&i.animation.switchAnimationCallback!==void 0&&(i.animation.switchAnimationCallback=()=>{let s=i.animation;s&&(s.isMoving=t==="walking"||t==="running"||t==="crouchWalking",s.isRunning=t==="running",s.isCrouched=t==="crouch"||t==="crouchWalking")});return}if(this.playerEntity?.playerObject){let{playerObject:s}=this.playerEntity;if(t==="oneSwing"){s.animation&&s.animation.swingArm&&s.animation.swingArm();return}s.animation&&s.animation.switchAnimationCallback!==void 0&&(s.animation.switchAnimationCallback=()=>{let o=s.animation;o&&(o.isMoving=t==="walking"||t==="running"||t==="crouchWalking",o.isRunning=t==="running",o.isCrouched=t==="crouch"||t==="crouchWalking")})}}parseEntityLabel(e){if(e)try{if(e.type==="string")return e.value;let t=typeof e=="string"?F5.default.simplify(F5.default.parse(e)):Pi.simplify(e);return hi(t).map(this.textFromComponent).join("")}catch{return e}}textFromComponent(e){return typeof e=="string"?e:e.text??""}getItemMesh(e,t,r=!1,i){!e.nbt&&e.nbtData&&(e.nbt=e.nbtData);let s=this.worldRenderer.getItemRenderData(e,t);if(!(i&&i===s?.modelName)){if(s&&"resolvedModel"in s){let o=Os(this.worldRenderer.material,s.resolvedModel,s.modelName,this.worldRenderer.resourcesManager.currentResources.worldBlockProvider,this.worldRenderer.resourcesManager.currentResources.mcData),v=1;t["minecraft:display_context"]==="ground"?v=.5:t["minecraft:display_context"]==="thirdperson"&&(v=6),o.scale.set(v,v,v);let a=new V.Group;return a.add(o),{mesh:a,isBlock:!0,modelName:s.modelName}}if(s){let o=s.renderInfo?.texture==="blocks"?this.worldRenderer.material.map:this.worldRenderer.itemsTexture,{u:v,v:a,su:l,sv:c}=s,p=co(o,{u:v,v:a,sizeX:l??1,sizeY:c??1},{faceCamera:r,use3D:!r}),g=1;return t["minecraft:display_context"]==="ground"?g=.5:t["minecraft:display_context"]==="thirdperson"&&(g=6),p.mesh.scale.set(g,g,g),{mesh:p.mesh,isBlock:!1,modelName:s.modelName,cleanup:p.cleanup}}}}setVisible(e,t){t?e.scale.set(1,1,1):e.scale.set(0,0,0)}update(e,t){let r=e.name==="player";(e.name==="zombie_villager"||e.name==="husk")&&(t.texture=`textures/1.16.4/entity/${e.name==="zombie_villager"?"zombie_villager/zombie_villager.png":`zombie/${e.name}.png`}`),e.name==="glow_item_frame"&&(t.textures||(t.textures=[]),t.textures.background="block:glow_item_frame");let i=this.entities[e.id],s=!i;if(e.delete){if(!i)return;i.userData._posTween?.stop(),i.additionalCleanup&&i.additionalCleanup(),i.traverse(g=>{g.additionalCleanup&&g.additionalCleanup()}),this.onRemoveEntity(e),this.worldRenderer.sceneOrigin.removeAndUntrack(i),k0(i),delete this.entities[e.id];return}let o;if(i===void 0){this.beforeEntityAdded(e);let g=new V.Group;if(g.originalEntity=e,e.name==="item"||e.name==="tnt"||e.name==="falling_block"||e.name==="snowball"||e.name==="egg"||e.name==="ender_pearl"||e.name==="experience_bottle"||e.name==="splash_potion"||e.name==="lingering_potion"){let b=e.name==="tnt"||e.type==="projectile"?{name:e.name}:e.name==="falling_block"?{blockState:e.objectData}:x3(e.metadata)?.find(_=>typeof _=="object"&&_?.itemCount);if(b){let _=this.getItemMesh(b,{"minecraft:display_context":"ground"},e.type==="projectile");if(_){if(o=_.mesh,e.name==="item"||e.type==="projectile"?(o.scale.set(.5,.5,.5),o.position.set(0,e.name==="item"?.2:.1,0)):(o.scale.set(2,2,2),o.position.set(0,.5,0)),e.name==="item"){let S=new V.Clock;o.onBeforeRender=()=>{let C=S.getDelta();o.rotation.y+=C}}g.additionalCleanup=()=>{_.cleanup&&_.cleanup()}}}}else if(r){let b=new V.Group,_=this.setupPlayerObject(e,b,t);if(g.playerObject=_,o=b,e.username){let S=F1(e,{fontFamily:"mojangles"},b,this.worldRenderer.version);S&&(S.position.y=_.position.y+_.scale.y*16+3,S.scale.multiplyScalar(12))}}else o=J4(this.mcData,e,this.worldRenderer,this.entitiesOptions,{...t,customModel:e.customModel});if(!o)return;o.name="mesh";let y=e.pos??e.position;this.worldRenderer.sceneOrigin.track(g),g.position.set(y.x,y.y,y.z);let A=new V.BoxHelper(o,e.type==="hostile"?16711680:e.type==="mob"?65280:e.type==="player"?255:16753920);A.name="debug",g.add(o),g.add(A),A.visible=!1,this.worldRenderer.scene.add(g),i=g,i.name="entity",i.realName=e.name,this.entities[e.id]=i,r&&this.updatePlayerSkin(e.id,e.username,t?.texture?e.uuid:void 0,t?.texture||$0),this.setDebugMode(this.debugMode,g),this.setRendering(this.currentlyRendering,g),this.afterAddEntity(e)}else o=i.children.find(g=>g.name==="mesh");this.updateEntityEquipment(i,e);let v=S3(e,this.mcData),l=(x3(e.metadata)?.[0]??e.metadata?.[0]??0)&32||this.worldRenderer.playerStateReactive.cameraSpectatingEntity===e.id&&this.worldRenderer.playerStateUtils.isSpectator();for(let g of o.children??[])g.name!=="nametag"&&(g.visible=!l);v.baby?i.scale.set(.5,.5,.5):i.scale.set(1,1,1);let c=O1("text_display",e,this.mcData),u=c?.text||v.custom_name_visible&&v.custom_name;if(e.name!=="player"&&u){let g=c&&(c.billboard_render_constraints==="fixed"||!c.billboard_render_constraints),y=c&&!(parseInt(c.style_flags,10)&4)?Q4(c.background_color):void 0,A;if(c?.text_opacity){let b=parseInt(c?.text_opacity,10);A=b>0?b:256-b}F1({...e,username:typeof u=="string"?F5.default.simplify(F5.default.parse(u)):Pi.simplify(u),nameTagBackgroundColor:y,nameTagTextOpacity:A,nameTagFixed:g,nameTagScale:c?.scale,nameTagTranslation:c&&(c.translation||new V.Vector3(0,0,0)),nameTagRotationLeft:w3(c?.left_rotation),nameTagRotationRight:w3(c?.right_rotation)},this.entitiesOptions,o,this.worldRenderer.version)}let f=O1("armor_stand",e,this.mcData);if(f){let g=(parseInt(f.client_flags,10)&1)!==0,y=(parseInt(f.client_flags,10)&4)!==0,A=(parseInt(f.client_flags,10)&8)===0,b=(parseInt(f.client_flags,10)&16)!==0;o.castShadow=!b,o.receiveShadow=!b,g?i.scale.set(.5,.5,.5):i.scale.set(1,1,1),i.traverse(_=>{switch(_.name){case"bone_baseplate":this.setVisible(_,A),_.rotation.y=-i.rotation.y;break;case"bone_head":f.head_pose&&_.setRotationFromEuler(_e(f.head_pose));break;case"bone_body":f.body_pose&&_.setRotationFromEuler(_e(f.body_pose));break;case"bone_rightarm":_.parent?.name!=="bone_armor"&&this.setVisible(_,y),f.left_arm_pose?_.setRotationFromEuler(_e(f.left_arm_pose)):_.setRotationFromEuler(_e({yaw:-10,pitch:-10,roll:0}));break;case"bone_leftarm":_.parent?.name!=="bone_armor"&&this.setVisible(_,y),f.right_arm_pose?_.setRotationFromEuler(_e(f.right_arm_pose)):_.setRotationFromEuler(_e({yaw:10,pitch:-10,roll:0}));break;case"bone_rightleg":f.left_leg_pose?_.setRotationFromEuler(_e(f.left_leg_pose)):_.setRotationFromEuler(_e({yaw:-1,pitch:-1,roll:0}));break;case"bone_leftleg":f.right_leg_pose?_.setRotationFromEuler(_e(f.right_leg_pose)):_.setRotationFromEuler(_e({yaw:1,pitch:1,roll:0}));break}})}let p=O1("item_frame",e,this.mcData);if(p||(p=O1("glow_item_frame",e,this.mcData)),p){let g=p?.item??e.metadata?.[8];if(o.scale.set(1,1,1),o.position.set(0,0,-.5),i.rotation.x=-e.pitch,i.children.find(y=>{if(y.name.startsWith("map_")){k0(y);let A=parseInt(y.name.split("_")[1],10);return this.itemFrameMaps[A]=this.itemFrameMaps[A]?.filter(b=>b!==y),y instanceof V.Mesh&&y.material?.map?.dispose(),!0}else if(y.name==="item")return k0(y),!0;return!1})?.removeFromParent(),g&&(g.itemId??g.blockId??0)!==0){let y=p.rotation??0,A=g.nbtData?.value?.map?.value??g.components?.find(b=>b.type==="map_id")?.data;if(A)o.scale.set(16/12,16/12,1),this.addMapModel(i,A,y);else{let b=this.getItemMesh(g,{"minecraft:display_context":"fixed"});b&&(b.mesh.position.set(0,0,-.05),b.isBlock?b.mesh.scale.set(.25,.25,.25):b.mesh.scale.set(.5,.5,.5),b.mesh.rotateY(Math.PI),b.mesh.rotateZ(-y*Math.PI/4),b.mesh.name="item",i.add(b.mesh))}}}e.username!==void 0&&(i.username=e.username),this.updateNameTagVisibility(i),this.updateEntityPosition(e,s,t)}updateEntityPosition(e,t,r){let i=this.entities[e.id];if(!i)return;let s=t?0:j4;if(e.position){let o=this.worldRenderer.sceneOrigin.getWorldPosition(i)??{x:e.position.x,y:e.position.y,z:e.position.z};i.userData._tweenTarget||(i.userData._tweenTarget={x:o.x,y:o.y,z:o.z}),i.userData._posTween?.stop(),i.userData._posTween=new F0(i.userData._tweenTarget).to({x:e.position.x,y:e.position.y,z:e.position.z},s).onUpdate(()=>{i.position.set(i.userData._tweenTarget.x,i.userData._tweenTarget.y,i.userData._tweenTarget.z)}).start()}if(typeof e.yaw=="number"&&Number.isFinite(e.yaw)){let o=A3(i.rotation.y,e.yaw);new F0(i.rotation).to({y:i.rotation.y+o},s).start()}if(i?.playerObject&&r?.rotation?.head){let{playerObject:o}=i,v=r.rotation.head.y,a=typeof v=="number"&&Number.isFinite(v)?v:e.yaw,l=typeof a=="number"&&typeof e.yaw=="number"&&Number.isFinite(a)&&Number.isFinite(e.yaw)?A3(e.yaw,a):0;o.skin.head.rotation.y=l;let c=r.rotation.head.x;o.skin.head.rotation.x=typeof c=="number"&&Number.isFinite(c)?-c:0}}afterAddEntity(e){}beforeEntityAdded(e){let t=this.pendingModelOverrides.get(e.id.toString());if(t){let{parts:r}=t;e.customModel=r.length===1?r[0]:{parts:r},this.pendingModelOverrides.delete(e.id.toString())}}maybeRenderPlayerSkin(e){let t=this.entities[e];if(e==="player_entity"&&(t=this.playerEntity,e=this.playerEntity?.originalEntity.id),!t||!t.playerObject||!t.visible)return;let r=128,i=this.worldRenderer.getCameraPosition(),s=this.worldRenderer.sceneOrigin.getWorldPosition(t),v=(s?new V.Vector3(s.x,s.y,s.z):t.position.clone().add(new V.Vector3(this.worldRenderer.sceneOrigin.x,this.worldRenderer.sceneOrigin.y,this.worldRenderer.sceneOrigin.z))).distanceTo(i);if(v<r&&v<this.worldRenderer.viewDistance*16){if(this.loadedSkinEntityIds.has(String(e)))return;this.updatePlayerSkin(e,t.playerObject.realUsername,t.playerObject.realPlayerUuid,!0,!0)}}onRemoveEntity(e){this.loadedSkinEntityIds.delete(e.id.toString()),delete this.currentSkinUrls[e.id.toString()],this.motionCache.delete(e.id.toString())}updateMap(e,t){this.cachedMapsImages[e]=t;let r=this.itemFrameMaps[e];if(r&&(r=r.filter(i=>i.parent),this.itemFrameMaps[e]=r,r))for(let i of r)i.material.map=this.loadMap(t),i.material.needsUpdate=!0,i.visible=!0}updateNameTagVisibility(e){let t=this.worldRenderer.playerStateReactive.team,r=e.originalEntity.team,i=r?.nameTagVisibility||"always",s=i==="always"||i==="hideForOwnTeam"&&r?.team!==t?.team||i==="hideForOtherTeams"&&(r?.team===t?.team||t===void 0);e.traverse(o=>{o.name==="nametag"&&(o.visible=s)})}addMapModel(e,t,r){let i=this.cachedMapsImages?.[t],s=null;i&&(s=this.loadMap(i));let o={transparent:!0,alphaTest:.1};s&&(o.map=s);let v=new V.MeshLambertMaterial(o),a=new V.Mesh(new V.PlaneGeometry(1,1),v);a.rotation.set(0,Math.PI,0),e.add(a);let l=!0;e.traverseVisible(c=>{c.name==="geometry_frame"&&(l=!1)}),l?a.position.set(0,0,.499):a.position.set(0,0,.437),a.rotateZ(Math.PI*2-r*Math.PI/2),a.name=`map_${t}`,s||(a.visible=!1),this.itemFrameMaps[t]||(this.itemFrameMaps[t]=[]),this.itemFrameMaps[t].push(a)}loadMap(e){let t=Bt(e);return t.needsUpdate=!0,t}addItemModel(e,t,r,i=!1){let s=`bone_${t}item`,o=`custom_item_${t}`;if(e.traverse(a=>{a.name===o&&(a.removeFromParent(),a.additionalCleanup&&a.additionalCleanup())}),!r)return;let v=this.getItemMesh(r,{"minecraft:display_context":"thirdperson"});v?.mesh&&e.traverse(a=>{if(a.name.toLowerCase()===s||a.name===`${t}Arm`){let l=new V.Object3D;l.additionalCleanup=()=>{v.cleanup&&v.cleanup()};let c=v.mesh;l.rotation.z=-Math.PI/16,v.isBlock?l.rotation.y=Math.PI/4:(c.rotation.z=-Math.PI/4,l.rotation.y=Math.PI/2,l.scale.multiplyScalar(2)),i&&(l.position.y=-8,l.position.z=5,l.position.x=t==="left"?1:-1,l.rotation.x=Math.PI),l.add(c),l.name=o,a.add(l)}})}handleDamageEvent(e,t){let r=this.entities[e]?.children.find(i=>i.name==="mesh");r&&r.traverse(i=>{if(i instanceof V.Mesh&&i.material.clone){i.material.clone().dispose(),i.material=i.material.clone();let o=i.material.color.clone();i.material.color.set(16711680),new F0(i.material.color).to(o,500).start()}})}raycastSceneDebug(){let e=new V.Raycaster;return e.setFromCamera(new V.Vector2(0,0),this.worldRenderer.camera),e.intersectObjects(this.worldRenderer.scene.children)[0]?.object}updateEntityModel(e,t,r,i){let s=Array.isArray(t)?t:[{modelPath:t,modelType:r,metadata:i}];this.pendingModelOverrides.set(e,{parts:s});let o=this.entities[e];o&&(this.update({...o.originalEntity,delete:!0},{}),this.update(o.originalEntity,{}))}setupPlayerObject(e,t,r){let i=new Ft;i.realPlayerUuid=e.uuid??"",i.realUsername=e.username??"",i.position.set(0,16,0),wi(i),t.add(i);let s=1/16;return t.scale.set(s,s,s),t.rotation.set(0,Math.PI,0),i.animation=new I5,i.animation.isMoving=!1,i}updateEntityEquipment(e,t){if(!e||!t.equipment)return;let r=t.type==="player";if(this.addItemModel(e,r?"right":"left",t.equipment[0],r),this.addItemModel(e,r?"left":"right",t.equipment[1],r),D5(this.worldRenderer,e,"feet",t.equipment[2]),D5(this.worldRenderer,e,"legs",t.equipment[3],2),D5(this.worldRenderer,e,"chest",t.equipment[4]),D5(this.worldRenderer,e,"head",t.equipment[5]),r&&e.playerObject){let{playerObject:i}=e;i.backEquipment=t.equipment.some(s=>s?.name==="elytra")?"elytra":"cape",i.backEquipment==="elytra"&&this.loadAndApplyCape(t.id,_3),i.cape.map===null&&(i.cape.visible=!1)}}};function S3(n,e){let t=e?.entitiesByName[n.name];return new Proxy({},{get(r,i,s){if(typeof i!="string"||!t)return;let o=t.metadataKeys?.indexOf(i);return n.metadata?.[o??-1]}})}function O1(n,e,t){if(e.name===n)return S3(e,t)}function D5(n,e,t,r,i=1,s=!1){if(!r){Bi(e,t);return}let o=r.name.split("_"),v,a=t==="head"&&r.name==="player_head";if(a)if(Bi(e,t),r.nbt){let g=Pi.simplify(r.nbt);try{let y;if(g.SkullOwner?y=g.SkullOwner.Properties.textures[0]?.Value:y=g["minecraft:profile"]?.Properties?.find(A=>A.name==="textures")?.value,y){v=JSON.parse(z.from(y,"base64").toString()).textures?.SKIN?.url;let{skinTexturesProxy:b}=n.worldRendererConfig;b&&(v=v?.replace("http://textures.minecraft.net/",b).replace("https://textures.minecraft.net/",b))}}catch{}}else v=$0;let l=o[0];if(!v){let g=`${l}_layer_${i}${s?"_overlay":""}`;v=n.resourcesManager.currentResources.customTextures.armor?.textures[g]?.src??y3[g]}if(!v||!De[t]){Bi(e,t);return}let c=`geometry_armor_${t}${s?"_overlay":""}`,u=e.children.findLast(g=>g.name===c),f;if(u?(f=u.material,c1(v,g=>{g.magFilter=V.NearestFilter,g.minFilter=V.NearestFilter,g.flipY=!1,g.wrapS=V.MirroredRepeatWrapping,g.wrapT=V.MirroredRepeatWrapping,f.map=g})):(u=Fe(n,v,De[t]),t==="head"&&(u.children[0].position.y+=.01),u.name=c,f=u.material,a||(f.side=V.DoubleSide)),l==="leather"&&!s){let g=r.nbt?.value?.display?.value?.color?.value;if(g){let y=g>>16&255,A=g>>8&255,b=g&255;f.color.setRGB(y/255,A/255,b/255)}else f.color.setHex(11890001);D5(n,e,t,r,i,!0)}else f.color.setHex(16777215);let p=new V.Object3D;p.name=`armor_${t}${s?"_overlay":""}`,p.add(u),e.add(u)}function Bi(n,e){for(let t of n.children)(t.name===`geometry_armor_${e}`||t.name===`geometry_armor_${e}_overlay`)&&t.removeFromParent()}var Ii=async(n,e)=>{let t;if(!n&&!e)t=await T3;else{if(n||(n=await He(e,"skin")),!n)return;let{canvas:a}=await ye(n);t=new L0.CanvasTexture(a)}t.magFilter=L0.NearestFilter,t.minFilter=L0.NearestFilter;let r=new L0.BoxGeometry,i=new L0.MeshStandardMaterial,s=!1,o=new L0.Mesh(r,i);o.scale.x=s?3:4,o.scale.y=12,o.scale.z=4,q4(r,40,16,s?3:4,12,4),i.map=t,i.needsUpdate=!0;let v=new L0.Group;return v.add(o),v.scale.set(.1,.1,.1),o.rotation.z=Math.PI,v};function Z4(n,e,t,r,i,s,o,v){let a=(B,H,G,O)=>[new L0.Vector2(B/o,1-O/v),new L0.Vector2(G/o,1-O/v),new L0.Vector2(G/o,1-H/v),new L0.Vector2(B/o,1-H/v)],l=a(e+s,t,e+r+s,t+s),c=a(e+r+s,t,e+r*2+s,t+s),u=a(e,t+s,e+s,t+s+i),f=a(e+s,t+s,e+r+s,t+s+i),p=a(e+r+s,t+s,e+r+s*2,t+i+s),g=a(e+r+s*2,t+s,e+r*2+s*2,t+i+s),y=n.attributes.uv,A=[p[3],p[2],p[0],p[1]],b=[u[3],u[2],u[0],u[1]],_=[l[3],l[2],l[0],l[1]],S=[c[0],c[1],c[3],c[2]],C=[f[3],f[2],f[0],f[1]],M=[g[3],g[2],g[0],g[1]],P=[];for(let B of[A,b,_,S,C,M])for(let H of B)P.push(H.x,H.y);y.set(new Float32Array(P)),y.needsUpdate=!0}function q4(n,e,t,r,i,s){Z4(n,e,t,r,i,s,64,64)}var B3={itemRight:{rotation:[0,-90,25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},itemLeft:{rotation:[0,90,-25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},blockRight:{rotation:[0,45,0],translation:[0,0,0],scale:[.4,.4,.4]},blockLeft:{rotation:[0,225,0],translation:[0,0,0],scale:[.4,.4,.4]}},z5=class{constructor(e,t=!1){this.worldRenderer=e;this.offHand=t;d(this,"holdingBlock");d(this,"blockSwapAnimation");d(this,"cameraGroup",new u0.Mesh);d(this,"objectOuterGroup",new u0.Group);d(this,"objectInnerGroup",new u0.Group);d(this,"holdingBlockInnerGroup",new u0.Group);d(this,"camera",new u0.PerspectiveCamera(75,1,.1,100));d(this,"stopUpdate",!1);d(this,"lastHeldItem");d(this,"lastHeldItemRenderKey");d(this,"isSwinging",!1);d(this,"nextIterStopCallbacks");d(this,"idleAnimator");d(this,"ready",!1);d(this,"lastUpdate",0);d(this,"playerHand");d(this,"offHandDisplay",!1);d(this,"offHandModeLegacy",!1);d(this,"swingAnimator");d(this,"config");d(this,"disposed",!1);d(this,"unsubs",[]);d(this,"lastItemModelName");d(this,"switchRequest",0);this.initCameraGroup(),this.unsubs.push(C3(this.worldRenderer.playerStateReactive,"heldItemMain",()=>{this.offHand||this.updateItem()})),this.unsubs.push(C3(this.worldRenderer.playerStateReactive,"heldItemOff",()=>{this.offHand&&this.updateItem()})),this.config=e.displayOptions.inWorldRenderingConfig,this.offHandDisplay=this.offHand,this.offHand||Ii().then(r=>{this.disposed||(this.playerHand=r,this.updateItem())}).then(()=>{if(this.disposed)return;let r=y1(async()=>Ii(this.worldRenderer.playerStateReactive.playerSkin,this.worldRenderer.playerStateReactive.onlineMode?this.worldRenderer.playerStateReactive.username:void 0),this.worldRenderer.playerStateReactive,"playerSkin",i=>{i&&(this.playerHand=i,this.updateItem())},i=>{k0(i,!0)});this.unsubs.push(r)})}updateItem(){if(!this.ready)return;let e=this.offHand?this.worldRenderer.playerStateReactive.heldItemOff:this.worldRenderer.playerStateReactive.heldItemMain;e?this.setNewItem(e):this.offHand?this.setNewItem():this.setNewItem({type:"hand"})}initCameraGroup(){this.cameraGroup=new u0.Mesh}startSwing(){this.swingAnimator?.startSwing()}stopSwing(){this.swingAnimator?.stopSwing()}render(e,t,r,i){if(!this.lastHeldItem)return;let s=performance.now();this.lastUpdate&&s-this.lastUpdate>50&&this.replaceItemModel(this.lastHeldItem),this.swingAnimator?.isCurrentlySwinging()||this.swingAnimator?.debugParams.animationStage?this.swingAnimator?.update():this.idleAnimator?.update(),this.blockSwapAnimation?.switcher.update();let o=new u0.Scene;o.add(this.cameraGroup),this.updateCameraGroup(),o.add(r.clone()),o.add(i.clone());let v=t.getSize(new u0.Vector2),a=Math.min(v.width,v.height),l=v.width-a,{offHandDisplay:c}=this;if(c&&(this.cameraGroup.scale.x=-1),t.autoClear=!1,t.clearDepth(),this.offHandDisplay)t.setViewport(0,0,a,a);else{let u=v.width-a;t.setViewport(u,0,a,a)}t.render(o,this.camera),t.setViewport(0,0,v.width,v.height),c&&(this.cameraGroup.scale.x=1)}async playBlockSwapAnimation(e){this.blockSwapAnimation??(this.blockSwapAnimation={switcher:new lt(()=>({y:this.objectInnerGroup.position.y}),(s,o)=>{s==="y"&&(this.objectInnerGroup.position.y=o)},{y:16})});let t=e,r=this.objectInnerGroup.position.y+this.objectInnerGroup.scale.y*1.5*(t==="appeared"?1:-1),i=!1;return new Promise(s=>{this.blockSwapAnimation.switcher.transitionTo({y:r},t,()=>{i||s(!0)},()=>{i=!0,s(!1)})})}isDifferentItem(e){return this.lastHeldItemRenderKey!==Ot(this.worldRenderer,e)}updateCameraGroup(){if(this.stopUpdate)return;let{camera:e}=this;this.cameraGroup.position.copy(e.position),this.cameraGroup.rotation.copy(e.rotation);let t=1,{position:r,scale:i}=this.getHandHeld3d(),s=-r.z,o=this.offHandModeLegacy?-1:1;this.objectOuterGroup.position.set(s*r.x*t*o,s*r.y,-s);let v=i*2.22*.2;this.objectOuterGroup.scale.set(v,v,v)}async createItemModel(e){if(this.lastUpdate=performance.now(),!e||e.type==="hand"&&!this.playerHand)return;let t;if(e.type==="item"||e.type==="block"){let i=this.worldRenderer.entities.getItemMesh({...e.fullItem,itemId:e.id},w1(this.worldRenderer),!1,this.lastItemModelName);if(i){let{mesh:s,isBlock:o,modelName:v}=i;o?(t=s,e.type="block"):(s.position.set(.5,.5,.5),t=s,e.type="item"),this.lastItemModelName=v}}else t=this.playerHand;if(!t)return;t.name="holdingBlock";let r=this.getHandHeld3d().rotation;return t.rotation.x=u0.MathUtils.degToRad(r.x),t.rotation.y=u0.MathUtils.degToRad(r.y),t.rotation.z=u0.MathUtils.degToRad(r.z),{model:t,type:e.type}}async replaceItemModel(e){if(this.blockSwapAnimation?.switcher.isTransitioning)return;if(!e){this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0;return}let t=await this.createItemModel(e);t&&(this.holdingBlock?.removeFromParent(),this.holdingBlock=t.model,this.holdingBlockInnerGroup.add(t.model))}testUnknownBlockSwitch(){this.setNewItem({type:"item",name:"minecraft:some-unknown-block",id:0,fullItem:{}})}async setNewItem(e){let t=Ot(this.worldRenderer,e),r=this.lastHeldItemRenderKey!==t;if(this.lastHeldItem=e,!r)return;this.lastHeldItemRenderKey=t,this.lastItemModelName=void 0;let i=++this.switchRequest,s=!1;if(this.holdingBlock){if(s=!0,!await this.playBlockSwapAnimation("disappeared"))return;this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0}if(!e){this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0,this.blockSwapAnimation=void 0;return}if(i!==this.switchRequest)return;let o=await this.createItemModel(e);if(!o||i!==this.switchRequest)return;let v=new u0.Group;this.holdingBlockInnerGroup.removeFromParent(),this.holdingBlockInnerGroup=new u0.Group,this.holdingBlockInnerGroup.add(o.model),v.add(this.holdingBlockInnerGroup),this.holdingBlock=o.model,this.objectInnerGroup=new u0.Group,this.objectInnerGroup.add(v),this.objectInnerGroup.position.set(-.5,-.5,-.5),s&&(this.objectInnerGroup.position.y-=this.objectInnerGroup.scale.y*1.5),Object.assign(v.position,{x:.5,y:.5,z:.5}),this.objectOuterGroup=new u0.Group,this.objectOuterGroup.add(this.objectInnerGroup),this.cameraGroup.add(this.objectOuterGroup);let a=this.getHandHeld3d().rotation;this.objectOuterGroup.rotation.y=u0.MathUtils.degToRad(a.yOuter),s&&await this.playBlockSwapAnimation("appeared"),this.swingAnimator??(this.swingAnimator=new Oi(this.holdingBlockInnerGroup)),this.swingAnimator.setHandMesh(this.holdingBlockInnerGroup),this.swingAnimator.type=o.type,this.config.viewBobbing&&(this.idleAnimator=new Hi(this.holdingBlockInnerGroup,this.worldRenderer.playerStateReactive))}getHandHeld3d(){let e=this.lastHeldItem?.type??"hand",t=this.offHandModeLegacy?"Left":"Right",r=.8*1.15,i={x:.4,y:-.7,z:-.45},s={x:-32.4,y:42.8,z:-41.3,yOuter:0};if(e==="item"){let o=B3[`item${t}`];i={x:-.05,y:-.7,z:-.45},s={x:o.rotation[0],y:o.rotation[1],z:o.rotation[2],yOuter:0},r=o.scale[0]*1.15}else if(e==="block"){let o=B3[`block${t}`];i={x:.4,y:-.7,z:-.45},s={x:o.rotation[0],y:o.rotation[1],z:o.rotation[2],yOuter:0},r=o.scale[0]*1.15}return{rotation:s,position:i,scale:r}}dispose(){this.disposed=!0,this.ready=!1,this.unsubs.forEach(e=>e()),this.unsubs=[],this.idleAnimator?.destroy(),this.idleAnimator=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.blockSwapAnimation?.switcher.forceFinish(),this.blockSwapAnimation=void 0,k0(this.cameraGroup,!0),k0(this.objectOuterGroup,!0),k0(this.objectInnerGroup,!0),k0(this.holdingBlockInnerGroup,!0),this.holdingBlock=void 0,this.playerHand&&(k0(this.playerHand,!0),this.playerHand=void 0)}},Hi=class{constructor(e,t){this.handMesh=e;this.playerState=t;d(this,"globalTime",0);d(this,"lastTime",0);d(this,"currentState");d(this,"targetState");d(this,"defaultPosition");d(this,"idleOffset",{y:0,rotationZ:0});d(this,"tween",new Mt);d(this,"idleTween",null);d(this,"stateSwitcher");d(this,"debugParams",{walkingSpeed:8,sprintingSpeed:16,walkingAmplitude:{x:1/30,y:1/10,rotationZ:.25},sprintingAmplitude:{x:1/30,y:1/10,rotationZ:.4}});d(this,"debugGui");d(this,"updated",!1);this.handMesh=e,this.globalTime=0,this.currentState="NOT_MOVING",this.targetState="NOT_MOVING",this.defaultPosition={x:e.position.x,y:e.position.y,z:e.position.z,rotationX:e.rotation.x,rotationY:e.rotation.y,rotationZ:e.rotation.z},this.stateSwitcher=new lt(()=>({x:this.handMesh.position.x,y:this.handMesh.position.y,z:this.handMesh.position.z,rotationX:this.handMesh.rotation.x,rotationY:this.handMesh.rotation.y,rotationZ:this.handMesh.rotation.z}),(r,i)=>{switch(r){case"x":this.handMesh.position.x=i;break;case"y":this.handMesh.position.y=i;break;case"z":this.handMesh.position.z=i;break;case"rotationX":this.handMesh.rotation.x=i;break;case"rotationY":this.handMesh.rotation.y=i;break;case"rotationZ":this.handMesh.rotation.z=i;break}},{x:2,y:2,z:2,rotation:Math.PI}),this.debugGui=new ke("idle_animator",this.debugParams)}startIdleAnimation(){this.idleTween&&this.idleTween.stop(),this.idleOffset.y=this.handMesh.position.y-this.defaultPosition.y,this.idleOffset.rotationZ=this.handMesh.rotation.z-this.defaultPosition.rotationZ,this.idleTween=new F0(this.idleOffset,this.tween).to({y:.05,rotationZ:.05},3e3).easing(H0.Sinusoidal.InOut).yoyo(!0).repeat(1/0).start()}stopIdleAnimation(){this.idleTween&&(this.idleTween.stop(),this.idleOffset.y=0,this.idleOffset.rotationZ=0)}getStateTransform(e,t){switch(e){case"NOT_MOVING":case"SNEAKING":return{x:this.defaultPosition.x,y:this.defaultPosition.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ};case"WALKING":case"SPRINTING":{let r=e==="SPRINTING"?this.debugParams.sprintingSpeed:this.debugParams.walkingSpeed,i=e==="SPRINTING"?this.debugParams.sprintingAmplitude:this.debugParams.walkingAmplitude;return{x:this.defaultPosition.x+Math.sin(t*r)*i.x,y:this.defaultPosition.y-Math.abs(Math.cos(t*r))*i.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ}}}}setState(e){if(e===this.targetState)return;this.targetState=e;let t=!1;if(this.currentState!==e){if(this.stopIdleAnimation(),!t){let r=this.getStateTransform(e,this.globalTime);this.stateSwitcher.transitionTo(r,e)}this.currentState=e}}update(){this.stateSwitcher.update();let e=performance.now(),t=(e-this.lastTime)/1e3;if(this.lastTime=e,!this.stateSwitcher.isTransitioning)switch(this.currentState){case"NOT_MOVING":case"SNEAKING":this.globalTime=Math.PI/4;break;case"SPRINTING":case"WALKING":this.globalTime+=t;break}if(this.playerState){let r=this.playerState.movementState;r!==this.targetState&&this.setState(r)}if(!this.stateSwitcher.isTransitioning&&(this.currentState==="NOT_MOVING"||this.currentState==="SNEAKING")&&(this.idleTween?.isPlaying()||this.startIdleAnimation(),this.tween.update(),this.handMesh.position.y=this.defaultPosition.y+this.idleOffset.y,this.handMesh.rotation.z=this.defaultPosition.rotationZ+this.idleOffset.rotationZ),!this.stateSwitcher.isTransitioning&&(this.currentState==="WALKING"||this.currentState==="SPRINTING")){let r=this.getStateTransform(this.currentState,this.globalTime);Object.assign(this.handMesh.position,r),Object.assign(this.handMesh.rotation,{x:r.rotationX,y:r.rotationY,z:r.rotationZ})}}getCurrentState(){return this.currentState}destroy(){this.stopIdleAnimation(),this.stateSwitcher.forceFinish()}},Oi=class{constructor(e){this.handMesh=e;d(this,"PI",Math.PI);d(this,"animationTimer",0);d(this,"lastTime",0);d(this,"isAnimating",!1);d(this,"stopRequested",!1);d(this,"originalRotation");d(this,"originalPosition");d(this,"originalScale");d(this,"debugParams",{animationTime:250,animationStage:0,useClassicSwing:!0,itemSwingXPosScale:-.8,itemSwingYPosScale:.2,itemSwingZPosScale:-.2,itemHeightScale:-.6,itemPreswingRotY:45,itemSwingXRotAmount:-30,itemSwingYRotAmount:-35,itemSwingZRotAmount:-5,armSwingXPosScale:-.3,armSwingYPosScale:.4,armSwingZPosScale:-.4,armSwingYRotAmount:70,armSwingZRotAmount:-20,armHeightScale:-.6});d(this,"debugGui");d(this,"type","hand");this.handMesh=e,this.originalRotation=e.rotation.clone(),this.originalPosition=e.position.clone(),this.originalScale=e.scale.clone(),this.debugGui=new ke("hand_animator",this.debugParams,void 0,{animationStage:{min:0,max:1,step:.01},itemSwingXPosScale:{min:-2,max:2,step:.1},itemSwingYPosScale:{min:-2,max:2,step:.1},itemSwingZPosScale:{min:-2,max:2,step:.1},itemHeightScale:{min:-2,max:2,step:.1},itemPreswingRotY:{min:-180,max:180,step:5},itemSwingXRotAmount:{min:-180,max:180,step:5},itemSwingYRotAmount:{min:-180,max:180,step:5},itemSwingZRotAmount:{min:-180,max:180,step:5},armSwingXPosScale:{min:-2,max:2,step:.1},armSwingYPosScale:{min:-2,max:2,step:.1},armSwingZPosScale:{min:-2,max:2,step:.1},armSwingYRotAmount:{min:-180,max:180,step:5},armSwingZRotAmount:{min:-180,max:180,step:5},armHeightScale:{min:-2,max:2,step:.1}})}setHandMesh(e){this.handMesh=e,this.originalRotation.copy(e.rotation),this.originalPosition.copy(e.position),this.originalScale.copy(e.scale)}update(){if(!this.isAnimating&&!this.debugParams.animationStage){this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}let e=performance.now(),t=(e-this.lastTime)/1e3;this.lastTime=e,this.animationTimer+=t*1e3;let r=this.debugParams.animationStage||Math.min(this.animationTimer/this.debugParams.animationTime,1);if(r>=1){if(this.stopRequested){this.isAnimating=!1,this.stopRequested=!1,this.animationTimer=0,this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}this.animationTimer=0;return}this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);let i=r,s=Math.sqrt(i),o=Math.sin(i*this.PI),v=Math.sin(s*this.PI);if(this.type==="hand"){let a=this.debugParams.armSwingXPosScale*v,l=this.debugParams.armSwingYPosScale*Math.sin(s*this.PI*2),c=this.debugParams.armSwingZPosScale*o;this.handMesh.position.x+=a,this.handMesh.position.y+=l+this.debugParams.armHeightScale*i,this.handMesh.position.z+=c,this.handMesh.rotation.y+=u0.MathUtils.degToRad(this.debugParams.armSwingYRotAmount*v),this.handMesh.rotation.z+=u0.MathUtils.degToRad(this.debugParams.armSwingZRotAmount*o)}else{let a=this.debugParams.itemSwingXPosScale*v,l=this.debugParams.itemSwingYPosScale*Math.sin(s*this.PI*2),c=this.debugParams.itemSwingZPosScale*o;this.handMesh.position.x+=a,this.handMesh.position.y+=l+this.debugParams.itemHeightScale*i,this.handMesh.position.z+=c,this.handMesh.rotation.y+=u0.MathUtils.degToRad(this.debugParams.itemPreswingRotY),this.handMesh.rotation.x+=u0.MathUtils.degToRad(this.debugParams.itemSwingXRotAmount*o),this.handMesh.rotation.y+=u0.MathUtils.degToRad(this.debugParams.itemSwingYRotAmount*v),this.handMesh.rotation.z+=u0.MathUtils.degToRad(this.debugParams.itemSwingZRotAmount*o)}}startSwing(){this.stopRequested=!1,!this.isAnimating&&(this.isAnimating=!0,this.animationTimer=0,this.lastTime=performance.now())}stopSwing(){this.isAnimating&&(this.stopRequested=!0)}isCurrentlySwinging(){return this.isAnimating}};function L5(n,e=!1){return n.displayOptions.inWorldRenderingConfig.handRenderer==="legacy"?new z5(n,e):new T5(n,e)}E();x();k();R();import*as Q0 from"three";import{Vec3 as Fi}from"vec3";var P3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALUlEQVR42mP4//8/IyWYYdSAwW6Ara3tf4oMmD179n9ChhD0AsiQ0Wgc7AYAAOqH+zNQ3r9kAAAAAElFTkSuQmCC";var I3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR42mP4//8/IyWYYdQA3AbY2tr+H1gDZs+e/R9mCD7D8IYBzBAQTXYgEvIKQQPw2T6aEqlkAADEA/W3ycLXvwAAAABJRU5ErkJggg==";var H3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQklEQVR42mP4//8/IyWYYRgbYGtr+39wGQDiYzMUpwGzZ8+GawDRID4IkxSIMEOwaSQ6FgiFBW0NIOR8osJgBOQFALo37sVTOo/LAAAAAElFTkSuQmCC";var O3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWElEQVR42mP4//8/IyWYYXAbYGtr+59sA0CaZ8+eTZkBhNg4DQApQlYIcglMDN1VWA0AKYJpQvYONi/hDUSYIfjCgmA0EooJ2hmAK9CINgBXoA2xvEAMBgBGPud3dYZtOQAAAABJRU5ErkJggg==";var F3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVR42r1TQQrAMAxyD8tL89iMHgQJoQxHewi0UsWYFFX1/CkcF4iIsgUWOTM9ASV3F3rHF+v9rK4wEVnEFoFYbwmTbRZFFN9m0B9QZBfk2THaAhqktQdTkHYL9iZe+40vs7nda+BuVOMAAAAASUVORK5CYII=";var D3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVR42rWTWwpAIQhEbWGu1MUaXRgQcXpyP8SIPI1jibu3l5DfAKrqyFgfAczsKxx5xJUCFGYFUZXMpOe9CAa8BOS+0U5UVbYQ6Siqbi0BFT0auTSRHZqNkE6BGXgEYKYtAczIbQAz8ukzXT3l3egz49IXvXQCVAAAAABJRU5ErkJggg==";var z3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeElEQVQ4jaWSQQ4AIQgD9WG8tI/tnkgaUgmuBw8YHcqERXK/nOUuI4JPAABMSESwA1qAQgAQwBygnfNjTaCpWoBzUlNZQJ07x9FUdgSlV5FaW4Cjq8isW8BJ2GgPtEuVdr0HKvLXHjiRI0An8jTKqo9dF000cnBzPgKuxXtbq/m1AAAAAElFTkSuQmCC";var L3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhUlEQVR42qWTSRKAMAgE8WF5KY/FygEL2yEp9cAhCz0wJBYRx58wbowxYsZngLvHjITsgNYpJySBrPIBUMqZSHhdSw+oQlgVa01U7VRQ7huTk67aUWZaVyaNZFsSQBCTVBW3KahLyo/lQ6KR1Y+2BTUyGqke1AXoxsSzpYlU3FW0/Exv1ie0hq53Bf15aAAAAABJRU5ErkJggg==";var U3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVR42o2SYQ6FMAiDeQfbSXdYXjSpqd869QeZQiilpbr7l2KM0cc75+xUV77YpGCjAPUqitMU3uCAXrsAlPSCcgJMbG4M0mQ1Etz/i0KlXQnmwyqpv1uH4h7fiws7ISneTYNEk0ImCxcAArGJrE4AXhypPtl7AqTdeJG8k3gHb0L6QfmK9WQTa59cSFdHRssKFHHngteV/wPDepaHIu0QVAAAAABJRU5ErkJggg==";var G3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVR42n2Tyw3AIAxD3cGYlGFTUSmV+2o4IEEAf2JQVV1rjDGq576ec5avWVdfWIW12aMPEJBEImoPv+CAvvcCODsVNWBS8wA4A5ndv1/ytciQvBLMyeTSHD3ZYXPXXH7Y0ZMdJvCxQJls5O6tKHlPPWGEfU58WZR6ive1kKSleFNC2kXGRnrcDqhTTOmPeP3pAZnTq6Oin4X0oXbfnNZu626Io6lqGCwAAAAASUVORK5CYII=";var z1=class{constructor(e){this.worldRenderer=e;d(this,"_cursorLinesHidden",!1);d(this,"cursorLineMaterial");d(this,"interactionLines",null);d(this,"prevColor");d(this,"blockBreakMesh");d(this,"breakTextures",[]);let t=[P3,I3,H3,O3,F3,D3,z3,L3,U3,G3];for(let i=0;i<10;i++)Ct(t[i]).then(s=>{s.magFilter=Q0.NearestFilter,s.minFilter=Q0.NearestFilter,this.breakTextures.push(s)});let r=new Q0.MeshBasicMaterial({transparent:!0,blending:Q0.MultiplyBlending,alphaTest:.5});this.blockBreakMesh=new Q0.Mesh(new Q0.BoxGeometry(1,1,1),r),this.blockBreakMesh.visible=!1,this.blockBreakMesh.renderOrder=999,this.blockBreakMesh.name="blockBreakMesh",this.worldRenderer.sceneOrigin.addAndTrack(this.blockBreakMesh),this.worldRenderer.onReactivePlayerStateUpdated("gameMode",()=>{this.updateLineMaterial()}),setTimeout(()=>{this.updateLineMaterial(),this.interactionLines&&this.setHighlightCursorBlock(this.interactionLines.blockPos,this.interactionLines.shapePositions,!0)})}get cursorLinesHidden(){return this._cursorLinesHidden}set cursorLinesHidden(e){this.interactionLines&&(this.interactionLines.mesh.visible=!e),this._cursorLinesHidden=e}updateLineMaterial(){let e=this.worldRenderer.playerStateReactive.gameMode==="creative",t=this.worldRenderer.renderer.getPixelRatio();this.cursorLineMaterial&&this.cursorLineMaterial.dispose(),this.cursorLineMaterial=new ft({color:(()=>{switch(this.worldRenderer.worldRendererConfig.highlightBlockColor){case"blue":return 4227327;case"classic":return 0;default:return e?4227327:0}})(),linewidth:Math.max(t*.7,1)*2}),this.prevColor=this.worldRenderer.worldRendererConfig.highlightBlockColor}updateBreakAnimation(e,t,r){if(this.hideBreakAnimation(),t===null||!e||!r)return;let{position:i,width:s,height:o,depth:v}=r,a=new Fi(i.x,i.y,i.z);this.blockBreakMesh.scale.set(s*1.001,o*1.001,v*1.001),a.add(new Fi(e.x,e.y,e.z)),this.blockBreakMesh.position.set(a.x,a.y,a.z),this.blockBreakMesh.visible=!0,this.blockBreakMesh.material.map=this.breakTextures[t]??this.breakTextures.at(-1),this.blockBreakMesh.material.needsUpdate=!0}hideBreakAnimation(){this.blockBreakMesh&&(this.blockBreakMesh.visible=!1)}updateDisplay(){if(this.cursorLineMaterial){let{renderer:e}=this.worldRenderer;this.cursorLineMaterial.resolution.set(e.domElement.width,e.domElement.height),this.cursorLineMaterial.dashOffset=performance.now()/750}}setHighlightCursorBlock(e,t,r=!1){if(e&&this.interactionLines&&e.equals(this.interactionLines.blockPos)&&vv(t??[],this.interactionLines.shapePositions??[])&&!r||(this.interactionLines!==null&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.interactionLines.mesh),this.interactionLines=null),e===null))return;let i=new Q0.Group;for(let{position:s,width:o,height:v,depth:a}of t??[]){let l=new Fi(s.x,s.y,s.z),c=[1.0001*o,1.0001*v,1.0001*a],u=new Q0.BoxGeometry(...c),f=new ut().fromEdgesGeometry(new Q0.EdgesGeometry(u)),p=new O5(f,this.cursorLineMaterial);p.position.set(l.x,l.y,l.z),p.computeLineDistances(),i.add(p)}this.worldRenderer.sceneOrigin.addAndTrack(i),i.position.set(e.x,e.y,e.z),i.visible=!this.cursorLinesHidden,this.interactionLines={blockPos:e,mesh:i,shapePositions:t}}render(){this.prevColor!==this.worldRenderer.worldRendererConfig.highlightBlockColor&&this.updateLineMaterial(),this.updateDisplay()}},vv=(n,e)=>{if(n.length!==e.length)return!1;for(let[t,r]of n.entries())if(r!==e[t])return!1;return!0};E();x();k();R();E();x();k();R();var lv=a5(mi(),1);import N3 from"prismarine-nbt";import{getItemDefinition as cv}from"mc-assets/dist/itemDefinitions";var dv=(n,e)=>{let t,r,i=n.name;i.includes(":")||(i=`minecraft:${i}`);let s=e.currentResources?.customItemModelNames[i];if(n.components){let o=new Map;for(let c of n.components)o.set(c.type,c);let v=o.get("custom_name")||o.get("item_name");v&&(t=typeof v.data=="string"?v.data:N3.simplify(v.data));let a=o.get("item_model");if(a&&(r=a.data),s){let c=o.get("custom_model_data");if(c?.data){let u;typeof c.data=="number"?u=c.data:typeof c.data=="object"&&"floats"in c.data&&Array.isArray(c.data.floats)&&c.data.floats.length>0&&(u=c.data.floats[0]),u&&s[u]&&(r=s[u])}}let l=o.get("lore");l&&(t??(t=n.displayName??n.name),t+=`
21459
21459
  ${JSON.stringify(l.data)}`)}if(n.nbt){let o=N3.simplify(n.nbt),v=o.display?.Name;v&&(t=v),s&&o.CustomModelData&&s[o.CustomModelData]&&(r=s[o.CustomModelData])}return{customText:t,customModel:r}};var W3=(n,e,t,r)=>{let i=n.name,{customModel:s}=dv(n,t);s&&(i=s);let o=cs(r,{...e}),v=t.currentResources,a=cv(X2(v),{name:i,version:v.version,properties:o})?.model;return(a==="minecraft:special"?void 0:a)??i};E();x();k();R();var J3=a5(Q3(),1);import{versionToNumber as K3}from"mc-assets/dist/utils";var Z3=(n,e,t=!1,r=!1)=>{let i=n.modelName,s=globalThis.loadedData.itemsByName[i];K3(e.currentResources.version)<K3("1.13")&&(i=(0,J3.getRenamedData)(s?"items":"blocks",i,e.currentResources.version,"1.13.1"));let o;if(!r){let a=e.currentResources?.guiAtlas?.json,l=u=>u&&a?.textures[u.replace("minecraft:","").replace("block/","").replace("blocks/","").replace("item/","").replace("items/","").replace("_inventory","")],c=l(i)??l(n.originalItemName);if(c){let u=c.u*a.width,f=c.v*a.height;return{texture:"gui",slice:[u,f,a.tileSize,a.tileSize],scale:.25,blockData:null,modelName:null}}}let v=a=>a.top??a;try{if(!e.currentResources?.itemsRenderer)throw new Error("Items renderer is not available");o=e.currentResources.itemsRenderer.getItemTexture(i,{},!1,r)??(n.originalItemName?e.currentResources.itemsRenderer.getItemTexture(n.originalItemName,{},!1,r):void 0)??e.currentResources.itemsRenderer.getItemTexture("item/missing_texture")}catch(a){reportError?.(`Failed to render item ${i} (original: ${n.originalItemName}) on ${e.currentResources.version} (resourcepack: TODO!): ${a.stack}`),o=v(e.currentResources.itemsRenderer.getItemTexture("errored"))}return o??(o=v(e.currentResources.itemsRenderer.getItemTexture("unknown"))),"type"in o?{texture:o.type,slice:o.slice,modelName:i,blockData:null,scale:null}:{texture:"blocks",blockData:o,modelName:i,slice:null,scale:null}};var q3=(n,e,t,r)=>{let i=t.currentResources;if(!i)throw new Error("Resources not loaded");let s=n.itemId??n.blockId??n.name,{blockState:o}=n;try{let v=o?globalThis.loadedData.blocksByStateId[o]?.name:typeof s=="number"?globalThis.loadedData.items[s]?.name:s;if(!v)throw new Error(`Item not found: ${s}`);let a=W3({...n,name:v},e,t,r),l=Z3({modelName:a},t,!1,!0);if(!l)throw new Error(`Failed to get render info for item ${v}`);let c=l.texture==="blocks"?i.blocksAtlasImage:i.itemsAtlasImage;if(l.blockData)return{resolvedModel:l.blockData.resolvedModel,modelName:l.modelName};if(l.slice){let[u,f,p,g]=l.slice,[y,A,b,_]=[u/c.width,f/c.height,p/c.width,g/c.height];return{u:y,v:A,su:b,sv:_,renderInfo:l,modelName:l.modelName}}throw new Error(`Invalid render info for item ${v}`)}catch(v){return reportError?.(v),{u:0,v:0,su:16/i.blocksAtlasImage.width,sv:16/i.blocksAtlasImage.width,modelName:"missing"}}};E();x();k();R();import*as Kt from"three";var U1=class{constructor(e){this.worldRenderer=e;d(this,"audioListener");d(this,"activeSounds",new Set);d(this,"audioContext");d(this,"soundVolumes",new Map);d(this,"baseVolume",1);e.onWorldSwitched.push(()=>{this.stopAll()}),e.onReactiveConfigUpdated("volume",t=>{this.changeVolume(t)})}initAudioListener(){this.audioListener||(this.audioListener=new Kt.AudioListener,this.worldRenderer.camera.add(this.audioListener))}playSound(e,t,r=1,i=1,s=500){this.initAudioListener();let o=new Kt.PositionalAudio(this.audioListener);this.activeSounds.add(o),this.soundVolumes.set(o,r);let v=new Kt.AudioLoader,a=Date.now();v.loadAsync(t).then(l=>{Date.now()-a>s||(o.setBuffer(l),o.setRefDistance(20),o.setVolume(r*this.baseVolume),o.setPlaybackRate(i),this.worldRenderer.sceneOrigin.addAndTrack(o),o.position.set(e.x,e.y,e.z),o.onEnded=()=>{this.worldRenderer.sceneOrigin.removeAndUntrack(o),o.source&&o.disconnect(),this.activeSounds.delete(o),this.soundVolumes.delete(o),v.manager.itemEnd(t)},o.play())})}stopAll(){for(let e of this.activeSounds)e&&(e.stop(),e.source&&e.disconnect(),this.worldRenderer.sceneOrigin.removeAndUntrack(e));this.activeSounds.clear(),this.soundVolumes.clear()}changeVolume(e){this.baseVolume=e;for(let[t,r]of this.soundVolumes)t.setVolume(r*this.baseVolume)}destroy(){this.stopAll(),this.audioListener&&(this.audioListener.removeFromParent(),this.audioListener=void 0)}playTestSound(){this.playSound(this.worldRenderer.camera.position,"/sound.mp3")}};E();x();k();R();import*as U0 from"three";var G1=class{constructor(e,t){this.worldRenderer=e;this.onRenderCallbacks=t;d(this,"rollAngle",0);d(this,"rollAnimation");d(this,"basePitch",0);d(this,"baseYaw",0);d(this,"cameraBobInput",null);t.push(()=>{this.update()})}get damageRollAmount(){return 5}get damageAnimDuration(){return 200}setCameraBobInput(e){this.cameraBobInput=e}setBaseRotation(e,t){this.basePitch=e,this.baseYaw=t,this.update()}getBaseRotation(){return{pitch:this.basePitch,yaw:this.baseYaw}}shakeFromDamage(e){let t=this.rollAngle,r=t+(e??(Math.random()<.5?-1:1))*this.damageRollAmount;this.rollAnimation={startTime:performance.now(),startRoll:t,targetRoll:r,duration:this.damageAnimDuration/2}}update(){if(this.worldRenderer.playerStateUtils.isSpectatingEntity()&&(this.rollAngle=0,this.rollAnimation=void 0),this.rollAnimation){let t=performance.now(),r=t-this.rollAnimation.startTime,i=Math.min(r/this.rollAnimation.duration,1);this.rollAnimation.returnToZero?(this.rollAngle=this.rollAnimation.startRoll*(1-this.easeInOut(i)),i===1&&(this.rollAnimation=void 0)):(this.rollAngle=this.rollAnimation.startRoll+(this.rollAnimation.targetRoll-this.rollAnimation.startRoll)*this.easeOut(i),i===1&&(this.rollAnimation={startTime:t,startRoll:this.rollAngle,targetRoll:0,duration:this.damageAnimDuration/2,returnToZero:!0}))}let e=this.worldRenderer.cameraObject;if(this.worldRenderer.cameraGroupVr){let t=new U0.Quaternion().setFromAxisAngle(new U0.Vector3(0,1,0),this.baseYaw);e.setRotationFromQuaternion(t)}else{let t=this.addAntiZfightingOffset(this.basePitch),r=this.addAntiZfightingOffset(this.baseYaw),i=new U0.Quaternion().setFromAxisAngle(new U0.Vector3(1,0,0),t),s=new U0.Quaternion().setFromAxisAngle(new U0.Vector3(0,1,0),r),o=new U0.Quaternion().setFromAxisAngle(new U0.Vector3(0,0,1),U0.MathUtils.degToRad(this.rollAngle)),v=new U0.Quaternion,a=new U0.Quaternion,l=this.worldRenderer.playerStateReactive.perspective;if(this.cameraBobInput){let u=_1(this.cameraBobInput);v=new U0.Quaternion().setFromAxisAngle(new U0.Vector3(0,0,1),u.rotation.z),a=new U0.Quaternion().setFromAxisAngle(new U0.Vector3(1,0,0),u.rotation.x),l==="first_person"&&this.worldRenderer.camera.position.set(u.position.x,u.position.y,0)}else l==="first_person"&&this.worldRenderer.camera.position.set(0,0,0);let c=s.multiply(i).multiply(o).multiply(v).multiply(a);e.setRotationFromQuaternion(c)}}easeOut(e){return 1-(1-e)*(1-e)}easeInOut(e){return e<.5?2*e*e:1-(-2*e+2)**2/2}addAntiZfightingOffset(e){let r=(e%(Math.PI*2)+Math.PI*2)%(Math.PI*2),i=.01;return Math.abs(r)<i||Math.abs(r-Math.PI/2)<i||Math.abs(r-Math.PI)<i||Math.abs(r-3*Math.PI/2)<i?e+.001:e}};E();x();k();R();import*as K from"three";var N1=class{constructor(e){this.worldRenderer=e;d(this,"customMedia",new Map);d(this,"lastCheck",0);d(this,"THROTTLE_TIME",100);this.worldRenderer.onWorldSwitched.push(()=>{this.onWorldGone()}),this.worldRenderer.onRender.push(()=>{this.render()}),this.worldRenderer.onReactiveConfigUpdated("volume",()=>{let{volume:t}=this.worldRenderer.worldRendererConfig;for(let[r,i]of this.customMedia.entries())i.positionalAudio&&i.positionalAudio.setVolume((i.props.volume??1)*t)})}onWorldGone(){for(let[e,t]of this.customMedia.entries())this.destroyMedia(e)}onWorldStop(){for(let[e,t]of this.customMedia.entries())this.setVideoPlaying(e,!1)}createErrorTexture(e,t,r=16777215,i="Failed to load"){let s=new OffscreenCanvas(100,100),o=100;s.width=o,s.height=o;let v=s.getContext("2d");if(!v)return new K.CanvasTexture(s);v.clearRect(0,0,s.width,s.height),v.fillStyle=`rgba(${r>>16&255}, ${r>>8&255}, ${r&255}, 1)`,v.fillRect(0,0,s.width,s.height),v.fillStyle="#ff0000",v.font="bold 10px sans-serif",v.textAlign="center",v.textBaseline="middle",v.fillText(i,s.width/2,s.height/2,s.width);let a=new K.CanvasTexture(s);return a.minFilter=K.LinearFilter,a.magFilter=K.LinearFilter,a}createBackgroundTexture(e,t,r=0,i=1){let s=new OffscreenCanvas(1,1);s.width=1,s.height=1;let o=s.getContext("2d");if(!o)return new K.CanvasTexture(s);let v=r>>16&255,a=r>>8&255,l=r&255;o.fillStyle=`rgba(${v}, ${a}, ${l}, ${i})`,o.fillRect(0,0,1,1);let c=new K.CanvasTexture(s);return c.minFilter=K.NearestFilter,c.magFilter=K.NearestFilter,c}validateOrigin(e,t){if(t===!0)return!0;if(t===!1)return!1;let r=new URL(e);return t.some(i=>r.origin.endsWith(i))}onPageInteraction(){for(let[e,t]of this.customMedia.entries())t.hadAutoPlayError&&(t.hadAutoPlayError=!1,this.playVideo(e))}addMedia(e,t){let r=structuredClone(t);this.destroyMedia(e);let i=!1;t.src.startsWith("https://disk.yandex.ru/i/")&&(i=!0,t.src=`/ya-image?url=${t.src}`);let{scene:s}=this.worldRenderer;t.allowOrigins!==void 0&&!this.validateOrigin(t.src,t.allowOrigins)&&(t.src="");let v=t.src.endsWith(".png")||t.src.endsWith(".jpg")||t.src.endsWith(".jpeg")||t.imageOverride;i&&!t.imageOverride&&fetch(t.src,{method:"HEAD"}).then(M=>{M.headers.get("content-type")?.startsWith("image/")&&(this.destroyMedia(e),this.addMedia(e,{...r,src:t.src,imageOverride:!0}))}).catch(console.error);let a,l,c=l0&&!v;if(!v&&!c){a=document.createElement("video"),a.src=t.src.endsWith(".gif")?t.src.replace(".gif",".mp4"):t.src,a.loop=t.loop??!0;let M=(t.volume??1)*this.worldRenderer.worldRendererConfig.volume;a.volume=Math.min(M,1),a.playsInline=!0,a.crossOrigin="anonymous";let P=this.worldRenderer.soundSystem;if(P.initAudioListener(),!P.audioListener)throw new Error("Audio listener not initialized");l=new K.PositionalAudio(P.audioListener),l.setRefDistance(6),l.setVolume(M),this.worldRenderer.sceneOrigin.addAndTrack(l),l.position.set(t.position.x,t.position.y,t.position.z),l.setMediaElementSource(a),l.connect(),a.addEventListener("pause",()=>{l?.pause(),globalThis.tempSendVideoStop?.(e,"paused",a.currentTime)}),a.addEventListener("play",()=>{l?.play(),globalThis.tempSendVideoPlay?.(e)}),a.addEventListener("seeked",()=>{l&&a&&(l.offset=a.currentTime)}),a.addEventListener("stalled",()=>{globalThis.tempSendVideoStop?.(e,"stalled",a.currentTime)}),a.addEventListener("waiting",()=>{globalThis.tempSendVideoStop?.(e,"waiting",a.currentTime)}),a.addEventListener("error",({error:B})=>{globalThis.tempSendVideoStop?.(e,`error: ${B}`,a.currentTime)}),a.addEventListener("ended",()=>{globalThis.tempSendVideoStop?.(e,"ended",a.currentTime),t.loop||(a.currentTime=0,C.ended=!0)})}let u=this.createBackgroundTexture(t.size.width,t.size.height,t.background),f=M=>{let P=this.createErrorTexture(t.size.width,t.size.height,t.background,M);y.map=P,y.needsUpdate=!0},p=new K.PlaneGeometry(1,1),g=t.allowLighting?K.MeshLambertMaterial:K.MeshBasicMaterial,y=new g({map:u,transparent:!0,side:t.doubleSide?K.DoubleSide:K.FrontSide,alphaTest:.1}),A;if(a)A=new K.VideoTexture(a);else if(c)A=this.createErrorTexture(t.size.width,t.size.height,t.background,"Video unavailable (multi-thread)");else if(l0){let M=y5(t.src);A=M.texture,A.minFilter=K.NearestFilter,A.magFilter=K.NearestFilter,M.promise.then(()=>{this.customMedia.get(e)?.texture===A&&(y.map=A,y.needsUpdate=!0)}).catch(()=>f())}else A=new K.TextureLoader().load(t.src,()=>{this.customMedia.get(e)?.texture===A&&(y.map=A,y.needsUpdate=!0)},void 0,()=>f());A.minFilter=K.NearestFilter,A.magFilter=K.NearestFilter,A.generateMipmaps=!1;let b=new K.Mesh(p,y),{mesh:_}=this.positionMeshExact(b,K.MathUtils.degToRad((t.rotation??0)*90),t.position,t.size.width,t.size.height);s.add(_),a&&(b.onBeforeRender=()=>{a.readyState===a.HAVE_ENOUGH_DATA&&(!a.paused||!C?.hadAutoPlayError)&&(y.map!==A&&(y.map=A,y.needsUpdate=!0),A.needsUpdate=!0,l&&(l.position.copy(_.position),l.rotation.copy(_.rotation)))});let S=M=>{let P=p.attributes.uv.array;P[0]=M.startU,P[1]=M.startV,P[2]=M.endU,P[3]=M.startV,P[4]=M.endU,P[5]=M.endV,P[6]=M.startU,P[7]=M.endV,p.attributes.uv.needsUpdate=!0};t.uvMapping&&S(t.uvMapping);let C={mesh:_,video:a,texture:A,updateUVMapping:S,positionalAudio:l,props:r,hadAutoPlayError:!1,pausedBecuaseHidden:!1,ended:!1,handleError(M){if(C.destroyed)return;let P=B=>B;f(M.name==="NotAllowedError"||M.name==="AbortError"?P("Waiting for user interaction"):P("Failed to auto play"))}};return this.customMedia.set(e,C),a&&t.autoPlay&&this.playVideo(e,!0),e}playVideo(e,t=!1){let r=this.customMedia.get(e);if(r?.video){if(!t&&r.positionalAudio&&r.video.currentTime<1){let i=r.video.currentTime;this.addMedia(e,r.props),r.video.currentTime=i,r.props.autoPlay||this.playVideo(e,!0);return}r.video.play().then(()=>{r.hadAutoPlayError=!1}).catch(i=>{r.pausedBecuaseHidden||((i.name==="NotAllowedError"||i.name==="AbortError"||i.message?.includes("not allowed")&&!r.pausedBecuaseHidden)&&(r.hadAutoPlayError=!0),r.handleError(i))})}}render(){for(let[e,t]of this.customMedia.entries()){let r=t.mesh.visible;t.mesh.visible=this.worldRenderer.shouldObjectVisible(t.mesh)&&!t.mesh.forceHide,r!==t.mesh.visible&&t.video&&(t.mesh.visible?t.pausedBecuaseHidden&&(this.playVideo(e),t.pausedBecuaseHidden=!1):t.video.paused||(t.video.pause(),t.pausedBecuaseHidden=!0))}}setVideoPlaying(e,t){let r=this.customMedia.get(e);r?.video&&(t?this.playVideo(e):r.video.pause())}setVideoSeeking(e,t){let r=this.customMedia.get(e);r?.video&&(r.video.currentTime=t)}setVideoVolume(e,t){let r=this.customMedia.get(e);r?.video&&(r.video.volume=t)}setVideoSpeed(e,t){let r=this.customMedia.get(e);r?.video&&(r.video.playbackRate=t)}setControlMode(e,t,r){let i=this.customMedia.get(e);i?.video&&(i.props.controlMode={mouseButton:t,controlMode:r})}destroyMedia(e){let{scene:t}=this.worldRenderer,r=this.customMedia.get(e);if(r){r.destroyed=!0,r.video&&(r.video.pause(),r.video.src="",r.video.remove()),r.positionalAudio&&this.worldRenderer.sceneOrigin.removeAndUntrack(r.positionalAudio),this.worldRenderer.sceneOrigin.removeAndUntrack(r.mesh),r.texture.dispose();let i=r.mesh.children[0];i&&(i.geometry.dispose(),i.material instanceof K.Material&&i.material.dispose()),this.customMedia.delete(e)}}positionMeshExact(e,t,r,i,s,o=1){t===0&&(r.z+=.001),t===Math.PI/2&&(r.x-=.001),t===Math.PI&&(r.z-=.001),t===3*Math.PI/2&&(r.x+=.001),t===0&&(r.z+=1),t===Math.PI&&(r.x+=1),t===3*Math.PI/2&&(r.z+=1,r.x+=1),e.matrix.identity(),e.position.set(0,0,0),e.rotation.set(0,0,0),e.scale.set(1,1,1),e.rotateY(t),(t===Math.PI/2||t===3*Math.PI/2)&&(e.rotateZ(-Math.PI),e.rotateX(-Math.PI)),e.scale.set(i,s,o),e.geometry.translate(.5,.5,0),e.geometry.attributes.position.needsUpdate=!0,this.worldRenderer.sceneOrigin.track(e),e.position.set(r.x,r.y,r.z);let v=new K.Group;v.add(e);let a=new K.Mesh(new K.BoxGeometry(.1,.1,.1),new K.MeshBasicMaterial({color:16711680}));a.position.set(r.x,r.y,r.z),v.add(a);let l=r.x+Math.cos(t)*i,c=r.z+Math.sin(t)*i,u=new K.Mesh(new K.BoxGeometry(.1,.1,.1),new K.MeshBasicMaterial({color:255}));u.position.set(r.x,r.y+s,r.z),v.add(u);let f=new K.Mesh(new K.BoxGeometry(.1,.1,.1),new K.MeshBasicMaterial({color:16776960}));f.position.set(l,r.y,c),v.add(f);let p=new K.Mesh(new K.BoxGeometry(.1,.1,.1),new K.MeshBasicMaterial({color:16711935}));p.position.set(l,r.y+s,c),v.add(p);let g=new K.Vector3(this.worldRenderer.sceneOrigin.toSceneX(r.x),this.worldRenderer.sceneOrigin.toSceneY(r.y),this.worldRenderer.sceneOrigin.toSceneZ(r.z)),y=new K.ArrowHelper(new K.Vector3(Math.cos(t),0,Math.sin(t)),g,1,16711680);return v.add(y),{mesh:e,debugGroup:v}}createTestCanvasTexture(){let e=new OffscreenCanvas(100,100);e.width=100,e.height=100;let t=e.getContext("2d");return t?(t.font="10px Arial",t.fillStyle="red",t.fillText("Hello World",0,10),new K.CanvasTexture(e)):null}tryIntersectMedia(){if(Date.now()-this.lastCheck<this.THROTTLE_TIME)return;if(this.customMedia.size===0){this.worldRenderer.reactiveState.world.intersectMedia=null,this.worldRenderer.debugVideo=null,this.worldRenderer.cursorBlock.cursorLinesHidden=!1;return}this.lastCheck=Date.now();let{camera:e,scene:t}=this.worldRenderer,r=new K.Raycaster,i=new K.Vector2(0,0);r.setFromCamera(i,e);let s=r.intersectObjects(t.children,!0);if(s.length>0){let o=s[0],v=o.object;for(let[a,l]of this.customMedia.entries())if(v===l.mesh||l.mesh.children.includes(v)){let{uv:c}=o;if(c){let u={id:a,x:c.x,y:c.y};this.worldRenderer.reactiveState.world.intersectMedia=u,this.worldRenderer.debugVideo=l,this.worldRenderer.cursorBlock.cursorLinesHidden=!0;return}}}this.worldRenderer.reactiveState.world.intersectMedia=null,this.worldRenderer.debugVideo=null,this.worldRenderer.cursorBlock.cursorLinesHidden=!1}handleUserClick(e){let t=this.worldRenderer.reactiveState.world.intersectMedia;if(t){let{id:r,x:i,y:s}=t,o=this.customMedia.get(r),v=o?.props.controlMode;if(o?.video&&(v?.mouseButton==="both"||v?.mouseButton===e))switch(v?.controlMode){case"play_pause":{this.setVideoPlaying(r,o.video.paused);break}case"play_if_ended":{o.ended&&this.setVideoPlaying(r,!0);break}case"toggle_mute":{o.video.muted=!o.video.muted;break}}}}};E();x();k();R();import*as Le from"three";E();x();k();R();import*as T0 from"three";var pv=1,X3=10,pe={TARGET_SCREEN_PX:150,CANVAS_SIZE:256,LAYOUT:{DOT_Y:.3,NAME_Y:.45,DISTANCE_Y:.55},CANVAS_SCALE:2,ARROW:{enabledDefault:!1,pixelSize:50,paddingPx:50},DEFAULT_VISUAL_SCALE:1,DEFAULT_OPACITY:1};function ea(n){let e=n.color??16711680,t=n.depthTest??!1,r=n.visualScale??n.metadata?.visualScale??(typeof window>"u"?void 0:window.serverMetadata?.waypointVisualScale)??pe.DEFAULT_VISUAL_SCALE,i=n.opacity??n.metadata?.opacity??(typeof window>"u"?void 0:window.serverMetadata?.waypointOpacity)??pe.DEFAULT_OPACITY,s=V0($3(),$3());W1(s,e,n.label??"","0m",r);let o=new T0.CanvasTexture(s);o.anisotropy=1,o.magFilter=T0.LinearFilter,o.minFilter=T0.LinearFilter;let v=new T0.SpriteMaterial({map:o,transparent:!0,opacity:1,depthTest:t,depthWrite:!1}),a=new T0.Sprite(v);a.position.set(0,0,0),a.renderOrder=10,a.material.opacity=i;let l=n.label??"",c="0m",u=Number.NaN,f,p,g,y,A=null,b=pe.ARROW.enabledDefault,_=new T0.Group;_.add(a);let{x:S,y:C,z:M}=n.position;_.position.set(S,C,M);function P(){o.needsUpdate=!0}function B(){if(!p||!g)return;let Y=p.width;g.clearRect(0,0,Y,Y),g.beginPath(),g.moveTo(Y*.15,Y*.5),g.lineTo(Y*.85,Y*.5),g.lineTo(Y*.5,Y*.15),g.closePath();let o0=`#${e.toString(16).padStart(6,"0")}`;g.lineWidth=6,g.strokeStyle="black",g.stroke(),g.fillStyle=o0,g.fill(),y&&(y.needsUpdate=!0)}function H(Y){e=Y,c="0m",u=0,W1(s,e,l,"0m",r),P(),f&&B()}function G(Y){l=Y??"",W1(s,e,l,c,r),P()}function O(Y,o0){o0!==c&&(c=o0,W1(s,e,Y,o0,r),P())}function j(Y){a.visible=Y}function J(Y,o0,b0){_.position.set(Y,o0,b0)}function Z(Y,o0,b0,G0){let O0=o0*Math.PI/180,h0=Math.tan(O0/2)*2*b0*(pe.TARGET_SCREEN_PX*r/G0);a.scale.set(h0,h0,1)}function X(){if(f)return;let Y=128;p=V0(Y,Y),g=p.getContext("2d"),B(),y=new T0.CanvasTexture(p),y.anisotropy=1,y.magFilter=T0.LinearFilter,y.minFilter=T0.LinearFilter;let o0=new T0.SpriteMaterial({map:y,transparent:!0,depthTest:!1,depthWrite:!1,opacity:i});f=new T0.Sprite(o0),f.renderOrder=12,f.visible=!1,A&&A.add(f)}function d0(Y){b=Y,!Y&&f&&(f.visible=!1)}function a0(Y){f?.parent&&f.parent.remove(f),A=Y,f&&Y&&Y.add(f)}function v0(Y,o0,b0){if(!b||(X(),!f))return!0;let G0=n.metadata?.onlyLeftRight===!0,O0=new T0.Vector3;Y.getWorldDirection(O0);let q0=Y.up.clone().normalize(),h0=new T0.Vector3().copy(O0).cross(q0).normalize(),fe=new T0.Vector3().copy(h0).cross(O0).normalize(),i5=new T0.Vector3().setFromMatrixPosition(Y.matrixWorld),n5=new T0.Vector3(_.position.x,_.position.y,_.position.z).sub(i5),We=n5.dot(O0),Se=n5.dot(h0),Ve=n5.dot(fe),Q5=o0/b0,je=Y.fov*Math.PI/180,At=2*Math.atan(Math.tan(je/2)*Q5),K5=Math.atan2(Se,We),J5=Math.atan2(Ve,We);if(We>0&&Math.abs(K5)<=At/2&&Math.abs(J5)<=je/2)return f.visible=!1,!0;let J0=K5/(At/2),S0=J5/(je/2);We<=0&&(Math.abs(J0)>Math.abs(S0)?(J0=Math.sign(J0),S0=0):(J0=0,S0=Math.sign(S0))),G0&&(Math.abs(J0)>Math.abs(S0)||(J0=J0>=0?1:-1),S0=0);let Et=Math.max(Math.abs(J0),Math.abs(S0))||1,s5=J0/Et,se=S0/Et,xt=pe.ARROW.paddingPx,w=(s5+1)*.5*o0,h=(1-se)*.5*b0,m=Math.min(Math.max(w,xt),o0-xt),T=Math.min(Math.max(h,xt),b0-xt);s5=m/o0*2-1,se=-(T/b0)*2+1;let I=Math.max(2,Y.near*4),D=Math.tan(je/2)*I,N=D*Q5,i0=i5.clone().add(O0.clone().multiplyScalar(I)).add(h0.clone().multiplyScalar(s5*N)).add(fe.clone().multiplyScalar(se*D));f.visible=!0,f.position.copy(i0);let y0=Math.atan2(S0,J0);f.material.rotation=y0-Math.PI/2;let p0=Math.tan(je/2)*2*I*(pe.ARROW.pixelSize*r/b0);return f.scale.set(p0,p0,1),!1}function g0(Y){return Y.distanceTo(_.position)}function E0(Y,o0,b0,G0){let O0=g0(Y);Z(Y,o0.fov,O0,G0);let q0=Math.round(O0/X3)*X3;q0!==u&&(u=q0,O(l,`${Math.max(0,q0)}m`));let h0=v0(o0,b0,G0);return j(h0),h0}function n0(){let Y=a.material;if(Y.map?.dispose(),Y.dispose(),f){f.parent&&f.parent.remove(f);let o0=f.material;o0.map?.dispose(),o0.dispose()}f=void 0,p=void 0,g=void 0,y=void 0}return{group:_,sprite:a,enableOffscreenArrow:d0,setArrowParent:a0,updateForCamera:E0,setColor:H,setLabel:G,updateDistanceText:O,setVisible:j,setPosition:J,dispose:n0}}function ta(){let n=globalThis.devicePixelRatio||1,e=Math.min(n,pv);return pe.CANVAS_SCALE*e}function $3(){return Math.round(pe.CANVAS_SIZE*ta())}function W1(n,e,t,r,i){let s=n.width,o=ta(),v=n.getContext("2d");v.clearRect(0,0,s,s);let a=s/2,l=Math.round(s*pe.LAYOUT.DOT_Y),c=Math.round(s*.05*i),u=Math.max(2,Math.round(4*o*i)),f=c+u;v.beginPath(),v.arc(a,l,f,0,Math.PI*2),v.fillStyle=`#${e.toString(16).padStart(6,"0")}`,v.fill(),v.textAlign="center",v.textBaseline="middle";let p=Math.round(s*.08*i),g=Math.round(s*.06*i);v.font=`800 ${p}px mojangles`,v.lineWidth=Math.max(2,Math.round(3*o*i));let y=Math.round(s*pe.LAYOUT.NAME_Y);v.strokeStyle="black",v.strokeText(t,a,y),v.fillStyle="white",v.fillText(t,a,y),v.font=`800 ${g}px mojangles`,v.lineWidth=Math.max(2,Math.round(2*o*i));let A=Math.round(s*pe.LAYOUT.DISTANCE_Y);v.strokeStyle="black",v.strokeText(r,a,A),v.fillStyle="#CCCCCC",v.fillText(r,a,A)}var V1=class{constructor(e){this.worldRenderer=e;d(this,"waypoints",new Map);d(this,"waypointScene",new Le.Scene);d(this,"lastCameraPosition",new Le.Vector3);d(this,"lastUpdateTime",0);d(this,"UPDATE_THROTTLE_MS",16)}updateWaypoints(){let e=performance.now(),t=this.worldRenderer.getCameraPosition(),r=this.lastCameraPosition.distanceTo(t)>.5,i=e-this.lastUpdateTime>this.UPDATE_THROTTLE_MS;if(!r&&!i)return;this.lastCameraPosition.copy(t),this.lastUpdateTime=e;let s=this.worldRenderer.renderer.getSize(new Le.Vector2);for(let o of this.waypoints.values()){let v=new Le.Vector3(o.x,o.y,o.z),a=t.distanceTo(v),l=(!o.minDistance||a>=o.minDistance)&&(o.maxDistance===1/0||a<=o.maxDistance);o.sprite.setVisible(l),l&&(o.sprite.setPosition(this.worldRenderer.sceneOrigin.toSceneX(o.x),this.worldRenderer.sceneOrigin.toSceneY(o.y),this.worldRenderer.sceneOrigin.toSceneZ(o.z)),o.sprite.updateForCamera(this.worldRenderer.getCameraPosition(),this.worldRenderer.camera,s.width,s.height))}}render(){this.waypoints.size!==0&&(this.updateWaypoints(),this.worldRenderer.renderer.render(this.waypointScene,this.worldRenderer.camera))}addWaypoint(e,t,r,i,s={}){this.removeWaypoint(e);let o=s.color??16711680,{label:v,metadata:a}=s,l=s.minDistance??0,c=s.maxDistance??1/0,u=ea({position:new Le.Vector3(t,r,i),color:o,label:v||e,metadata:a});u.enableOffscreenArrow(!0),u.setArrowParent(this.waypointScene),this.waypointScene.add(u.group),this.waypoints.set(e,{id:e,x:t+.5,y:r+.5,z:i+.5,minDistance:l,maxDistance:c,color:o,label:v,sprite:u})}removeWaypoint(e){let t=this.waypoints.get(e);t&&(this.waypointScene.remove(t.sprite.group),t.sprite.dispose(),this.waypoints.delete(e))}clear(){for(let e of this.waypoints.keys())this.removeWaypoint(e)}testWaypoint(){this.addWaypoint("Test Point",0,70,0,{color:65280,label:"Test Point"}),this.addWaypoint("Spawn",0,64,0,{color:16776960,label:"Spawn"}),this.addWaypoint("Far Point",100,70,100,{color:255,label:"Far Point"}),this.addWaypoint("Far Point 2",180,170,100,{color:255,label:"Far Point 2"}),this.addWaypoint("Far Point 3",1e3,100,1e3,{color:255,label:"Far Point 3"})}getWaypoint(e){return this.waypoints.get(e)}getAllWaypoints(){return[...this.waypoints.values()]}setWaypointColor(e,t){let r=this.waypoints.get(e);r&&(r.sprite.setColor(t),r.color=t)}setWaypointLabel(e,t){let r=this.waypoints.get(e);r&&(r.label=t,r.sprite.setLabel(t))}};E();x();k();R();import*as R0 from"three";import{Vec3 as U5}from"vec3";var x0=class x0{constructor(e){this.worldRenderer=e;d(this,"explosions",new Map);d(this,"particleGeometry");d(this,"particleMaterials",[]);d(this,"testModeTimer");d(this,"explosionCounter",0);this.particleGeometry=new R0.BoxGeometry(x0.DEFAULT_PARTICLE_SIZE,x0.DEFAULT_PARTICLE_SIZE,x0.DEFAULT_PARTICLE_SIZE),this.createParticleMaterials()}createParticleMaterials(){let e=[16711680,65280,255,16776960,16711935,65535,16753920,8388736,16761035,16777215];for(let t of e){let r=new R0.MeshBasicMaterial({color:t,transparent:!0,opacity:1});this.particleMaterials.push(r)}}getRandomMaterial(){return this.particleMaterials[Math.floor(Math.random()*this.particleMaterials.length)]}createExplosion(e,t=1,r,i=x0.DEFAULT_EXPLOSION_DURATION){let s=`firework_${this.explosionCounter++}_${Date.now()}`,o=[],v=Math.floor(x0.DEFAULT_PARTICLE_COUNT*t),a;if(x0.DEBUG_SHOW_EXPLOSION_CENTER){let c=.5*t,u=new R0.SphereGeometry(c,8,8),f=new R0.MeshBasicMaterial({color:16711680,wireframe:!0,transparent:!0,opacity:.8});a=new R0.Mesh(u,f),a.renderOrder=999,this.worldRenderer.sceneOrigin.addAndTrack(a),a.position.set(e.x,e.y,e.z)}for(let c=0;c<v;c++){let u=Math.random()*Math.PI*2,f=Math.sqrt(Math.random())*x0.VELOCITY_FACTOR*t,p=new U5(f*Math.cos(u),Math.random()*.5-.25,f*Math.sin(u));c<5;let g=r===void 0?this.getRandomMaterial().clone():new R0.MeshBasicMaterial({color:r,transparent:!0,opacity:1}),y=new R0.Mesh(this.particleGeometry,g);y.renderOrder=1e3,this.worldRenderer.sceneOrigin.addAndTrack(y),y.position.set(e.x,e.y,e.z),c<5;let A={position:e.clone(),velocity:p,color:new R0.Color(g.color),life:1,maxLife:1,mesh:y};o.push(A)}let l={id:s,position:e.clone(),particles:o,startTime:Date.now(),duration:i,size:t,debugSphere:a};return this.explosions.set(s,l),l}createExplosionFacingCamera(e,t=1,r,i=x0.DEFAULT_EXPLOSION_DURATION){let s=`firework_${this.explosionCounter++}_${Date.now()}`,o=[],v=Math.floor(x0.DEFAULT_PARTICLE_COUNT*t),a;if(x0.DEBUG_SHOW_EXPLOSION_CENTER){let f=.5*t,p=new R0.SphereGeometry(f,8,8),g=new R0.MeshBasicMaterial({color:16711680,wireframe:!0,transparent:!0,opacity:.8});a=new R0.Mesh(p,g),a.renderOrder=999,this.worldRenderer.sceneOrigin.addAndTrack(a),a.position.set(e.x,e.y,e.z)}let l=this.worldRenderer.getCameraPosition(),c=new U5(l.x-e.x,l.y-e.y,l.z-e.z).normalize();for(let f=0;f<v;f++){let p=Math.random()*Math.PI*2,g=Math.sqrt(Math.random())*x0.VELOCITY_FACTOR*t,y=new U5(g*Math.cos(p),g*Math.sin(p),0),A=new U5(y.x*c.x-y.z*c.z,y.y,y.x*c.z+y.z*c.x);f<5;let b=r===void 0?this.getRandomMaterial().clone():new R0.MeshBasicMaterial({color:r,transparent:!0,opacity:1}),_=new R0.Mesh(this.particleGeometry,b);_.renderOrder=1e3,this.worldRenderer.sceneOrigin.addAndTrack(_),_.position.set(e.x,e.y,e.z);let S={position:e.clone(),velocity:A,color:new R0.Color(b.color),life:1,maxLife:1,mesh:_};o.push(S)}let u={id:s,position:e.clone(),particles:o,startTime:Date.now(),duration:i,size:t,debugSphere:a};return this.explosions.set(s,u),u}explode(e,t=1,r,i){return this.createExplosion(e,t,r,i).id}explodeFacingCamera(e,t=1,r,i){return this.createExplosionFacingCamera(e,t,r,i).id}startTestMode(){let e=this.worldRenderer.getCameraPosition(),t=new U5(e.x,e.y+10,e.z);this.testModeTimer=setInterval(()=>{let r=.8+Math.random()*.4,i=[16711680,65280,255,16776960,16711935,65535,16753920],s=i[Math.floor(Math.random()*i.length)];this.explodeFacingCamera(t,r,s)},x0.TEST_INTERVAL)}updateParticle(e,t,r){let i=e.mesh.position.x===e.position.x&&e.mesh.position.y===e.position.y&&e.mesh.position.z===e.position.z;i&&e.life>.95,e.velocity.y+=x0.GRAVITY;let s=e.position.clone(),o=t/1e3;e.position.add(e.velocity.scaled(o)),e.mesh.position.set(e.position.x,e.position.y,e.position.z);let v=e.life;e.life-=t/r;let a=Math.max(0,e.life);if(e.mesh.material instanceof R0.MeshBasicMaterial&&(e.mesh.material.opacity=a),i&&v>.95){let l=e.position.distanceTo(s)}return e.life>0}render(){let e=Date.now(),t=16.67;this.explosions.size>0&&Math.random()<.01;for(let[r,i]of this.explosions.entries()){let s=e-i.startTime;if(s>=i.duration){this.removeExplosion(r);continue}s%2e3<16,i.particles=i.particles.filter(o=>this.updateParticle(o,t,i.duration)),i.particles.length===0&&this.removeExplosion(r)}}removeExplosion(e){let t=this.explosions.get(e);if(t){for(let r of t.particles)this.worldRenderer.sceneOrigin.removeAndUntrack(r.mesh),r.mesh.material instanceof R0.Material&&r.mesh.material.dispose();t.debugSphere&&(this.worldRenderer.sceneOrigin.removeAndUntrack(t.debugSphere),t.debugSphere.geometry.dispose(),t.debugSphere.material instanceof R0.Material&&t.debugSphere.material.dispose()),this.explosions.delete(e)}}stopTestMode(){this.testModeTimer&&(clearInterval(this.testModeTimer),this.testModeTimer=void 0)}destroy(){this.stopTestMode();for(let e of this.explosions.keys())this.removeExplosion(e);for(let e of this.particleMaterials)e.dispose();this.particleGeometry.dispose()}};d(x0,"DEFAULT_PARTICLE_COUNT",50),d(x0,"DEFAULT_PARTICLE_SIZE",.05),d(x0,"DEFAULT_EXPLOSION_DURATION",6e3),d(x0,"GRAVITY",-.005),d(x0,"VELOCITY_FACTOR",1.5),d(x0,"TEST_INTERVAL",1e3),d(x0,"DEBUG_SHOW_EXPLOSION_CENTER",!0),d(x0,"DEBUG_SHOW_PARTICLE_TRAILS",!1);var j1=x0;E();x();k();R();import*as ht from"three";import{Vec3 as Di}from"vec3";var Y1=class n{constructor(e,t,r,i){this.worldRenderer=e;this.updateCamera=t;this.updateFov=r;this.getInitialState=i;d(this,"isRunning",!1);d(this,"currentScript",null);d(this,"currentPointIndex",0);d(this,"currentTweens",[]);d(this,"startTime",0);d(this,"totalDuration",0);d(this,"currentPosition",{x:0,y:0,z:0});d(this,"currentRotation",{yaw:0,pitch:0});d(this,"currentFov",75)}startScript(e){if(this.isRunning||!e.points||e.points.length===0)return!1;this.currentScript=e,this.isRunning=!0,this.currentPointIndex=0,this.startTime=performance.now(),this.totalDuration=e.points.reduce((r,i)=>r+i.duration,0);let t=this.getInitialState();return this.currentPosition={x:t.position.x,y:t.position.y,z:t.position.z},this.currentRotation={yaw:t.yaw,pitch:t.pitch},this.currentFov=t.fov,this.moveToPoint(0),!0}stopScript(){if(this.isRunning){for(let e of this.currentTweens)e.stop();this.currentTweens=[],this.isRunning=!1,this.currentScript=null,this.currentPointIndex=0}}runExampleScripts(e){let t=this.worldRenderer.getCameraPosition(),r=new Di(t.x,t.y,t.z),i=n.createCircularFlyby(r,30,20,15e3),s=n.createSpiralDescent(r.offset(0,50,0),r,3,12e3),o=n.createBuildingTour([{pos:r.offset(-20,10,-20),lookAt:r,duration:3e3},{pos:r.offset(20,15,-20),lookAt:r,duration:3e3},{pos:r.offset(20,20,20),lookAt:r,duration:3e3},{pos:r.offset(-20,25,20),lookAt:r,duration:3e3}]),v=[i,s,o];return this.startScript(v[e]),{circular:i,spiral:s,buildingTour:o}}moveToPoint(e){if(!this.currentScript||e>=this.currentScript.points.length){this.handleScriptComplete();return}let t=this.currentScript.points[e],{duration:r}=t,i={x:t.x,y:t.y,z:t.z},s={yaw:t.yaw,pitch:t.pitch},o=t.fov??this.currentFov;if(t.lookAt){let u=new ht.Vector3(t.lookAt.x,t.lookAt.y,t.lookAt.z),f=new ht.Vector3(t.x,t.y,t.z),p=u.sub(f).normalize();s.yaw=Math.atan2(-p.x,-p.z),s.pitch=Math.asin(p.y)}let v=this.getEasingFunction(t.easing||"easeInOut"),a=new F0(this.currentPosition).to(i,r).easing(v).onUpdate(()=>{this.updateCamera(new Di(this.currentPosition.x,this.currentPosition.y,this.currentPosition.z),this.currentRotation.yaw,this.currentRotation.pitch)}),l=new F0(this.currentRotation).to(this.wrapRotation(s),r).easing(v).onUpdate(()=>{this.updateCamera(new Di(this.currentPosition.x,this.currentPosition.y,this.currentPosition.z),this.currentRotation.yaw,this.currentRotation.pitch)}),c=null;if(Math.abs(o-this.currentFov)>.1){let u={fov:this.currentFov};c=new F0(u).to({fov:o},r).easing(v).onUpdate(()=>{this.currentFov=u.fov,this.updateFov(this.currentFov)})}this.currentTweens=[a,l],c&&this.currentTweens.push(c),a.start(),l.start(),c?.start(),a.onComplete(()=>{this.currentPointIndex++,this.currentScript?.onPointReached?.(e,t),this.isRunning&&this.moveToPoint(this.currentPointIndex)})}wrapRotation(e){let t=e.yaw,r=t-this.currentRotation.yaw;r>Math.PI?t-=2*Math.PI:r<-Math.PI&&(t+=2*Math.PI);let i=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,e.pitch));return{yaw:t,pitch:i}}getEasingFunction(e){switch(e){case"linear":return H0.Linear.None;case"easeIn":return H0.Quadratic.In;case"easeOut":return H0.Quadratic.Out;case"easeInOut":return H0.Quadratic.InOut;case"smoothstep":return H0.Cubic.InOut;case"bounce":return H0.Bounce.Out;default:return H0.Quadratic.InOut}}handleScriptComplete(){if(!this.currentScript)return;let e=this.currentScript;e.loop?(this.currentPointIndex=0,this.moveToPoint(0)):(e.onComplete?.(),this.stopScript())}get running(){return this.isRunning}get progress(){if(!this.isRunning||this.totalDuration===0)return 0;let e=performance.now()-this.startTime;return Math.min(e/this.totalDuration,1)}get currentScriptName(){return this.currentScript?.name}static createCircularFlyby(e,t,r,i){let s=[];for(let v=0;v<=8;v++){let a=v/8*Math.PI*2,l=e.x+Math.cos(a)*t,c=e.z+Math.sin(a)*t,u=e.y+r;s.push({x:l,y:u,z:c,yaw:a+Math.PI/2,pitch:-.2,duration:i/8,easing:"smoothstep",lookAt:{x:e.x,y:e.y,z:e.z}})}return{name:"Circular Flyby",points:s,loop:!1}}static createSpiralDescent(e,t,r,i){let s=[],o=r*8,v=20;for(let a=0;a<=o;a++){let l=a/o,c=l*r*Math.PI*2,u=ht.MathUtils.lerp(e.x,t.x,l)+Math.cos(c)*v*(1-l),f=ht.MathUtils.lerp(e.z,t.z,l)+Math.sin(c)*v*(1-l),p=ht.MathUtils.lerp(e.y,t.y,l);s.push({x:u,y:p,z:f,yaw:c+Math.PI/2,pitch:-.3*l,duration:i/o,easing:"easeInOut"})}return{name:"Spiral Descent",points:s,loop:!1}}static createBuildingTour(e){return{name:"Building Tour",points:e.map((r,i)=>({x:r.pos.x,y:r.pos.y,z:r.pos.z,yaw:0,pitch:0,duration:r.duration||3e3,easing:"smoothstep",lookAt:r.lookAt?{x:r.lookAt.x,y:r.lookAt.y,z:r.lookAt.z}:void 0})),loop:!1}}};E();x();k();R();import*as e0 from"three";var zi=.75,Q1=class{constructor(e,t,r){this.scene=e;this.defaultSkybox=t;this.initialImage=r;d(this,"texture",null);d(this,"mesh",null);d(this,"skyMesh",null);d(this,"voidMesh",null);d(this,"worldTime",0);d(this,"partialTicks",0);d(this,"viewDistance",4);d(this,"temperature",zi);d(this,"inWater",!1);d(this,"waterBreathing",!1);d(this,"fogBrightness",0);d(this,"prevFogBrightness",0);d(this,"fogOrangeness",0);d(this,"distanceFactor",2.7);d(this,"brightnessAtPosition",1);d(this,"debugGui");this.debugGui=new ke("skybox_renderer",this,["temperature","worldTime","inWater","waterBreathing","fogOrangeness","brightnessAtPosition","distanceFactor"],{brightnessAtPosition:{min:0,max:1,step:.01},temperature:{min:0,max:1,step:.01},worldTime:{min:0,max:24e3,step:1},fogOrangeness:{min:-1,max:1,step:.01},distanceFactor:{min:0,max:5,step:.01}}),r||this.createGradientSky()}async init(){this.initialImage&&await this.setSkyboxImage(this.initialImage)}async setSkyboxImage(e){this.texture&&this.texture.dispose();let t=new e0.TextureLoader;if(this.texture=await new Promise(r=>{t.load(e,i=>{i.mapping=e0.EquirectangularReflectionMapping,i.encoding=e0.sRGBEncoding,i.minFilter=e0.NearestFilter,i.magFilter=e0.NearestFilter,i.needsUpdate=!0,r(i)})}),this.mesh)this.mesh.material.map=this.texture,this.mesh.material.needsUpdate=!0;else{let r=new e0.SphereGeometry(500,60,40);r.scale(-1,1,1);let i=new e0.MeshBasicMaterial({map:this.texture,side:e0.FrontSide});this.mesh=new e0.Mesh(r,i),this.scene.add(this.mesh)}}update(e,t){t!==this.viewDistance&&(this.viewDistance=t,this.updateSkyColors()),this.mesh?this.mesh.position.set(0,0,0):this.skyMesh&&(this.skyMesh.position.set(0,0,0),this.voidMesh?.position.set(0,0,0),this.updateSkyColors())}updateTime(e,t=0){this.debugGui.visible||(this.worldTime=e,this.partialTicks=t,this.updateSkyColors())}updateViewDistance(e){this.viewDistance=e,this.updateSkyColors()}updateTemperature(e){this.debugGui.visible||(this.temperature=e,this.updateSkyColors())}updateWaterState(e,t){this.debugGui.visible||(this.inWater=e,this.waterBreathing=t,this.updateSkyColors())}updateDefaultSkybox(e){this.debugGui.visible||(this.defaultSkybox=e,this.updateSkyColors())}createGradientSky(){{let r=new e0.PlaneGeometry(768,768);r.rotateX(-Math.PI/2),r.translate(0,16,0);let i=new e0.MeshBasicMaterial({color:16777215,side:e0.DoubleSide,depthTest:!1});this.skyMesh=new e0.Mesh(r,i),this.scene.add(this.skyMesh)}{let r=new e0.PlaneGeometry(768,768);r.rotateX(-Math.PI/2),r.translate(0,-16,0);let i=new e0.MeshBasicMaterial({color:16777215,side:e0.DoubleSide,depthTest:!1});this.voidMesh=new e0.Mesh(r,i),this.scene.add(this.voidMesh)}this.updateSkyColors()}getFogColor(e=0){let t=this.getCelestialAngle(e),r=Math.cos(t*Math.PI*2)*2+.5;r=Math.max(0,Math.min(1,r));let i=.7529412,s=.84705883,o=1;return i*=r*.94+.06,s*=r*.94+.06,o*=r*.91+.09,new e0.Vector3(i,s,o)}getSkyColor(e=0,t=0,r=0){let i=this.getCelestialAngle(r),s=Math.cos(i*3.141593*2)*2+.5;s<0&&(s=0),s>1&&(s=1);let o=this.getTemperature(e,t),v=this.getSkyColorByTemp(o),a=(v>>16&255)/255,l=(v>>8&255)/255,c=(v&255)/255;return new e0.Vector3(a*s,l*s,c*s)}calculateCelestialAngle(e,t){let i=(e%24e3+t)/24e3-.25;return i<0&&i++,i>1&&i--,i=1-(Math.cos(i*Math.PI)+1)/2,i+=(i-i)/3,i}getCelestialAngle(e){return this.calculateCelestialAngle(this.worldTime,e)}getTemperature(e,t){return this.temperature}getSkyColorByTemp(e){e/=3,e<-1&&(e=-1),e>1&&(e=1);let t=.6222222-e*.05,i=this.fogOrangeness>0?t+(.12-t)*this.fogOrangeness*.8:t+this.fogOrangeness*.1,s=.5+e*.1+Math.abs(this.fogOrangeness)*.3;return this.hsbToRgb(i,s,1)}hsbToRgb(e,t,r){let i=0,s=0,o=0;if(t===0)i=s=o=Math.floor(r*255+.5);else{let v=(e-Math.floor(e))*6,a=v-Math.floor(v),l=r*(1-t),c=r*(1-t*a),u=r*(1-t*(1-a));switch(Math.floor(v)){case 0:i=Math.floor(r*255+.5),s=Math.floor(u*255+.5),o=Math.floor(l*255+.5);break;case 1:i=Math.floor(c*255+.5),s=Math.floor(r*255+.5),o=Math.floor(l*255+.5);break;case 2:i=Math.floor(l*255+.5),s=Math.floor(r*255+.5),o=Math.floor(u*255+.5);break;case 3:i=Math.floor(l*255+.5),s=Math.floor(c*255+.5),o=Math.floor(r*255+.5);break;case 4:i=Math.floor(u*255+.5),s=Math.floor(l*255+.5),o=Math.floor(r*255+.5);break;case 5:i=Math.floor(r*255+.5),s=Math.floor(l*255+.5),o=Math.floor(c*255+.5);break}}return 4278190080|i<<16|s<<8|Math.trunc(o)}updateSkyColors(){if(!this.skyMesh||!this.voidMesh)return;if(!this.defaultSkybox){this.skyMesh.visible=!1,this.voidMesh.visible=!1,this.mesh&&(this.mesh.visible=!1);return}this.skyMesh.visible=!0,this.voidMesh.visible=!0,this.mesh&&(this.mesh.visible=!0),this.prevFogBrightness=this.fogBrightness;let e=this.viewDistance/32,t=this.brightnessAtPosition*(1-e)+e;if(this.fogBrightness+=(t-this.fogBrightness)*.1,this.inWater){let g=this.waterBreathing?100:5;this.scene.fog=new e0.Fog(new e0.Color(0,0,1),.0025,g),this.scene.background=new e0.Color(0,0,1),this.skyMesh.material.color.set(new e0.Color(0,0,1)),this.voidMesh.material.color.set(new e0.Color(0,0,.6));return}let r=this.viewDistance*16,i=1-(.25+.75*this.viewDistance/32)**.25,s=this.getCelestialAngle(this.partialTicks),o=this.getSkyColor(0,0,this.partialTicks),v=this.getFogColor(this.partialTicks),a=Math.cos(s*Math.PI*2)*2+.5,l=Math.max(0,Math.min(1,a)),c=this.prevFogBrightness+(this.fogBrightness-this.prevFogBrightness)*this.partialTicks,u=(v.x+(o.x-v.x)*i)*l*c,f=(v.y+(o.y-v.y)*i)*l*c,p=(v.z+(o.z-v.z)*i)*l*c;this.scene.background=new e0.Color(u,f,p),this.scene.fog=new e0.Fog(new e0.Color(u,f,p),.0025,r*this.distanceFactor),this.skyMesh.material.color.set(new e0.Color(o.x,o.y,o.z)),this.voidMesh.material.color.set(new e0.Color(o.x*.2+.04,o.y*.2+.04,o.z*.6+.1))}dispose(){this.texture&&this.texture.dispose(),this.mesh&&(this.mesh.geometry.dispose(),this.mesh.material.dispose(),this.scene.remove(this.mesh)),this.skyMesh&&(this.skyMesh.geometry.dispose(),this.skyMesh.material.dispose(),this.scene.remove(this.skyMesh)),this.voidMesh&&(this.voidMesh.geometry.dispose(),this.voidMesh.material.dispose(),this.scene.remove(this.voidMesh))}};E();x();k();R();import*as r0 from"three";var gv=`
21460
21460
  precision highp float;
21461
21461
  attribute vec3 position;