hytopia 0.14.43-dev → 0.14.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server.mjs +1 -1
package/package.json
CHANGED
package/server.mjs
CHANGED
|
@@ -400,4 +400,4 @@ wzUfQXDpZndkqxHilERgvPXLEsTTCMF/W+C8gsO9AoGAZWt+CU6zQhqMBB5MMGZf
|
|
|
400
400
|
UE5WUS/oOd4jHBqwVxBTLOAPlmnQSp1uiTu2K0NrnnvZ6Zi/+tIsjbtxhomeOmnH
|
|
401
401
|
+wsk9n+Bif4P7VTvwqc9FY4Ya79PEJK+J/xx/mldUEz3R63RiRXZAaDddO7yCQFX
|
|
402
402
|
W8eeuIMLKU6dSq0yu22+nyU=
|
|
403
|
-
-----END PRIVATE KEY-----`;Ao(new er({connections:50,pipelining:1,keepAliveTimeout:30000,keepAliveMaxTimeout:60000,connect:{timeout:1e4},headersTimeout:15000,bodyTimeout:30000}));var Ck=process.env.PORT??8080,Bo="0.14.43-dev",Yo;((J)=>{J.READY="WEBSERVER.READY";J.STOPPED="WEBSERVER.STOPPED";J.ERROR="WEBSERVER.ERROR";J.UPGRADE="WEBSERVER.UPGRADE"})(Yo||={});var xL={"access-control-allow-origin":"*"},zf0={".html":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".json":"application/json",".gltf":"model/gltf+json",".glb":"model/gltf-binary",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".ktx2":"image/ktx2",".mp3":"audio/mpeg",".ogg":"audio/ogg",".wav":"audio/wav",".mp4":"video/mp4",".webm":"video/webm",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".bin":"application/octet-stream",".wasm":"application/wasm"};class UV extends GQ{static instance=new UV;_server;_assetCache=new Map;_assetDirs=[];constructor(){super();this._assetDirs.push(Qo.resolve("assets"));let A=zY.assetsLibraryPath;if(A)this._assetDirs.push(A)}start(){if(this._server)return r.warning("WebServer.start(): already started");this._server=qf0.createSecureServer({key:Jk,cert:Yk,allowHTTP1:!0}),this._server.on("stream",this._onStream),this._server.on("upgrade",this._onUpgrade),this._server.on("error",this._onError),this._server.on("close",this._onStopped),this._server.listen(Ck,this._onStarted),console.info(`WebServer.start(): Server running on port ${Ck}`)}stop(){if(!this._server)return r.warning("WebServer.stop(): not started"),Promise.resolve(!1);return new Promise((A,Q)=>{this._server.close((B)=>B?Q(B):A(!0))})}_onStarted=()=>this.emitWithGlobal("WEBSERVER.READY",{});_onStopped=()=>this.emitWithGlobal("WEBSERVER.STOPPED",{});_onError=(A)=>{r.error(`WebServer._onError(): ${A.message}`),this.emitWithGlobal("WEBSERVER.ERROR",{error:A})};_onStream=(A,Q)=>{A.on("error",()=>{});let B=Q[":path"]||"/",J=(Q[":method"]||"GET")==="HEAD";if(B==="/"){A.respond({":status":200,"content-type":"application/json",...xL}),A.end(!J?JSON.stringify({status:"OK",version:Bo,runtime:"node",playerCount:uC.instance.playerCount}):void 0);return}let C=decodeURIComponent(B.split("?")[0]);if(C.includes("..")){A.respond({":status":400,...xL}),A.end();return}for(let X of this._assetDirs){let G=Qo.join(X,C);if(!G.startsWith(X))continue;let F=zY.assetsLibraryPath;if(F&&G.startsWith(F)&&!B.includes("noSync"))zY.instance.syncAsset(G);let W=this._assetCache.get(G);if(!W)try{let U=cPQ.statSync(G);if(!U.isFile())continue;W={size:U.size,etag:`"${U.mtimeMs.toString(36)}-${U.size.toString(36)}"`},this._assetCache.set(G,W)}catch{continue}if(Q["if-none-match"]===W.etag){A.respond({":status":304,...xL}),A.end();return}let $={":status":200,"content-type":zf0[Qo.extname(G).toLowerCase()]||"application/octet-stream","content-length":W.size,etag:W.etag,"cache-control":"public, max-age=0, must-revalidate",...xL};if(J){A.respond($),A.end();return}A.respond($);let Z=cPQ.createReadStream(G);A.on("close",()=>Z.destroy()),Z.on("error",()=>A.close()),Z.pipe(A);return}A.respond({":status":404,...xL}),A.end()};_onUpgrade=(A,Q,B)=>{this.emitWithGlobal("WEBSERVER.UPGRADE",{req:A,socket:Q,head:B})}}var tZ;((I)=>{I.BUILD_PACKETS="build_packets";I.ENTITIES_EMIT_UPDATES="entities_emit_updates";I.ENTITIES_TICK="entities_tick";I.NETWORK_SYNCHRONIZE="network_synchronize";I.NETWORK_SYNCHRONIZE_CLEANUP="network_synchronize_cleanup";I.PHYSICS_CLEANUP="physics_cleanup";I.PHYSICS_STEP="physics_step";I.SEND_ALL_PACKETS="send_all_packets";I.SEND_PACKETS="send_packets";I.SERIALIZE_FREE_BUFFERS="serialize_free_buffers";I.SERIALIZE_PACKETS="serialize_packets";I.SERIALIZE_PACKETS_ENCODE="serialize_packets_encode";I.SIMULATION_STEP="simulation_step";I.TICKER_TICK="ticker_tick";I.WORLD_TICK="world_tick"})(tZ||={});class o0{static getProcessStats(A=!1){let Q=process.memoryUsage(),B={jsHeapSizeMb:{value:Q.heapUsed/1024/1024,unit:"megabyte"},jsHeapCapacityMb:{value:Q.heapTotal/1024/1024,unit:"megabyte"},jsHeapUsagePercent:{value:Q.heapUsed/Q.heapTotal,unit:"percent"},processHeapSizeMb:{value:Q.heapUsed/1024/1024,unit:"megabyte"},rssSizeMb:{value:Q.rss/1024/1024,unit:"megabyte"}};if(A)return B;return Object.fromEntries(Object.entries(B).map(([Y,J])=>[Y,J.value]))}static initializeSentry(A,Q=50){if(PU())return;MT({dsn:A,release:Bo,environment:process.env.NODE_ENV||"development",tracesSampleRate:1,initialScope:{tags:{gameId:process.env.HYTOPIA_GAME_ID??"unknown",gameSlug:process.env.HYTOPIA_GAME_SLUG??"unknown",lobbyId:process.env.HYTOPIA_LOBBY_ID??"unknown",region:process.env.REGION??"unknown"}},beforeSend:(B)=>{return B.extra=o0.getProcessStats(),B},beforeSendTransaction:(B)=>{if(B.contexts?.trace?.op==="ticker_tick"){let J=B?.start_timestamp,C=B?.timestamp;if(!J||!C)return null;if((C-J)*1000>Q)return B.measurements=o0.getProcessStats(!0),B}return null}})}static startSpan(A,Q){if(PU())return w8({attributes:A.attributes,name:A.operation,op:A.operation},Q);else return Q()}static sentry(){return Fs}}if(!Pw)console.warn("Connection: msgpackr native acceleration is not enabled, using fallback implementation.");var pPQ=new VE({useFloat32:gD.ALWAYS}),wf0=30000;class Z1 extends GQ{static _cachedPacketsSerializedBuffer=new Map;_closeTimeout=null;_isDuplicate=!1;_ws;_wsBinding=!1;_wt;_wtBinding=!1;_wtReliableReader;_wtReliableWriter;_wtUnreliableReader;_wtUnreliableWriter;id;initialConnectionParams;constructor(A,Q,B,Y){super();this.id=SIA(),this.initialConnectionParams=B,this.onPacket(gQ.PacketId.HEARTBEAT,this._onHeartbeatPacket);let J=()=>{GQ.globalInstance.emit("CONNECTION.OPENED",{connection:this,session:Y})};if(A)this.bindWs(A),J();else if(Q)this.bindWt(Q).then(J).catch((C)=>{this._onClose(),r.error(`Connection.constructor(): Failed to bind WebTransport. Error: ${C}`)})}get isDuplicate(){return this._isDuplicate}static clearCachedPacketsSerializedBuffers(){if(Z1._cachedPacketsSerializedBuffer.size>0)Z1._cachedPacketsSerializedBuffer.clear()}static serializePackets(A){for(let B of A)if(!gQ.isValidPacket(B))return r.error(`Connection.serializePackets(): Invalid packet payload: ${JSON.stringify(B)}`);let Q=Z1._cachedPacketsSerializedBuffer.get(A);if(Q)return Q;return o0.startSpan({operation:"serialize_packets",attributes:{packets:A.length,packetIds:A.map((B)=>B[0]).join(",")}},(B)=>{let Y=pPQ.pack(A);if(Y.byteLength>65536)Y=Rf0(Y,{level:1});return B?.setAttribute("serializedBytes",Y.byteLength),Z1._cachedPacketsSerializedBuffer.set(A,Y),Y})}bindWs(A){this._wsBinding=!0;let Q=this._handleReconnect();if(this._cleanupConnections(),this._ws=A,this._ws.binaryType="nodebuffer",this._ws.onmessage=(B)=>this._onMessage(B.data),this._ws.onclose=this._onClose,this._ws.onerror=this._onError,this._wsBinding=!1,this._signalConnectionId(),Q)this.emitWithGlobal("CONNECTION.RECONNECTED",{connection:this})}async bindWt(A){this._wtBinding=!0;let Q=this._handleReconnect();this._cleanupConnections(),A.userData.onclose=this._onClose,A.closed.catch(()=>{}).finally(()=>A.userData.onclose?.()),this._wt=A;try{await A.ready;let B=A.incomingBidirectionalStreams.getReader();try{let{value:Y}=await B.read();if(Y)this._wtReliableReader=Y.readable,this._wtReliableWriter=Y.writable.getWriter()}finally{B.releaseLock()}this._wtUnreliableReader=A.datagrams.readable,this._wtUnreliableWriter=A.datagrams.createWritable().getWriter()}catch{this._wtBinding=!1;return}if(this._wtBinding=!1,this._wt!==A)return;if((async()=>{if(!this._wtReliableReader)throw Error("Connection.bindWt(): Reliable reader not found.");let B=gQ.createPacketBufferUnframer((Y)=>{this._onMessage(Y)});for await(let Y of this._wtReliableReader){if(A!==this._wt)return;B(Y)}})().catch(()=>{try{A?.close()}catch{}}),(async()=>{if(!this._wtUnreliableReader)throw Error("Connection.bindWt(): Unreliable reader not found.");for await(let B of this._wtUnreliableReader){if(A!==this._wt)return;this._onMessage(B)}})().catch(()=>{try{A?.close()}catch{}}),this._signalConnectionId(),Q)this.emitWithGlobal("CONNECTION.RECONNECTED",{connection:this})}disconnect(){try{this._ws?.close(),this._wt?.close()}catch(A){r.error(`Connection.disconnect(): Connection disconnect failed. Error: ${A}`)}}killDuplicateConnection(){this._isDuplicate=!0,this._cleanupConnections(),this.emitWithGlobal("CONNECTION.DISCONNECTED",{connection:this}),this._finalizeClose()}onPacket(A,Q){this.on("CONNECTION.PACKET_RECEIVED",({packet:B})=>{if(B[0]===A)Q(B)})}send(A,Q=!0){if(this._closeTimeout||this._wsBinding||this._wtBinding)return;if(!this._ws&&!this._wt)return;let B=this._ws&&this._ws.readyState===WU.default.OPEN,Y=this._wt&&this._wt.state==="connected";if(!B&&!Y)return;o0.startSpan({operation:"send_packets"},()=>{try{let J=Z1.serializePackets(A);if(!J)return;if(Y)if(Q||J.byteLength>1200)this._wtReliableWriter?.write(gQ.framePacketBuffer(J)).catch(()=>{r.error("Connection.send(): WebTransport reliable write failed, connection closing?")});else this._wtUnreliableWriter?.write(J).catch(()=>{r.error("Connection.send(): WebTransport unreliable write failed, connection closing?")});else this._ws.send(J);this.emitWithGlobal("CONNECTION.PACKETS_SENT",{connection:this,packets:A})}catch(J){r.error(`Connection.send(): Packet send failed. Error: ${J}`)}})}_onHeartbeatPacket=()=>{this.send([gQ.createPacket(gQ.bidirectionalPackets.heartbeatPacketDefinition,null)],!0)};_onMessage=(A)=>{try{let Q=this._deserialize(A);if(!Q)return;this.emitWithGlobal("CONNECTION.PACKET_RECEIVED",{connection:this,packet:Q})}catch(Q){r.error(`Connection._ws.onmessage(): Error: ${Q}`)}};_onClose=()=>{this.emitWithGlobal("CONNECTION.DISCONNECTED",{connection:this}),this._closeTimeout=setTimeout(()=>this._finalizeClose(),wf0)};_onError=(A)=>{this.emitWithGlobal("CONNECTION.ERROR",{connection:this,error:A})};_cleanupConnections(){if(this._ws)this._ws.onmessage=()=>{},this._ws.onclose=()=>{},this._ws.onerror=()=>{};if(this._wt)this._wt.userData.onclose=()=>{};this._signalKill();try{this._ws?.close()}catch{}let A=this._wt;if(A)setTimeout(()=>{try{A.close()}catch{}},50);this._ws=void 0,this._wt=void 0,this._wtReliableReader=void 0,this._wtReliableWriter=void 0,this._wtUnreliableReader=void 0,this._wtUnreliableWriter=void 0}_deserialize(A){let Q=pPQ.unpack(A);if(!Q||typeof Q!=="object"||typeof Q[0]!=="number")return r.error(`Connection._deserialize(): Invalid packet format. Packet: ${JSON.stringify(Q)}`);if(!gQ.isValidPacket(Q))return r.error(`Connection._deserialize(): Invalid packet payload. Packet: ${JSON.stringify(Q)}`);return Q}_finalizeClose(){this.emitWithGlobal("CONNECTION.CLOSED",{connection:this}),this.offAll()}_handleReconnect(){let A=!!this._ws||!!this._wt;if(A&&this._closeTimeout)clearTimeout(this._closeTimeout),this._closeTimeout=null;return A}_signalConnectionId(){this.send([gQ.createPacket(gQ.bidirectionalPackets.connectionPacketDefinition,{i:this.id})])}_signalKill(){this.send([gQ.createPacket(gQ.bidirectionalPackets.connectionPacketDefinition,{k:!0})])}}class bB{_map=new Map;_values=[];_isDirty=!1;get size(){return this._map.size}get valuesArray(){if(this._isDirty)this._syncArray();return this._values}get(A){return this._map.get(A)}set(A,Q){let B=this._map.has(A);if(this._map.set(A,Q),!B)this._values.push(Q);else this._isDirty=!0;return this}has(A){return this._map.has(A)}delete(A){let Q=this._map.delete(A);if(Q)this._isDirty=!0;return Q}clear(){this._map.clear(),this._values.length=0,this._isDirty=!1}forEach(A,Q){this._map.forEach((B,Y)=>{A.call(Q,B,Y,this)})}keys(){return this._map.keys()}values(){return this._map.values()}entries(){return this._map.entries()}[Symbol.iterator](){return this._map[Symbol.iterator]()}_syncArray(){this._values.length=0;for(let A of this._map.values())this._values.push(A);this._isDirty=!1}}var jf0={x:0,y:-32,z:0},fL=60,Jo;((J)=>{J.STEP_START="SIMULATION.STEP_START";J.STEP_END="SIMULATION.STEP_END";J.DEBUG_RAYCAST="SIMULATION.DEBUG_RAYCAST";J.DEBUG_RENDER="SIMULATION.DEBUG_RENDER"})(Jo||={});class bL extends GQ{_colliderMap=new PD;_debugRaycastingEnabled=!1;_debugRenderingEnabled=!1;_debugRenderingFilterFlags;_rapierEventQueue;_rapierSimulation;_world;constructor(A,Q=fL,B=jf0){super();this._rapierEventQueue=new WB.EventQueue(!0),this._rapierSimulation=new WB.World(B),this._rapierSimulation.timestep=Math.fround(1/Q),this._world=A}get colliderMap(){return this._colliderMap}get isDebugRaycastingEnabled(){return this._debugRaycastingEnabled}get isDebugRenderingEnabled(){return this._debugRenderingEnabled}get gravity(){return this._rapierSimulation.gravity}get timestepS(){return this._rapierSimulation.timestep}get world(){return this._world}createRawCollider(A,Q){return this._rapierSimulation.createCollider(A,Q)}createRawRigidBody(A){return this._rapierSimulation.createRigidBody(A)}enableDebugRaycasting(A){this._debugRaycastingEnabled=A}enableDebugRendering(A,Q=WB.QueryFilterFlags.EXCLUDE_FIXED){this._debugRenderingEnabled=A,this._debugRenderingFilterFlags=Q}getContactManifolds(A,Q){let B=[];return this._rapierSimulation.narrowPhase.contactPair(A,Q,(Y,J)=>{if(Y.numContacts()===0)return;let C=Y.normal(),X=[];for(let G=0;G<Y.numSolverContacts();G++)X.push(Y.solverContactPoint(G));B.push({contactPoints:X,localNormalA:!J?Y.localNormal1():Y.localNormal2(),localNormalB:!J?Y.localNormal2():Y.localNormal1(),normal:!J?C:{x:-C.x,y:-C.y,z:-C.z}})}),B}intersectionsWithRawShape(A,Q,B,Y={}){let J=new Set,C=[];return this._rapierSimulation.intersectionsWithShape(Q,B,A,(X)=>{let G=this._colliderMap.getColliderHandleBlockType(X.handle);if(G&&!J.has(G))return J.add(G),C.push({intersectedBlockType:G}),!0;let F=this._colliderMap.getColliderHandleEntity(X.handle);if(F&&!J.has(F))return J.add(F),C.push({intersectedEntity:F}),!0;return!0},Y.filterFlags,Y.filterGroups,Y.filterExcludeCollider,Y.filterExcludeRigidBody,Y.filterPredicate),C}raycast(A,Q,B,Y={}){let J=new WB.Ray(A,Q),C=this._rapierSimulation.castRay(J,B,Y.solidMode??!0,Y.filterFlags,Y.filterGroups,Y.filterExcludeCollider,Y.filterExcludeRigidBody,Y.filterPredicate);if(this._debugRaycastingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RAYCAST",{simulation:this,origin:A,direction:Q,length:B,hit:!!C});if(!C)return null;let X=J.pointAt(C.timeOfImpact),G=C.timeOfImpact,F=C.collider,W=this._colliderMap.getColliderHandleBlockType(F.handle);if(W)return{hitBlock:J$.fromGlobalCoordinate({x:Math.floor(X.x-(J.dir.x<0?0.0001:-0.0001)),y:Math.floor(X.y-(J.dir.y<0?0.0001:-0.0001)),z:Math.floor(X.z-(J.dir.z<0?0.0001:-0.0001))},W),hitPoint:X,hitDistance:G,origin:A,originDirection:Q};let E=this._colliderMap.getColliderHandleEntity(F.handle);if(E)return{hitEntity:E,hitPoint:X,hitDistance:G,origin:A,originDirection:Q};return null}removeRawCollider(A){this._colliderMap.queueColliderHandleForCleanup(A.handle),this._rapierSimulation.removeCollider(A,!1)}removeRawRigidBody(A){this._rapierSimulation.removeRigidBody(A)}setGravity(A){this._rapierSimulation.gravity=A}step=(A)=>{this.emitWithWorld(this._world,"SIMULATION.STEP_START",{simulation:this,tickDeltaMs:A});let Q=performance.now();if(o0.startSpan({operation:"physics_step"},()=>{this._rapierSimulation.step(this._rapierEventQueue)}),o0.startSpan({operation:"physics_cleanup"},()=>{this._rapierEventQueue.drainContactForceEvents(this._onContactForceEvent),this._rapierEventQueue.drainCollisionEvents(this._onCollisionEvent),this._colliderMap.cleanup()}),this.emitWithWorld(this._world,"SIMULATION.STEP_END",{simulation:this,stepDurationMs:performance.now()-Q}),this._debugRenderingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RENDER",{simulation:this,...this._rapierSimulation.debugRender(this._debugRenderingFilterFlags)})};_onCollisionEvent=(A,Q,B)=>{let[Y,J]=this._getCollisionObjects(A,Q);if(!Y||!J)return;let C=(X,G)=>{if(X instanceof HC&&G instanceof m0&&X.hasListeners("BLOCK_TYPE.ENTITY_COLLISION"))X.emit("BLOCK_TYPE.ENTITY_COLLISION",{blockType:X,entity:G,started:B,colliderHandleA:A,colliderHandleB:Q});else if(X instanceof m0&&G instanceof HC&&X.hasListeners("ENTITY.BLOCK_COLLISION"))X.emit("ENTITY.BLOCK_COLLISION",{entity:X,blockType:G,started:B,colliderHandleA:A,colliderHandleB:Q});else if(X instanceof m0&&G instanceof m0&&X.hasListeners("ENTITY.ENTITY_COLLISION"))X.emit("ENTITY.ENTITY_COLLISION",{entity:X,otherEntity:G,started:B,colliderHandleA:A,colliderHandleB:Q});else if(typeof X==="function"&&(G instanceof m0||G instanceof HC))X(G,B,A,Q)};C(Y,J),C(J,Y)};_onContactForceEvent=(A)=>{let[Q,B]=this._getCollisionObjects(A.collider1(),A.collider2());if(!Q||typeof Q==="function"||!B||typeof B==="function")return;let Y={totalForce:A.totalForce(),totalForceMagnitude:A.totalForceMagnitude(),maxForceDirection:A.maxForceDirection(),maxForceMagnitude:A.maxForceMagnitude()},J=(C,X)=>{if(C instanceof HC&&X instanceof m0&&C.hasListeners("BLOCK_TYPE.ENTITY_CONTACT_FORCE"))C.emit("BLOCK_TYPE.ENTITY_CONTACT_FORCE",{blockType:C,entity:X,contactForceData:Y});else if(C instanceof m0&&X instanceof HC&&C.hasListeners("ENTITY.BLOCK_CONTACT_FORCE"))C.emit("ENTITY.BLOCK_CONTACT_FORCE",{entity:C,blockType:X,contactForceData:Y});else if(C instanceof m0&&X instanceof m0&&C.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))C.emit("ENTITY.ENTITY_CONTACT_FORCE",{entity:C,otherEntity:X,contactForceData:Y})};J(Q,B),J(B,Q)};_getCollisionObjects(A,Q){let B=this._colliderMap.getColliderHandleBlockType(A)??this._colliderMap.getColliderHandleCollisionCallback(A)??this._colliderMap.getColliderHandleEntity(A),Y=this._colliderMap.getColliderHandleBlockType(Q)??this._colliderMap.getColliderHandleCollisionCallback(Q)??this._colliderMap.getColliderHandleEntity(Q);return[B,Y]}}var Co;((u)=>{u.BURST="PARTICLE_EMITTER.BURST";u.DESPAWN="PARTICLE_EMITTER.DESPAWN";u.SET_ALPHA_TEST="PARTICLE_EMITTER.SET_ALPHA_TEST";u.SET_ATTACHED_TO_ENTITY="PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY";u.SET_ATTACHED_TO_ENTITY_NODE_NAME="PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY_NODE_NAME";u.SET_COLOR_END="PARTICLE_EMITTER.SET_COLOR_END";u.SET_COLOR_END_VARIANCE="PARTICLE_EMITTER.SET_COLOR_END_VARIANCE";u.SET_COLOR_INTENSITY_END="PARTICLE_EMITTER.SET_COLOR_INTENSITY_END";u.SET_COLOR_INTENSITY_END_VARIANCE="PARTICLE_EMITTER.SET_COLOR_INTENSITY_END_VARIANCE";u.SET_COLOR_INTENSITY_START="PARTICLE_EMITTER.SET_COLOR_INTENSITY_START";u.SET_COLOR_INTENSITY_START_VARIANCE="PARTICLE_EMITTER.SET_COLOR_INTENSITY_START_VARIANCE";u.SET_COLOR_START="PARTICLE_EMITTER.SET_COLOR_START";u.SET_COLOR_START_VARIANCE="PARTICLE_EMITTER.SET_COLOR_START_VARIANCE";u.SET_GRAVITY="PARTICLE_EMITTER.SET_GRAVITY";u.SET_LIFETIME="PARTICLE_EMITTER.SET_LIFETIME";u.SET_LIFETIME_VARIANCE="PARTICLE_EMITTER.SET_LIFETIME_VARIANCE";u.SET_MAX_PARTICLES="PARTICLE_EMITTER.SET_MAX_PARTICLES";u.SET_OFFSET="PARTICLE_EMITTER.SET_OFFSET";u.SET_OPACITY_END="PARTICLE_EMITTER.SET_OPACITY_END";u.SET_OPACITY_END_VARIANCE="PARTICLE_EMITTER.SET_OPACITY_END_VARIANCE";u.SET_OPACITY_START="PARTICLE_EMITTER.SET_OPACITY_START";u.SET_OPACITY_START_VARIANCE="PARTICLE_EMITTER.SET_OPACITY_START_VARIANCE";u.SET_PAUSED="PARTICLE_EMITTER.SET_PAUSED";u.SET_POSITION="PARTICLE_EMITTER.SET_POSITION";u.SET_POSITION_VARIANCE="PARTICLE_EMITTER.SET_POSITION_VARIANCE";u.SET_RATE="PARTICLE_EMITTER.SET_RATE";u.SET_RATE_VARIANCE="PARTICLE_EMITTER.SET_RATE_VARIANCE";u.SET_SIZE_END="PARTICLE_EMITTER.SET_SIZE_END";u.SET_SIZE_END_VARIANCE="PARTICLE_EMITTER.SET_SIZE_END_VARIANCE";u.SET_SIZE_START="PARTICLE_EMITTER.SET_SIZE_START";u.SET_SIZE_START_VARIANCE="PARTICLE_EMITTER.SET_SIZE_START_VARIANCE";u.SET_TEXTURE_URI="PARTICLE_EMITTER.SET_TEXTURE_URI";u.SET_TRANSPARENT="PARTICLE_EMITTER.SET_TRANSPARENT";u.SET_VELOCITY="PARTICLE_EMITTER.SET_VELOCITY";u.SET_VELOCITY_VARIANCE="PARTICLE_EMITTER.SET_VELOCITY_VARIANCE";u.SPAWN="PARTICLE_EMITTER.SPAWN"})(Co||={});class Xo extends GQ{_id;_alphaTest;_attachedToEntity;_attachedToEntityNodeName;_colorEnd;_colorEndVariance;_colorIntensityEnd;_colorIntensityEndVariance;_colorIntensityStart;_colorIntensityStartVariance;_colorStart;_colorStartVariance;_gravity;_lifetime;_lifetimeVariance;_maxParticles;_offset;_opacityEnd;_opacityEndVariance;_opacityStart;_opacityStartVariance;_paused;_position;_positionVariance;_rate;_rateVariance;_sizeEnd;_sizeEndVariance;_sizeStart;_sizeStartVariance;_sizeVariance;_textureUri;_transparent;_velocity;_velocityVariance;_world;constructor(A){if(!!A.attachedToEntity===!!A.position)r.fatalError("Either attachedToEntity or position must be set, but not both.");if(!A.textureUri)r.fatalError("ParticleEmitter.constructor(): textureUri must be provided.");super();this._alphaTest=A.alphaTest??0.05,this._attachedToEntity=A.attachedToEntity,this._attachedToEntityNodeName=A.attachedToEntityNodeName,this._colorEnd=A.colorEnd,this._colorEndVariance=A.colorEndVariance,this._colorIntensityEnd=A.colorIntensityEnd,this._colorIntensityEndVariance=A.colorIntensityEndVariance,this._colorIntensityStart=A.colorIntensityStart,this._colorIntensityStartVariance=A.colorIntensityStartVariance,this._colorStart=A.colorStart,this._colorStartVariance=A.colorStartVariance,this._gravity=A.gravity,this._lifetime=A.lifetime,this._lifetimeVariance=A.lifetimeVariance,this._maxParticles=A.maxParticles,this._offset=A.offset,this._opacityEnd=A.opacityEnd,this._opacityEndVariance=A.opacityEndVariance,this._opacityStart=A.opacityStart,this._opacityStartVariance=A.opacityStartVariance,this._paused=!1,this._position=A.position,this._positionVariance=A.positionVariance,this._rate=A.rate,this._rateVariance=A.rateVariance,this._sizeEnd=A.sizeEnd,this._sizeEndVariance=A.sizeEndVariance,this._sizeStart=A.sizeStart,this._sizeStartVariance=A.sizeStartVariance,this._textureUri=A.textureUri,this._transparent=A.transparent,this._velocity=A.velocity,this._velocityVariance=A.velocityVariance}get id(){return this._id}get alphaTest(){return this._alphaTest}get attachedToEntity(){return this._attachedToEntity}get attachedToEntityNodeName(){return this._attachedToEntityNodeName}get colorEnd(){return this._colorEnd}get colorEndVariance(){return this._colorEndVariance}get colorIntensityEnd(){return this._colorIntensityEnd}get colorIntensityEndVariance(){return this._colorIntensityEndVariance}get colorIntensityStart(){return this._colorIntensityStart}get colorIntensityStartVariance(){return this._colorIntensityStartVariance}get colorStart(){return this._colorStart}get colorStartVariance(){return this._colorStartVariance}get gravity(){return this._gravity}get isSpawned(){return this._id!==void 0}get lifetime(){return this._lifetime}get lifetimeVariance(){return this._lifetimeVariance}get maxParticles(){return this._maxParticles}get offset(){return this._offset}get opacityEnd(){return this._opacityEnd}get opacityEndVariance(){return this._opacityEndVariance}get opacityStart(){return this._opacityStart}get opacityStartVariance(){return this._opacityStartVariance}get paused(){return this._paused}get position(){return this._position}get positionVariance(){return this._positionVariance}get rate(){return this._rate}get rateVariance(){return this._rateVariance}get sizeEnd(){return this._sizeEnd}get sizeEndVariance(){return this._sizeEndVariance}get sizeStart(){return this._sizeStart}get sizeStartVariance(){return this._sizeStartVariance}get sizeVariance(){return this._sizeVariance}get textureUri(){return this._textureUri}get transparent(){return this._transparent}get velocity(){return this._velocity}get velocityVariance(){return this._velocityVariance}get world(){return this._world}setAlphaTest(A){if(this._alphaTest===A)return;if(this._alphaTest=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_ALPHA_TEST",{particleEmitter:this,alphaTest:A})}setAttachedToEntity(A){if(!A.isSpawned)return r.error(`ParticleEmitter.setAttachedToEntity(): Entity ${A.id} is not spawned!`);if(this._attachedToEntity===A)return;if(this._attachedToEntity=A,this._position=void 0,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY",{particleEmitter:this,entity:A})}setAttachedToEntityNodeName(A){if(this._attachedToEntityNodeName===A)return;if(this._attachedToEntityNodeName=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY_NODE_NAME",{particleEmitter:this,attachedToEntityNodeName:A})}setColorEnd(A){if(this._colorEnd&&this._colorEnd.r===A.r&&this._colorEnd.g===A.g&&this._colorEnd.b===A.b)return;if(this._colorEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_END",{particleEmitter:this,colorEnd:A})}setColorEndVariance(A){if(this._colorEndVariance&&this._colorEndVariance.r===A.r&&this._colorEndVariance.g===A.g&&this._colorEndVariance.b===A.b)return;if(this._colorEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_END_VARIANCE",{particleEmitter:this,colorEndVariance:A})}setColorIntensityEnd(A){if(this._colorIntensityEnd===A)return;if(this._colorIntensityEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_END",{particleEmitter:this,colorIntensityEnd:A})}setColorIntensityEndVariance(A){if(this._colorIntensityEndVariance===A)return;if(this._colorIntensityEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_END_VARIANCE",{particleEmitter:this,colorIntensityEndVariance:A})}setColorIntensityStart(A){if(this._colorIntensityStart===A)return;if(this._colorIntensityStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_START",{particleEmitter:this,colorIntensityStart:A})}setColorIntensityStartVariance(A){if(this._colorIntensityStartVariance===A)return;if(this._colorIntensityStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_START_VARIANCE",{particleEmitter:this,colorIntensityStartVariance:A})}setColorStart(A){if(this._colorStart&&this._colorStart.r===A.r&&this._colorStart.g===A.g&&this._colorStart.b===A.b)return;if(this._colorStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_START",{particleEmitter:this,colorStart:A})}setColorStartVariance(A){if(this._colorStartVariance&&this._colorStartVariance.r===A.r&&this._colorStartVariance.g===A.g&&this._colorStartVariance.b===A.b)return;if(this._colorStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_START_VARIANCE",{particleEmitter:this,colorStartVariance:A})}setGravity(A){if(this._gravity&&this._gravity.x===A.x&&this._gravity.y===A.y&&this._gravity.z===A.z)return;if(this._gravity=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_GRAVITY",{particleEmitter:this,gravity:A})}setLifetime(A){if(this._lifetime===A)return;if(this._lifetime=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_LIFETIME",{particleEmitter:this,lifetime:A})}setLifetimeVariance(A){if(this._lifetimeVariance===A)return;if(this._lifetimeVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_LIFETIME_VARIANCE",{particleEmitter:this,lifetimeVariance:A})}setMaxParticles(A){if(this._maxParticles===A)return;if(this._maxParticles=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_MAX_PARTICLES",{particleEmitter:this,maxParticles:A})}setOffset(A){if(this._offset&&this._offset.x===A.x&&this._offset.y===A.y&&this._offset.z===A.z)return;if(this._offset=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OFFSET",{particleEmitter:this,offset:A})}setOpacityEnd(A){if(this._opacityEnd===A)return;if(this._opacityEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_END",{particleEmitter:this,opacityEnd:A})}setOpacityEndVariance(A){if(this._opacityEndVariance===A)return;if(this._opacityEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_END_VARIANCE",{particleEmitter:this,opacityEndVariance:A})}setOpacityStart(A){if(this._opacityStart===A)return;if(this._opacityStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_START",{particleEmitter:this,opacityStart:A})}setOpacityStartVariance(A){if(this._opacityStartVariance===A)return;if(this._opacityStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_START_VARIANCE",{particleEmitter:this,opacityStartVariance:A})}setPosition(A){if(this._position&&this._position.x===A.x&&this._position.y===A.y&&this._position.z===A.z)return;if(this._position=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_POSITION",{particleEmitter:this,position:A})}setPositionVariance(A){if(this._positionVariance&&this._positionVariance.x===A.x&&this._positionVariance.y===A.y&&this._positionVariance.z===A.z)return;if(this._positionVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_POSITION_VARIANCE",{particleEmitter:this,positionVariance:A})}setRate(A){if(this._rate===A)return;if(this._rate=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_RATE",{particleEmitter:this,rate:A})}setRateVariance(A){if(this._rateVariance===A)return;if(this._rateVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_RATE_VARIANCE",{particleEmitter:this,rateVariance:A})}setSizeEnd(A){if(this._sizeEnd===A)return;if(this._sizeEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_END",{particleEmitter:this,sizeEnd:A})}setSizeEndVariance(A){if(this._sizeEndVariance===A)return;if(this._sizeEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_END_VARIANCE",{particleEmitter:this,sizeEndVariance:A})}setSizeStart(A){if(this._sizeStart===A)return;if(this._sizeStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_START",{particleEmitter:this,sizeStart:A})}setSizeStartVariance(A){if(this._sizeStartVariance===A)return;if(this._sizeStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_START_VARIANCE",{particleEmitter:this,sizeStartVariance:A})}setTextureUri(A){if(this._textureUri===A)return;if(this._textureUri=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_TEXTURE_URI",{particleEmitter:this,textureUri:A})}setTransparent(A){if(this._transparent===A)return;if(this._transparent=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_TRANSPARENT",{particleEmitter:this,transparent:A})}setVelocity(A){if(this._velocity&&this._velocity.x===A.x&&this._velocity.y===A.y&&this._velocity.z===A.z)return;if(this._velocity=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_VELOCITY",{particleEmitter:this,velocity:A})}setVelocityVariance(A){if(this._velocityVariance&&this._velocityVariance.x===A.x&&this._velocityVariance.y===A.y&&this._velocityVariance.z===A.z)return;if(this._velocityVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_VELOCITY_VARIANCE",{particleEmitter:this,velocityVariance:A})}burst(A){if(this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.BURST",{particleEmitter:this,count:A})}despawn(){if(!this.isSpawned||!this._world)return;this._world.particleEmitterManager.unregisterParticleEmitter(this),this.emitWithWorld(this._world,"PARTICLE_EMITTER.DESPAWN",{particleEmitter:this}),this._id=void 0,this._world=void 0}restart(){if(!this._paused)return;if(this._paused=!1,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_PAUSED",{particleEmitter:this,paused:this._paused})}stop(){if(this._paused)return;if(this._paused=!0,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_PAUSED",{particleEmitter:this,paused:this._paused})}spawn(A){if(this.isSpawned)return;if(this._attachedToEntity&&!this._attachedToEntity.isSpawned)return r.error(`ParticleEmitter.spawn(): Attached entity ${this._attachedToEntity.id} must be spawned before spawning ParticleEmitter!`);this._id=A.particleEmitterManager.registerParticleEmitter(this),this._world=A,this.emitWithWorld(A,"PARTICLE_EMITTER.SPAWN",{particleEmitter:this})}serialize(){return wQ.serializeParticleEmitter(this)}}var Of0=30,Pf0=Math.round(fL/Of0);class Xk{_outboundPerPlayerReliablePackets=new bB;_outboundSharedReliablePackets=[];_outboundSharedUnreliablePackets=[];_queuedAudioSyncs={broadcast:new bB,perPlayer:new bB};_queuedBlockSyncs={broadcast:new bB,perPlayer:new bB};_queuedBlockTypeSyncs={broadcast:new bB,perPlayer:new bB};_queuedChunkSyncs={broadcast:new bB,perPlayer:new bB};_queuedEntitySyncs={broadcast:new bB,perPlayer:new bB};_queuedParticleEmitterSyncs={broadcast:new bB,perPlayer:new bB};_queuedPlayerSyncs={broadcast:new bB,perPlayer:new bB};_queuedSceneUISyncs={broadcast:new bB,perPlayer:new bB};_queuedCameraSyncs={broadcast:void 0,perPlayer:new bB};_queuedChatMessagesSyncs={broadcast:void 0,perPlayer:new bB};_queuedDebugRaycastsSyncs={broadcast:void 0,perPlayer:new bB};_queuedDebugRenderSyncs={broadcast:void 0,perPlayer:new bB};_queuedNotificationPermissionRequestSyncs={broadcast:void 0,perPlayer:new bB};_queuedUISyncs={broadcast:void 0,perPlayer:new bB};_queuedUIDatasSyncs={broadcast:void 0,perPlayer:new bB};_queuedWorldSyncs={broadcast:void 0,perPlayer:new bB};_loadedSceneUIs=new Set;_spawnedChunks=new Set;_spawnedEntities=new Set;_world;constructor(A){this._world=A,this._subscribeToAudioEvents(),this._subscribeToBlockTypeRegistryEvents(),this._subscribeToChatEvents(),this._subscribeToChunkLatticeEvents(),this._subscribeToEntityEvents(),this._subscribeToParticleEmitterEvents(),this._subscribeToPlayerEvents(),this._subscribeToPlayerCameraEvents(),this._subscribeToPlayerUIEvents(),this._subscribeToSceneUIEvents(),this._subscribeToSimulationEvents(),this._subscribeToWorldEvents()}shouldSynchronize(){return this._world.loop.currentTick%Pf0===0}synchronize(){let A=this._world.loop.currentTick;if(this._queuedEntitySyncs.perPlayer.size>0)for(let[Q,B]of this._queuedEntitySyncs.perPlayer.entries())this._outboundPerPlayerReliablePackets.get(Q)?.push(gQ.createPacket(gQ.outboundPackets.entitiesPacketDefinition,B.valuesArray,A));if(this._queuedEntitySyncs.broadcast.size>0){let Q=[],B=[];for(let Y of this._queuedEntitySyncs.broadcast.valuesArray){let J=!1;for(let C in Y)if(J=C!=="i"&&C!=="p"&&C!=="r",J)break;(J?Q:B).push(Y)}if(B.length>0){let Y=gQ.createPacket(gQ.outboundPackets.entitiesPacketDefinition,B,A);this._outboundSharedUnreliablePackets.push(Y)}if(Q.length>0){let Y=gQ.createPacket(gQ.outboundPackets.entitiesPacketDefinition,Q,A);this._outboundSharedReliablePackets.push(Y);for(let J of this._outboundPerPlayerReliablePackets.valuesArray)J.push(Y)}}this._collectSingletonSyncToOutboundPackets(this._queuedCameraSyncs,gQ.outboundPackets.cameraPacketDefinition),this._collectSyncToOutboundPackets(this._queuedAudioSyncs,gQ.outboundPackets.audiosPacketDefinition),this._collectSyncToOutboundPackets(this._queuedBlockTypeSyncs,gQ.outboundPackets.blockTypesPacketDefinition),this._collectSyncToOutboundPackets(this._queuedChunkSyncs,gQ.outboundPackets.chunksPacketDefinition),this._collectSyncToOutboundPackets(this._queuedBlockSyncs,gQ.outboundPackets.blocksPacketDefinition),this._collectSyncToOutboundPackets(this._queuedParticleEmitterSyncs,gQ.outboundPackets.particleEmittersPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedUISyncs,gQ.outboundPackets.uiPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedUIDatasSyncs,gQ.outboundPackets.uiDatasPacketDefinition),this._collectSyncToOutboundPackets(this._queuedSceneUISyncs,gQ.outboundPackets.sceneUIsPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedWorldSyncs,gQ.outboundPackets.worldPacketDefinition),this._collectSyncToOutboundPackets(this._queuedPlayerSyncs,gQ.outboundPackets.playersPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedChatMessagesSyncs,gQ.outboundPackets.chatMessagesPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedNotificationPermissionRequestSyncs,gQ.outboundPackets.notificationPermissionRequestPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedDebugRenderSyncs,gQ.outboundPackets.physicsDebugRenderPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedDebugRaycastsSyncs,gQ.outboundPackets.physicsDebugRaycastsPacketDefinition),o0.startSpan({operation:"send_all_packets"},()=>{for(let Q of uC.instance.getConnectedPlayersByWorld(this._world)){let B=this._outboundPerPlayerReliablePackets.get(Q)??this._outboundSharedReliablePackets;if(B.length>0)Q.connection.send(B);if(this._outboundSharedUnreliablePackets.length>0)Q.connection.send(this._outboundSharedUnreliablePackets,!1)}}),o0.startSpan({operation:"network_synchronize_cleanup"},()=>{if(this._outboundPerPlayerReliablePackets.size>0)this._outboundPerPlayerReliablePackets.clear();if(this._outboundSharedReliablePackets.length>0)this._outboundSharedReliablePackets.length=0;if(this._outboundSharedUnreliablePackets.length>0)this._outboundSharedUnreliablePackets.length=0;if(this._loadedSceneUIs.size>0)this._loadedSceneUIs.clear();if(this._spawnedChunks.size>0)this._spawnedChunks.clear();if(this._spawnedEntities.size>0)this._spawnedEntities.clear();this._clearSyncQueue(this._queuedAudioSyncs),this._clearSyncQueue(this._queuedBlockSyncs),this._clearSyncQueue(this._queuedBlockTypeSyncs),this._clearSyncQueue(this._queuedChunkSyncs),this._clearSyncQueue(this._queuedEntitySyncs),this._clearSyncQueue(this._queuedParticleEmitterSyncs),this._clearSyncQueue(this._queuedPlayerSyncs),this._clearSyncQueue(this._queuedSceneUISyncs),this._clearSingletonSyncQueue(this._queuedCameraSyncs),this._clearSingletonSyncQueue(this._queuedChatMessagesSyncs),this._clearSingletonSyncQueue(this._queuedDebugRaycastsSyncs),this._clearSingletonSyncQueue(this._queuedDebugRenderSyncs),this._clearSingletonSyncQueue(this._queuedNotificationPermissionRequestSyncs),this._clearSingletonSyncQueue(this._queuedUISyncs),this._clearSingletonSyncQueue(this._queuedUIDatasSyncs),this._clearSingletonSyncQueue(this._queuedWorldSyncs),Z1.clearCachedPacketsSerializedBuffers()})}_subscribeToAudioEvents(){this._world.final("AUDIO.PAUSE",this._onAudioPause),this._world.final("AUDIO.PLAY",this._onAudioPlay),this._world.final("AUDIO.PLAY_RESTART",this._onAudioPlayRestart),this._world.final("AUDIO.SET_ATTACHED_TO_ENTITY",this._onAudioSetAttachedToEntity),this._world.final("AUDIO.SET_CUTOFF_DISTANCE",this._onAudioSetCutoffDistance),this._world.final("AUDIO.SET_DETUNE",this._onAudioSetDetune),this._world.final("AUDIO.SET_DISTORTION",this._onAudioSetDistortion),this._world.final("AUDIO.SET_POSITION",this._onAudioSetPosition),this._world.final("AUDIO.SET_PLAYBACK_RATE",this._onAudioSetPlaybackRate),this._world.final("AUDIO.SET_REFERENCE_DISTANCE",this._onAudioSetReferenceDistance),this._world.final("AUDIO.SET_VOLUME",this._onAudioSetVolume)}_subscribeToBlockTypeRegistryEvents(){this._world.final("BLOCK_TYPE_REGISTRY.REGISTER_BLOCK_TYPE",this._onBlockTypeRegistryRegisterBlockType)}_subscribeToChatEvents(){this._world.final("CHAT.BROADCAST_MESSAGE",this._onChatSendBroadcastMessage),this._world.final("CHAT.PLAYER_MESSAGE",this._onChatSendPlayerMessage)}_subscribeToChunkLatticeEvents(){this._world.final("CHUNK_LATTICE.ADD_CHUNK",this._onChunkLatticeAddChunk),this._world.final("CHUNK_LATTICE.REMOVE_CHUNK",this._onChunkLatticeRemoveChunk),this._world.final("CHUNK_LATTICE.SET_BLOCK",this._onChunkLatticeSetBlock)}_subscribeToEntityEvents(){this._world.final("ENTITY.SPAWN",this._onEntitySpawn),this._world.final("ENTITY.DESPAWN",this._onEntityDespawn),this._world.final("ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE",this._onEntitySetModelAnimationsPlaybackRate),this._world.final("ENTITY.SET_MODEL_HIDDEN_NODES",this._onEntitySetModelHiddenNodes),this._world.final("ENTITY.SET_MODEL_SCALE",this._onEntitySetModelScale),this._world.final("ENTITY.SET_MODEL_SHOWN_NODES",this._onEntitySetModelShownNodes),this._world.final("ENTITY.SET_MODEL_TEXTURE_URI",this._onEntitySetModelTextureUri),this._world.final("ENTITY.SET_OPACITY",this._onEntitySetOpacity),this._world.final("ENTITY.SET_PARENT",this._onEntitySetParent),this._world.final("ENTITY.SET_TINT_COLOR",this._onEntitySetTintColor),this._world.final("ENTITY.START_MODEL_LOOPED_ANIMATIONS",this._onEntityStartModelLoopedAnimations),this._world.final("ENTITY.START_MODEL_ONESHOT_ANIMATIONS",this._onEntityStartModelOneshotAnimations),this._world.final("ENTITY.STOP_MODEL_ANIMATIONS",this._onEntityStopModelAnimations),this._world.final("ENTITY.UPDATE_POSITION",this._onEntityUpdatePosition),this._world.final("ENTITY.UPDATE_ROTATION",this._onEntityUpdateRotation)}_subscribeToParticleEmitterEvents(){this._world.final("PARTICLE_EMITTER.DESPAWN",this._onParticleEmitterDespawn),this._world.final("PARTICLE_EMITTER.BURST",this._onParticleEmitterBurst),this._world.final("PARTICLE_EMITTER.SET_ALPHA_TEST",this._onParticleEmitterSetAlphaTest),this._world.final("PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY",this._onParticleEmitterSetAttachedToEntity),this._world.final("PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY_NODE_NAME",this._onParticleEmitterSetAttachedToEntityNodeName),this._world.final("PARTICLE_EMITTER.SET_COLOR_END",this._onParticleEmitterSetColorEnd),this._world.final("PARTICLE_EMITTER.SET_COLOR_END_VARIANCE",this._onParticleEmitterSetColorEndVariance),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_END",this._onParticleEmitterSetColorIntensityEnd),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_END_VARIANCE",this._onParticleEmitterSetColorIntensityEndVariance),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_START",this._onParticleEmitterSetColorIntensityStart),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_START_VARIANCE",this._onParticleEmitterSetColorIntensityStartVariance),this._world.final("PARTICLE_EMITTER.SET_COLOR_START",this._onParticleEmitterSetColorStart),this._world.final("PARTICLE_EMITTER.SET_COLOR_START_VARIANCE",this._onParticleEmitterSetColorStartVariance),this._world.final("PARTICLE_EMITTER.SET_GRAVITY",this._onParticleEmitterSetGravity),this._world.final("PARTICLE_EMITTER.SET_LIFETIME",this._onParticleEmitterSetLifetime),this._world.final("PARTICLE_EMITTER.SET_LIFETIME_VARIANCE",this._onParticleEmitterSetLifetimeVariance),this._world.final("PARTICLE_EMITTER.SET_MAX_PARTICLES",this._onParticleEmitterSetMaxParticles),this._world.final("PARTICLE_EMITTER.SET_OFFSET",this._onParticleEmitterSetOffset),this._world.final("PARTICLE_EMITTER.SET_OPACITY_END",this._onParticleEmitterSetOpacityEnd),this._world.final("PARTICLE_EMITTER.SET_OPACITY_END_VARIANCE",this._onParticleEmitterSetOpacityEndVariance),this._world.final("PARTICLE_EMITTER.SET_OPACITY_START",this._onParticleEmitterSetOpacityStart),this._world.final("PARTICLE_EMITTER.SET_OPACITY_START_VARIANCE",this._onParticleEmitterSetOpacityStartVariance),this._world.final("PARTICLE_EMITTER.SET_PAUSED",this._onParticleEmitterSetPaused),this._world.final("PARTICLE_EMITTER.SET_POSITION",this._onParticleEmitterSetPosition),this._world.final("PARTICLE_EMITTER.SET_POSITION_VARIANCE",this._onParticleEmitterSetPositionVariance),this._world.final("PARTICLE_EMITTER.SET_RATE",this._onParticleEmitterSetRate),this._world.final("PARTICLE_EMITTER.SET_RATE_VARIANCE",this._onParticleEmitterSetRateVariance),this._world.final("PARTICLE_EMITTER.SET_SIZE_END",this._onParticleEmitterSetSizeEnd),this._world.final("PARTICLE_EMITTER.SET_SIZE_END_VARIANCE",this._onParticleEmitterSetSizeEndVariance),this._world.final("PARTICLE_EMITTER.SET_SIZE_START",this._onParticleEmitterSetSizeStart),this._world.final("PARTICLE_EMITTER.SET_SIZE_START_VARIANCE",this._onParticleEmitterSetSizeStartVariance),this._world.final("PARTICLE_EMITTER.SET_TEXTURE_URI",this._onParticleEmitterSetTextureUri),this._world.final("PARTICLE_EMITTER.SET_TRANSPARENT",this._onParticleEmitterSetTransparent),this._world.final("PARTICLE_EMITTER.SET_VELOCITY",this._onParticleEmitterSetVelocity),this._world.final("PARTICLE_EMITTER.SET_VELOCITY_VARIANCE",this._onParticleEmitterSetVelocityVariance),this._world.final("PARTICLE_EMITTER.SPAWN",this._onParticleEmitterSpawn)}_subscribeToPlayerEvents(){this._world.final("PLAYER.JOINED_WORLD",this._onPlayerJoinedWorld),this._world.final("PLAYER.LEFT_WORLD",this._onPlayerLeftWorld),this._world.final("PLAYER.RECONNECTED_WORLD",this._onPlayerReconnectedWorld),this._world.final("PLAYER.REQUEST_NOTIFICATION_PERMISSION",this._onPlayerRequestNotificationPermission),this._world.final("PLAYER.REQUEST_SYNC",this._onPlayerRequestSync)}_subscribeToPlayerCameraEvents(){this._world.final("PLAYER_CAMERA.LOOK_AT_ENTITY",this._onPlayerCameraLookAtEntity),this._world.final("PLAYER_CAMERA.LOOK_AT_POSITION",this._onPlayerCameraLookAtPosition),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY",this._onPlayerCameraSetAttachedToEntity),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_POSITION",this._onPlayerCameraSetAttachedToPosition),this._world.final("PLAYER_CAMERA.SET_FILM_OFFSET",this._onPlayerCameraSetFilmOffset),this._world.final("PLAYER_CAMERA.SET_FORWARD_OFFSET",this._onPlayerCameraSetForwardOffset),this._world.final("PLAYER_CAMERA.SET_FOV",this._onPlayerCameraSetFov),this._world.final("PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES",this._onPlayerCameraSetModelHiddenNodes),this._world.final("PLAYER_CAMERA.SET_MODEL_SHOWN_NODES",this._onPlayerCameraSetModelShownNodes),this._world.final("PLAYER_CAMERA.SET_MODE",this._onPlayerCameraSetMode),this._world.final("PLAYER_CAMERA.SET_OFFSET",this._onPlayerCameraSetOffset),this._world.final("PLAYER_CAMERA.SET_SHOULDER_ANGLE",this._onPlayerCameraSetShoulderAngle),this._world.final("PLAYER_CAMERA.SET_TRACKED_ENTITY",this._onPlayerCameraSetTrackedEntity),this._world.final("PLAYER_CAMERA.SET_TRACKED_POSITION",this._onPlayerCameraSetTrackedPosition),this._world.final("PLAYER_CAMERA.SET_ZOOM",this._onPlayerCameraSetZoom)}_subscribeToPlayerUIEvents(){this._world.final("PLAYER_UI.APPEND",this._onPlayerUIAppend),this._world.final("PLAYER_UI.FREEZE_POINTER_LOCK",this._onPlayerUIFreezePointerLock),this._world.final("PLAYER_UI.LOAD",this._onPlayerUILoad),this._world.final("PLAYER_UI.LOCK_POINTER",this._onPlayerUILockPointer),this._world.final("PLAYER_UI.SEND_DATA",this._onPlayerUISendData)}_subscribeToSceneUIEvents(){this._world.final("SCENE_UI.LOAD",this._onSceneUILoad),this._world.final("SCENE_UI.SET_ATTACHED_TO_ENTITY",this._onSceneUISetAttachedToEntity),this._world.final("SCENE_UI.SET_OFFSET",this._onSceneUISetOffset),this._world.final("SCENE_UI.SET_POSITION",this._onSceneUISetPosition),this._world.final("SCENE_UI.SET_STATE",this._onSceneUISetState),this._world.final("SCENE_UI.SET_VIEW_DISTANCE",this._onSceneUISetViewDistance),this._world.final("SCENE_UI.UNLOAD",this._onSceneUIUnload)}_subscribeToSimulationEvents(){this._world.final("SIMULATION.DEBUG_RAYCAST",this._onSimulationDebugRaycast),this._world.final("SIMULATION.DEBUG_RENDER",this._onSimulationDebugRender)}_subscribeToWorldEvents(){this._world.final("WORLD.SET_AMBIENT_LIGHT_COLOR",this._onWorldSetAmbientLightColor),this._world.final("WORLD.SET_AMBIENT_LIGHT_INTENSITY",this._onWorldSetAmbientLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",this._onWorldSetDirectionalLightColor),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",this._onWorldSetDirectionalLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",this._onWorldSetDirectionalLightPosition),this._world.final("WORLD.SET_FOG_COLOR",this._onWorldSetFogColor),this._world.final("WORLD.SET_FOG_FAR",this._onWorldSetFogFar),this._world.final("WORLD.SET_FOG_NEAR",this._onWorldSetFogNear),this._world.final("WORLD.SET_SKYBOX_INTENSITY",this._onWorldSetSkyboxIntensity),this._world.final("WORLD.SET_SKYBOX_URI",this._onWorldSetSkyboxUri)}_onAudioPause=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.pa=!0,delete Q.pl,delete Q.r};_onAudioPlay=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Object.assign(Q,A.audio.serialize()),Q.pl=!0,delete Q.pa,delete Q.r};_onAudioPlayRestart=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Object.assign(Q,A.audio.serialize()),Q.r=!0,delete Q.pa,delete Q.pl};_onAudioSetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.e=A.entity?A.entity.id:void 0,Q.p=A.entity?void 0:Q.p};_onAudioSetCutoffDistance=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.cd=A.cutoffDistance};_onAudioSetDetune=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.de=A.detune};_onAudioSetDistortion=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.di=A.distortion};_onAudioSetPosition=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.e=A.position?void 0:Q.e,Q.p=A.position?wQ.serializeVector(A.position):void 0};_onAudioSetPlaybackRate=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.pr=A.playbackRate};_onAudioSetReferenceDistance=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.rd=A.referenceDistance};_onAudioSetVolume=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.v=A.volume};_onBlockTypeRegistryRegisterBlockType=(A)=>{let Q=this._createOrGetQueuedBlockTypeSync(A.blockType);Object.assign(Q,A.blockType.serialize())};_onChatSendBroadcastMessage=(A)=>{this._createOrGetQueuedChatMessagesSync().push({m:A.message,c:A.color,p:A.player?.id})};_onChatSendPlayerMessage=(A)=>{this._createOrGetQueuedChatMessagesSync(A.player).push({m:A.message,c:A.color})};_onChunkLatticeAddChunk=(A)=>{let Q=this._createOrGetQueuedChunkSync(A.chunk);Q.b=Array.from(A.chunk.blocks),Q.rm=void 0,this._spawnedChunks.add(Q.c.join(","))};_onChunkLatticeRemoveChunk=(A)=>{let Q=this._createOrGetQueuedChunkSync(A.chunk),B=Q.c.join(",");if(this._spawnedChunks.has(B))this._queuedChunkSyncs.broadcast.delete(B),this._spawnedChunks.delete(B);else Q.rm=!0};_onChunkLatticeSetBlock=(A)=>{let Q=this._createOrGetQueuedBlockSync(A.globalCoordinate);Q.i=A.blockTypeId};_onEntitySetModelAnimationsPlaybackRate=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.ap=A.playbackRate};_onEntitySpawn=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Object.assign(Q,A.entity.serialize()),this._spawnedEntities.add(Q.i)};_onEntityDespawn=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(this._spawnedEntities.has(Q.i))this._queuedEntitySyncs.broadcast.delete(Q.i),this._spawnedEntities.delete(Q.i);else Q.rm=!0};_onEntitySetModelHiddenNodes=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.h=Array.from(A.modelHiddenNodes)};_onEntitySetModelScale=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.sv=A.modelScale?wQ.serializeVector(A.modelScale):void 0};_onEntitySetModelShownNodes=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.sn=Array.from(A.modelShownNodes)};_onEntitySetModelTextureUri=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.mt=A.modelTextureUri};_onEntitySetOpacity=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.o=A.opacity};_onEntitySetParent=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.pe=A.parent?A.parent.id:void 0,Q.pn=A.parentNodeName};_onEntitySetTintColor=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.t=A.tintColor?wQ.serializeRgbColor(A.tintColor):void 0};_onEntityStartModelLoopedAnimations=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(Q.al=Array.from(new Set([...Q.al??[],...A.animations])),Q.as)Q.as=Q.as.filter((B)=>!A.animations.has(B)).filter(Boolean)};_onEntityStartModelOneshotAnimations=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(Q.ao=Array.from(new Set([...Q.ao??[],...A.animations])),Q.as)Q.as=Q.as.filter((B)=>!A.animations.has(B)).filter(Boolean)};_onEntityStopModelAnimations=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(Q.al)Q.al=Q.al.filter((B)=>!A.animations.has(B)).filter(Boolean);if(Q.ao)Q.ao=Q.ao.filter((B)=>!A.animations.has(B)).filter(Boolean);Q.as=Array.from(new Set([...Q.as??[],...A.animations]))};_onEntityUpdateRotation=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.r=[A.rotation.x,A.rotation.y,A.rotation.z,A.rotation.w]};_onEntityUpdatePosition=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.p=[A.position.x,A.position.y,A.position.z]};_onParticleEmitterBurst=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.b=A.count};_onParticleEmitterDespawn=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.rm=!0};_onParticleEmitterSetAlphaTest=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.at=A.alphaTest};_onParticleEmitterSetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.e=A.entity?A.entity.id:void 0,Q.p=A.entity?void 0:Q.p};_onParticleEmitterSetAttachedToEntityNodeName=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.en=A.attachedToEntityNodeName};_onParticleEmitterSetColorEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ce=A.colorEnd?wQ.serializeRgbColor(A.colorEnd):void 0};_onParticleEmitterSetColorEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cev=A.colorEndVariance?wQ.serializeRgbColor(A.colorEndVariance):void 0};_onParticleEmitterSetColorIntensityEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cie=A.colorIntensityEnd};_onParticleEmitterSetColorIntensityEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ciev=A.colorIntensityEndVariance};_onParticleEmitterSetColorIntensityStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cis=A.colorIntensityStart};_onParticleEmitterSetColorIntensityStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cisv=A.colorIntensityStartVariance};_onParticleEmitterSetColorStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cs=A.colorStart?wQ.serializeRgbColor(A.colorStart):void 0};_onParticleEmitterSetColorStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.csv=A.colorStartVariance?wQ.serializeRgbColor(A.colorStartVariance):void 0};_onParticleEmitterSetGravity=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.g=A.gravity?wQ.serializeVector(A.gravity):void 0};_onParticleEmitterSetLifetime=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.l=A.lifetime};_onParticleEmitterSetLifetimeVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.lv=A.lifetimeVariance};_onParticleEmitterSetMaxParticles=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.mp=A.maxParticles};_onParticleEmitterSetOffset=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.o=A.offset?wQ.serializeVector(A.offset):void 0};_onParticleEmitterSetOpacityEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.oe=A.opacityEnd};_onParticleEmitterSetOpacityEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.oev=A.opacityEndVariance};_onParticleEmitterSetOpacityStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.os=A.opacityStart};_onParticleEmitterSetOpacityStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.osv=A.opacityStartVariance};_onParticleEmitterSetPaused=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.pa=A.paused};_onParticleEmitterSetPosition=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.p=A.position?wQ.serializeVector(A.position):void 0,Q.e=A.position?void 0:Q.e,Q.en=A.position?void 0:Q.en};_onParticleEmitterSetPositionVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.pv=A.positionVariance?wQ.serializeVector(A.positionVariance):void 0};_onParticleEmitterSetRate=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.r=A.rate};_onParticleEmitterSetRateVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.rv=A.rateVariance};_onParticleEmitterSetSizeEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.se=A.sizeEnd};_onParticleEmitterSetSizeEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.sev=A.sizeEndVariance};_onParticleEmitterSetSizeStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ss=A.sizeStart};_onParticleEmitterSetSizeStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ssv=A.sizeStartVariance};_onParticleEmitterSetTextureUri=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.tu=A.textureUri};_onParticleEmitterSetTransparent=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.t=A.transparent};_onParticleEmitterSetVelocity=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.v=A.velocity?wQ.serializeVector(A.velocity):void 0};_onParticleEmitterSetVelocityVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.vv=A.velocityVariance?wQ.serializeVector(A.velocityVariance):void 0};_onParticleEmitterSpawn=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Object.assign(Q,A.particleEmitter.serialize())};_onPlayerCameraLookAtEntity=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.pl=wQ.serializeVector(A.entity.position),delete Q.et,delete Q.pt};_onPlayerCameraLookAtPosition=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.pl=A.position?wQ.serializeVector(A.position):void 0,delete Q.et,delete Q.pt};_onPlayerCameraSetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.e=A.entity.id,delete Q.p};_onPlayerCameraSetAttachedToPosition=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.p=A.position?wQ.serializeVector(A.position):void 0,delete Q.e};_onPlayerCameraSetFilmOffset=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.fo=A.filmOffset};_onPlayerCameraSetForwardOffset=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.ffo=A.forwardOffset};_onPlayerCameraSetFov=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.fv=A.fov};_onPlayerCameraSetModelHiddenNodes=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.h=Array.from(A.modelHiddenNodes)};_onPlayerCameraSetModelShownNodes=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.s=Array.from(A.modelShownNodes)};_onPlayerCameraSetMode=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.m=A.mode};_onPlayerCameraSetOffset=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.o=A.offset?wQ.serializeVector(A.offset):void 0};_onPlayerCameraSetShoulderAngle=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.sa=A.shoulderAngle};_onPlayerCameraSetTrackedEntity=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.et=A.entity?A.entity.id:void 0,delete Q.pl,delete Q.pt};_onPlayerCameraSetTrackedPosition=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.pt=A.position?wQ.serializeVector(A.position):void 0,delete Q.et,delete Q.pl};_onPlayerCameraSetZoom=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.z=A.zoom};_onPlayerJoinedWorld=(A)=>{let{player:Q}=A;for(let C of this._world.audioManager.getAllAudios()){let X=this._createOrGetQueuedAudioSync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.blockTypeRegistry.getAllBlockTypes()){let X=this._createOrGetQueuedBlockTypeSync(C,Q);Object.assign(X,C.serialize())}let B=this._createOrGetQueuedCameraSync(Q);Object.assign(B,Q.camera.serialize());for(let C of this._world.chunkLattice.getAllChunks()){let X=this._createOrGetQueuedChunkSync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.entityManager.getAllEntities()){if(Q.camera.attachedToEntity===void 0&&C instanceof i1&&C.player===Q)Q.camera.setAttachedToEntity(C);let X=this._createOrGetQueuedEntitySync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.particleEmitterManager.getAllParticleEmitters()){let X=this._createOrGetQueuedParticleEmitterSync(C,Q);Object.assign(X,C.serialize())}for(let C of uC.instance.getConnectedPlayers()){let X=this._createOrGetQueuedPlayerSync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.sceneUIManager.getAllSceneUIs()){let X=this._createOrGetQueuedSceneUISync(C,Q);Object.assign(X,C.serialize())}let Y=this._createOrGetQueuedWorldSync(this._world,Q);Object.assign(Y,this._world.serialize());let J=this._createOrGetQueuedPlayerSync(Q);Object.assign(J,Q.serialize())};_onPlayerLeftWorld=(A)=>{let Q=this._createOrGetQueuedPlayerSync(A.player);Q.rm=!0};_onPlayerReconnectedWorld=(A)=>{this._onPlayerJoinedWorld(A)};_onPlayerRequestNotificationPermission=(A)=>{this._createOrGetQueuedNotificationPermissionRequestSync(A.player)};_onPlayerRequestSync=(A)=>{A.player.connection.send([gQ.createPacket(gQ.outboundPackets.syncResponsePacketDefinition,{r:A.receivedAt,s:Date.now(),p:performance.now()-A.receivedAtMs,n:this._world.loop.nextTickMs},this._world.loop.currentTick)])};_onPlayerUIAppend=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.ua??=[],Q.ua.push(A.htmlUri)};_onPlayerUIFreezePointerLock=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.pf=A.freeze};_onPlayerUILoad=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.u=A.htmlUri};_onPlayerUILockPointer=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.p=A.lock};_onPlayerUISendData=(A)=>{this._createOrGetQueuedUIDatasSync(A.playerUI.player).push(A.data)};_onSceneUILoad=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Object.assign(Q,A.sceneUI.serialize()),this._loadedSceneUIs.add(Q.i)};_onSceneUISetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.e=A.entity?A.entity.id:void 0,Q.p=A.entity?void 0:Q.p};_onSceneUISetOffset=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.o=A.offset?wQ.serializeVector(A.offset):void 0};_onSceneUISetPosition=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.p=A.position?wQ.serializeVector(A.position):void 0,Q.e=A.position?void 0:Q.e};_onSceneUISetState=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.s=A.state};_onSceneUISetViewDistance=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.v=A.viewDistance};_onSceneUIUnload=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);if(this._loadedSceneUIs.has(Q.i))this._queuedSceneUISyncs.broadcast.delete(Q.i),this._loadedSceneUIs.delete(Q.i);else Q.rm=!0};_onSimulationDebugRaycast=(A)=>{this._createOrGetDebugRaycastsSync().push(wQ.serializePhysicsDebugRaycast(A))};_onSimulationDebugRender=(A)=>{let Q=this._createOrGetDebugRenderSync();Q.v=Array.from(A.vertices),Q.c=Array.from(A.colors)};_onWorldSetAmbientLightColor=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.ac=wQ.serializeRgbColor(A.color)};_onWorldSetAmbientLightIntensity=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.ai=A.intensity};_onWorldSetDirectionalLightColor=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.dc=wQ.serializeRgbColor(A.color)};_onWorldSetDirectionalLightIntensity=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.di=A.intensity};_onWorldSetDirectionalLightPosition=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.dp=wQ.serializeVector(A.position)};_onWorldSetFogColor=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.fc=wQ.serializeRgbColor(A.color)};_onWorldSetFogFar=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.ff=A.far};_onWorldSetFogNear=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.fn=A.near};_onWorldSetSkyboxIntensity=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.si=A.intensity};_onWorldSetSkyboxUri=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.s=A.uri};_createAudioSync=(A)=>({i:A.id});_createOrGetQueuedAudioSync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedAudioSync(): Audio has no id!");return this._createOrGetQueuedSync(this._queuedAudioSyncs,A.id,this._createAudioSync,A,Q)}_createBlockSync=(A)=>({i:0,c:[A.x,A.y,A.z]});_createOrGetQueuedBlockSync(A,Q){let B=`${A.x},${A.y},${A.z}`;return this._createOrGetQueuedSync(this._queuedBlockSyncs,B,this._createBlockSync,A,Q)}_createBlockTypeSync=(A)=>({i:A.id});_createOrGetQueuedBlockTypeSync(A,Q){return this._createOrGetQueuedSync(this._queuedBlockTypeSyncs,A.id,this._createBlockTypeSync,A,Q)}_createCameraSync=()=>({});_createOrGetQueuedCameraSync(A){return this._createOrGetQueuedSingletonSync(this._queuedCameraSyncs,this._createCameraSync,void 0,A)}_createChatMessagesSync=()=>[];_createOrGetQueuedChatMessagesSync(A){return this._createOrGetQueuedSingletonSync(this._queuedChatMessagesSyncs,this._createChatMessagesSync,void 0,A)}_createChunkSync=(A)=>({c:[A.originCoordinate.x,A.originCoordinate.y,A.originCoordinate.z]});_createOrGetQueuedChunkSync(A,Q){if(!A.originCoordinate)r.fatalError("NetworkSynchronizer._createOrGetQueuedChunkSync(): Chunk has no origin coordinate!");let B=`${A.originCoordinate.x},${A.originCoordinate.y},${A.originCoordinate.z}`;return this._createOrGetQueuedSync(this._queuedChunkSyncs,B,this._createChunkSync,A,Q)}_createDebugRaycastsSync=()=>[];_createOrGetDebugRaycastsSync(A){return this._createOrGetQueuedSingletonSync(this._queuedDebugRaycastsSyncs,this._createDebugRaycastsSync,void 0,A)}_createDebugRenderSync=()=>({v:[],c:[]});_createOrGetDebugRenderSync(A){return this._createOrGetQueuedSingletonSync(this._queuedDebugRenderSyncs,this._createDebugRenderSync,void 0,A)}_createEntitySync=(A)=>({i:A.id});_createOrGetQueuedEntitySync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedEntitySync(): Entity has no id!");return this._createOrGetQueuedSync(this._queuedEntitySyncs,A.id,this._createEntitySync,A,Q)}_createNotificationPermissionRequestSync=()=>null;_createOrGetQueuedNotificationPermissionRequestSync(A){return this._createOrGetQueuedSingletonSync(this._queuedNotificationPermissionRequestSyncs,this._createNotificationPermissionRequestSync,void 0,A)}_createParticleEmitterSync=(A)=>({i:A.id});_createOrGetQueuedParticleEmitterSync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedParticleEmitterSync(): ParticleEmitter has no id!");return this._createOrGetQueuedSync(this._queuedParticleEmitterSyncs,A.id,this._createParticleEmitterSync,A,Q)}_createPlayerSync=(A)=>({i:A.id});_createOrGetQueuedPlayerSync(A,Q){return this._createOrGetQueuedSync(this._queuedPlayerSyncs,A.id,this._createPlayerSync,A,Q)}_createSceneUISync=(A)=>({i:A.id});_createOrGetQueuedSceneUISync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedSceneUISync(): SceneUI has no id!");return this._createOrGetQueuedSync(this._queuedSceneUISyncs,A.id,this._createSceneUISync,A,Q)}_createUISync=()=>({});_createOrGetQueuedUISync(A){return this._createOrGetQueuedSingletonSync(this._queuedUISyncs,this._createUISync,void 0,A)}_createUIDatasSync=()=>[];_createOrGetQueuedUIDatasSync(A){return this._createOrGetQueuedSingletonSync(this._queuedUIDatasSyncs,this._createUIDatasSync,void 0,A)}_createWorldSync=(A)=>({i:A.id});_createOrGetQueuedWorldSync(A,Q){if(A.id!==this._world.id)r.fatalError("NetworkSynchronizer._createOrGetQueuedWorldSync(): World does not match this network synchronizer world!");return this._createOrGetQueuedSingletonSync(this._queuedWorldSyncs,this._createWorldSync,A,Q)}_createOrGetQueuedSync(A,Q,B,Y,J){let C,X;if(J){if(X=A.perPlayer.get(J),!X)X=new bB,A.perPlayer.set(J,X);if(!this._outboundPerPlayerReliablePackets.has(J))this._outboundPerPlayerReliablePackets.set(J,[])}else X=A.broadcast;if(C=X.get(Q),C===void 0)C=B(Y),X.set(Q,C);return C}_createOrGetQueuedSingletonSync(A,Q,B,Y){let J=Y?A.perPlayer.get(Y):A.broadcast;if(J===void 0)if(J=Q(B),Y){if(A.perPlayer.set(Y,J),!this._outboundPerPlayerReliablePackets.has(Y))this._outboundPerPlayerReliablePackets.set(Y,[])}else A.broadcast=J;return J}_clearSyncQueue(A){if(A.broadcast.size>0)A.broadcast.clear();if(A.perPlayer.size>0)A.perPlayer.clear()}_clearSingletonSyncQueue(A){if(A.broadcast!==void 0)A.broadcast=void 0;if(A.perPlayer.size>0)A.perPlayer.clear()}_collectSingletonSyncToOutboundPackets(A,Q){if(A.perPlayer.size>0)for(let[B,Y]of A.perPlayer.entries())this._outboundPerPlayerReliablePackets.get(B)?.push(gQ.createPacket(Q,Y,this._world.loop.currentTick));if(A.broadcast!==void 0){let B=gQ.createPacket(Q,A.broadcast,this._world.loop.currentTick);this._outboundSharedReliablePackets.push(B);for(let Y of this._outboundPerPlayerReliablePackets.valuesArray)Y.push(B)}}_collectSyncToOutboundPackets(A,Q){if(A.perPlayer.size>0)for(let[B,Y]of A.perPlayer.entries())this._outboundPerPlayerReliablePackets.get(B)?.push(gQ.createPacket(Q,Y.valuesArray,this._world.loop.currentTick));if(A.broadcast.size>0){let B=gQ.createPacket(Q,A.broadcast.valuesArray,this._world.loop.currentTick);this._outboundSharedReliablePackets.push(B);for(let Y of this._outboundPerPlayerReliablePackets.valuesArray)Y.push(B)}}}class mL{_particleEmitters=new Map;_nextParticleEmitterId=1;_world;constructor(A){this._world=A}get world(){return this._world}despawnEntityAttachedParticleEmitters(A){this.getAllEntityAttachedParticleEmitters(A).forEach((Q)=>{Q.despawn()})}getAllParticleEmitters(){return Array.from(this._particleEmitters.values())}getAllEntityAttachedParticleEmitters(A){return this.getAllParticleEmitters().filter((Q)=>Q.attachedToEntity===A)}registerParticleEmitter(A){if(A.id!==void 0)return A.id;let Q=this._nextParticleEmitterId;return this._particleEmitters.set(Q,A),this._nextParticleEmitterId++,Q}unregisterParticleEmitter(A){if(A.id===void 0)return;this._particleEmitters.delete(A.id)}}class uL{_sceneUIs=new Map;_nextSceneUIId=1;_world;constructor(A){this._world=A}get world(){return this._world}getAllSceneUIs(){return Array.from(this._sceneUIs.values())}getAllEntityAttachedSceneUIs(A){return this.getAllSceneUIs().filter((Q)=>Q.attachedToEntity===A)}getSceneUIById(A){return this._sceneUIs.get(A)}registerSceneUI(A){if(A.id!==void 0)return A.id;let Q=this._nextSceneUIId;return this._sceneUIs.set(Q,A),this._nextSceneUIId++,Q}unloadEntityAttachedSceneUIs(A){this.getAllEntityAttachedSceneUIs(A).forEach((Q)=>{Q.unload()})}unregisterSceneUI(A){if(A.id===void 0)return;this._sceneUIs.delete(A.id)}}var Tf0=2,Sf0=3;class dL{_accumulatorMs=0;_targetTicksPerSecond;_fixedTimestepMs;_fixedTimestepS;_maxAccumulatorMs;_nextTickMs=0;_lastLoopTimeMs=0;_tickFunction;_tickErrorCallback;_tickHandle=null;constructor(A,Q,B){this._targetTicksPerSecond=A,this._fixedTimestepS=Math.fround(1/A),this._fixedTimestepMs=Math.fround(this._fixedTimestepS*1000),this._maxAccumulatorMs=this._fixedTimestepMs*Sf0,this._tickFunction=Q,this._tickErrorCallback=B}get targetTicksPerSecond(){return this._targetTicksPerSecond}get fixedTimestepMs(){return this._fixedTimestepMs}get fixedTimestepS(){return this._fixedTimestepS}get isStarted(){return!!this._tickHandle}get nextTickMs(){return this._nextTickMs}start(){if(this._tickHandle)return;this._lastLoopTimeMs=performance.now();let A=()=>{let Q=performance.now(),B=Q-this._lastLoopTimeMs;if(this._lastLoopTimeMs=Q,this._accumulatorMs+=B,this._accumulatorMs>this._maxAccumulatorMs)this._accumulatorMs=this._maxAccumulatorMs;if(this._accumulatorMs>=this._fixedTimestepMs)o0.startSpan({operation:"ticker_tick"},()=>{let Y=0;while(this._accumulatorMs>=this._fixedTimestepMs&&Y<Tf0)this._tick(this._fixedTimestepMs),this._accumulatorMs-=this._fixedTimestepMs,Y++});this._nextTickMs=Math.max(0,this._fixedTimestepMs-this._accumulatorMs),this._tickHandle=setTimeout(A,this._nextTickMs)};A()}stop(){if(!this._tickHandle)return;clearTimeout(this._tickHandle),this._tickHandle=null}_tick(A){try{this._tickFunction(A)}catch(Q){if(Q instanceof Error&&this._tickErrorCallback)this._tickErrorCallback(Q);else r.warning(`Ticker._tick(): tick callback threw an error, but it was not an instance of Error. Error: ${Q}`)}}}var iPQ;((C)=>{C.START="WORLD_LOOP.START";C.STOP="WORLD_LOOP.STOP";C.TICK_START="WORLD_LOOP.TICK_START";C.TICK_END="WORLD_LOOP.TICK_END";C.TICK_ERROR="WORLD_LOOP.TICK_ERROR"})(iPQ||={});class lL extends GQ{_currentTick=0;_ticker;_world;constructor(A,Q=fL){super();this._ticker=new dL(Q,this._tick,this._onTickError),this._world=A}get currentTick(){return this._currentTick}get isStarted(){return this._ticker.isStarted}get nextTickMs(){return this._ticker.nextTickMs}get timestepS(){return this._ticker.fixedTimestepS}get world(){return this._world}start(){this._ticker.start(),this.emitWithWorld(this._world,"WORLD_LOOP.START",{worldLoop:this})}stop(){this._ticker.stop(),this.emitWithWorld(this._world,"WORLD_LOOP.STOP",{worldLoop:this})}_tick=(A)=>{this.emitWithWorld(this._world,"WORLD_LOOP.TICK_START",{worldLoop:this,tickDeltaMs:A});let Q=performance.now();o0.startSpan({operation:"world_tick",attributes:{serverPlayerCount:uC.instance.playerCount,targetTickRate:this._ticker.targetTicksPerSecond,targetTickRateMs:this._ticker.fixedTimestepMs,worldId:this._world.id,worldName:this._world.name,worldChunkCount:this._world.chunkLattice.chunkCount,worldEntityCount:this._world.entityManager.entityCount,worldLoopTick:this._currentTick}},()=>{if(o0.startSpan({operation:"entities_tick"},()=>this._world.entityManager.tickEntities(A)),o0.startSpan({operation:"simulation_step"},()=>this._world.simulation.step(A)),o0.startSpan({operation:"entities_emit_updates"},()=>this._world.entityManager.checkAndEmitUpdates()),this._world.networkSynchronizer.shouldSynchronize())o0.startSpan({operation:"network_synchronize"},()=>this._world.networkSynchronizer.synchronize())}),this._currentTick++,this.emitWithWorld(this._world,"WORLD_LOOP.TICK_END",{worldLoop:this,tickDurationMs:performance.now()-Q})};_onTickError=(A)=>{r.error(`WorldLoop._onTickError(): Error: ${A}`),this.emitWithWorld(this._world,"WORLD_LOOP.TICK_ERROR",{worldLoop:this,error:A})}}var Go;((Z)=>{Z.SET_AMBIENT_LIGHT_COLOR="WORLD.SET_AMBIENT_LIGHT_COLOR";Z.SET_AMBIENT_LIGHT_INTENSITY="WORLD.SET_AMBIENT_LIGHT_INTENSITY";Z.SET_DIRECTIONAL_LIGHT_COLOR="WORLD.SET_DIRECTIONAL_LIGHT_COLOR";Z.SET_DIRECTIONAL_LIGHT_INTENSITY="WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY";Z.SET_DIRECTIONAL_LIGHT_POSITION="WORLD.SET_DIRECTIONAL_LIGHT_POSITION";Z.SET_FOG_COLOR="WORLD.SET_FOG_COLOR";Z.SET_FOG_FAR="WORLD.SET_FOG_FAR";Z.SET_FOG_NEAR="WORLD.SET_FOG_NEAR";Z.SET_SKYBOX_INTENSITY="WORLD.SET_SKYBOX_INTENSITY";Z.SET_SKYBOX_URI="WORLD.SET_SKYBOX_URI";Z.START="WORLD.START";Z.STOP="WORLD.STOP"})(Go||={});class cL extends GQ{_id;_ambientLightColor;_ambientLightIntensity;_audioManager;_blockTypeRegistry;_chatManager;_chunkLattice;_directionalLightColor;_directionalLightIntensity;_directionalLightPosition;_entityManager;_fogColor;_fogFar;_fogNear;_loop;_name;_networkSynchronizer;_particleEmitterManager;_sceneUIManager;_simulation;_skyboxIntensity;_skyboxUri;_tag;constructor(A){super();if(this._id=A.id,this._ambientLightColor=A.ambientLightColor??{r:255,g:255,b:255},this._ambientLightIntensity=A.ambientLightIntensity??1,this._directionalLightColor=A.directionalLightColor??{r:255,g:255,b:255},this._directionalLightIntensity=A.directionalLightIntensity??3,this._directionalLightPosition=A.directionalLightPosition??{x:100,y:150,z:100},this._fogColor=A.fogColor,this._fogFar=A.fogFar??550,this._fogNear=A.fogNear??500,this._name=A.name,this._skyboxIntensity=A.skyboxIntensity??1,this._skyboxUri=A.skyboxUri,this._tag=A.tag,this._audioManager=new qV(this),this._blockTypeRegistry=new uH(this),this._chatManager=new jD(this),this._chunkLattice=new OD(this),this._entityManager=new kD(this),this._loop=new lL(this,A.tickRate),this._networkSynchronizer=new Xk(this),this._particleEmitterManager=new mL(this),this._sceneUIManager=new uL(this),this._simulation=new bL(this,A.tickRate,A.gravity),A.map)this.loadMap(A.map)}get id(){return this._id}get ambientLightColor(){return this._ambientLightColor}get ambientLightIntensity(){return this._ambientLightIntensity}get blockTypeRegistry(){return this._blockTypeRegistry}get chatManager(){return this._chatManager}get chunkLattice(){return this._chunkLattice}get directionalLightColor(){return this._directionalLightColor}get directionalLightIntensity(){return this._directionalLightIntensity}get directionalLightPosition(){return this._directionalLightPosition}get entityManager(){return this._entityManager}get fogColor(){return this._fogColor}get fogFar(){return this._fogFar}get fogNear(){return this._fogNear}get loop(){return this._loop}get name(){return this._name}get networkSynchronizer(){return this._networkSynchronizer}get particleEmitterManager(){return this._particleEmitterManager}get sceneUIManager(){return this._sceneUIManager}get simulation(){return this._simulation}get skyboxIntensity(){return this._skyboxIntensity}get skyboxUri(){return this._skyboxUri}get audioManager(){return this._audioManager}get tag(){return this._tag}loadMap(A){if(this.chunkLattice.clear(),A.blockTypes)for(let Q of A.blockTypes)this.blockTypeRegistry.registerGenericBlockType({id:Q.id,isLiquid:Q.isLiquid,lightLevel:Q.lightLevel,name:Q.name,textureUri:Q.textureUri});if(A.blocks){let Q={};for(let B in A.blocks){let Y=A.blocks[B],J=B.indexOf(","),C=B.indexOf(",",J+1),X=Number(B.slice(0,J)),G=Number(B.slice(J+1,C)),F=Number(B.slice(C+1));if(!Q[Y])Q[Y]=[];Q[Y].push({x:X,y:G,z:F})}this.chunkLattice.initializeBlocks(Q)}if(A.entities)for(let Q in A.entities){let B=A.entities[Q],Y=Q.indexOf(","),J=Q.indexOf(",",Y+1),C=Number(Q.slice(0,Y)),X=Number(Q.slice(Y+1,J)),G=Number(Q.slice(J+1));new m0({isEnvironmental:!0,...B}).spawn(this,{x:C,y:X,z:G})}}setAmbientLightColor(A){this._ambientLightColor=A,this.emit("WORLD.SET_AMBIENT_LIGHT_COLOR",{world:this,color:A})}setAmbientLightIntensity(A){this._ambientLightIntensity=A,this.emit("WORLD.SET_AMBIENT_LIGHT_INTENSITY",{world:this,intensity:A})}setDirectionalLightColor(A){this._directionalLightColor=A,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",{world:this,color:A})}setDirectionalLightIntensity(A){this._directionalLightIntensity=A,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",{world:this,intensity:A})}setDirectionalLightPosition(A){this._directionalLightPosition=A,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",{world:this,position:A})}setFogColor(A){this._fogColor=A,this.emit("WORLD.SET_FOG_COLOR",{world:this,color:A})}setFogFar(A){this._fogFar=A,this.emit("WORLD.SET_FOG_FAR",{world:this,far:A})}setFogNear(A){this._fogNear=A,this.emit("WORLD.SET_FOG_NEAR",{world:this,near:A})}setSkyboxIntensity(A){this._skyboxIntensity=A,this.emit("WORLD.SET_SKYBOX_INTENSITY",{world:this,intensity:A})}setSkyboxUri(A){this._skyboxUri=A,this.emit("WORLD.SET_SKYBOX_URI",{world:this,uri:A})}start(){if(this._loop.isStarted)return;this._loop.start(),this.emit("WORLD.START",{world:this,startedAtMs:Date.now()})}stop(){if(!this._loop.isStarted)return;this._loop.stop(),this.emit("WORLD.STOP",{world:this,stoppedAtMs:Date.now()})}serialize(){return wQ.serializeWorld(this)}}var nPQ;((Q)=>Q.WORLD_CREATED="WORLD_MANAGER.WORLD_CREATED")(nPQ||={});class XW{static instance=new XW;_defaultWorld;_nextWorldId=1;_worlds=new Map;createWorld(A){let Q=new cL({...A,id:this._nextWorldId++});return Q.start(),this._worlds.set(Q.id,Q),GQ.globalInstance.emit("WORLD_MANAGER.WORLD_CREATED",{world:Q}),Q}getAllWorlds(){return Array.from(this._worlds.values())}getDefaultWorld(){return this._defaultWorld??=this.createWorld({name:"Default World",skyboxUri:"skyboxes/partly-cloudy"}),this._defaultWorld}getWorldsByTag(A){let Q=[];return this._worlds.forEach((B)=>{if(B.tag===A)Q.push(B)}),Q}getWorld(A){return this._worlds.get(A)}setDefaultWorld(A){this._defaultWorld=A}}var sPQ;((Y)=>{Y.PLAYER_CONNECTED="PLAYER_MANAGER.PLAYER_CONNECTED";Y.PLAYER_DISCONNECTED="PLAYER_MANAGER.PLAYER_DISCONNECTED";Y.PLAYER_RECONNECTED="PLAYER_MANAGER.PLAYER_RECONNECTED"})(sPQ||={});class uC{static instance=new uC;worldSelectionHandler;_connectionPlayers=new Map;constructor(){GQ.globalInstance.on("CONNECTION.OPENED",({connection:A,session:Q})=>{this._onConnectionOpened(A,Q)}),GQ.globalInstance.on("CONNECTION.DISCONNECTED",({connection:A})=>{this._onConnectionDisconnected(A)}),GQ.globalInstance.on("CONNECTION.RECONNECTED",({connection:A})=>{this._onConnectionReconnected(A)}),GQ.globalInstance.on("CONNECTION.CLOSED",({connection:A})=>{this._onConnectionClosed(A)})}get playerCount(){return this._connectionPlayers.size}getConnectedPlayers(){return Array.from(this._connectionPlayers.values())}getConnectedPlayersByWorld(A){return this.getConnectedPlayers().filter((Q)=>Q.world===A)}getConnectedPlayerByUsername(A){return Array.from(this._connectionPlayers.values()).find((Q)=>{return Q.username.toLowerCase()===A.toLowerCase()})}async _onConnectionOpened(A,Q){let B=new ZU(A,Q);await B.loadInitialPersistedData(),GQ.globalInstance.emit("PLAYER_MANAGER.PLAYER_CONNECTED",{player:B,connectionParams:A.initialConnectionParams});let Y=await this.worldSelectionHandler?.(B);B.joinWorld(Y??XW.instance.getDefaultWorld()),this._connectionPlayers.set(A,B)}_onConnectionDisconnected(A){let Q=this._connectionPlayers.get(A);if(Q)Q.resetInputs(),Q.camera.reset()}_onConnectionReconnected(A){let Q=this._connectionPlayers.get(A);if(Q)Q.reconnected(),GQ.globalInstance.emit("PLAYER_MANAGER.PLAYER_RECONNECTED",{player:Q});else r.warning(`PlayerManager._onConnectionReconnected(): Connection ${A.id} not in the PlayerManager._connectionPlayers map.`)}_onConnectionClosed(A){let Q=this._connectionPlayers.get(A);if(Q){if(Q.disconnect(),this._connectionPlayers.delete(A),!A.isDuplicate)f7.instance.unloadPlayerData(Q).catch((B)=>{r.warning(`PlayerManager._onConnectionClosed(): Failed to unload player data for player ${Q.id}. Error: ${B}`)});GQ.globalInstance.emit("PLAYER_MANAGER.PLAYER_DISCONNECTED",{player:Q})}else r.warning(`PlayerManager._onConnectionClosed(): Connection ${A.id} not in the PlayerManager._connectionPlayers map.`)}}import{randomBytes as _f0}from"crypto";import{Http3Server as vf0}from"@fails-components/webtransport";class pL extends GQ{static instance=new pL;_connectionIdConnections=new Map;_userIdConnections=new Map;_wss;_wts;constructor(){super();this._wss=new Qm.default({noServer:!0}),this._wss.on("connection",(A,Q)=>this._onConnection(A,void 0,Q.connectionId,Q.connectionParams,Q.session)),this._wts=new vf0({port:Ck,host:"0.0.0.0",secret:_f0(32).toString("hex"),cert:Yk,privKey:Jk,defaultDatagramsReadableMode:"bytes",initialStreamFlowControlWindow:1048576,streamShouldAutoTuneReceiveWindow:!0,streamFlowControlWindowSizeLimit:6291456,initialSessionFlowControlWindow:2097152,sessionShouldAutoTuneReceiveWindow:!0,sessionFlowControlWindowSizeLimit:15728640}),this._wts.setRequestCallback(this._onWebTransportRequest),this._startWebTransport().catch((A)=>{r.error(`Socket: WebTransport server failed to start or crashed while listening for sessions. Error: ${A}`)}),GQ.globalInstance.on("WEBSERVER.UPGRADE",async({req:A,socket:Q,head:B})=>{Q.on("error",()=>{}),await this._authorizeAndConnectWebsocket(A,Q,B)})}async _authorizeAndConnectWebsocket(A,Q,B){let Y=await this._authorizeConnection(A.url??"");if(Y.error){Q.end();return}A.connectionId=Y.connectionId,A.connectionParams=Y.connectionParams,A.session=Y.session,Q.setNoDelay(!0),this._wss.handleUpgrade(A,Q,B,(J)=>{if(J.readyState!==WU.default.OPEN)J.once("open",()=>this._wss.emit("connection",J,A));else this._wss.emit("connection",J,A)})}async _authorizeConnection(A){let Q=A.includes("?")?A.slice(A.indexOf("?")):"",B=new URLSearchParams(Q),Y=B.get("connectionId")??void 0,J=B.get("sessionToken")??"";if(Y&&this._isValidConnectionId(Y))return{connectionId:Y,connectionParams:B};else{let C=await D8.instance.getPlayerSession(J);if(C?.error)return{error:C.error};else if(C)return{connectionParams:B,session:C}}return{connectionParams:B}}_isValidConnectionId(A){return this._connectionIdConnections.has(A)}_onConnection=(A,Q,B,Y,J)=>{let C=J?.user.id,X=B&&this._connectionIdConnections.get(B),G=C&&this._userIdConnections.get(C);if(!X&&G)G.killDuplicateConnection();if(X){if(A)X.bindWs(A);if(Q)X.bindWt(Q).catch((F)=>{r.error(`Socket._onConnection(): WebTransport binding failed. Error: ${F}`)})}else{let F=new Z1(A,Q,Y,J);if(F.on("CONNECTION.CLOSED",()=>{if(this._connectionIdConnections.delete(F.id),C&&this._userIdConnections.get(C)===F)this._userIdConnections.delete(C)}),this._connectionIdConnections.set(F.id,F),C)this._userIdConnections.set(C,F)}};_onWebTransportRequest=async({header:A})=>{let{connectionId:Q,connectionParams:B,session:Y,error:J}=await this._authorizeConnection(A[":path"]??"");return{status:J?401:200,path:"/",userData:{connectionId:Q,connectionParams:B,session:Y}}};async _startWebTransport(){this._wts.startServer();for await(let A of this._wts.sessionStream("/"))try{let{connectionId:Q,connectionParams:B,session:Y}=A.userData;this._onConnection(void 0,A,Q,B,Y)}catch(Q){r.error(`Socket._startWebTransport(): WebTransport connection failed. Error: ${Q}`)}}}Buffer.poolSize=134217728;var aPQ;((B)=>{B.START="GAMESERVER.START";B.STOP="GAMESERVER.STOP"})(aPQ||={});function yf0(A){WB.init().then(()=>{return GW.instance.blockTextureRegistry.preloadAtlas()}).then(()=>{return GW.instance.modelRegistry.preloadModels()}).then(()=>{let Q;if(A.length>0)Q=A(GW.instance.worldManager.getDefaultWorld());else Q=A();return Promise.resolve(Q)}).then(()=>{GW.instance.start()}).catch((Q)=>{r.fatalError(`Failed to initialize the game engine, exiting. Error: ${Q}`)})}class GW{static _instance;_blockTextureRegistry=Z7.instance;_modelRegistry=BJ.instance;_playerManager=uC.instance;_socket=pL.instance;_worldManager=XW.instance;_webServer=UV.instance;constructor(){}static get instance(){if(!this._instance)this._instance=new GW;return this._instance}get blockTextureRegistry(){return this._blockTextureRegistry}get modelRegistry(){return this._modelRegistry}get playerManager(){return this._playerManager}get socket(){return this._socket}get webServer(){return this._webServer}get worldManager(){return this._worldManager}start(){if(GQ.globalInstance.emit("GAMESERVER.START",{startedAtMs:performance.now()}),this._webServer.start(),process.env.NODE_ENV!=="production")console.log("---"),console.log("\uD83D\uDFE2 Server Running: You can test & play it at: https://hytopia.com/play");r.enableCrashProtection()}}var iY=LA(Q$(),1);class B$ extends Float32Array{constructor(A,Q,B,Y){super([A,Q,B,Y])}get determinant(){return iY.mat2.determinant(this)}get frobeniusNorm(){return iY.mat2.frob(this)}static create(){let A=new B$(0,0,0,0);return iY.mat2.identity(A),A}static fromRotation(A){let Q=B$.create();return iY.mat2.fromRotation(Q,A),Q}static fromScaling(A){let Q=B$.create();return iY.mat2.fromScaling(Q,A),Q}add(A){return iY.mat2.add(this,this,A),this}adjoint(){return iY.mat2.adjoint(this,this),this}clone(){return new B$(this[0],this[1],this[2],this[3])}copy(A){return iY.mat2.copy(this,A),this}equals(A){return iY.mat2.equals(this,A)}exactEquals(A){return iY.mat2.exactEquals(this,A)}identity(){return iY.mat2.identity(this),this}invert(){return iY.mat2.invert(this,this),this}multiply(A){return iY.mat2.mul(this,this,A),this}multiplyScalar(A){return iY.mat2.multiplyScalar(this,this,A),this}rotate(A){return iY.mat2.rotate(this,this,A),this}subtract(A){return iY.mat2.sub(this,this,A),this}toString(){return`[${this[0]},${this[1]}][${this[2]},${this[3]}]`}transpose(){return iY.mat2.transpose(this,this),this}}var t0=LA(Q$(),1);class SX extends Float32Array{constructor(A,Q,B,Y,J,C,X,G,F){super([A,Q,B,Y,J,C,X,G,F])}get determinant(){return t0.mat3.determinant(this)}get frobeniusNorm(){return t0.mat3.frob(this)}static create(){let A=new SX(0,0,0,0,0,0,0,0,0);return t0.mat3.identity(A),A}static fromMatrix4(A){let Q=SX.create();return t0.mat3.fromMat4(Q,A),Q}static fromQuaternion(A){let Q=SX.create();return t0.mat3.fromQuat(Q,A),Q}static fromRotation(A){let Q=SX.create();return t0.mat3.fromRotation(Q,A),Q}static fromScaling(A){let Q=SX.create();return t0.mat3.fromScaling(Q,A),Q}static fromTranslation(A){let Q=SX.create();return t0.mat3.fromTranslation(Q,A),Q}add(A){return t0.mat3.add(this,this,A),this}adjoint(){return t0.mat3.adjoint(this,this),this}clone(){return new SX(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8])}copy(A){return t0.mat3.copy(this,A),this}equals(A){return t0.mat3.equals(this,A)}exactEquals(A){return t0.mat3.exactEquals(this,A)}identity(){return t0.mat3.identity(this),this}invert(){return t0.mat3.invert(this,this),this}multiply(A){return t0.mat3.mul(this,this,A),this}multiplyScalar(A){return t0.mat3.multiplyScalar(this,this,A),this}transformVector(A){return A.transformMatrix3(this)}projection(A,Q){return t0.mat3.projection(this,A,Q),this}rotate(A){return t0.mat3.rotate(this,this,A),this}subtract(A){return t0.mat3.sub(this,this,A),this}toString(){return`[${this[0]},${this[1]},${this[2]}][${this[3]},${this[4]},${this[5]}][${this[6]},${this[7]},${this[8]}]`}transpose(){return t0.mat3.transpose(this,this),this}}var UB=LA(Q$(),1);class N9 extends Float32Array{constructor(A,Q,B,Y,J,C,X,G,F,W,E,$,Z,U,K,I){super([A,Q,B,Y,J,C,X,G,F,W,E,$,Z,U,K,I])}get determinant(){return UB.mat4.determinant(this)}get frobeniusNorm(){return UB.mat4.frob(this)}static create(){let A=new N9(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return UB.mat4.identity(A),A}static fromQuaternion(A){let Q=N9.create();return UB.mat4.fromQuat(Q,A),Q}static fromRotation(A,Q){let B=N9.create();return UB.mat4.fromRotation(B,A,Q),B}static fromRotationTranslation(A,Q){let B=N9.create();return UB.mat4.fromRotationTranslation(B,A,Q),B}static fromRotationTranslationScale(A,Q,B){let Y=N9.create();return UB.mat4.fromRotationTranslationScale(Y,A,Q,B),Y}static fromRotationTranslationScaleOrigin(A,Q,B,Y){let J=N9.create();return UB.mat4.fromRotationTranslationScaleOrigin(J,A,Q,B,Y),J}static fromScaling(A){let Q=N9.create();return UB.mat4.fromScaling(Q,A),Q}static fromTranslation(A){let Q=N9.create();return UB.mat4.fromTranslation(Q,A),Q}static fromXRotation(A){let Q=N9.create();return UB.mat4.fromXRotation(Q,A),Q}static fromYRotation(A){let Q=N9.create();return UB.mat4.fromYRotation(Q,A),Q}static fromZRotation(A){let Q=N9.create();return UB.mat4.fromZRotation(Q,A),Q}add(A){return UB.mat4.add(this,this,A),this}adjoint(){return UB.mat4.adjoint(this,this),this}clone(){return new N9(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8],this[9],this[10],this[11],this[12],this[13],this[14],this[15])}copy(A){return UB.mat4.copy(this,A),this}equals(A){return UB.mat4.equals(this,A)}exactEquals(A){return UB.mat4.exactEquals(this,A)}frustrum(A,Q,B,Y,J,C){return UB.mat4.frustum(this,A,Q,B,Y,J,C),this}identity(){return UB.mat4.identity(this),this}invert(){return UB.mat4.invert(this,this),this}lookAt(A,Q,B){return UB.mat4.lookAt(this,A,Q,B),this}multiply(A){return UB.mat4.mul(this,this,A),this}multiplyScalar(A){return UB.mat4.multiplyScalar(this,this,A),this}orthographic(A,Q,B,Y,J,C){return UB.mat4.ortho(this,A,Q,B,Y,J,C),this}perspective(A,Q,B,Y){return UB.mat4.perspective(this,A,Q,B,Y),this}rotate(A,Q){return UB.mat4.rotate(this,this,A,Q),this}rotateX(A){return UB.mat4.rotateX(this,this,A),this}rotateY(A){return UB.mat4.rotateY(this,this,A),this}rotateZ(A){return UB.mat4.rotateZ(this,this,A),this}scale(A){return UB.mat4.scale(this,this,A),this}subtract(A){return UB.mat4.sub(this,this,A),this}targetTo(A,Q,B){return UB.mat4.targetTo(this,A,Q,B),this}toString(){return`[${this[0]},${this[1]},${this[2]},${this[3]}][${this[4]},${this[5]},${this[6]},${this[7]}][${this[8]},${this[9]},${this[10]},${this[11]}][${this[12]},${this[13]},${this[14]},${this[15]}]`}translate(A){return UB.mat4.translate(this,this,A),this}transpose(){return UB.mat4.transpose(this,this),this}}var Y0=LA(Q$(),1);class KV extends Float32Array{constructor(A,Q,B,Y){super([A,Q,B,Y])}get length(){return Y0.quat.length(this)}get squaredLength(){return Y0.quat.squaredLength(this)}get magnitude(){return Y0.quat.length(this)}get squaredMagnitude(){return Y0.quat.squaredLength(this)}get x(){return this[0]}set x(A){this[0]=A}get y(){return this[1]}set y(A){this[1]=A}get z(){return this[2]}set z(A){this[2]=A}get w(){return this[3]}set w(A){this[3]=A}static fromEuler(A,Q,B){let Y=Y0.quat.fromEuler(new Float32Array(4),A,Q,B);return new KV(Y[0],Y[1],Y[2],Y[3])}static fromQuaternionLike(A){return new KV(A.x,A.y,A.z,A.w)}clone(){return new KV(this.x,this.y,this.z,this.w)}conjugate(){return Y0.quat.conjugate(this,this),this}copy(A){return Y0.quat.copy(this,A),this}dot(A){return Y0.quat.dot(this,A)}exponential(){return Y0.quat.exp(this,this),this}equals(A){return Y0.quat.equals(this,A)}exactEquals(A){return Y0.quat.exactEquals(this,A)}getAngle(A){return Y0.quat.getAngle(this,A)}identity(){return Y0.quat.identity(this),this}invert(){return Y0.quat.invert(this,this),this}lerp(A,Q){return Y0.quat.lerp(this,this,A,Q),this}logarithm(){return Y0.quat.ln(this,this),this}multiply(A){return Y0.quat.multiply(this,this,A),this}transformVector(A){return A.transformQuaternion(this)}normalize(){return Y0.quat.normalize(this,this),this}power(A){return Y0.quat.pow(this,this,A),this}randomize(){return Y0.quat.random(this),this}rotateX(A){return Y0.quat.rotateX(this,this,A),this}rotateY(A){return Y0.quat.rotateY(this,this,A),this}rotateZ(A){return Y0.quat.rotateZ(this,this,A),this}scale(A){return Y0.quat.scale(this,this,A),this}setAxisAngle(A,Q){return Y0.quat.setAxisAngle(this,A,Q),this}slerp(A,Q){return Y0.quat.slerp(this,this,A,Q),this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}}var vB=LA(Q$(),1);class iL extends Float32Array{constructor(A,Q){super([A,Q])}get length(){return vB.vec2.length(this)}get squaredLength(){return vB.vec2.squaredLength(this)}get magnitude(){return vB.vec2.length(this)}get squaredMagnitude(){return vB.vec2.squaredLength(this)}get x(){return this[0]}set x(A){this[0]=A}get y(){return this[1]}set y(A){this[1]=A}static create(){return new iL(0,0)}add(A){return vB.vec2.add(this,this,A),this}angle(A){return vB.vec2.angle(this,A)}ceil(){return vB.vec2.ceil(this,this),this}clone(){return new iL(this.x,this.y)}copy(A){return vB.vec2.copy(this,A),this}distance(A){return vB.vec2.distance(this,A)}divide(A){return vB.vec2.divide(this,this,A),this}dot(A){return vB.vec2.dot(this,A)}equals(A){return vB.vec2.equals(this,A)}exactEquals(A){return vB.vec2.exactEquals(this,A)}floor(){return vB.vec2.floor(this,this),this}invert(){return vB.vec2.inverse(this,this),this}lerp(A,Q){return vB.vec2.lerp(this,this,A,Q),this}max(A){return vB.vec2.max(this,this,A),this}min(A){return vB.vec2.min(this,this,A),this}multiply(A){return vB.vec2.mul(this,this,A),this}negate(){return vB.vec2.negate(this,this),this}normalize(){return vB.vec2.normalize(this,this),this}randomize(A){return vB.vec2.random(this,A),this}rotate(A,Q){return vB.vec2.rotate(this,this,A,Q),this}round(){return vB.vec2.round(this,this),this}scale(A){return vB.vec2.scale(this,this,A),this}scaleAndAdd(A,Q){return vB.vec2.scaleAndAdd(this,this,A,Q),this}subtract(A){return vB.vec2.sub(this,this,A),this}toString(){return`${this.x},${this.y}`}transformMatrix2(A){return vB.vec2.transformMat2(this,this,A),this}transformMatrix3(A){return vB.vec2.transformMat3(this,this,A),this}transformMatrix4(A){return vB.vec2.transformMat4(this,this,A),this}zero(){return vB.vec2.zero(this),this}}var RB=LA(Q$(),1);class VV extends Float32Array{constructor(A,Q,B){super([A,Q,B])}get length(){return RB.vec3.length(this)}get squaredLength(){return RB.vec3.squaredLength(this)}get magnitude(){return RB.vec3.length(this)}get squaredMagnitude(){return RB.vec3.squaredLength(this)}get x(){return this[0]}set x(A){this[0]=A}get y(){return this[1]}set y(A){this[1]=A}get z(){return this[2]}set z(A){this[2]=A}static create(){return new VV(0,0,0)}static fromVector3Like(A){return new VV(A.x,A.y,A.z)}add(A){return RB.vec3.add(this,this,A),this}ceil(){return RB.vec3.ceil(this,this),this}clone(){return new VV(this.x,this.y,this.z)}copy(A){return RB.vec3.copy(this,A),this}cross(A){return RB.vec3.cross(this,this,A),this}distance(A){return RB.vec3.distance(this,A)}divide(A){return RB.vec3.div(this,this,A),this}dot(A){return RB.vec3.dot(this,A)}equals(A){return RB.vec3.equals(this,A)}exactEquals(A){return RB.vec3.exactEquals(this,A)}floor(){return RB.vec3.floor(this,this),this}invert(){return RB.vec3.inverse(this,this),this}lerp(A,Q){return RB.vec3.lerp(this,this,A,Q),this}max(A){return RB.vec3.max(this,this,A),this}min(A){return RB.vec3.min(this,this,A),this}multiply(A){return RB.vec3.mul(this,this,A),this}negate(){return RB.vec3.negate(this,this),this}normalize(){return RB.vec3.normalize(this,this),this}randomize(A){return RB.vec3.random(this,A),this}rotateX(A,Q){return RB.vec3.rotateX(this,this,A,Q),this}rotateY(A,Q){return RB.vec3.rotateY(this,this,A,Q),this}rotateZ(A,Q){return RB.vec3.rotateZ(this,this,A,Q),this}round(){return RB.vec3.round(this,this),this}scale(A){return RB.vec3.scale(this,this,A),this}scaleAndAdd(A,Q){return RB.vec3.scaleAndAdd(this,this,A,Q),this}subtract(A){return RB.vec3.sub(this,this,A),this}toString(){return`${this.x},${this.y},${this.z}`}transformMatrix3(A){return RB.vec3.transformMat3(this,this,A),this}transformMatrix4(A){return RB.vec3.transformMat4(this,this,A),this}transformQuaternion(A){return RB.vec3.transformQuat(this,this,A),this}zero(){return RB.vec3.zero(this),this}}var xSQ=LA(gSQ(),1);var hSQ=0.099856;class nL extends UW{faceSpeed=0;idleLoopedAnimations=[];idleLoopedAnimationsSpeed;jumpOneshotAnimations=[];moveLoopedAnimations=[];moveLoopedAnimationsSpeed;moveSpeed=0;_faceTarget;_jumpHeight=0;_moveCompletesWhenStuck=!1;_moveIgnoreAxes={};_moveStartMoveAnimations=!1;_moveStartIdleAnimationsOnCompletion=!0;_moveStoppingDistanceSquared=hSQ;_moveStuckAccumulatorMs=0;_moveStuckLastPosition;_moveTarget;_onFace;_onFaceComplete;_onMove;_onMoveComplete;_stopFaceRequested=!1;_stopMoveRequested=!1;constructor(A={}){super();this.idleLoopedAnimations=A.idleLoopedAnimations??this.idleLoopedAnimations,this.idleLoopedAnimationsSpeed=A.idleLoopedAnimationsSpeed??this.idleLoopedAnimationsSpeed,this.jumpOneshotAnimations=A.jumpOneshotAnimations??this.jumpOneshotAnimations,this.moveLoopedAnimations=A.moveLoopedAnimations??this.moveLoopedAnimations,this.moveLoopedAnimationsSpeed=A.moveLoopedAnimationsSpeed??this.moveLoopedAnimationsSpeed}spawn(A){super.spawn(A),this._startIdleAnimations(A)}face(A,Q,B){this._faceTarget=A,this.faceSpeed=Q,this._onFace=B?.faceCallback,this._onFaceComplete=B?.faceCompleteCallback}jump(A){this._jumpHeight=A}move(A,Q,B){this.moveSpeed=Q,this._moveCompletesWhenStuck=B?.moveCompletesWhenStuck??!1,this._moveIgnoreAxes=B?.moveIgnoreAxes??{},this._moveStartIdleAnimationsOnCompletion=B?.moveStartIdleAnimationsOnCompletion??!0,this._moveStartMoveAnimations=!0,this._moveStoppingDistanceSquared=B?.moveStoppingDistance?B.moveStoppingDistance**2:hSQ,this._moveTarget=A,this._onMove=B?.moveCallback,this._onMoveComplete=B?.moveCompleteCallback,this._moveStuckAccumulatorMs=0,this._moveStuckLastPosition=void 0}stopFace(){this._stopFaceRequested=!0}stopMove(){this._stopMoveRequested=!0}tick(A,Q){if(super.tick(A,Q),!this._moveTarget&&!this._faceTarget&&!this._jumpHeight)return;if(this._moveStartMoveAnimations)this._startMoveAnimations(A),this._moveStartMoveAnimations=!1;let B=Q/1000,Y=A.position;if(A.isDynamic&&this._jumpHeight>0){let J=Math.abs(A.world.simulation.gravity.y),C=Math.sqrt(2*J*this._jumpHeight);A.applyImpulse({x:0,y:C*A.mass,z:0}),this._jumpHeight=0,this._startJumpAnimations(A)}if(this._moveTarget){let J={x:this._moveIgnoreAxes.x?0:this._moveTarget.x-Y.x,y:this._moveIgnoreAxes.y?0:this._moveTarget.y-Y.y,z:this._moveIgnoreAxes.z?0:this._moveTarget.z-Y.z},C=J.x*J.x+J.y*J.y+J.z*J.z,X=!1;if(this._moveCompletesWhenStuck){if(this._moveStuckAccumulatorMs+=Q,this._moveStuckAccumulatorMs>=500){if(this._moveStuckLastPosition){let G=Y.x-this._moveStuckLastPosition.x,F=Y.y-this._moveStuckLastPosition.y,W=Y.z-this._moveStuckLastPosition.z;X=Math.sqrt(G*G+F*F+W*W)<this.moveSpeed*0.1}this._moveStuckLastPosition=Y,this._moveStuckAccumulatorMs=0}}if(C>this._moveStoppingDistanceSquared&&!this._stopMoveRequested&&!X){let G=Math.sqrt(C),F=this.moveSpeed*B,E=Math.min(G,F)/G,$={x:Y.x+J.x*E,y:Y.y+J.y*E,z:Y.z+J.z*E};if(A.setPosition($),this._onMove)this._onMove($,this._moveTarget)}else{if(this._moveStuckAccumulatorMs=0,this._moveStuckLastPosition=void 0,this._moveTarget=void 0,this._stopMoveRequested=!1,this._moveStartIdleAnimationsOnCompletion)this._startIdleAnimations(A);if(this._onMoveComplete){let G=this._onMoveComplete;this._onMove=void 0,this._onMoveComplete=void 0,G(Y)}}}if(this._faceTarget){let J={x:this._faceTarget.x-Y.x,z:this._faceTarget.z-Y.z},C=Math.atan2(-J.x,-J.z),X=A.rotation,G=Math.atan2(2*(X.w*X.y),1-2*(X.y*X.y)),F=C-G;while(F>Math.PI)F-=2*Math.PI;while(F<-Math.PI)F+=2*Math.PI;if(Math.abs(F)>0.01&&!this._stopFaceRequested){let W=this.faceSpeed*B,E=Math.abs(F)<W?F:Math.sign(F)*W,Z=(G+E)/2,U={x:0,y:Math.fround(Math.sin(Z)),z:0,w:Math.fround(Math.cos(Z))};if(A.setRotation(U),this._onFace)this._onFace(X,U)}else if(this._faceTarget=void 0,this._stopFaceRequested=!1,this._onFaceComplete){let W=this._onFaceComplete;this._onFace=void 0,this._onFaceComplete=void 0,W(A.rotation)}}}_startIdleAnimations(A){if(this.idleLoopedAnimationsSpeed)A.setModelAnimationsPlaybackRate(this.idleLoopedAnimationsSpeed);A.stopModelAnimations(this.moveLoopedAnimations),A.stopModelAnimations(this.jumpOneshotAnimations),A.startModelLoopedAnimations(this.idleLoopedAnimations)}_startJumpAnimations(A){A.stopModelAnimations(this.moveLoopedAnimations),A.stopModelAnimations(this.idleLoopedAnimations),A.startModelOneshotAnimations(this.jumpOneshotAnimations)}_startMoveAnimations(A){if(this.moveLoopedAnimationsSpeed)A.setModelAnimationsPlaybackRate(this.moveLoopedAnimationsSpeed);A.stopModelAnimations(this.jumpOneshotAnimations),A.stopModelAnimations(this.idleLoopedAnimations),A.startModelLoopedAnimations(this.moveLoopedAnimations)}}class Io extends nL{_debug=!1;_entity;_maxFall=0;_maxJump=0;_maxOpenSetIterations=200;_onPathfindAbort;_onPathfindComplete;_onWaypointMoveComplete;_onWaypointMoveSkipped;_speed=0;_target;_verticalPenalty=0;_waypoints=[];_waypointNextIndex=0;_waypointStoppingDistance;_waypointTimeoutMs=2000;constructor(A={}){super(A)}get debug(){return this._debug}get maxFall(){return this._maxFall}get maxJump(){return this._maxJump}get maxOpenSetIterations(){return this._maxOpenSetIterations}get speed(){return this._speed}get target(){return this._target}get verticalPenalty(){return this._verticalPenalty}get waypoints(){return this._waypoints}get waypointNextIndex(){return this._waypointNextIndex}get waypointTimeoutMs(){return this._waypointTimeoutMs}pathfind(A,Q,B){if(this._target=A,this._speed=Q,this._debug=B?.debug??!1,this._maxFall=B?.maxFall?-Math.abs(B.maxFall):0,this._maxJump=B?.maxJump?Math.abs(B.maxJump):0,this._maxOpenSetIterations=B?.maxOpenSetIterations??200,this._onPathfindAbort=B?.pathfindAbortCallback,this._onPathfindComplete=B?.pathfindCompleteCallback,this._onWaypointMoveComplete=B?.waypointMoveCompleteCallback,this._onWaypointMoveSkipped=B?.waypointMoveSkippedCallback,this._verticalPenalty=B?.verticalPenalty??0,this._waypoints=[],this._waypointNextIndex=0,this._waypointStoppingDistance=B?.waypointStoppingDistance,this._waypointTimeoutMs=B?.waypointTimeoutMs??2000/Q,!this._calculatePath())return!1;return this._moveToNextWaypoint(),!0}attach(A){super.attach(A),this._entity=A}detach(A){super.detach(A),this._entity=void 0}_calculatePath(){if(!this._target||!this._entity?.world)return r.error("PathfindingEntityController._calculatePath: No target or world"),!1;let A=this._entity.height,Q=this._findGroundedStart();if(!Q){if(this._debug)r.warning(`PathfindingEntityController._calculatePath: No valid grounded start found within maxFall distance, path search aborted. Start: ${this._coordinateToKey(this._target)}, Target: ${this._coordinateToKey(this._target)}`);return!1}let B={x:Math.floor(this._target.x),y:Math.floor(this._target.y),z:Math.floor(this._target.z)},Y=Math.abs(B.x-Q.x),J=Math.abs(B.y-Q.y),C=Math.abs(B.z-Q.z);if(Y<=2&&J<=2&&C<=2&&!this._isNeighborCoordinateBlocked(Q,B,this._entity.height))return this._waypoints=[{x:Q.x+0.5,y:Q.y+A/2,z:Q.z+0.5},{x:B.x+0.5,y:B.y+A/2,z:B.z+0.5}],!0;if(Q.x===B.x&&Q.y===B.y&&Q.z===B.z)return this._waypoints=[{x:Q.x+0.5,y:Q.y+A/2,z:Q.z+0.5}],!0;let G=this._coordinateToKey(Q),F=new Map,W=new Map([[G,0]]),E=new Map([[G,this._pathfindingHeuristic(Q,B)]]),$=new Set,Z=new xSQ.Heap((M,z)=>{let q=E.get(M[0])??1/0,N=E.get(z[0])??1/0;return q-N});Z.push([G,Q]);let U=[{x:0,y:0,z:1},{x:1,y:0,z:0},{x:0,y:0,z:-1},{x:-1,y:0,z:0},{x:1,y:0,z:1},{x:1,y:0,z:-1},{x:-1,y:0,z:1},{x:-1,y:0,z:-1}],K=[];for(let M=this._maxJump;M>=this._maxFall;M--){if(M===0)continue;let z=Math.abs(Q.y+M-B.y);K.push({y:M,distanceToTargetY:z})}K.sort((M,z)=>M.distanceToTargetY-z.distanceToTargetY);let I=[...U,...K.flatMap(({y:M})=>U.map((z)=>({...z,y:M})))],V=0,H=Math.abs(B.x-Q.x)+Math.abs(B.y-Q.y)+Math.abs(B.z-Q.z),D=Math.min(this._maxOpenSetIterations,H*20);while(!Z.isEmpty()&&V<D){V++;let[M,z]=Z.pop();if(z.x===B.x&&z.y===B.y&&z.z===B.z){let L=this._reconstructPath(F,z);if(this._waypoints=L.map((w)=>({x:w.x+0.5,y:w.y+A/2,z:w.z+0.5})),this._debug)console.log(`PathfindingEntityController._calculatePath: Path found after ${V} open set iterations. Start: ${this._coordinateToKey(Q)}, Target: ${this._coordinateToKey(this._target)}`);return!0}$.add(M);let q=W.get(M),N=new Map;for(let L of I){let w=`${L.x},${L.z}`,P=L.y<0;if(P&&N.has(w))continue;let _={x:z.x+L.x,y:z.y+L.y,z:z.z+L.z};if(Math.abs(B.x-_.x)+Math.abs(B.y-_.y)+Math.abs(B.z-_.z)>H*1.5)continue;let k=this._coordinateToKey(_);if($.has(k))continue;let T=this._isNeighborCoordinateBlocked(z,_,this._entity.height);if(P&&T){N.set(w,!0);continue}if(T)continue;let S=Math.abs(L.x),v=Math.abs(L.y),y=Math.abs(L.z),h=v===0?0:this._verticalPenalty,g=(Math.max(S,v,y)===1&&S+v+y>1?1.4:1)+h,m=q+g,u=W.get(k)??1/0;if(m>=u)continue;F.set(k,z),W.set(k,m);let p=m+this._pathfindingHeuristic(_,B);E.set(k,p),Z.push([k,_])}}if(V>=D){if(this._onPathfindAbort?.(),this._debug)r.warning(`PathfindingEntityController._calculatePath: Maximum open set iterations reached (${D}), path search aborted. Start: ${this._coordinateToKey(Q)}, Target: ${this._coordinateToKey(this._target)}`)}else if(this._debug)r.warning(`PathfindingEntityController._calculatePath: No valid path found. Start: ${this._coordinateToKey(Q)}, Target: ${this._coordinateToKey(this._target)}`);return this._target=void 0,this._waypoints=[],!1}_reconstructPath(A,Q){let B=[Q],Y=Q;while(A.has(this._coordinateToKey(Y)))Y=A.get(this._coordinateToKey(Y)),B.unshift(Y);return B}_coordinateToKey(A){return`${A.x},${A.y},${A.z}`}_moveToNextWaypoint(){let A=this._waypointNextIndex>0?this._waypoints[this._waypointNextIndex-1]:void 0,Q=this._waypoints[this._waypointNextIndex];if(!Q||!this._entity)return;let B=0;if(this._entity.isDynamic&&A&&Q.y>A.y){let Y=Q.y-A.y,J=Math.min(Y,this._maxJump)+0.75;this.jump(J);let C=Math.abs(this._entity.world.simulation.gravity.y),X=Math.sqrt(2*C*J),G=A.x+0.5,F=A.z+0.5,W=Q.x+0.5,E=Q.z+0.5,$=W-G,Z=E-F,U=Math.sqrt($*$+Z*Z),K=X/C,I=U/this._speed;B=Math.min(K*0.8,I)*1000}setTimeout(()=>{if(!this._entity)return;let Y=Date.now();this.face(Q,this._speed),this.move(Q,this._speed,{moveCompletesWhenStuck:!0,moveIgnoreAxes:{y:this._entity.isDynamic},moveStartIdleAnimationsOnCompletion:this._waypointNextIndex===this._waypoints.length-1,moveStoppingDistance:this._waypointStoppingDistance,moveCallback:()=>{if(Date.now()-Y>this._waypointTimeoutMs&&this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveSkipped?.(Q,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint()},moveCompleteCallback:()=>{if(this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveComplete?.(Q,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint();else this._onPathfindComplete?.()}})},B)}_pathfindingHeuristic(A,Q){return Math.abs(A.x-Q.x)+Math.abs(A.y-Q.y)+Math.abs(A.z-Q.z)}_isNeighborCoordinateBlocked(A,Q,B){if(!this._entity?.world)return!1;let Y=this._entity.world,J=Math.floor(Q.x),C=Math.floor(Q.y),X=Math.floor(Q.z),G=Math.floor(A.x),F=Math.floor(A.z);if(!Y.chunkLattice.hasBlock({x:J,y:C-1,z:X}))return!0;for(let W=0;W<B;W++)if(Y.chunkLattice.hasBlock({x:J,y:C+W,z:X}))return!0;if(J!==G&&X!==F)for(let W=0;W<B;W++){let E=Y.chunkLattice.hasBlock({x:J,y:C+W,z:F}),$=Y.chunkLattice.hasBlock({x:G,y:C+W,z:X});if(E||$)return!0}return!1}_findGroundedStart(){if(!this._entity?.world)return;let{x:A,y:Q,z:B}=this._entity.position,Y={x:Math.floor(A),y:Math.floor(Q),z:Math.floor(B)};for(let J=0;J<=Math.abs(this._maxFall);J++)if(this._entity.world.chunkLattice.hasBlock({...Y,y:Y.y-J-1}))return{...Y,y:Y.y-J};return}}export{yf0 as startServer,nPQ as WorldManagerEvent,XW as WorldManager,iPQ as WorldLoopEvent,lL as WorldLoop,Go as WorldEvent,cL as World,Yo as WebServerEvent,UV as WebServer,VV as Vector3,iL as Vector2,dL as Ticker,tZ as TelemetrySpanOperation,o0 as Telemetry,Jo as SimulationEvent,bL as Simulation,nL as SimpleEntityController,uL as SceneUIManager,Em as SceneUIEvent,SD as SceneUI,I7B as SUPPORTED_INPUTS,mH as RigidBodyType,j7 as RigidBody,KV as Quaternion,Nw as PlayerUIEvent,RD as PlayerUI,sPQ as PlayerManagerEvent,uC as PlayerManager,wD as PlayerEvent,i1 as PlayerEntity,NVA as PlayerCameraMode,Xm as PlayerCameraEvent,zD as PlayerCamera,ZU as Player,f7 as PersistenceManager,Io as PathfindingEntityController,mL as ParticleEmitterManager,Co as ParticleEmitterEvent,Xo as ParticleEmitter,RVA as PLAYER_ROTATION_UPDATE_THRESHOLD,zVA as PLAYER_POSITION_UPDATE_THRESHOLD_SQ,BJ as ModelRegistry,N9 as Matrix4,SX as Matrix3,B$ as Matrix2,bB as IterationMap,aPQ as GameServerEvent,GW as GameServer,GQ as EventRouter,r as ErrorHandler,kD as EntityManager,TD as EntityEvent,m0 as Entity,qVA as ENTITY_ROTATION_UPDATE_THRESHOLD,LVA as ENTITY_POSITION_UPDATE_THRESHOLD_SQ,C0 as DefaultPlayerEntityController,Zm as DefaultPlayerEntity,MVA as DEFAULT_ENTITY_RIGID_BODY_OPTIONS,T5 as CollisionGroupsBuilder,lW as CollisionGroup,c4 as ColliderShape,PD as ColliderMap,IC as Collider,Af as CoefficientCombineRule,Wm as ChunkLatticeEvent,OD as ChunkLattice,v9 as Chunk,jD as ChatManager,Gm as ChatEvent,Bf as BlockTypeRegistryEvent,uH as BlockTypeRegistry,Qf as BlockTypeEvent,HC as BlockType,Z7 as BlockTextureRegistry,J$ as Block,Oo as BaseEntityControllerEvent,UW as BaseEntityController,qV as AudioManager,Rk as AudioEvent,LV as Audio,zY as AssetsLibrary};
|
|
403
|
+
-----END PRIVATE KEY-----`;Ao(new er({connections:50,pipelining:1,keepAliveTimeout:30000,keepAliveMaxTimeout:60000,connect:{timeout:1e4},headersTimeout:15000,bodyTimeout:30000}));var Ck=process.env.PORT??8080,Bo="0.14.43",Yo;((J)=>{J.READY="WEBSERVER.READY";J.STOPPED="WEBSERVER.STOPPED";J.ERROR="WEBSERVER.ERROR";J.UPGRADE="WEBSERVER.UPGRADE"})(Yo||={});var xL={"access-control-allow-origin":"*"},zf0={".html":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".json":"application/json",".gltf":"model/gltf+json",".glb":"model/gltf-binary",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".ktx2":"image/ktx2",".mp3":"audio/mpeg",".ogg":"audio/ogg",".wav":"audio/wav",".mp4":"video/mp4",".webm":"video/webm",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".bin":"application/octet-stream",".wasm":"application/wasm"};class UV extends GQ{static instance=new UV;_server;_assetCache=new Map;_assetDirs=[];constructor(){super();this._assetDirs.push(Qo.resolve("assets"));let A=zY.assetsLibraryPath;if(A)this._assetDirs.push(A)}start(){if(this._server)return r.warning("WebServer.start(): already started");this._server=qf0.createSecureServer({key:Jk,cert:Yk,allowHTTP1:!0}),this._server.on("stream",this._onStream),this._server.on("upgrade",this._onUpgrade),this._server.on("error",this._onError),this._server.on("close",this._onStopped),this._server.listen(Ck,this._onStarted),console.info(`WebServer.start(): Server running on port ${Ck}`)}stop(){if(!this._server)return r.warning("WebServer.stop(): not started"),Promise.resolve(!1);return new Promise((A,Q)=>{this._server.close((B)=>B?Q(B):A(!0))})}_onStarted=()=>this.emitWithGlobal("WEBSERVER.READY",{});_onStopped=()=>this.emitWithGlobal("WEBSERVER.STOPPED",{});_onError=(A)=>{r.error(`WebServer._onError(): ${A.message}`),this.emitWithGlobal("WEBSERVER.ERROR",{error:A})};_onStream=(A,Q)=>{A.on("error",()=>{});let B=Q[":path"]||"/",J=(Q[":method"]||"GET")==="HEAD";if(B==="/"){A.respond({":status":200,"content-type":"application/json",...xL}),A.end(!J?JSON.stringify({status:"OK",version:Bo,runtime:"node",playerCount:uC.instance.playerCount}):void 0);return}let C=decodeURIComponent(B.split("?")[0]);if(C.includes("..")){A.respond({":status":400,...xL}),A.end();return}for(let X of this._assetDirs){let G=Qo.join(X,C);if(!G.startsWith(X))continue;let F=zY.assetsLibraryPath;if(F&&G.startsWith(F)&&!B.includes("noSync"))zY.instance.syncAsset(G);let W=this._assetCache.get(G);if(!W)try{let U=cPQ.statSync(G);if(!U.isFile())continue;W={size:U.size,etag:`"${U.mtimeMs.toString(36)}-${U.size.toString(36)}"`},this._assetCache.set(G,W)}catch{continue}if(Q["if-none-match"]===W.etag){A.respond({":status":304,...xL}),A.end();return}let $={":status":200,"content-type":zf0[Qo.extname(G).toLowerCase()]||"application/octet-stream","content-length":W.size,etag:W.etag,"cache-control":"public, max-age=0, must-revalidate",...xL};if(J){A.respond($),A.end();return}A.respond($);let Z=cPQ.createReadStream(G);A.on("close",()=>Z.destroy()),Z.on("error",()=>A.close()),Z.pipe(A);return}A.respond({":status":404,...xL}),A.end()};_onUpgrade=(A,Q,B)=>{this.emitWithGlobal("WEBSERVER.UPGRADE",{req:A,socket:Q,head:B})}}var tZ;((I)=>{I.BUILD_PACKETS="build_packets";I.ENTITIES_EMIT_UPDATES="entities_emit_updates";I.ENTITIES_TICK="entities_tick";I.NETWORK_SYNCHRONIZE="network_synchronize";I.NETWORK_SYNCHRONIZE_CLEANUP="network_synchronize_cleanup";I.PHYSICS_CLEANUP="physics_cleanup";I.PHYSICS_STEP="physics_step";I.SEND_ALL_PACKETS="send_all_packets";I.SEND_PACKETS="send_packets";I.SERIALIZE_FREE_BUFFERS="serialize_free_buffers";I.SERIALIZE_PACKETS="serialize_packets";I.SERIALIZE_PACKETS_ENCODE="serialize_packets_encode";I.SIMULATION_STEP="simulation_step";I.TICKER_TICK="ticker_tick";I.WORLD_TICK="world_tick"})(tZ||={});class o0{static getProcessStats(A=!1){let Q=process.memoryUsage(),B={jsHeapSizeMb:{value:Q.heapUsed/1024/1024,unit:"megabyte"},jsHeapCapacityMb:{value:Q.heapTotal/1024/1024,unit:"megabyte"},jsHeapUsagePercent:{value:Q.heapUsed/Q.heapTotal,unit:"percent"},processHeapSizeMb:{value:Q.heapUsed/1024/1024,unit:"megabyte"},rssSizeMb:{value:Q.rss/1024/1024,unit:"megabyte"}};if(A)return B;return Object.fromEntries(Object.entries(B).map(([Y,J])=>[Y,J.value]))}static initializeSentry(A,Q=50){if(PU())return;MT({dsn:A,release:Bo,environment:process.env.NODE_ENV||"development",tracesSampleRate:1,initialScope:{tags:{gameId:process.env.HYTOPIA_GAME_ID??"unknown",gameSlug:process.env.HYTOPIA_GAME_SLUG??"unknown",lobbyId:process.env.HYTOPIA_LOBBY_ID??"unknown",region:process.env.REGION??"unknown"}},beforeSend:(B)=>{return B.extra=o0.getProcessStats(),B},beforeSendTransaction:(B)=>{if(B.contexts?.trace?.op==="ticker_tick"){let J=B?.start_timestamp,C=B?.timestamp;if(!J||!C)return null;if((C-J)*1000>Q)return B.measurements=o0.getProcessStats(!0),B}return null}})}static startSpan(A,Q){if(PU())return w8({attributes:A.attributes,name:A.operation,op:A.operation},Q);else return Q()}static sentry(){return Fs}}if(!Pw)console.warn("Connection: msgpackr native acceleration is not enabled, using fallback implementation.");var pPQ=new VE({useFloat32:gD.ALWAYS}),wf0=30000;class Z1 extends GQ{static _cachedPacketsSerializedBuffer=new Map;_closeTimeout=null;_isDuplicate=!1;_ws;_wsBinding=!1;_wt;_wtBinding=!1;_wtReliableReader;_wtReliableWriter;_wtUnreliableReader;_wtUnreliableWriter;id;initialConnectionParams;constructor(A,Q,B,Y){super();this.id=SIA(),this.initialConnectionParams=B,this.onPacket(gQ.PacketId.HEARTBEAT,this._onHeartbeatPacket);let J=()=>{GQ.globalInstance.emit("CONNECTION.OPENED",{connection:this,session:Y})};if(A)this.bindWs(A),J();else if(Q)this.bindWt(Q).then(J).catch((C)=>{this._onClose(),r.error(`Connection.constructor(): Failed to bind WebTransport. Error: ${C}`)})}get isDuplicate(){return this._isDuplicate}static clearCachedPacketsSerializedBuffers(){if(Z1._cachedPacketsSerializedBuffer.size>0)Z1._cachedPacketsSerializedBuffer.clear()}static serializePackets(A){for(let B of A)if(!gQ.isValidPacket(B))return r.error(`Connection.serializePackets(): Invalid packet payload: ${JSON.stringify(B)}`);let Q=Z1._cachedPacketsSerializedBuffer.get(A);if(Q)return Q;return o0.startSpan({operation:"serialize_packets",attributes:{packets:A.length,packetIds:A.map((B)=>B[0]).join(",")}},(B)=>{let Y=pPQ.pack(A);if(Y.byteLength>65536)Y=Rf0(Y,{level:1});return B?.setAttribute("serializedBytes",Y.byteLength),Z1._cachedPacketsSerializedBuffer.set(A,Y),Y})}bindWs(A){this._wsBinding=!0;let Q=this._handleReconnect();if(this._cleanupConnections(),this._ws=A,this._ws.binaryType="nodebuffer",this._ws.onmessage=(B)=>this._onMessage(B.data),this._ws.onclose=this._onClose,this._ws.onerror=this._onError,this._wsBinding=!1,this._signalConnectionId(),Q)this.emitWithGlobal("CONNECTION.RECONNECTED",{connection:this})}async bindWt(A){this._wtBinding=!0;let Q=this._handleReconnect();this._cleanupConnections(),A.userData.onclose=this._onClose,A.closed.catch(()=>{}).finally(()=>A.userData.onclose?.()),this._wt=A;try{await A.ready;let B=A.incomingBidirectionalStreams.getReader();try{let{value:Y}=await B.read();if(Y)this._wtReliableReader=Y.readable,this._wtReliableWriter=Y.writable.getWriter()}finally{B.releaseLock()}this._wtUnreliableReader=A.datagrams.readable,this._wtUnreliableWriter=A.datagrams.createWritable().getWriter()}catch{this._wtBinding=!1;return}if(this._wtBinding=!1,this._wt!==A)return;if((async()=>{if(!this._wtReliableReader)throw Error("Connection.bindWt(): Reliable reader not found.");let B=gQ.createPacketBufferUnframer((Y)=>{this._onMessage(Y)});for await(let Y of this._wtReliableReader){if(A!==this._wt)return;B(Y)}})().catch(()=>{try{A?.close()}catch{}}),(async()=>{if(!this._wtUnreliableReader)throw Error("Connection.bindWt(): Unreliable reader not found.");for await(let B of this._wtUnreliableReader){if(A!==this._wt)return;this._onMessage(B)}})().catch(()=>{try{A?.close()}catch{}}),this._signalConnectionId(),Q)this.emitWithGlobal("CONNECTION.RECONNECTED",{connection:this})}disconnect(){try{this._ws?.close(),this._wt?.close()}catch(A){r.error(`Connection.disconnect(): Connection disconnect failed. Error: ${A}`)}}killDuplicateConnection(){this._isDuplicate=!0,this._cleanupConnections(),this.emitWithGlobal("CONNECTION.DISCONNECTED",{connection:this}),this._finalizeClose()}onPacket(A,Q){this.on("CONNECTION.PACKET_RECEIVED",({packet:B})=>{if(B[0]===A)Q(B)})}send(A,Q=!0){if(this._closeTimeout||this._wsBinding||this._wtBinding)return;if(!this._ws&&!this._wt)return;let B=this._ws&&this._ws.readyState===WU.default.OPEN,Y=this._wt&&this._wt.state==="connected";if(!B&&!Y)return;o0.startSpan({operation:"send_packets"},()=>{try{let J=Z1.serializePackets(A);if(!J)return;if(Y)if(Q||J.byteLength>1200)this._wtReliableWriter?.write(gQ.framePacketBuffer(J)).catch(()=>{r.error("Connection.send(): WebTransport reliable write failed, connection closing?")});else this._wtUnreliableWriter?.write(J).catch(()=>{r.error("Connection.send(): WebTransport unreliable write failed, connection closing?")});else this._ws.send(J);this.emitWithGlobal("CONNECTION.PACKETS_SENT",{connection:this,packets:A})}catch(J){r.error(`Connection.send(): Packet send failed. Error: ${J}`)}})}_onHeartbeatPacket=()=>{this.send([gQ.createPacket(gQ.bidirectionalPackets.heartbeatPacketDefinition,null)],!0)};_onMessage=(A)=>{try{let Q=this._deserialize(A);if(!Q)return;this.emitWithGlobal("CONNECTION.PACKET_RECEIVED",{connection:this,packet:Q})}catch(Q){r.error(`Connection._ws.onmessage(): Error: ${Q}`)}};_onClose=()=>{this.emitWithGlobal("CONNECTION.DISCONNECTED",{connection:this}),this._closeTimeout=setTimeout(()=>this._finalizeClose(),wf0)};_onError=(A)=>{this.emitWithGlobal("CONNECTION.ERROR",{connection:this,error:A})};_cleanupConnections(){if(this._ws)this._ws.onmessage=()=>{},this._ws.onclose=()=>{},this._ws.onerror=()=>{};if(this._wt)this._wt.userData.onclose=()=>{};this._signalKill();try{this._ws?.close()}catch{}let A=this._wt;if(A)setTimeout(()=>{try{A.close()}catch{}},50);this._ws=void 0,this._wt=void 0,this._wtReliableReader=void 0,this._wtReliableWriter=void 0,this._wtUnreliableReader=void 0,this._wtUnreliableWriter=void 0}_deserialize(A){let Q=pPQ.unpack(A);if(!Q||typeof Q!=="object"||typeof Q[0]!=="number")return r.error(`Connection._deserialize(): Invalid packet format. Packet: ${JSON.stringify(Q)}`);if(!gQ.isValidPacket(Q))return r.error(`Connection._deserialize(): Invalid packet payload. Packet: ${JSON.stringify(Q)}`);return Q}_finalizeClose(){this.emitWithGlobal("CONNECTION.CLOSED",{connection:this}),this.offAll()}_handleReconnect(){let A=!!this._ws||!!this._wt;if(A&&this._closeTimeout)clearTimeout(this._closeTimeout),this._closeTimeout=null;return A}_signalConnectionId(){this.send([gQ.createPacket(gQ.bidirectionalPackets.connectionPacketDefinition,{i:this.id})])}_signalKill(){this.send([gQ.createPacket(gQ.bidirectionalPackets.connectionPacketDefinition,{k:!0})])}}class bB{_map=new Map;_values=[];_isDirty=!1;get size(){return this._map.size}get valuesArray(){if(this._isDirty)this._syncArray();return this._values}get(A){return this._map.get(A)}set(A,Q){let B=this._map.has(A);if(this._map.set(A,Q),!B)this._values.push(Q);else this._isDirty=!0;return this}has(A){return this._map.has(A)}delete(A){let Q=this._map.delete(A);if(Q)this._isDirty=!0;return Q}clear(){this._map.clear(),this._values.length=0,this._isDirty=!1}forEach(A,Q){this._map.forEach((B,Y)=>{A.call(Q,B,Y,this)})}keys(){return this._map.keys()}values(){return this._map.values()}entries(){return this._map.entries()}[Symbol.iterator](){return this._map[Symbol.iterator]()}_syncArray(){this._values.length=0;for(let A of this._map.values())this._values.push(A);this._isDirty=!1}}var jf0={x:0,y:-32,z:0},fL=60,Jo;((J)=>{J.STEP_START="SIMULATION.STEP_START";J.STEP_END="SIMULATION.STEP_END";J.DEBUG_RAYCAST="SIMULATION.DEBUG_RAYCAST";J.DEBUG_RENDER="SIMULATION.DEBUG_RENDER"})(Jo||={});class bL extends GQ{_colliderMap=new PD;_debugRaycastingEnabled=!1;_debugRenderingEnabled=!1;_debugRenderingFilterFlags;_rapierEventQueue;_rapierSimulation;_world;constructor(A,Q=fL,B=jf0){super();this._rapierEventQueue=new WB.EventQueue(!0),this._rapierSimulation=new WB.World(B),this._rapierSimulation.timestep=Math.fround(1/Q),this._world=A}get colliderMap(){return this._colliderMap}get isDebugRaycastingEnabled(){return this._debugRaycastingEnabled}get isDebugRenderingEnabled(){return this._debugRenderingEnabled}get gravity(){return this._rapierSimulation.gravity}get timestepS(){return this._rapierSimulation.timestep}get world(){return this._world}createRawCollider(A,Q){return this._rapierSimulation.createCollider(A,Q)}createRawRigidBody(A){return this._rapierSimulation.createRigidBody(A)}enableDebugRaycasting(A){this._debugRaycastingEnabled=A}enableDebugRendering(A,Q=WB.QueryFilterFlags.EXCLUDE_FIXED){this._debugRenderingEnabled=A,this._debugRenderingFilterFlags=Q}getContactManifolds(A,Q){let B=[];return this._rapierSimulation.narrowPhase.contactPair(A,Q,(Y,J)=>{if(Y.numContacts()===0)return;let C=Y.normal(),X=[];for(let G=0;G<Y.numSolverContacts();G++)X.push(Y.solverContactPoint(G));B.push({contactPoints:X,localNormalA:!J?Y.localNormal1():Y.localNormal2(),localNormalB:!J?Y.localNormal2():Y.localNormal1(),normal:!J?C:{x:-C.x,y:-C.y,z:-C.z}})}),B}intersectionsWithRawShape(A,Q,B,Y={}){let J=new Set,C=[];return this._rapierSimulation.intersectionsWithShape(Q,B,A,(X)=>{let G=this._colliderMap.getColliderHandleBlockType(X.handle);if(G&&!J.has(G))return J.add(G),C.push({intersectedBlockType:G}),!0;let F=this._colliderMap.getColliderHandleEntity(X.handle);if(F&&!J.has(F))return J.add(F),C.push({intersectedEntity:F}),!0;return!0},Y.filterFlags,Y.filterGroups,Y.filterExcludeCollider,Y.filterExcludeRigidBody,Y.filterPredicate),C}raycast(A,Q,B,Y={}){let J=new WB.Ray(A,Q),C=this._rapierSimulation.castRay(J,B,Y.solidMode??!0,Y.filterFlags,Y.filterGroups,Y.filterExcludeCollider,Y.filterExcludeRigidBody,Y.filterPredicate);if(this._debugRaycastingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RAYCAST",{simulation:this,origin:A,direction:Q,length:B,hit:!!C});if(!C)return null;let X=J.pointAt(C.timeOfImpact),G=C.timeOfImpact,F=C.collider,W=this._colliderMap.getColliderHandleBlockType(F.handle);if(W)return{hitBlock:J$.fromGlobalCoordinate({x:Math.floor(X.x-(J.dir.x<0?0.0001:-0.0001)),y:Math.floor(X.y-(J.dir.y<0?0.0001:-0.0001)),z:Math.floor(X.z-(J.dir.z<0?0.0001:-0.0001))},W),hitPoint:X,hitDistance:G,origin:A,originDirection:Q};let E=this._colliderMap.getColliderHandleEntity(F.handle);if(E)return{hitEntity:E,hitPoint:X,hitDistance:G,origin:A,originDirection:Q};return null}removeRawCollider(A){this._colliderMap.queueColliderHandleForCleanup(A.handle),this._rapierSimulation.removeCollider(A,!1)}removeRawRigidBody(A){this._rapierSimulation.removeRigidBody(A)}setGravity(A){this._rapierSimulation.gravity=A}step=(A)=>{this.emitWithWorld(this._world,"SIMULATION.STEP_START",{simulation:this,tickDeltaMs:A});let Q=performance.now();if(o0.startSpan({operation:"physics_step"},()=>{this._rapierSimulation.step(this._rapierEventQueue)}),o0.startSpan({operation:"physics_cleanup"},()=>{this._rapierEventQueue.drainContactForceEvents(this._onContactForceEvent),this._rapierEventQueue.drainCollisionEvents(this._onCollisionEvent),this._colliderMap.cleanup()}),this.emitWithWorld(this._world,"SIMULATION.STEP_END",{simulation:this,stepDurationMs:performance.now()-Q}),this._debugRenderingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RENDER",{simulation:this,...this._rapierSimulation.debugRender(this._debugRenderingFilterFlags)})};_onCollisionEvent=(A,Q,B)=>{let[Y,J]=this._getCollisionObjects(A,Q);if(!Y||!J)return;let C=(X,G)=>{if(X instanceof HC&&G instanceof m0&&X.hasListeners("BLOCK_TYPE.ENTITY_COLLISION"))X.emit("BLOCK_TYPE.ENTITY_COLLISION",{blockType:X,entity:G,started:B,colliderHandleA:A,colliderHandleB:Q});else if(X instanceof m0&&G instanceof HC&&X.hasListeners("ENTITY.BLOCK_COLLISION"))X.emit("ENTITY.BLOCK_COLLISION",{entity:X,blockType:G,started:B,colliderHandleA:A,colliderHandleB:Q});else if(X instanceof m0&&G instanceof m0&&X.hasListeners("ENTITY.ENTITY_COLLISION"))X.emit("ENTITY.ENTITY_COLLISION",{entity:X,otherEntity:G,started:B,colliderHandleA:A,colliderHandleB:Q});else if(typeof X==="function"&&(G instanceof m0||G instanceof HC))X(G,B,A,Q)};C(Y,J),C(J,Y)};_onContactForceEvent=(A)=>{let[Q,B]=this._getCollisionObjects(A.collider1(),A.collider2());if(!Q||typeof Q==="function"||!B||typeof B==="function")return;let Y={totalForce:A.totalForce(),totalForceMagnitude:A.totalForceMagnitude(),maxForceDirection:A.maxForceDirection(),maxForceMagnitude:A.maxForceMagnitude()},J=(C,X)=>{if(C instanceof HC&&X instanceof m0&&C.hasListeners("BLOCK_TYPE.ENTITY_CONTACT_FORCE"))C.emit("BLOCK_TYPE.ENTITY_CONTACT_FORCE",{blockType:C,entity:X,contactForceData:Y});else if(C instanceof m0&&X instanceof HC&&C.hasListeners("ENTITY.BLOCK_CONTACT_FORCE"))C.emit("ENTITY.BLOCK_CONTACT_FORCE",{entity:C,blockType:X,contactForceData:Y});else if(C instanceof m0&&X instanceof m0&&C.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))C.emit("ENTITY.ENTITY_CONTACT_FORCE",{entity:C,otherEntity:X,contactForceData:Y})};J(Q,B),J(B,Q)};_getCollisionObjects(A,Q){let B=this._colliderMap.getColliderHandleBlockType(A)??this._colliderMap.getColliderHandleCollisionCallback(A)??this._colliderMap.getColliderHandleEntity(A),Y=this._colliderMap.getColliderHandleBlockType(Q)??this._colliderMap.getColliderHandleCollisionCallback(Q)??this._colliderMap.getColliderHandleEntity(Q);return[B,Y]}}var Co;((u)=>{u.BURST="PARTICLE_EMITTER.BURST";u.DESPAWN="PARTICLE_EMITTER.DESPAWN";u.SET_ALPHA_TEST="PARTICLE_EMITTER.SET_ALPHA_TEST";u.SET_ATTACHED_TO_ENTITY="PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY";u.SET_ATTACHED_TO_ENTITY_NODE_NAME="PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY_NODE_NAME";u.SET_COLOR_END="PARTICLE_EMITTER.SET_COLOR_END";u.SET_COLOR_END_VARIANCE="PARTICLE_EMITTER.SET_COLOR_END_VARIANCE";u.SET_COLOR_INTENSITY_END="PARTICLE_EMITTER.SET_COLOR_INTENSITY_END";u.SET_COLOR_INTENSITY_END_VARIANCE="PARTICLE_EMITTER.SET_COLOR_INTENSITY_END_VARIANCE";u.SET_COLOR_INTENSITY_START="PARTICLE_EMITTER.SET_COLOR_INTENSITY_START";u.SET_COLOR_INTENSITY_START_VARIANCE="PARTICLE_EMITTER.SET_COLOR_INTENSITY_START_VARIANCE";u.SET_COLOR_START="PARTICLE_EMITTER.SET_COLOR_START";u.SET_COLOR_START_VARIANCE="PARTICLE_EMITTER.SET_COLOR_START_VARIANCE";u.SET_GRAVITY="PARTICLE_EMITTER.SET_GRAVITY";u.SET_LIFETIME="PARTICLE_EMITTER.SET_LIFETIME";u.SET_LIFETIME_VARIANCE="PARTICLE_EMITTER.SET_LIFETIME_VARIANCE";u.SET_MAX_PARTICLES="PARTICLE_EMITTER.SET_MAX_PARTICLES";u.SET_OFFSET="PARTICLE_EMITTER.SET_OFFSET";u.SET_OPACITY_END="PARTICLE_EMITTER.SET_OPACITY_END";u.SET_OPACITY_END_VARIANCE="PARTICLE_EMITTER.SET_OPACITY_END_VARIANCE";u.SET_OPACITY_START="PARTICLE_EMITTER.SET_OPACITY_START";u.SET_OPACITY_START_VARIANCE="PARTICLE_EMITTER.SET_OPACITY_START_VARIANCE";u.SET_PAUSED="PARTICLE_EMITTER.SET_PAUSED";u.SET_POSITION="PARTICLE_EMITTER.SET_POSITION";u.SET_POSITION_VARIANCE="PARTICLE_EMITTER.SET_POSITION_VARIANCE";u.SET_RATE="PARTICLE_EMITTER.SET_RATE";u.SET_RATE_VARIANCE="PARTICLE_EMITTER.SET_RATE_VARIANCE";u.SET_SIZE_END="PARTICLE_EMITTER.SET_SIZE_END";u.SET_SIZE_END_VARIANCE="PARTICLE_EMITTER.SET_SIZE_END_VARIANCE";u.SET_SIZE_START="PARTICLE_EMITTER.SET_SIZE_START";u.SET_SIZE_START_VARIANCE="PARTICLE_EMITTER.SET_SIZE_START_VARIANCE";u.SET_TEXTURE_URI="PARTICLE_EMITTER.SET_TEXTURE_URI";u.SET_TRANSPARENT="PARTICLE_EMITTER.SET_TRANSPARENT";u.SET_VELOCITY="PARTICLE_EMITTER.SET_VELOCITY";u.SET_VELOCITY_VARIANCE="PARTICLE_EMITTER.SET_VELOCITY_VARIANCE";u.SPAWN="PARTICLE_EMITTER.SPAWN"})(Co||={});class Xo extends GQ{_id;_alphaTest;_attachedToEntity;_attachedToEntityNodeName;_colorEnd;_colorEndVariance;_colorIntensityEnd;_colorIntensityEndVariance;_colorIntensityStart;_colorIntensityStartVariance;_colorStart;_colorStartVariance;_gravity;_lifetime;_lifetimeVariance;_maxParticles;_offset;_opacityEnd;_opacityEndVariance;_opacityStart;_opacityStartVariance;_paused;_position;_positionVariance;_rate;_rateVariance;_sizeEnd;_sizeEndVariance;_sizeStart;_sizeStartVariance;_sizeVariance;_textureUri;_transparent;_velocity;_velocityVariance;_world;constructor(A){if(!!A.attachedToEntity===!!A.position)r.fatalError("Either attachedToEntity or position must be set, but not both.");if(!A.textureUri)r.fatalError("ParticleEmitter.constructor(): textureUri must be provided.");super();this._alphaTest=A.alphaTest??0.05,this._attachedToEntity=A.attachedToEntity,this._attachedToEntityNodeName=A.attachedToEntityNodeName,this._colorEnd=A.colorEnd,this._colorEndVariance=A.colorEndVariance,this._colorIntensityEnd=A.colorIntensityEnd,this._colorIntensityEndVariance=A.colorIntensityEndVariance,this._colorIntensityStart=A.colorIntensityStart,this._colorIntensityStartVariance=A.colorIntensityStartVariance,this._colorStart=A.colorStart,this._colorStartVariance=A.colorStartVariance,this._gravity=A.gravity,this._lifetime=A.lifetime,this._lifetimeVariance=A.lifetimeVariance,this._maxParticles=A.maxParticles,this._offset=A.offset,this._opacityEnd=A.opacityEnd,this._opacityEndVariance=A.opacityEndVariance,this._opacityStart=A.opacityStart,this._opacityStartVariance=A.opacityStartVariance,this._paused=!1,this._position=A.position,this._positionVariance=A.positionVariance,this._rate=A.rate,this._rateVariance=A.rateVariance,this._sizeEnd=A.sizeEnd,this._sizeEndVariance=A.sizeEndVariance,this._sizeStart=A.sizeStart,this._sizeStartVariance=A.sizeStartVariance,this._textureUri=A.textureUri,this._transparent=A.transparent,this._velocity=A.velocity,this._velocityVariance=A.velocityVariance}get id(){return this._id}get alphaTest(){return this._alphaTest}get attachedToEntity(){return this._attachedToEntity}get attachedToEntityNodeName(){return this._attachedToEntityNodeName}get colorEnd(){return this._colorEnd}get colorEndVariance(){return this._colorEndVariance}get colorIntensityEnd(){return this._colorIntensityEnd}get colorIntensityEndVariance(){return this._colorIntensityEndVariance}get colorIntensityStart(){return this._colorIntensityStart}get colorIntensityStartVariance(){return this._colorIntensityStartVariance}get colorStart(){return this._colorStart}get colorStartVariance(){return this._colorStartVariance}get gravity(){return this._gravity}get isSpawned(){return this._id!==void 0}get lifetime(){return this._lifetime}get lifetimeVariance(){return this._lifetimeVariance}get maxParticles(){return this._maxParticles}get offset(){return this._offset}get opacityEnd(){return this._opacityEnd}get opacityEndVariance(){return this._opacityEndVariance}get opacityStart(){return this._opacityStart}get opacityStartVariance(){return this._opacityStartVariance}get paused(){return this._paused}get position(){return this._position}get positionVariance(){return this._positionVariance}get rate(){return this._rate}get rateVariance(){return this._rateVariance}get sizeEnd(){return this._sizeEnd}get sizeEndVariance(){return this._sizeEndVariance}get sizeStart(){return this._sizeStart}get sizeStartVariance(){return this._sizeStartVariance}get sizeVariance(){return this._sizeVariance}get textureUri(){return this._textureUri}get transparent(){return this._transparent}get velocity(){return this._velocity}get velocityVariance(){return this._velocityVariance}get world(){return this._world}setAlphaTest(A){if(this._alphaTest===A)return;if(this._alphaTest=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_ALPHA_TEST",{particleEmitter:this,alphaTest:A})}setAttachedToEntity(A){if(!A.isSpawned)return r.error(`ParticleEmitter.setAttachedToEntity(): Entity ${A.id} is not spawned!`);if(this._attachedToEntity===A)return;if(this._attachedToEntity=A,this._position=void 0,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY",{particleEmitter:this,entity:A})}setAttachedToEntityNodeName(A){if(this._attachedToEntityNodeName===A)return;if(this._attachedToEntityNodeName=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY_NODE_NAME",{particleEmitter:this,attachedToEntityNodeName:A})}setColorEnd(A){if(this._colorEnd&&this._colorEnd.r===A.r&&this._colorEnd.g===A.g&&this._colorEnd.b===A.b)return;if(this._colorEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_END",{particleEmitter:this,colorEnd:A})}setColorEndVariance(A){if(this._colorEndVariance&&this._colorEndVariance.r===A.r&&this._colorEndVariance.g===A.g&&this._colorEndVariance.b===A.b)return;if(this._colorEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_END_VARIANCE",{particleEmitter:this,colorEndVariance:A})}setColorIntensityEnd(A){if(this._colorIntensityEnd===A)return;if(this._colorIntensityEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_END",{particleEmitter:this,colorIntensityEnd:A})}setColorIntensityEndVariance(A){if(this._colorIntensityEndVariance===A)return;if(this._colorIntensityEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_END_VARIANCE",{particleEmitter:this,colorIntensityEndVariance:A})}setColorIntensityStart(A){if(this._colorIntensityStart===A)return;if(this._colorIntensityStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_START",{particleEmitter:this,colorIntensityStart:A})}setColorIntensityStartVariance(A){if(this._colorIntensityStartVariance===A)return;if(this._colorIntensityStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_INTENSITY_START_VARIANCE",{particleEmitter:this,colorIntensityStartVariance:A})}setColorStart(A){if(this._colorStart&&this._colorStart.r===A.r&&this._colorStart.g===A.g&&this._colorStart.b===A.b)return;if(this._colorStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_START",{particleEmitter:this,colorStart:A})}setColorStartVariance(A){if(this._colorStartVariance&&this._colorStartVariance.r===A.r&&this._colorStartVariance.g===A.g&&this._colorStartVariance.b===A.b)return;if(this._colorStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_COLOR_START_VARIANCE",{particleEmitter:this,colorStartVariance:A})}setGravity(A){if(this._gravity&&this._gravity.x===A.x&&this._gravity.y===A.y&&this._gravity.z===A.z)return;if(this._gravity=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_GRAVITY",{particleEmitter:this,gravity:A})}setLifetime(A){if(this._lifetime===A)return;if(this._lifetime=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_LIFETIME",{particleEmitter:this,lifetime:A})}setLifetimeVariance(A){if(this._lifetimeVariance===A)return;if(this._lifetimeVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_LIFETIME_VARIANCE",{particleEmitter:this,lifetimeVariance:A})}setMaxParticles(A){if(this._maxParticles===A)return;if(this._maxParticles=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_MAX_PARTICLES",{particleEmitter:this,maxParticles:A})}setOffset(A){if(this._offset&&this._offset.x===A.x&&this._offset.y===A.y&&this._offset.z===A.z)return;if(this._offset=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OFFSET",{particleEmitter:this,offset:A})}setOpacityEnd(A){if(this._opacityEnd===A)return;if(this._opacityEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_END",{particleEmitter:this,opacityEnd:A})}setOpacityEndVariance(A){if(this._opacityEndVariance===A)return;if(this._opacityEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_END_VARIANCE",{particleEmitter:this,opacityEndVariance:A})}setOpacityStart(A){if(this._opacityStart===A)return;if(this._opacityStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_START",{particleEmitter:this,opacityStart:A})}setOpacityStartVariance(A){if(this._opacityStartVariance===A)return;if(this._opacityStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_OPACITY_START_VARIANCE",{particleEmitter:this,opacityStartVariance:A})}setPosition(A){if(this._position&&this._position.x===A.x&&this._position.y===A.y&&this._position.z===A.z)return;if(this._position=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_POSITION",{particleEmitter:this,position:A})}setPositionVariance(A){if(this._positionVariance&&this._positionVariance.x===A.x&&this._positionVariance.y===A.y&&this._positionVariance.z===A.z)return;if(this._positionVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_POSITION_VARIANCE",{particleEmitter:this,positionVariance:A})}setRate(A){if(this._rate===A)return;if(this._rate=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_RATE",{particleEmitter:this,rate:A})}setRateVariance(A){if(this._rateVariance===A)return;if(this._rateVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_RATE_VARIANCE",{particleEmitter:this,rateVariance:A})}setSizeEnd(A){if(this._sizeEnd===A)return;if(this._sizeEnd=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_END",{particleEmitter:this,sizeEnd:A})}setSizeEndVariance(A){if(this._sizeEndVariance===A)return;if(this._sizeEndVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_END_VARIANCE",{particleEmitter:this,sizeEndVariance:A})}setSizeStart(A){if(this._sizeStart===A)return;if(this._sizeStart=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_START",{particleEmitter:this,sizeStart:A})}setSizeStartVariance(A){if(this._sizeStartVariance===A)return;if(this._sizeStartVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_SIZE_START_VARIANCE",{particleEmitter:this,sizeStartVariance:A})}setTextureUri(A){if(this._textureUri===A)return;if(this._textureUri=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_TEXTURE_URI",{particleEmitter:this,textureUri:A})}setTransparent(A){if(this._transparent===A)return;if(this._transparent=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_TRANSPARENT",{particleEmitter:this,transparent:A})}setVelocity(A){if(this._velocity&&this._velocity.x===A.x&&this._velocity.y===A.y&&this._velocity.z===A.z)return;if(this._velocity=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_VELOCITY",{particleEmitter:this,velocity:A})}setVelocityVariance(A){if(this._velocityVariance&&this._velocityVariance.x===A.x&&this._velocityVariance.y===A.y&&this._velocityVariance.z===A.z)return;if(this._velocityVariance=A,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_VELOCITY_VARIANCE",{particleEmitter:this,velocityVariance:A})}burst(A){if(this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.BURST",{particleEmitter:this,count:A})}despawn(){if(!this.isSpawned||!this._world)return;this._world.particleEmitterManager.unregisterParticleEmitter(this),this.emitWithWorld(this._world,"PARTICLE_EMITTER.DESPAWN",{particleEmitter:this}),this._id=void 0,this._world=void 0}restart(){if(!this._paused)return;if(this._paused=!1,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_PAUSED",{particleEmitter:this,paused:this._paused})}stop(){if(this._paused)return;if(this._paused=!0,this.isSpawned)this.emitWithWorld(this._world,"PARTICLE_EMITTER.SET_PAUSED",{particleEmitter:this,paused:this._paused})}spawn(A){if(this.isSpawned)return;if(this._attachedToEntity&&!this._attachedToEntity.isSpawned)return r.error(`ParticleEmitter.spawn(): Attached entity ${this._attachedToEntity.id} must be spawned before spawning ParticleEmitter!`);this._id=A.particleEmitterManager.registerParticleEmitter(this),this._world=A,this.emitWithWorld(A,"PARTICLE_EMITTER.SPAWN",{particleEmitter:this})}serialize(){return wQ.serializeParticleEmitter(this)}}var Of0=30,Pf0=Math.round(fL/Of0);class Xk{_outboundPerPlayerReliablePackets=new bB;_outboundSharedReliablePackets=[];_outboundSharedUnreliablePackets=[];_queuedAudioSyncs={broadcast:new bB,perPlayer:new bB};_queuedBlockSyncs={broadcast:new bB,perPlayer:new bB};_queuedBlockTypeSyncs={broadcast:new bB,perPlayer:new bB};_queuedChunkSyncs={broadcast:new bB,perPlayer:new bB};_queuedEntitySyncs={broadcast:new bB,perPlayer:new bB};_queuedParticleEmitterSyncs={broadcast:new bB,perPlayer:new bB};_queuedPlayerSyncs={broadcast:new bB,perPlayer:new bB};_queuedSceneUISyncs={broadcast:new bB,perPlayer:new bB};_queuedCameraSyncs={broadcast:void 0,perPlayer:new bB};_queuedChatMessagesSyncs={broadcast:void 0,perPlayer:new bB};_queuedDebugRaycastsSyncs={broadcast:void 0,perPlayer:new bB};_queuedDebugRenderSyncs={broadcast:void 0,perPlayer:new bB};_queuedNotificationPermissionRequestSyncs={broadcast:void 0,perPlayer:new bB};_queuedUISyncs={broadcast:void 0,perPlayer:new bB};_queuedUIDatasSyncs={broadcast:void 0,perPlayer:new bB};_queuedWorldSyncs={broadcast:void 0,perPlayer:new bB};_loadedSceneUIs=new Set;_spawnedChunks=new Set;_spawnedEntities=new Set;_world;constructor(A){this._world=A,this._subscribeToAudioEvents(),this._subscribeToBlockTypeRegistryEvents(),this._subscribeToChatEvents(),this._subscribeToChunkLatticeEvents(),this._subscribeToEntityEvents(),this._subscribeToParticleEmitterEvents(),this._subscribeToPlayerEvents(),this._subscribeToPlayerCameraEvents(),this._subscribeToPlayerUIEvents(),this._subscribeToSceneUIEvents(),this._subscribeToSimulationEvents(),this._subscribeToWorldEvents()}shouldSynchronize(){return this._world.loop.currentTick%Pf0===0}synchronize(){let A=this._world.loop.currentTick;if(this._queuedEntitySyncs.perPlayer.size>0)for(let[Q,B]of this._queuedEntitySyncs.perPlayer.entries())this._outboundPerPlayerReliablePackets.get(Q)?.push(gQ.createPacket(gQ.outboundPackets.entitiesPacketDefinition,B.valuesArray,A));if(this._queuedEntitySyncs.broadcast.size>0){let Q=[],B=[];for(let Y of this._queuedEntitySyncs.broadcast.valuesArray){let J=!1;for(let C in Y)if(J=C!=="i"&&C!=="p"&&C!=="r",J)break;(J?Q:B).push(Y)}if(B.length>0){let Y=gQ.createPacket(gQ.outboundPackets.entitiesPacketDefinition,B,A);this._outboundSharedUnreliablePackets.push(Y)}if(Q.length>0){let Y=gQ.createPacket(gQ.outboundPackets.entitiesPacketDefinition,Q,A);this._outboundSharedReliablePackets.push(Y);for(let J of this._outboundPerPlayerReliablePackets.valuesArray)J.push(Y)}}this._collectSingletonSyncToOutboundPackets(this._queuedCameraSyncs,gQ.outboundPackets.cameraPacketDefinition),this._collectSyncToOutboundPackets(this._queuedAudioSyncs,gQ.outboundPackets.audiosPacketDefinition),this._collectSyncToOutboundPackets(this._queuedBlockTypeSyncs,gQ.outboundPackets.blockTypesPacketDefinition),this._collectSyncToOutboundPackets(this._queuedChunkSyncs,gQ.outboundPackets.chunksPacketDefinition),this._collectSyncToOutboundPackets(this._queuedBlockSyncs,gQ.outboundPackets.blocksPacketDefinition),this._collectSyncToOutboundPackets(this._queuedParticleEmitterSyncs,gQ.outboundPackets.particleEmittersPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedUISyncs,gQ.outboundPackets.uiPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedUIDatasSyncs,gQ.outboundPackets.uiDatasPacketDefinition),this._collectSyncToOutboundPackets(this._queuedSceneUISyncs,gQ.outboundPackets.sceneUIsPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedWorldSyncs,gQ.outboundPackets.worldPacketDefinition),this._collectSyncToOutboundPackets(this._queuedPlayerSyncs,gQ.outboundPackets.playersPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedChatMessagesSyncs,gQ.outboundPackets.chatMessagesPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedNotificationPermissionRequestSyncs,gQ.outboundPackets.notificationPermissionRequestPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedDebugRenderSyncs,gQ.outboundPackets.physicsDebugRenderPacketDefinition),this._collectSingletonSyncToOutboundPackets(this._queuedDebugRaycastsSyncs,gQ.outboundPackets.physicsDebugRaycastsPacketDefinition),o0.startSpan({operation:"send_all_packets"},()=>{for(let Q of uC.instance.getConnectedPlayersByWorld(this._world)){let B=this._outboundPerPlayerReliablePackets.get(Q)??this._outboundSharedReliablePackets;if(B.length>0)Q.connection.send(B);if(this._outboundSharedUnreliablePackets.length>0)Q.connection.send(this._outboundSharedUnreliablePackets,!1)}}),o0.startSpan({operation:"network_synchronize_cleanup"},()=>{if(this._outboundPerPlayerReliablePackets.size>0)this._outboundPerPlayerReliablePackets.clear();if(this._outboundSharedReliablePackets.length>0)this._outboundSharedReliablePackets.length=0;if(this._outboundSharedUnreliablePackets.length>0)this._outboundSharedUnreliablePackets.length=0;if(this._loadedSceneUIs.size>0)this._loadedSceneUIs.clear();if(this._spawnedChunks.size>0)this._spawnedChunks.clear();if(this._spawnedEntities.size>0)this._spawnedEntities.clear();this._clearSyncQueue(this._queuedAudioSyncs),this._clearSyncQueue(this._queuedBlockSyncs),this._clearSyncQueue(this._queuedBlockTypeSyncs),this._clearSyncQueue(this._queuedChunkSyncs),this._clearSyncQueue(this._queuedEntitySyncs),this._clearSyncQueue(this._queuedParticleEmitterSyncs),this._clearSyncQueue(this._queuedPlayerSyncs),this._clearSyncQueue(this._queuedSceneUISyncs),this._clearSingletonSyncQueue(this._queuedCameraSyncs),this._clearSingletonSyncQueue(this._queuedChatMessagesSyncs),this._clearSingletonSyncQueue(this._queuedDebugRaycastsSyncs),this._clearSingletonSyncQueue(this._queuedDebugRenderSyncs),this._clearSingletonSyncQueue(this._queuedNotificationPermissionRequestSyncs),this._clearSingletonSyncQueue(this._queuedUISyncs),this._clearSingletonSyncQueue(this._queuedUIDatasSyncs),this._clearSingletonSyncQueue(this._queuedWorldSyncs),Z1.clearCachedPacketsSerializedBuffers()})}_subscribeToAudioEvents(){this._world.final("AUDIO.PAUSE",this._onAudioPause),this._world.final("AUDIO.PLAY",this._onAudioPlay),this._world.final("AUDIO.PLAY_RESTART",this._onAudioPlayRestart),this._world.final("AUDIO.SET_ATTACHED_TO_ENTITY",this._onAudioSetAttachedToEntity),this._world.final("AUDIO.SET_CUTOFF_DISTANCE",this._onAudioSetCutoffDistance),this._world.final("AUDIO.SET_DETUNE",this._onAudioSetDetune),this._world.final("AUDIO.SET_DISTORTION",this._onAudioSetDistortion),this._world.final("AUDIO.SET_POSITION",this._onAudioSetPosition),this._world.final("AUDIO.SET_PLAYBACK_RATE",this._onAudioSetPlaybackRate),this._world.final("AUDIO.SET_REFERENCE_DISTANCE",this._onAudioSetReferenceDistance),this._world.final("AUDIO.SET_VOLUME",this._onAudioSetVolume)}_subscribeToBlockTypeRegistryEvents(){this._world.final("BLOCK_TYPE_REGISTRY.REGISTER_BLOCK_TYPE",this._onBlockTypeRegistryRegisterBlockType)}_subscribeToChatEvents(){this._world.final("CHAT.BROADCAST_MESSAGE",this._onChatSendBroadcastMessage),this._world.final("CHAT.PLAYER_MESSAGE",this._onChatSendPlayerMessage)}_subscribeToChunkLatticeEvents(){this._world.final("CHUNK_LATTICE.ADD_CHUNK",this._onChunkLatticeAddChunk),this._world.final("CHUNK_LATTICE.REMOVE_CHUNK",this._onChunkLatticeRemoveChunk),this._world.final("CHUNK_LATTICE.SET_BLOCK",this._onChunkLatticeSetBlock)}_subscribeToEntityEvents(){this._world.final("ENTITY.SPAWN",this._onEntitySpawn),this._world.final("ENTITY.DESPAWN",this._onEntityDespawn),this._world.final("ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE",this._onEntitySetModelAnimationsPlaybackRate),this._world.final("ENTITY.SET_MODEL_HIDDEN_NODES",this._onEntitySetModelHiddenNodes),this._world.final("ENTITY.SET_MODEL_SCALE",this._onEntitySetModelScale),this._world.final("ENTITY.SET_MODEL_SHOWN_NODES",this._onEntitySetModelShownNodes),this._world.final("ENTITY.SET_MODEL_TEXTURE_URI",this._onEntitySetModelTextureUri),this._world.final("ENTITY.SET_OPACITY",this._onEntitySetOpacity),this._world.final("ENTITY.SET_PARENT",this._onEntitySetParent),this._world.final("ENTITY.SET_TINT_COLOR",this._onEntitySetTintColor),this._world.final("ENTITY.START_MODEL_LOOPED_ANIMATIONS",this._onEntityStartModelLoopedAnimations),this._world.final("ENTITY.START_MODEL_ONESHOT_ANIMATIONS",this._onEntityStartModelOneshotAnimations),this._world.final("ENTITY.STOP_MODEL_ANIMATIONS",this._onEntityStopModelAnimations),this._world.final("ENTITY.UPDATE_POSITION",this._onEntityUpdatePosition),this._world.final("ENTITY.UPDATE_ROTATION",this._onEntityUpdateRotation)}_subscribeToParticleEmitterEvents(){this._world.final("PARTICLE_EMITTER.DESPAWN",this._onParticleEmitterDespawn),this._world.final("PARTICLE_EMITTER.BURST",this._onParticleEmitterBurst),this._world.final("PARTICLE_EMITTER.SET_ALPHA_TEST",this._onParticleEmitterSetAlphaTest),this._world.final("PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY",this._onParticleEmitterSetAttachedToEntity),this._world.final("PARTICLE_EMITTER.SET_ATTACHED_TO_ENTITY_NODE_NAME",this._onParticleEmitterSetAttachedToEntityNodeName),this._world.final("PARTICLE_EMITTER.SET_COLOR_END",this._onParticleEmitterSetColorEnd),this._world.final("PARTICLE_EMITTER.SET_COLOR_END_VARIANCE",this._onParticleEmitterSetColorEndVariance),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_END",this._onParticleEmitterSetColorIntensityEnd),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_END_VARIANCE",this._onParticleEmitterSetColorIntensityEndVariance),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_START",this._onParticleEmitterSetColorIntensityStart),this._world.final("PARTICLE_EMITTER.SET_COLOR_INTENSITY_START_VARIANCE",this._onParticleEmitterSetColorIntensityStartVariance),this._world.final("PARTICLE_EMITTER.SET_COLOR_START",this._onParticleEmitterSetColorStart),this._world.final("PARTICLE_EMITTER.SET_COLOR_START_VARIANCE",this._onParticleEmitterSetColorStartVariance),this._world.final("PARTICLE_EMITTER.SET_GRAVITY",this._onParticleEmitterSetGravity),this._world.final("PARTICLE_EMITTER.SET_LIFETIME",this._onParticleEmitterSetLifetime),this._world.final("PARTICLE_EMITTER.SET_LIFETIME_VARIANCE",this._onParticleEmitterSetLifetimeVariance),this._world.final("PARTICLE_EMITTER.SET_MAX_PARTICLES",this._onParticleEmitterSetMaxParticles),this._world.final("PARTICLE_EMITTER.SET_OFFSET",this._onParticleEmitterSetOffset),this._world.final("PARTICLE_EMITTER.SET_OPACITY_END",this._onParticleEmitterSetOpacityEnd),this._world.final("PARTICLE_EMITTER.SET_OPACITY_END_VARIANCE",this._onParticleEmitterSetOpacityEndVariance),this._world.final("PARTICLE_EMITTER.SET_OPACITY_START",this._onParticleEmitterSetOpacityStart),this._world.final("PARTICLE_EMITTER.SET_OPACITY_START_VARIANCE",this._onParticleEmitterSetOpacityStartVariance),this._world.final("PARTICLE_EMITTER.SET_PAUSED",this._onParticleEmitterSetPaused),this._world.final("PARTICLE_EMITTER.SET_POSITION",this._onParticleEmitterSetPosition),this._world.final("PARTICLE_EMITTER.SET_POSITION_VARIANCE",this._onParticleEmitterSetPositionVariance),this._world.final("PARTICLE_EMITTER.SET_RATE",this._onParticleEmitterSetRate),this._world.final("PARTICLE_EMITTER.SET_RATE_VARIANCE",this._onParticleEmitterSetRateVariance),this._world.final("PARTICLE_EMITTER.SET_SIZE_END",this._onParticleEmitterSetSizeEnd),this._world.final("PARTICLE_EMITTER.SET_SIZE_END_VARIANCE",this._onParticleEmitterSetSizeEndVariance),this._world.final("PARTICLE_EMITTER.SET_SIZE_START",this._onParticleEmitterSetSizeStart),this._world.final("PARTICLE_EMITTER.SET_SIZE_START_VARIANCE",this._onParticleEmitterSetSizeStartVariance),this._world.final("PARTICLE_EMITTER.SET_TEXTURE_URI",this._onParticleEmitterSetTextureUri),this._world.final("PARTICLE_EMITTER.SET_TRANSPARENT",this._onParticleEmitterSetTransparent),this._world.final("PARTICLE_EMITTER.SET_VELOCITY",this._onParticleEmitterSetVelocity),this._world.final("PARTICLE_EMITTER.SET_VELOCITY_VARIANCE",this._onParticleEmitterSetVelocityVariance),this._world.final("PARTICLE_EMITTER.SPAWN",this._onParticleEmitterSpawn)}_subscribeToPlayerEvents(){this._world.final("PLAYER.JOINED_WORLD",this._onPlayerJoinedWorld),this._world.final("PLAYER.LEFT_WORLD",this._onPlayerLeftWorld),this._world.final("PLAYER.RECONNECTED_WORLD",this._onPlayerReconnectedWorld),this._world.final("PLAYER.REQUEST_NOTIFICATION_PERMISSION",this._onPlayerRequestNotificationPermission),this._world.final("PLAYER.REQUEST_SYNC",this._onPlayerRequestSync)}_subscribeToPlayerCameraEvents(){this._world.final("PLAYER_CAMERA.LOOK_AT_ENTITY",this._onPlayerCameraLookAtEntity),this._world.final("PLAYER_CAMERA.LOOK_AT_POSITION",this._onPlayerCameraLookAtPosition),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY",this._onPlayerCameraSetAttachedToEntity),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_POSITION",this._onPlayerCameraSetAttachedToPosition),this._world.final("PLAYER_CAMERA.SET_FILM_OFFSET",this._onPlayerCameraSetFilmOffset),this._world.final("PLAYER_CAMERA.SET_FORWARD_OFFSET",this._onPlayerCameraSetForwardOffset),this._world.final("PLAYER_CAMERA.SET_FOV",this._onPlayerCameraSetFov),this._world.final("PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES",this._onPlayerCameraSetModelHiddenNodes),this._world.final("PLAYER_CAMERA.SET_MODEL_SHOWN_NODES",this._onPlayerCameraSetModelShownNodes),this._world.final("PLAYER_CAMERA.SET_MODE",this._onPlayerCameraSetMode),this._world.final("PLAYER_CAMERA.SET_OFFSET",this._onPlayerCameraSetOffset),this._world.final("PLAYER_CAMERA.SET_SHOULDER_ANGLE",this._onPlayerCameraSetShoulderAngle),this._world.final("PLAYER_CAMERA.SET_TRACKED_ENTITY",this._onPlayerCameraSetTrackedEntity),this._world.final("PLAYER_CAMERA.SET_TRACKED_POSITION",this._onPlayerCameraSetTrackedPosition),this._world.final("PLAYER_CAMERA.SET_ZOOM",this._onPlayerCameraSetZoom)}_subscribeToPlayerUIEvents(){this._world.final("PLAYER_UI.APPEND",this._onPlayerUIAppend),this._world.final("PLAYER_UI.FREEZE_POINTER_LOCK",this._onPlayerUIFreezePointerLock),this._world.final("PLAYER_UI.LOAD",this._onPlayerUILoad),this._world.final("PLAYER_UI.LOCK_POINTER",this._onPlayerUILockPointer),this._world.final("PLAYER_UI.SEND_DATA",this._onPlayerUISendData)}_subscribeToSceneUIEvents(){this._world.final("SCENE_UI.LOAD",this._onSceneUILoad),this._world.final("SCENE_UI.SET_ATTACHED_TO_ENTITY",this._onSceneUISetAttachedToEntity),this._world.final("SCENE_UI.SET_OFFSET",this._onSceneUISetOffset),this._world.final("SCENE_UI.SET_POSITION",this._onSceneUISetPosition),this._world.final("SCENE_UI.SET_STATE",this._onSceneUISetState),this._world.final("SCENE_UI.SET_VIEW_DISTANCE",this._onSceneUISetViewDistance),this._world.final("SCENE_UI.UNLOAD",this._onSceneUIUnload)}_subscribeToSimulationEvents(){this._world.final("SIMULATION.DEBUG_RAYCAST",this._onSimulationDebugRaycast),this._world.final("SIMULATION.DEBUG_RENDER",this._onSimulationDebugRender)}_subscribeToWorldEvents(){this._world.final("WORLD.SET_AMBIENT_LIGHT_COLOR",this._onWorldSetAmbientLightColor),this._world.final("WORLD.SET_AMBIENT_LIGHT_INTENSITY",this._onWorldSetAmbientLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",this._onWorldSetDirectionalLightColor),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",this._onWorldSetDirectionalLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",this._onWorldSetDirectionalLightPosition),this._world.final("WORLD.SET_FOG_COLOR",this._onWorldSetFogColor),this._world.final("WORLD.SET_FOG_FAR",this._onWorldSetFogFar),this._world.final("WORLD.SET_FOG_NEAR",this._onWorldSetFogNear),this._world.final("WORLD.SET_SKYBOX_INTENSITY",this._onWorldSetSkyboxIntensity),this._world.final("WORLD.SET_SKYBOX_URI",this._onWorldSetSkyboxUri)}_onAudioPause=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.pa=!0,delete Q.pl,delete Q.r};_onAudioPlay=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Object.assign(Q,A.audio.serialize()),Q.pl=!0,delete Q.pa,delete Q.r};_onAudioPlayRestart=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Object.assign(Q,A.audio.serialize()),Q.r=!0,delete Q.pa,delete Q.pl};_onAudioSetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.e=A.entity?A.entity.id:void 0,Q.p=A.entity?void 0:Q.p};_onAudioSetCutoffDistance=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.cd=A.cutoffDistance};_onAudioSetDetune=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.de=A.detune};_onAudioSetDistortion=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.di=A.distortion};_onAudioSetPosition=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.e=A.position?void 0:Q.e,Q.p=A.position?wQ.serializeVector(A.position):void 0};_onAudioSetPlaybackRate=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.pr=A.playbackRate};_onAudioSetReferenceDistance=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.rd=A.referenceDistance};_onAudioSetVolume=(A)=>{let Q=this._createOrGetQueuedAudioSync(A.audio);Q.v=A.volume};_onBlockTypeRegistryRegisterBlockType=(A)=>{let Q=this._createOrGetQueuedBlockTypeSync(A.blockType);Object.assign(Q,A.blockType.serialize())};_onChatSendBroadcastMessage=(A)=>{this._createOrGetQueuedChatMessagesSync().push({m:A.message,c:A.color,p:A.player?.id})};_onChatSendPlayerMessage=(A)=>{this._createOrGetQueuedChatMessagesSync(A.player).push({m:A.message,c:A.color})};_onChunkLatticeAddChunk=(A)=>{let Q=this._createOrGetQueuedChunkSync(A.chunk);Q.b=Array.from(A.chunk.blocks),Q.rm=void 0,this._spawnedChunks.add(Q.c.join(","))};_onChunkLatticeRemoveChunk=(A)=>{let Q=this._createOrGetQueuedChunkSync(A.chunk),B=Q.c.join(",");if(this._spawnedChunks.has(B))this._queuedChunkSyncs.broadcast.delete(B),this._spawnedChunks.delete(B);else Q.rm=!0};_onChunkLatticeSetBlock=(A)=>{let Q=this._createOrGetQueuedBlockSync(A.globalCoordinate);Q.i=A.blockTypeId};_onEntitySetModelAnimationsPlaybackRate=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.ap=A.playbackRate};_onEntitySpawn=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Object.assign(Q,A.entity.serialize()),this._spawnedEntities.add(Q.i)};_onEntityDespawn=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(this._spawnedEntities.has(Q.i))this._queuedEntitySyncs.broadcast.delete(Q.i),this._spawnedEntities.delete(Q.i);else Q.rm=!0};_onEntitySetModelHiddenNodes=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.h=Array.from(A.modelHiddenNodes)};_onEntitySetModelScale=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.sv=A.modelScale?wQ.serializeVector(A.modelScale):void 0};_onEntitySetModelShownNodes=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.sn=Array.from(A.modelShownNodes)};_onEntitySetModelTextureUri=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.mt=A.modelTextureUri};_onEntitySetOpacity=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.o=A.opacity};_onEntitySetParent=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.pe=A.parent?A.parent.id:void 0,Q.pn=A.parentNodeName};_onEntitySetTintColor=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.t=A.tintColor?wQ.serializeRgbColor(A.tintColor):void 0};_onEntityStartModelLoopedAnimations=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(Q.al=Array.from(new Set([...Q.al??[],...A.animations])),Q.as)Q.as=Q.as.filter((B)=>!A.animations.has(B)).filter(Boolean)};_onEntityStartModelOneshotAnimations=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(Q.ao=Array.from(new Set([...Q.ao??[],...A.animations])),Q.as)Q.as=Q.as.filter((B)=>!A.animations.has(B)).filter(Boolean)};_onEntityStopModelAnimations=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);if(Q.al)Q.al=Q.al.filter((B)=>!A.animations.has(B)).filter(Boolean);if(Q.ao)Q.ao=Q.ao.filter((B)=>!A.animations.has(B)).filter(Boolean);Q.as=Array.from(new Set([...Q.as??[],...A.animations]))};_onEntityUpdateRotation=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.r=[A.rotation.x,A.rotation.y,A.rotation.z,A.rotation.w]};_onEntityUpdatePosition=(A)=>{let Q=this._createOrGetQueuedEntitySync(A.entity);Q.p=[A.position.x,A.position.y,A.position.z]};_onParticleEmitterBurst=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.b=A.count};_onParticleEmitterDespawn=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.rm=!0};_onParticleEmitterSetAlphaTest=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.at=A.alphaTest};_onParticleEmitterSetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.e=A.entity?A.entity.id:void 0,Q.p=A.entity?void 0:Q.p};_onParticleEmitterSetAttachedToEntityNodeName=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.en=A.attachedToEntityNodeName};_onParticleEmitterSetColorEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ce=A.colorEnd?wQ.serializeRgbColor(A.colorEnd):void 0};_onParticleEmitterSetColorEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cev=A.colorEndVariance?wQ.serializeRgbColor(A.colorEndVariance):void 0};_onParticleEmitterSetColorIntensityEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cie=A.colorIntensityEnd};_onParticleEmitterSetColorIntensityEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ciev=A.colorIntensityEndVariance};_onParticleEmitterSetColorIntensityStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cis=A.colorIntensityStart};_onParticleEmitterSetColorIntensityStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cisv=A.colorIntensityStartVariance};_onParticleEmitterSetColorStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.cs=A.colorStart?wQ.serializeRgbColor(A.colorStart):void 0};_onParticleEmitterSetColorStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.csv=A.colorStartVariance?wQ.serializeRgbColor(A.colorStartVariance):void 0};_onParticleEmitterSetGravity=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.g=A.gravity?wQ.serializeVector(A.gravity):void 0};_onParticleEmitterSetLifetime=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.l=A.lifetime};_onParticleEmitterSetLifetimeVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.lv=A.lifetimeVariance};_onParticleEmitterSetMaxParticles=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.mp=A.maxParticles};_onParticleEmitterSetOffset=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.o=A.offset?wQ.serializeVector(A.offset):void 0};_onParticleEmitterSetOpacityEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.oe=A.opacityEnd};_onParticleEmitterSetOpacityEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.oev=A.opacityEndVariance};_onParticleEmitterSetOpacityStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.os=A.opacityStart};_onParticleEmitterSetOpacityStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.osv=A.opacityStartVariance};_onParticleEmitterSetPaused=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.pa=A.paused};_onParticleEmitterSetPosition=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.p=A.position?wQ.serializeVector(A.position):void 0,Q.e=A.position?void 0:Q.e,Q.en=A.position?void 0:Q.en};_onParticleEmitterSetPositionVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.pv=A.positionVariance?wQ.serializeVector(A.positionVariance):void 0};_onParticleEmitterSetRate=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.r=A.rate};_onParticleEmitterSetRateVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.rv=A.rateVariance};_onParticleEmitterSetSizeEnd=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.se=A.sizeEnd};_onParticleEmitterSetSizeEndVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.sev=A.sizeEndVariance};_onParticleEmitterSetSizeStart=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ss=A.sizeStart};_onParticleEmitterSetSizeStartVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.ssv=A.sizeStartVariance};_onParticleEmitterSetTextureUri=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.tu=A.textureUri};_onParticleEmitterSetTransparent=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.t=A.transparent};_onParticleEmitterSetVelocity=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.v=A.velocity?wQ.serializeVector(A.velocity):void 0};_onParticleEmitterSetVelocityVariance=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Q.vv=A.velocityVariance?wQ.serializeVector(A.velocityVariance):void 0};_onParticleEmitterSpawn=(A)=>{let Q=this._createOrGetQueuedParticleEmitterSync(A.particleEmitter);Object.assign(Q,A.particleEmitter.serialize())};_onPlayerCameraLookAtEntity=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.pl=wQ.serializeVector(A.entity.position),delete Q.et,delete Q.pt};_onPlayerCameraLookAtPosition=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.pl=A.position?wQ.serializeVector(A.position):void 0,delete Q.et,delete Q.pt};_onPlayerCameraSetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.e=A.entity.id,delete Q.p};_onPlayerCameraSetAttachedToPosition=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.p=A.position?wQ.serializeVector(A.position):void 0,delete Q.e};_onPlayerCameraSetFilmOffset=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.fo=A.filmOffset};_onPlayerCameraSetForwardOffset=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.ffo=A.forwardOffset};_onPlayerCameraSetFov=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.fv=A.fov};_onPlayerCameraSetModelHiddenNodes=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.h=Array.from(A.modelHiddenNodes)};_onPlayerCameraSetModelShownNodes=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.s=Array.from(A.modelShownNodes)};_onPlayerCameraSetMode=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.m=A.mode};_onPlayerCameraSetOffset=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.o=A.offset?wQ.serializeVector(A.offset):void 0};_onPlayerCameraSetShoulderAngle=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.sa=A.shoulderAngle};_onPlayerCameraSetTrackedEntity=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.et=A.entity?A.entity.id:void 0,delete Q.pl,delete Q.pt};_onPlayerCameraSetTrackedPosition=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.pt=A.position?wQ.serializeVector(A.position):void 0,delete Q.et,delete Q.pl};_onPlayerCameraSetZoom=(A)=>{let Q=this._createOrGetQueuedCameraSync(A.playerCamera.player);Q.z=A.zoom};_onPlayerJoinedWorld=(A)=>{let{player:Q}=A;for(let C of this._world.audioManager.getAllAudios()){let X=this._createOrGetQueuedAudioSync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.blockTypeRegistry.getAllBlockTypes()){let X=this._createOrGetQueuedBlockTypeSync(C,Q);Object.assign(X,C.serialize())}let B=this._createOrGetQueuedCameraSync(Q);Object.assign(B,Q.camera.serialize());for(let C of this._world.chunkLattice.getAllChunks()){let X=this._createOrGetQueuedChunkSync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.entityManager.getAllEntities()){if(Q.camera.attachedToEntity===void 0&&C instanceof i1&&C.player===Q)Q.camera.setAttachedToEntity(C);let X=this._createOrGetQueuedEntitySync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.particleEmitterManager.getAllParticleEmitters()){let X=this._createOrGetQueuedParticleEmitterSync(C,Q);Object.assign(X,C.serialize())}for(let C of uC.instance.getConnectedPlayers()){let X=this._createOrGetQueuedPlayerSync(C,Q);Object.assign(X,C.serialize())}for(let C of this._world.sceneUIManager.getAllSceneUIs()){let X=this._createOrGetQueuedSceneUISync(C,Q);Object.assign(X,C.serialize())}let Y=this._createOrGetQueuedWorldSync(this._world,Q);Object.assign(Y,this._world.serialize());let J=this._createOrGetQueuedPlayerSync(Q);Object.assign(J,Q.serialize())};_onPlayerLeftWorld=(A)=>{let Q=this._createOrGetQueuedPlayerSync(A.player);Q.rm=!0};_onPlayerReconnectedWorld=(A)=>{this._onPlayerJoinedWorld(A)};_onPlayerRequestNotificationPermission=(A)=>{this._createOrGetQueuedNotificationPermissionRequestSync(A.player)};_onPlayerRequestSync=(A)=>{A.player.connection.send([gQ.createPacket(gQ.outboundPackets.syncResponsePacketDefinition,{r:A.receivedAt,s:Date.now(),p:performance.now()-A.receivedAtMs,n:this._world.loop.nextTickMs},this._world.loop.currentTick)])};_onPlayerUIAppend=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.ua??=[],Q.ua.push(A.htmlUri)};_onPlayerUIFreezePointerLock=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.pf=A.freeze};_onPlayerUILoad=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.u=A.htmlUri};_onPlayerUILockPointer=(A)=>{let Q=this._createOrGetQueuedUISync(A.playerUI.player);Q.p=A.lock};_onPlayerUISendData=(A)=>{this._createOrGetQueuedUIDatasSync(A.playerUI.player).push(A.data)};_onSceneUILoad=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Object.assign(Q,A.sceneUI.serialize()),this._loadedSceneUIs.add(Q.i)};_onSceneUISetAttachedToEntity=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.e=A.entity?A.entity.id:void 0,Q.p=A.entity?void 0:Q.p};_onSceneUISetOffset=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.o=A.offset?wQ.serializeVector(A.offset):void 0};_onSceneUISetPosition=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.p=A.position?wQ.serializeVector(A.position):void 0,Q.e=A.position?void 0:Q.e};_onSceneUISetState=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.s=A.state};_onSceneUISetViewDistance=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);Q.v=A.viewDistance};_onSceneUIUnload=(A)=>{let Q=this._createOrGetQueuedSceneUISync(A.sceneUI);if(this._loadedSceneUIs.has(Q.i))this._queuedSceneUISyncs.broadcast.delete(Q.i),this._loadedSceneUIs.delete(Q.i);else Q.rm=!0};_onSimulationDebugRaycast=(A)=>{this._createOrGetDebugRaycastsSync().push(wQ.serializePhysicsDebugRaycast(A))};_onSimulationDebugRender=(A)=>{let Q=this._createOrGetDebugRenderSync();Q.v=Array.from(A.vertices),Q.c=Array.from(A.colors)};_onWorldSetAmbientLightColor=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.ac=wQ.serializeRgbColor(A.color)};_onWorldSetAmbientLightIntensity=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.ai=A.intensity};_onWorldSetDirectionalLightColor=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.dc=wQ.serializeRgbColor(A.color)};_onWorldSetDirectionalLightIntensity=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.di=A.intensity};_onWorldSetDirectionalLightPosition=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.dp=wQ.serializeVector(A.position)};_onWorldSetFogColor=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.fc=wQ.serializeRgbColor(A.color)};_onWorldSetFogFar=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.ff=A.far};_onWorldSetFogNear=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.fn=A.near};_onWorldSetSkyboxIntensity=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.si=A.intensity};_onWorldSetSkyboxUri=(A)=>{let Q=this._createOrGetQueuedWorldSync(A.world);Q.s=A.uri};_createAudioSync=(A)=>({i:A.id});_createOrGetQueuedAudioSync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedAudioSync(): Audio has no id!");return this._createOrGetQueuedSync(this._queuedAudioSyncs,A.id,this._createAudioSync,A,Q)}_createBlockSync=(A)=>({i:0,c:[A.x,A.y,A.z]});_createOrGetQueuedBlockSync(A,Q){let B=`${A.x},${A.y},${A.z}`;return this._createOrGetQueuedSync(this._queuedBlockSyncs,B,this._createBlockSync,A,Q)}_createBlockTypeSync=(A)=>({i:A.id});_createOrGetQueuedBlockTypeSync(A,Q){return this._createOrGetQueuedSync(this._queuedBlockTypeSyncs,A.id,this._createBlockTypeSync,A,Q)}_createCameraSync=()=>({});_createOrGetQueuedCameraSync(A){return this._createOrGetQueuedSingletonSync(this._queuedCameraSyncs,this._createCameraSync,void 0,A)}_createChatMessagesSync=()=>[];_createOrGetQueuedChatMessagesSync(A){return this._createOrGetQueuedSingletonSync(this._queuedChatMessagesSyncs,this._createChatMessagesSync,void 0,A)}_createChunkSync=(A)=>({c:[A.originCoordinate.x,A.originCoordinate.y,A.originCoordinate.z]});_createOrGetQueuedChunkSync(A,Q){if(!A.originCoordinate)r.fatalError("NetworkSynchronizer._createOrGetQueuedChunkSync(): Chunk has no origin coordinate!");let B=`${A.originCoordinate.x},${A.originCoordinate.y},${A.originCoordinate.z}`;return this._createOrGetQueuedSync(this._queuedChunkSyncs,B,this._createChunkSync,A,Q)}_createDebugRaycastsSync=()=>[];_createOrGetDebugRaycastsSync(A){return this._createOrGetQueuedSingletonSync(this._queuedDebugRaycastsSyncs,this._createDebugRaycastsSync,void 0,A)}_createDebugRenderSync=()=>({v:[],c:[]});_createOrGetDebugRenderSync(A){return this._createOrGetQueuedSingletonSync(this._queuedDebugRenderSyncs,this._createDebugRenderSync,void 0,A)}_createEntitySync=(A)=>({i:A.id});_createOrGetQueuedEntitySync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedEntitySync(): Entity has no id!");return this._createOrGetQueuedSync(this._queuedEntitySyncs,A.id,this._createEntitySync,A,Q)}_createNotificationPermissionRequestSync=()=>null;_createOrGetQueuedNotificationPermissionRequestSync(A){return this._createOrGetQueuedSingletonSync(this._queuedNotificationPermissionRequestSyncs,this._createNotificationPermissionRequestSync,void 0,A)}_createParticleEmitterSync=(A)=>({i:A.id});_createOrGetQueuedParticleEmitterSync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedParticleEmitterSync(): ParticleEmitter has no id!");return this._createOrGetQueuedSync(this._queuedParticleEmitterSyncs,A.id,this._createParticleEmitterSync,A,Q)}_createPlayerSync=(A)=>({i:A.id});_createOrGetQueuedPlayerSync(A,Q){return this._createOrGetQueuedSync(this._queuedPlayerSyncs,A.id,this._createPlayerSync,A,Q)}_createSceneUISync=(A)=>({i:A.id});_createOrGetQueuedSceneUISync(A,Q){if(A.id===void 0)r.fatalError("NetworkSynchronizer._createOrGetQueuedSceneUISync(): SceneUI has no id!");return this._createOrGetQueuedSync(this._queuedSceneUISyncs,A.id,this._createSceneUISync,A,Q)}_createUISync=()=>({});_createOrGetQueuedUISync(A){return this._createOrGetQueuedSingletonSync(this._queuedUISyncs,this._createUISync,void 0,A)}_createUIDatasSync=()=>[];_createOrGetQueuedUIDatasSync(A){return this._createOrGetQueuedSingletonSync(this._queuedUIDatasSyncs,this._createUIDatasSync,void 0,A)}_createWorldSync=(A)=>({i:A.id});_createOrGetQueuedWorldSync(A,Q){if(A.id!==this._world.id)r.fatalError("NetworkSynchronizer._createOrGetQueuedWorldSync(): World does not match this network synchronizer world!");return this._createOrGetQueuedSingletonSync(this._queuedWorldSyncs,this._createWorldSync,A,Q)}_createOrGetQueuedSync(A,Q,B,Y,J){let C,X;if(J){if(X=A.perPlayer.get(J),!X)X=new bB,A.perPlayer.set(J,X);if(!this._outboundPerPlayerReliablePackets.has(J))this._outboundPerPlayerReliablePackets.set(J,[])}else X=A.broadcast;if(C=X.get(Q),C===void 0)C=B(Y),X.set(Q,C);return C}_createOrGetQueuedSingletonSync(A,Q,B,Y){let J=Y?A.perPlayer.get(Y):A.broadcast;if(J===void 0)if(J=Q(B),Y){if(A.perPlayer.set(Y,J),!this._outboundPerPlayerReliablePackets.has(Y))this._outboundPerPlayerReliablePackets.set(Y,[])}else A.broadcast=J;return J}_clearSyncQueue(A){if(A.broadcast.size>0)A.broadcast.clear();if(A.perPlayer.size>0)A.perPlayer.clear()}_clearSingletonSyncQueue(A){if(A.broadcast!==void 0)A.broadcast=void 0;if(A.perPlayer.size>0)A.perPlayer.clear()}_collectSingletonSyncToOutboundPackets(A,Q){if(A.perPlayer.size>0)for(let[B,Y]of A.perPlayer.entries())this._outboundPerPlayerReliablePackets.get(B)?.push(gQ.createPacket(Q,Y,this._world.loop.currentTick));if(A.broadcast!==void 0){let B=gQ.createPacket(Q,A.broadcast,this._world.loop.currentTick);this._outboundSharedReliablePackets.push(B);for(let Y of this._outboundPerPlayerReliablePackets.valuesArray)Y.push(B)}}_collectSyncToOutboundPackets(A,Q){if(A.perPlayer.size>0)for(let[B,Y]of A.perPlayer.entries())this._outboundPerPlayerReliablePackets.get(B)?.push(gQ.createPacket(Q,Y.valuesArray,this._world.loop.currentTick));if(A.broadcast.size>0){let B=gQ.createPacket(Q,A.broadcast.valuesArray,this._world.loop.currentTick);this._outboundSharedReliablePackets.push(B);for(let Y of this._outboundPerPlayerReliablePackets.valuesArray)Y.push(B)}}}class mL{_particleEmitters=new Map;_nextParticleEmitterId=1;_world;constructor(A){this._world=A}get world(){return this._world}despawnEntityAttachedParticleEmitters(A){this.getAllEntityAttachedParticleEmitters(A).forEach((Q)=>{Q.despawn()})}getAllParticleEmitters(){return Array.from(this._particleEmitters.values())}getAllEntityAttachedParticleEmitters(A){return this.getAllParticleEmitters().filter((Q)=>Q.attachedToEntity===A)}registerParticleEmitter(A){if(A.id!==void 0)return A.id;let Q=this._nextParticleEmitterId;return this._particleEmitters.set(Q,A),this._nextParticleEmitterId++,Q}unregisterParticleEmitter(A){if(A.id===void 0)return;this._particleEmitters.delete(A.id)}}class uL{_sceneUIs=new Map;_nextSceneUIId=1;_world;constructor(A){this._world=A}get world(){return this._world}getAllSceneUIs(){return Array.from(this._sceneUIs.values())}getAllEntityAttachedSceneUIs(A){return this.getAllSceneUIs().filter((Q)=>Q.attachedToEntity===A)}getSceneUIById(A){return this._sceneUIs.get(A)}registerSceneUI(A){if(A.id!==void 0)return A.id;let Q=this._nextSceneUIId;return this._sceneUIs.set(Q,A),this._nextSceneUIId++,Q}unloadEntityAttachedSceneUIs(A){this.getAllEntityAttachedSceneUIs(A).forEach((Q)=>{Q.unload()})}unregisterSceneUI(A){if(A.id===void 0)return;this._sceneUIs.delete(A.id)}}var Tf0=2,Sf0=3;class dL{_accumulatorMs=0;_targetTicksPerSecond;_fixedTimestepMs;_fixedTimestepS;_maxAccumulatorMs;_nextTickMs=0;_lastLoopTimeMs=0;_tickFunction;_tickErrorCallback;_tickHandle=null;constructor(A,Q,B){this._targetTicksPerSecond=A,this._fixedTimestepS=Math.fround(1/A),this._fixedTimestepMs=Math.fround(this._fixedTimestepS*1000),this._maxAccumulatorMs=this._fixedTimestepMs*Sf0,this._tickFunction=Q,this._tickErrorCallback=B}get targetTicksPerSecond(){return this._targetTicksPerSecond}get fixedTimestepMs(){return this._fixedTimestepMs}get fixedTimestepS(){return this._fixedTimestepS}get isStarted(){return!!this._tickHandle}get nextTickMs(){return this._nextTickMs}start(){if(this._tickHandle)return;this._lastLoopTimeMs=performance.now();let A=()=>{let Q=performance.now(),B=Q-this._lastLoopTimeMs;if(this._lastLoopTimeMs=Q,this._accumulatorMs+=B,this._accumulatorMs>this._maxAccumulatorMs)this._accumulatorMs=this._maxAccumulatorMs;if(this._accumulatorMs>=this._fixedTimestepMs)o0.startSpan({operation:"ticker_tick"},()=>{let Y=0;while(this._accumulatorMs>=this._fixedTimestepMs&&Y<Tf0)this._tick(this._fixedTimestepMs),this._accumulatorMs-=this._fixedTimestepMs,Y++});this._nextTickMs=Math.max(0,this._fixedTimestepMs-this._accumulatorMs),this._tickHandle=setTimeout(A,this._nextTickMs)};A()}stop(){if(!this._tickHandle)return;clearTimeout(this._tickHandle),this._tickHandle=null}_tick(A){try{this._tickFunction(A)}catch(Q){if(Q instanceof Error&&this._tickErrorCallback)this._tickErrorCallback(Q);else r.warning(`Ticker._tick(): tick callback threw an error, but it was not an instance of Error. Error: ${Q}`)}}}var iPQ;((C)=>{C.START="WORLD_LOOP.START";C.STOP="WORLD_LOOP.STOP";C.TICK_START="WORLD_LOOP.TICK_START";C.TICK_END="WORLD_LOOP.TICK_END";C.TICK_ERROR="WORLD_LOOP.TICK_ERROR"})(iPQ||={});class lL extends GQ{_currentTick=0;_ticker;_world;constructor(A,Q=fL){super();this._ticker=new dL(Q,this._tick,this._onTickError),this._world=A}get currentTick(){return this._currentTick}get isStarted(){return this._ticker.isStarted}get nextTickMs(){return this._ticker.nextTickMs}get timestepS(){return this._ticker.fixedTimestepS}get world(){return this._world}start(){this._ticker.start(),this.emitWithWorld(this._world,"WORLD_LOOP.START",{worldLoop:this})}stop(){this._ticker.stop(),this.emitWithWorld(this._world,"WORLD_LOOP.STOP",{worldLoop:this})}_tick=(A)=>{this.emitWithWorld(this._world,"WORLD_LOOP.TICK_START",{worldLoop:this,tickDeltaMs:A});let Q=performance.now();o0.startSpan({operation:"world_tick",attributes:{serverPlayerCount:uC.instance.playerCount,targetTickRate:this._ticker.targetTicksPerSecond,targetTickRateMs:this._ticker.fixedTimestepMs,worldId:this._world.id,worldName:this._world.name,worldChunkCount:this._world.chunkLattice.chunkCount,worldEntityCount:this._world.entityManager.entityCount,worldLoopTick:this._currentTick}},()=>{if(o0.startSpan({operation:"entities_tick"},()=>this._world.entityManager.tickEntities(A)),o0.startSpan({operation:"simulation_step"},()=>this._world.simulation.step(A)),o0.startSpan({operation:"entities_emit_updates"},()=>this._world.entityManager.checkAndEmitUpdates()),this._world.networkSynchronizer.shouldSynchronize())o0.startSpan({operation:"network_synchronize"},()=>this._world.networkSynchronizer.synchronize())}),this._currentTick++,this.emitWithWorld(this._world,"WORLD_LOOP.TICK_END",{worldLoop:this,tickDurationMs:performance.now()-Q})};_onTickError=(A)=>{r.error(`WorldLoop._onTickError(): Error: ${A}`),this.emitWithWorld(this._world,"WORLD_LOOP.TICK_ERROR",{worldLoop:this,error:A})}}var Go;((Z)=>{Z.SET_AMBIENT_LIGHT_COLOR="WORLD.SET_AMBIENT_LIGHT_COLOR";Z.SET_AMBIENT_LIGHT_INTENSITY="WORLD.SET_AMBIENT_LIGHT_INTENSITY";Z.SET_DIRECTIONAL_LIGHT_COLOR="WORLD.SET_DIRECTIONAL_LIGHT_COLOR";Z.SET_DIRECTIONAL_LIGHT_INTENSITY="WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY";Z.SET_DIRECTIONAL_LIGHT_POSITION="WORLD.SET_DIRECTIONAL_LIGHT_POSITION";Z.SET_FOG_COLOR="WORLD.SET_FOG_COLOR";Z.SET_FOG_FAR="WORLD.SET_FOG_FAR";Z.SET_FOG_NEAR="WORLD.SET_FOG_NEAR";Z.SET_SKYBOX_INTENSITY="WORLD.SET_SKYBOX_INTENSITY";Z.SET_SKYBOX_URI="WORLD.SET_SKYBOX_URI";Z.START="WORLD.START";Z.STOP="WORLD.STOP"})(Go||={});class cL extends GQ{_id;_ambientLightColor;_ambientLightIntensity;_audioManager;_blockTypeRegistry;_chatManager;_chunkLattice;_directionalLightColor;_directionalLightIntensity;_directionalLightPosition;_entityManager;_fogColor;_fogFar;_fogNear;_loop;_name;_networkSynchronizer;_particleEmitterManager;_sceneUIManager;_simulation;_skyboxIntensity;_skyboxUri;_tag;constructor(A){super();if(this._id=A.id,this._ambientLightColor=A.ambientLightColor??{r:255,g:255,b:255},this._ambientLightIntensity=A.ambientLightIntensity??1,this._directionalLightColor=A.directionalLightColor??{r:255,g:255,b:255},this._directionalLightIntensity=A.directionalLightIntensity??3,this._directionalLightPosition=A.directionalLightPosition??{x:100,y:150,z:100},this._fogColor=A.fogColor,this._fogFar=A.fogFar??550,this._fogNear=A.fogNear??500,this._name=A.name,this._skyboxIntensity=A.skyboxIntensity??1,this._skyboxUri=A.skyboxUri,this._tag=A.tag,this._audioManager=new qV(this),this._blockTypeRegistry=new uH(this),this._chatManager=new jD(this),this._chunkLattice=new OD(this),this._entityManager=new kD(this),this._loop=new lL(this,A.tickRate),this._networkSynchronizer=new Xk(this),this._particleEmitterManager=new mL(this),this._sceneUIManager=new uL(this),this._simulation=new bL(this,A.tickRate,A.gravity),A.map)this.loadMap(A.map)}get id(){return this._id}get ambientLightColor(){return this._ambientLightColor}get ambientLightIntensity(){return this._ambientLightIntensity}get blockTypeRegistry(){return this._blockTypeRegistry}get chatManager(){return this._chatManager}get chunkLattice(){return this._chunkLattice}get directionalLightColor(){return this._directionalLightColor}get directionalLightIntensity(){return this._directionalLightIntensity}get directionalLightPosition(){return this._directionalLightPosition}get entityManager(){return this._entityManager}get fogColor(){return this._fogColor}get fogFar(){return this._fogFar}get fogNear(){return this._fogNear}get loop(){return this._loop}get name(){return this._name}get networkSynchronizer(){return this._networkSynchronizer}get particleEmitterManager(){return this._particleEmitterManager}get sceneUIManager(){return this._sceneUIManager}get simulation(){return this._simulation}get skyboxIntensity(){return this._skyboxIntensity}get skyboxUri(){return this._skyboxUri}get audioManager(){return this._audioManager}get tag(){return this._tag}loadMap(A){if(this.chunkLattice.clear(),A.blockTypes)for(let Q of A.blockTypes)this.blockTypeRegistry.registerGenericBlockType({id:Q.id,isLiquid:Q.isLiquid,lightLevel:Q.lightLevel,name:Q.name,textureUri:Q.textureUri});if(A.blocks){let Q={};for(let B in A.blocks){let Y=A.blocks[B],J=B.indexOf(","),C=B.indexOf(",",J+1),X=Number(B.slice(0,J)),G=Number(B.slice(J+1,C)),F=Number(B.slice(C+1));if(!Q[Y])Q[Y]=[];Q[Y].push({x:X,y:G,z:F})}this.chunkLattice.initializeBlocks(Q)}if(A.entities)for(let Q in A.entities){let B=A.entities[Q],Y=Q.indexOf(","),J=Q.indexOf(",",Y+1),C=Number(Q.slice(0,Y)),X=Number(Q.slice(Y+1,J)),G=Number(Q.slice(J+1));new m0({isEnvironmental:!0,...B}).spawn(this,{x:C,y:X,z:G})}}setAmbientLightColor(A){this._ambientLightColor=A,this.emit("WORLD.SET_AMBIENT_LIGHT_COLOR",{world:this,color:A})}setAmbientLightIntensity(A){this._ambientLightIntensity=A,this.emit("WORLD.SET_AMBIENT_LIGHT_INTENSITY",{world:this,intensity:A})}setDirectionalLightColor(A){this._directionalLightColor=A,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",{world:this,color:A})}setDirectionalLightIntensity(A){this._directionalLightIntensity=A,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",{world:this,intensity:A})}setDirectionalLightPosition(A){this._directionalLightPosition=A,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",{world:this,position:A})}setFogColor(A){this._fogColor=A,this.emit("WORLD.SET_FOG_COLOR",{world:this,color:A})}setFogFar(A){this._fogFar=A,this.emit("WORLD.SET_FOG_FAR",{world:this,far:A})}setFogNear(A){this._fogNear=A,this.emit("WORLD.SET_FOG_NEAR",{world:this,near:A})}setSkyboxIntensity(A){this._skyboxIntensity=A,this.emit("WORLD.SET_SKYBOX_INTENSITY",{world:this,intensity:A})}setSkyboxUri(A){this._skyboxUri=A,this.emit("WORLD.SET_SKYBOX_URI",{world:this,uri:A})}start(){if(this._loop.isStarted)return;this._loop.start(),this.emit("WORLD.START",{world:this,startedAtMs:Date.now()})}stop(){if(!this._loop.isStarted)return;this._loop.stop(),this.emit("WORLD.STOP",{world:this,stoppedAtMs:Date.now()})}serialize(){return wQ.serializeWorld(this)}}var nPQ;((Q)=>Q.WORLD_CREATED="WORLD_MANAGER.WORLD_CREATED")(nPQ||={});class XW{static instance=new XW;_defaultWorld;_nextWorldId=1;_worlds=new Map;createWorld(A){let Q=new cL({...A,id:this._nextWorldId++});return Q.start(),this._worlds.set(Q.id,Q),GQ.globalInstance.emit("WORLD_MANAGER.WORLD_CREATED",{world:Q}),Q}getAllWorlds(){return Array.from(this._worlds.values())}getDefaultWorld(){return this._defaultWorld??=this.createWorld({name:"Default World",skyboxUri:"skyboxes/partly-cloudy"}),this._defaultWorld}getWorldsByTag(A){let Q=[];return this._worlds.forEach((B)=>{if(B.tag===A)Q.push(B)}),Q}getWorld(A){return this._worlds.get(A)}setDefaultWorld(A){this._defaultWorld=A}}var sPQ;((Y)=>{Y.PLAYER_CONNECTED="PLAYER_MANAGER.PLAYER_CONNECTED";Y.PLAYER_DISCONNECTED="PLAYER_MANAGER.PLAYER_DISCONNECTED";Y.PLAYER_RECONNECTED="PLAYER_MANAGER.PLAYER_RECONNECTED"})(sPQ||={});class uC{static instance=new uC;worldSelectionHandler;_connectionPlayers=new Map;constructor(){GQ.globalInstance.on("CONNECTION.OPENED",({connection:A,session:Q})=>{this._onConnectionOpened(A,Q)}),GQ.globalInstance.on("CONNECTION.DISCONNECTED",({connection:A})=>{this._onConnectionDisconnected(A)}),GQ.globalInstance.on("CONNECTION.RECONNECTED",({connection:A})=>{this._onConnectionReconnected(A)}),GQ.globalInstance.on("CONNECTION.CLOSED",({connection:A})=>{this._onConnectionClosed(A)})}get playerCount(){return this._connectionPlayers.size}getConnectedPlayers(){return Array.from(this._connectionPlayers.values())}getConnectedPlayersByWorld(A){return this.getConnectedPlayers().filter((Q)=>Q.world===A)}getConnectedPlayerByUsername(A){return Array.from(this._connectionPlayers.values()).find((Q)=>{return Q.username.toLowerCase()===A.toLowerCase()})}async _onConnectionOpened(A,Q){let B=new ZU(A,Q);await B.loadInitialPersistedData(),GQ.globalInstance.emit("PLAYER_MANAGER.PLAYER_CONNECTED",{player:B,connectionParams:A.initialConnectionParams});let Y=await this.worldSelectionHandler?.(B);B.joinWorld(Y??XW.instance.getDefaultWorld()),this._connectionPlayers.set(A,B)}_onConnectionDisconnected(A){let Q=this._connectionPlayers.get(A);if(Q)Q.resetInputs(),Q.camera.reset()}_onConnectionReconnected(A){let Q=this._connectionPlayers.get(A);if(Q)Q.reconnected(),GQ.globalInstance.emit("PLAYER_MANAGER.PLAYER_RECONNECTED",{player:Q});else r.warning(`PlayerManager._onConnectionReconnected(): Connection ${A.id} not in the PlayerManager._connectionPlayers map.`)}_onConnectionClosed(A){let Q=this._connectionPlayers.get(A);if(Q){if(Q.disconnect(),this._connectionPlayers.delete(A),!A.isDuplicate)f7.instance.unloadPlayerData(Q).catch((B)=>{r.warning(`PlayerManager._onConnectionClosed(): Failed to unload player data for player ${Q.id}. Error: ${B}`)});GQ.globalInstance.emit("PLAYER_MANAGER.PLAYER_DISCONNECTED",{player:Q})}else r.warning(`PlayerManager._onConnectionClosed(): Connection ${A.id} not in the PlayerManager._connectionPlayers map.`)}}import{randomBytes as _f0}from"crypto";import{Http3Server as vf0}from"@fails-components/webtransport";class pL extends GQ{static instance=new pL;_connectionIdConnections=new Map;_userIdConnections=new Map;_wss;_wts;constructor(){super();this._wss=new Qm.default({noServer:!0}),this._wss.on("connection",(A,Q)=>this._onConnection(A,void 0,Q.connectionId,Q.connectionParams,Q.session)),this._wts=new vf0({port:Ck,host:"0.0.0.0",secret:_f0(32).toString("hex"),cert:Yk,privKey:Jk,defaultDatagramsReadableMode:"bytes",initialStreamFlowControlWindow:1048576,streamShouldAutoTuneReceiveWindow:!0,streamFlowControlWindowSizeLimit:6291456,initialSessionFlowControlWindow:2097152,sessionShouldAutoTuneReceiveWindow:!0,sessionFlowControlWindowSizeLimit:15728640}),this._wts.setRequestCallback(this._onWebTransportRequest),this._startWebTransport().catch((A)=>{r.error(`Socket: WebTransport server failed to start or crashed while listening for sessions. Error: ${A}`)}),GQ.globalInstance.on("WEBSERVER.UPGRADE",async({req:A,socket:Q,head:B})=>{Q.on("error",()=>{}),await this._authorizeAndConnectWebsocket(A,Q,B)})}async _authorizeAndConnectWebsocket(A,Q,B){let Y=await this._authorizeConnection(A.url??"");if(Y.error){Q.end();return}A.connectionId=Y.connectionId,A.connectionParams=Y.connectionParams,A.session=Y.session,Q.setNoDelay(!0),this._wss.handleUpgrade(A,Q,B,(J)=>{if(J.readyState!==WU.default.OPEN)J.once("open",()=>this._wss.emit("connection",J,A));else this._wss.emit("connection",J,A)})}async _authorizeConnection(A){let Q=A.includes("?")?A.slice(A.indexOf("?")):"",B=new URLSearchParams(Q),Y=B.get("connectionId")??void 0,J=B.get("sessionToken")??"";if(Y&&this._isValidConnectionId(Y))return{connectionId:Y,connectionParams:B};else{let C=await D8.instance.getPlayerSession(J);if(C?.error)return{error:C.error};else if(C)return{connectionParams:B,session:C}}return{connectionParams:B}}_isValidConnectionId(A){return this._connectionIdConnections.has(A)}_onConnection=(A,Q,B,Y,J)=>{let C=J?.user.id,X=B&&this._connectionIdConnections.get(B),G=C&&this._userIdConnections.get(C);if(!X&&G)G.killDuplicateConnection();if(X){if(A)X.bindWs(A);if(Q)X.bindWt(Q).catch((F)=>{r.error(`Socket._onConnection(): WebTransport binding failed. Error: ${F}`)})}else{let F=new Z1(A,Q,Y,J);if(F.on("CONNECTION.CLOSED",()=>{if(this._connectionIdConnections.delete(F.id),C&&this._userIdConnections.get(C)===F)this._userIdConnections.delete(C)}),this._connectionIdConnections.set(F.id,F),C)this._userIdConnections.set(C,F)}};_onWebTransportRequest=async({header:A})=>{let{connectionId:Q,connectionParams:B,session:Y,error:J}=await this._authorizeConnection(A[":path"]??"");return{status:J?401:200,path:"/",userData:{connectionId:Q,connectionParams:B,session:Y}}};async _startWebTransport(){this._wts.startServer();for await(let A of this._wts.sessionStream("/"))try{let{connectionId:Q,connectionParams:B,session:Y}=A.userData;this._onConnection(void 0,A,Q,B,Y)}catch(Q){r.error(`Socket._startWebTransport(): WebTransport connection failed. Error: ${Q}`)}}}Buffer.poolSize=134217728;var aPQ;((B)=>{B.START="GAMESERVER.START";B.STOP="GAMESERVER.STOP"})(aPQ||={});function yf0(A){WB.init().then(()=>{return GW.instance.blockTextureRegistry.preloadAtlas()}).then(()=>{return GW.instance.modelRegistry.preloadModels()}).then(()=>{let Q;if(A.length>0)Q=A(GW.instance.worldManager.getDefaultWorld());else Q=A();return Promise.resolve(Q)}).then(()=>{GW.instance.start()}).catch((Q)=>{r.fatalError(`Failed to initialize the game engine, exiting. Error: ${Q}`)})}class GW{static _instance;_blockTextureRegistry=Z7.instance;_modelRegistry=BJ.instance;_playerManager=uC.instance;_socket=pL.instance;_worldManager=XW.instance;_webServer=UV.instance;constructor(){}static get instance(){if(!this._instance)this._instance=new GW;return this._instance}get blockTextureRegistry(){return this._blockTextureRegistry}get modelRegistry(){return this._modelRegistry}get playerManager(){return this._playerManager}get socket(){return this._socket}get webServer(){return this._webServer}get worldManager(){return this._worldManager}start(){if(GQ.globalInstance.emit("GAMESERVER.START",{startedAtMs:performance.now()}),this._webServer.start(),process.env.NODE_ENV!=="production")console.log("---"),console.log("\uD83D\uDFE2 Server Running: You can test & play it at: https://hytopia.com/play");r.enableCrashProtection()}}var iY=LA(Q$(),1);class B$ extends Float32Array{constructor(A,Q,B,Y){super([A,Q,B,Y])}get determinant(){return iY.mat2.determinant(this)}get frobeniusNorm(){return iY.mat2.frob(this)}static create(){let A=new B$(0,0,0,0);return iY.mat2.identity(A),A}static fromRotation(A){let Q=B$.create();return iY.mat2.fromRotation(Q,A),Q}static fromScaling(A){let Q=B$.create();return iY.mat2.fromScaling(Q,A),Q}add(A){return iY.mat2.add(this,this,A),this}adjoint(){return iY.mat2.adjoint(this,this),this}clone(){return new B$(this[0],this[1],this[2],this[3])}copy(A){return iY.mat2.copy(this,A),this}equals(A){return iY.mat2.equals(this,A)}exactEquals(A){return iY.mat2.exactEquals(this,A)}identity(){return iY.mat2.identity(this),this}invert(){return iY.mat2.invert(this,this),this}multiply(A){return iY.mat2.mul(this,this,A),this}multiplyScalar(A){return iY.mat2.multiplyScalar(this,this,A),this}rotate(A){return iY.mat2.rotate(this,this,A),this}subtract(A){return iY.mat2.sub(this,this,A),this}toString(){return`[${this[0]},${this[1]}][${this[2]},${this[3]}]`}transpose(){return iY.mat2.transpose(this,this),this}}var t0=LA(Q$(),1);class SX extends Float32Array{constructor(A,Q,B,Y,J,C,X,G,F){super([A,Q,B,Y,J,C,X,G,F])}get determinant(){return t0.mat3.determinant(this)}get frobeniusNorm(){return t0.mat3.frob(this)}static create(){let A=new SX(0,0,0,0,0,0,0,0,0);return t0.mat3.identity(A),A}static fromMatrix4(A){let Q=SX.create();return t0.mat3.fromMat4(Q,A),Q}static fromQuaternion(A){let Q=SX.create();return t0.mat3.fromQuat(Q,A),Q}static fromRotation(A){let Q=SX.create();return t0.mat3.fromRotation(Q,A),Q}static fromScaling(A){let Q=SX.create();return t0.mat3.fromScaling(Q,A),Q}static fromTranslation(A){let Q=SX.create();return t0.mat3.fromTranslation(Q,A),Q}add(A){return t0.mat3.add(this,this,A),this}adjoint(){return t0.mat3.adjoint(this,this),this}clone(){return new SX(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8])}copy(A){return t0.mat3.copy(this,A),this}equals(A){return t0.mat3.equals(this,A)}exactEquals(A){return t0.mat3.exactEquals(this,A)}identity(){return t0.mat3.identity(this),this}invert(){return t0.mat3.invert(this,this),this}multiply(A){return t0.mat3.mul(this,this,A),this}multiplyScalar(A){return t0.mat3.multiplyScalar(this,this,A),this}transformVector(A){return A.transformMatrix3(this)}projection(A,Q){return t0.mat3.projection(this,A,Q),this}rotate(A){return t0.mat3.rotate(this,this,A),this}subtract(A){return t0.mat3.sub(this,this,A),this}toString(){return`[${this[0]},${this[1]},${this[2]}][${this[3]},${this[4]},${this[5]}][${this[6]},${this[7]},${this[8]}]`}transpose(){return t0.mat3.transpose(this,this),this}}var UB=LA(Q$(),1);class N9 extends Float32Array{constructor(A,Q,B,Y,J,C,X,G,F,W,E,$,Z,U,K,I){super([A,Q,B,Y,J,C,X,G,F,W,E,$,Z,U,K,I])}get determinant(){return UB.mat4.determinant(this)}get frobeniusNorm(){return UB.mat4.frob(this)}static create(){let A=new N9(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return UB.mat4.identity(A),A}static fromQuaternion(A){let Q=N9.create();return UB.mat4.fromQuat(Q,A),Q}static fromRotation(A,Q){let B=N9.create();return UB.mat4.fromRotation(B,A,Q),B}static fromRotationTranslation(A,Q){let B=N9.create();return UB.mat4.fromRotationTranslation(B,A,Q),B}static fromRotationTranslationScale(A,Q,B){let Y=N9.create();return UB.mat4.fromRotationTranslationScale(Y,A,Q,B),Y}static fromRotationTranslationScaleOrigin(A,Q,B,Y){let J=N9.create();return UB.mat4.fromRotationTranslationScaleOrigin(J,A,Q,B,Y),J}static fromScaling(A){let Q=N9.create();return UB.mat4.fromScaling(Q,A),Q}static fromTranslation(A){let Q=N9.create();return UB.mat4.fromTranslation(Q,A),Q}static fromXRotation(A){let Q=N9.create();return UB.mat4.fromXRotation(Q,A),Q}static fromYRotation(A){let Q=N9.create();return UB.mat4.fromYRotation(Q,A),Q}static fromZRotation(A){let Q=N9.create();return UB.mat4.fromZRotation(Q,A),Q}add(A){return UB.mat4.add(this,this,A),this}adjoint(){return UB.mat4.adjoint(this,this),this}clone(){return new N9(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8],this[9],this[10],this[11],this[12],this[13],this[14],this[15])}copy(A){return UB.mat4.copy(this,A),this}equals(A){return UB.mat4.equals(this,A)}exactEquals(A){return UB.mat4.exactEquals(this,A)}frustrum(A,Q,B,Y,J,C){return UB.mat4.frustum(this,A,Q,B,Y,J,C),this}identity(){return UB.mat4.identity(this),this}invert(){return UB.mat4.invert(this,this),this}lookAt(A,Q,B){return UB.mat4.lookAt(this,A,Q,B),this}multiply(A){return UB.mat4.mul(this,this,A),this}multiplyScalar(A){return UB.mat4.multiplyScalar(this,this,A),this}orthographic(A,Q,B,Y,J,C){return UB.mat4.ortho(this,A,Q,B,Y,J,C),this}perspective(A,Q,B,Y){return UB.mat4.perspective(this,A,Q,B,Y),this}rotate(A,Q){return UB.mat4.rotate(this,this,A,Q),this}rotateX(A){return UB.mat4.rotateX(this,this,A),this}rotateY(A){return UB.mat4.rotateY(this,this,A),this}rotateZ(A){return UB.mat4.rotateZ(this,this,A),this}scale(A){return UB.mat4.scale(this,this,A),this}subtract(A){return UB.mat4.sub(this,this,A),this}targetTo(A,Q,B){return UB.mat4.targetTo(this,A,Q,B),this}toString(){return`[${this[0]},${this[1]},${this[2]},${this[3]}][${this[4]},${this[5]},${this[6]},${this[7]}][${this[8]},${this[9]},${this[10]},${this[11]}][${this[12]},${this[13]},${this[14]},${this[15]}]`}translate(A){return UB.mat4.translate(this,this,A),this}transpose(){return UB.mat4.transpose(this,this),this}}var Y0=LA(Q$(),1);class KV extends Float32Array{constructor(A,Q,B,Y){super([A,Q,B,Y])}get length(){return Y0.quat.length(this)}get squaredLength(){return Y0.quat.squaredLength(this)}get magnitude(){return Y0.quat.length(this)}get squaredMagnitude(){return Y0.quat.squaredLength(this)}get x(){return this[0]}set x(A){this[0]=A}get y(){return this[1]}set y(A){this[1]=A}get z(){return this[2]}set z(A){this[2]=A}get w(){return this[3]}set w(A){this[3]=A}static fromEuler(A,Q,B){let Y=Y0.quat.fromEuler(new Float32Array(4),A,Q,B);return new KV(Y[0],Y[1],Y[2],Y[3])}static fromQuaternionLike(A){return new KV(A.x,A.y,A.z,A.w)}clone(){return new KV(this.x,this.y,this.z,this.w)}conjugate(){return Y0.quat.conjugate(this,this),this}copy(A){return Y0.quat.copy(this,A),this}dot(A){return Y0.quat.dot(this,A)}exponential(){return Y0.quat.exp(this,this),this}equals(A){return Y0.quat.equals(this,A)}exactEquals(A){return Y0.quat.exactEquals(this,A)}getAngle(A){return Y0.quat.getAngle(this,A)}identity(){return Y0.quat.identity(this),this}invert(){return Y0.quat.invert(this,this),this}lerp(A,Q){return Y0.quat.lerp(this,this,A,Q),this}logarithm(){return Y0.quat.ln(this,this),this}multiply(A){return Y0.quat.multiply(this,this,A),this}transformVector(A){return A.transformQuaternion(this)}normalize(){return Y0.quat.normalize(this,this),this}power(A){return Y0.quat.pow(this,this,A),this}randomize(){return Y0.quat.random(this),this}rotateX(A){return Y0.quat.rotateX(this,this,A),this}rotateY(A){return Y0.quat.rotateY(this,this,A),this}rotateZ(A){return Y0.quat.rotateZ(this,this,A),this}scale(A){return Y0.quat.scale(this,this,A),this}setAxisAngle(A,Q){return Y0.quat.setAxisAngle(this,A,Q),this}slerp(A,Q){return Y0.quat.slerp(this,this,A,Q),this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}}var vB=LA(Q$(),1);class iL extends Float32Array{constructor(A,Q){super([A,Q])}get length(){return vB.vec2.length(this)}get squaredLength(){return vB.vec2.squaredLength(this)}get magnitude(){return vB.vec2.length(this)}get squaredMagnitude(){return vB.vec2.squaredLength(this)}get x(){return this[0]}set x(A){this[0]=A}get y(){return this[1]}set y(A){this[1]=A}static create(){return new iL(0,0)}add(A){return vB.vec2.add(this,this,A),this}angle(A){return vB.vec2.angle(this,A)}ceil(){return vB.vec2.ceil(this,this),this}clone(){return new iL(this.x,this.y)}copy(A){return vB.vec2.copy(this,A),this}distance(A){return vB.vec2.distance(this,A)}divide(A){return vB.vec2.divide(this,this,A),this}dot(A){return vB.vec2.dot(this,A)}equals(A){return vB.vec2.equals(this,A)}exactEquals(A){return vB.vec2.exactEquals(this,A)}floor(){return vB.vec2.floor(this,this),this}invert(){return vB.vec2.inverse(this,this),this}lerp(A,Q){return vB.vec2.lerp(this,this,A,Q),this}max(A){return vB.vec2.max(this,this,A),this}min(A){return vB.vec2.min(this,this,A),this}multiply(A){return vB.vec2.mul(this,this,A),this}negate(){return vB.vec2.negate(this,this),this}normalize(){return vB.vec2.normalize(this,this),this}randomize(A){return vB.vec2.random(this,A),this}rotate(A,Q){return vB.vec2.rotate(this,this,A,Q),this}round(){return vB.vec2.round(this,this),this}scale(A){return vB.vec2.scale(this,this,A),this}scaleAndAdd(A,Q){return vB.vec2.scaleAndAdd(this,this,A,Q),this}subtract(A){return vB.vec2.sub(this,this,A),this}toString(){return`${this.x},${this.y}`}transformMatrix2(A){return vB.vec2.transformMat2(this,this,A),this}transformMatrix3(A){return vB.vec2.transformMat3(this,this,A),this}transformMatrix4(A){return vB.vec2.transformMat4(this,this,A),this}zero(){return vB.vec2.zero(this),this}}var RB=LA(Q$(),1);class VV extends Float32Array{constructor(A,Q,B){super([A,Q,B])}get length(){return RB.vec3.length(this)}get squaredLength(){return RB.vec3.squaredLength(this)}get magnitude(){return RB.vec3.length(this)}get squaredMagnitude(){return RB.vec3.squaredLength(this)}get x(){return this[0]}set x(A){this[0]=A}get y(){return this[1]}set y(A){this[1]=A}get z(){return this[2]}set z(A){this[2]=A}static create(){return new VV(0,0,0)}static fromVector3Like(A){return new VV(A.x,A.y,A.z)}add(A){return RB.vec3.add(this,this,A),this}ceil(){return RB.vec3.ceil(this,this),this}clone(){return new VV(this.x,this.y,this.z)}copy(A){return RB.vec3.copy(this,A),this}cross(A){return RB.vec3.cross(this,this,A),this}distance(A){return RB.vec3.distance(this,A)}divide(A){return RB.vec3.div(this,this,A),this}dot(A){return RB.vec3.dot(this,A)}equals(A){return RB.vec3.equals(this,A)}exactEquals(A){return RB.vec3.exactEquals(this,A)}floor(){return RB.vec3.floor(this,this),this}invert(){return RB.vec3.inverse(this,this),this}lerp(A,Q){return RB.vec3.lerp(this,this,A,Q),this}max(A){return RB.vec3.max(this,this,A),this}min(A){return RB.vec3.min(this,this,A),this}multiply(A){return RB.vec3.mul(this,this,A),this}negate(){return RB.vec3.negate(this,this),this}normalize(){return RB.vec3.normalize(this,this),this}randomize(A){return RB.vec3.random(this,A),this}rotateX(A,Q){return RB.vec3.rotateX(this,this,A,Q),this}rotateY(A,Q){return RB.vec3.rotateY(this,this,A,Q),this}rotateZ(A,Q){return RB.vec3.rotateZ(this,this,A,Q),this}round(){return RB.vec3.round(this,this),this}scale(A){return RB.vec3.scale(this,this,A),this}scaleAndAdd(A,Q){return RB.vec3.scaleAndAdd(this,this,A,Q),this}subtract(A){return RB.vec3.sub(this,this,A),this}toString(){return`${this.x},${this.y},${this.z}`}transformMatrix3(A){return RB.vec3.transformMat3(this,this,A),this}transformMatrix4(A){return RB.vec3.transformMat4(this,this,A),this}transformQuaternion(A){return RB.vec3.transformQuat(this,this,A),this}zero(){return RB.vec3.zero(this),this}}var xSQ=LA(gSQ(),1);var hSQ=0.099856;class nL extends UW{faceSpeed=0;idleLoopedAnimations=[];idleLoopedAnimationsSpeed;jumpOneshotAnimations=[];moveLoopedAnimations=[];moveLoopedAnimationsSpeed;moveSpeed=0;_faceTarget;_jumpHeight=0;_moveCompletesWhenStuck=!1;_moveIgnoreAxes={};_moveStartMoveAnimations=!1;_moveStartIdleAnimationsOnCompletion=!0;_moveStoppingDistanceSquared=hSQ;_moveStuckAccumulatorMs=0;_moveStuckLastPosition;_moveTarget;_onFace;_onFaceComplete;_onMove;_onMoveComplete;_stopFaceRequested=!1;_stopMoveRequested=!1;constructor(A={}){super();this.idleLoopedAnimations=A.idleLoopedAnimations??this.idleLoopedAnimations,this.idleLoopedAnimationsSpeed=A.idleLoopedAnimationsSpeed??this.idleLoopedAnimationsSpeed,this.jumpOneshotAnimations=A.jumpOneshotAnimations??this.jumpOneshotAnimations,this.moveLoopedAnimations=A.moveLoopedAnimations??this.moveLoopedAnimations,this.moveLoopedAnimationsSpeed=A.moveLoopedAnimationsSpeed??this.moveLoopedAnimationsSpeed}spawn(A){super.spawn(A),this._startIdleAnimations(A)}face(A,Q,B){this._faceTarget=A,this.faceSpeed=Q,this._onFace=B?.faceCallback,this._onFaceComplete=B?.faceCompleteCallback}jump(A){this._jumpHeight=A}move(A,Q,B){this.moveSpeed=Q,this._moveCompletesWhenStuck=B?.moveCompletesWhenStuck??!1,this._moveIgnoreAxes=B?.moveIgnoreAxes??{},this._moveStartIdleAnimationsOnCompletion=B?.moveStartIdleAnimationsOnCompletion??!0,this._moveStartMoveAnimations=!0,this._moveStoppingDistanceSquared=B?.moveStoppingDistance?B.moveStoppingDistance**2:hSQ,this._moveTarget=A,this._onMove=B?.moveCallback,this._onMoveComplete=B?.moveCompleteCallback,this._moveStuckAccumulatorMs=0,this._moveStuckLastPosition=void 0}stopFace(){this._stopFaceRequested=!0}stopMove(){this._stopMoveRequested=!0}tick(A,Q){if(super.tick(A,Q),!this._moveTarget&&!this._faceTarget&&!this._jumpHeight)return;if(this._moveStartMoveAnimations)this._startMoveAnimations(A),this._moveStartMoveAnimations=!1;let B=Q/1000,Y=A.position;if(A.isDynamic&&this._jumpHeight>0){let J=Math.abs(A.world.simulation.gravity.y),C=Math.sqrt(2*J*this._jumpHeight);A.applyImpulse({x:0,y:C*A.mass,z:0}),this._jumpHeight=0,this._startJumpAnimations(A)}if(this._moveTarget){let J={x:this._moveIgnoreAxes.x?0:this._moveTarget.x-Y.x,y:this._moveIgnoreAxes.y?0:this._moveTarget.y-Y.y,z:this._moveIgnoreAxes.z?0:this._moveTarget.z-Y.z},C=J.x*J.x+J.y*J.y+J.z*J.z,X=!1;if(this._moveCompletesWhenStuck){if(this._moveStuckAccumulatorMs+=Q,this._moveStuckAccumulatorMs>=500){if(this._moveStuckLastPosition){let G=Y.x-this._moveStuckLastPosition.x,F=Y.y-this._moveStuckLastPosition.y,W=Y.z-this._moveStuckLastPosition.z;X=Math.sqrt(G*G+F*F+W*W)<this.moveSpeed*0.1}this._moveStuckLastPosition=Y,this._moveStuckAccumulatorMs=0}}if(C>this._moveStoppingDistanceSquared&&!this._stopMoveRequested&&!X){let G=Math.sqrt(C),F=this.moveSpeed*B,E=Math.min(G,F)/G,$={x:Y.x+J.x*E,y:Y.y+J.y*E,z:Y.z+J.z*E};if(A.setPosition($),this._onMove)this._onMove($,this._moveTarget)}else{if(this._moveStuckAccumulatorMs=0,this._moveStuckLastPosition=void 0,this._moveTarget=void 0,this._stopMoveRequested=!1,this._moveStartIdleAnimationsOnCompletion)this._startIdleAnimations(A);if(this._onMoveComplete){let G=this._onMoveComplete;this._onMove=void 0,this._onMoveComplete=void 0,G(Y)}}}if(this._faceTarget){let J={x:this._faceTarget.x-Y.x,z:this._faceTarget.z-Y.z},C=Math.atan2(-J.x,-J.z),X=A.rotation,G=Math.atan2(2*(X.w*X.y),1-2*(X.y*X.y)),F=C-G;while(F>Math.PI)F-=2*Math.PI;while(F<-Math.PI)F+=2*Math.PI;if(Math.abs(F)>0.01&&!this._stopFaceRequested){let W=this.faceSpeed*B,E=Math.abs(F)<W?F:Math.sign(F)*W,Z=(G+E)/2,U={x:0,y:Math.fround(Math.sin(Z)),z:0,w:Math.fround(Math.cos(Z))};if(A.setRotation(U),this._onFace)this._onFace(X,U)}else if(this._faceTarget=void 0,this._stopFaceRequested=!1,this._onFaceComplete){let W=this._onFaceComplete;this._onFace=void 0,this._onFaceComplete=void 0,W(A.rotation)}}}_startIdleAnimations(A){if(this.idleLoopedAnimationsSpeed)A.setModelAnimationsPlaybackRate(this.idleLoopedAnimationsSpeed);A.stopModelAnimations(this.moveLoopedAnimations),A.stopModelAnimations(this.jumpOneshotAnimations),A.startModelLoopedAnimations(this.idleLoopedAnimations)}_startJumpAnimations(A){A.stopModelAnimations(this.moveLoopedAnimations),A.stopModelAnimations(this.idleLoopedAnimations),A.startModelOneshotAnimations(this.jumpOneshotAnimations)}_startMoveAnimations(A){if(this.moveLoopedAnimationsSpeed)A.setModelAnimationsPlaybackRate(this.moveLoopedAnimationsSpeed);A.stopModelAnimations(this.jumpOneshotAnimations),A.stopModelAnimations(this.idleLoopedAnimations),A.startModelLoopedAnimations(this.moveLoopedAnimations)}}class Io extends nL{_debug=!1;_entity;_maxFall=0;_maxJump=0;_maxOpenSetIterations=200;_onPathfindAbort;_onPathfindComplete;_onWaypointMoveComplete;_onWaypointMoveSkipped;_speed=0;_target;_verticalPenalty=0;_waypoints=[];_waypointNextIndex=0;_waypointStoppingDistance;_waypointTimeoutMs=2000;constructor(A={}){super(A)}get debug(){return this._debug}get maxFall(){return this._maxFall}get maxJump(){return this._maxJump}get maxOpenSetIterations(){return this._maxOpenSetIterations}get speed(){return this._speed}get target(){return this._target}get verticalPenalty(){return this._verticalPenalty}get waypoints(){return this._waypoints}get waypointNextIndex(){return this._waypointNextIndex}get waypointTimeoutMs(){return this._waypointTimeoutMs}pathfind(A,Q,B){if(this._target=A,this._speed=Q,this._debug=B?.debug??!1,this._maxFall=B?.maxFall?-Math.abs(B.maxFall):0,this._maxJump=B?.maxJump?Math.abs(B.maxJump):0,this._maxOpenSetIterations=B?.maxOpenSetIterations??200,this._onPathfindAbort=B?.pathfindAbortCallback,this._onPathfindComplete=B?.pathfindCompleteCallback,this._onWaypointMoveComplete=B?.waypointMoveCompleteCallback,this._onWaypointMoveSkipped=B?.waypointMoveSkippedCallback,this._verticalPenalty=B?.verticalPenalty??0,this._waypoints=[],this._waypointNextIndex=0,this._waypointStoppingDistance=B?.waypointStoppingDistance,this._waypointTimeoutMs=B?.waypointTimeoutMs??2000/Q,!this._calculatePath())return!1;return this._moveToNextWaypoint(),!0}attach(A){super.attach(A),this._entity=A}detach(A){super.detach(A),this._entity=void 0}_calculatePath(){if(!this._target||!this._entity?.world)return r.error("PathfindingEntityController._calculatePath: No target or world"),!1;let A=this._entity.height,Q=this._findGroundedStart();if(!Q){if(this._debug)r.warning(`PathfindingEntityController._calculatePath: No valid grounded start found within maxFall distance, path search aborted. Start: ${this._coordinateToKey(this._target)}, Target: ${this._coordinateToKey(this._target)}`);return!1}let B={x:Math.floor(this._target.x),y:Math.floor(this._target.y),z:Math.floor(this._target.z)},Y=Math.abs(B.x-Q.x),J=Math.abs(B.y-Q.y),C=Math.abs(B.z-Q.z);if(Y<=2&&J<=2&&C<=2&&!this._isNeighborCoordinateBlocked(Q,B,this._entity.height))return this._waypoints=[{x:Q.x+0.5,y:Q.y+A/2,z:Q.z+0.5},{x:B.x+0.5,y:B.y+A/2,z:B.z+0.5}],!0;if(Q.x===B.x&&Q.y===B.y&&Q.z===B.z)return this._waypoints=[{x:Q.x+0.5,y:Q.y+A/2,z:Q.z+0.5}],!0;let G=this._coordinateToKey(Q),F=new Map,W=new Map([[G,0]]),E=new Map([[G,this._pathfindingHeuristic(Q,B)]]),$=new Set,Z=new xSQ.Heap((M,z)=>{let q=E.get(M[0])??1/0,N=E.get(z[0])??1/0;return q-N});Z.push([G,Q]);let U=[{x:0,y:0,z:1},{x:1,y:0,z:0},{x:0,y:0,z:-1},{x:-1,y:0,z:0},{x:1,y:0,z:1},{x:1,y:0,z:-1},{x:-1,y:0,z:1},{x:-1,y:0,z:-1}],K=[];for(let M=this._maxJump;M>=this._maxFall;M--){if(M===0)continue;let z=Math.abs(Q.y+M-B.y);K.push({y:M,distanceToTargetY:z})}K.sort((M,z)=>M.distanceToTargetY-z.distanceToTargetY);let I=[...U,...K.flatMap(({y:M})=>U.map((z)=>({...z,y:M})))],V=0,H=Math.abs(B.x-Q.x)+Math.abs(B.y-Q.y)+Math.abs(B.z-Q.z),D=Math.min(this._maxOpenSetIterations,H*20);while(!Z.isEmpty()&&V<D){V++;let[M,z]=Z.pop();if(z.x===B.x&&z.y===B.y&&z.z===B.z){let L=this._reconstructPath(F,z);if(this._waypoints=L.map((w)=>({x:w.x+0.5,y:w.y+A/2,z:w.z+0.5})),this._debug)console.log(`PathfindingEntityController._calculatePath: Path found after ${V} open set iterations. Start: ${this._coordinateToKey(Q)}, Target: ${this._coordinateToKey(this._target)}`);return!0}$.add(M);let q=W.get(M),N=new Map;for(let L of I){let w=`${L.x},${L.z}`,P=L.y<0;if(P&&N.has(w))continue;let _={x:z.x+L.x,y:z.y+L.y,z:z.z+L.z};if(Math.abs(B.x-_.x)+Math.abs(B.y-_.y)+Math.abs(B.z-_.z)>H*1.5)continue;let k=this._coordinateToKey(_);if($.has(k))continue;let T=this._isNeighborCoordinateBlocked(z,_,this._entity.height);if(P&&T){N.set(w,!0);continue}if(T)continue;let S=Math.abs(L.x),v=Math.abs(L.y),y=Math.abs(L.z),h=v===0?0:this._verticalPenalty,g=(Math.max(S,v,y)===1&&S+v+y>1?1.4:1)+h,m=q+g,u=W.get(k)??1/0;if(m>=u)continue;F.set(k,z),W.set(k,m);let p=m+this._pathfindingHeuristic(_,B);E.set(k,p),Z.push([k,_])}}if(V>=D){if(this._onPathfindAbort?.(),this._debug)r.warning(`PathfindingEntityController._calculatePath: Maximum open set iterations reached (${D}), path search aborted. Start: ${this._coordinateToKey(Q)}, Target: ${this._coordinateToKey(this._target)}`)}else if(this._debug)r.warning(`PathfindingEntityController._calculatePath: No valid path found. Start: ${this._coordinateToKey(Q)}, Target: ${this._coordinateToKey(this._target)}`);return this._target=void 0,this._waypoints=[],!1}_reconstructPath(A,Q){let B=[Q],Y=Q;while(A.has(this._coordinateToKey(Y)))Y=A.get(this._coordinateToKey(Y)),B.unshift(Y);return B}_coordinateToKey(A){return`${A.x},${A.y},${A.z}`}_moveToNextWaypoint(){let A=this._waypointNextIndex>0?this._waypoints[this._waypointNextIndex-1]:void 0,Q=this._waypoints[this._waypointNextIndex];if(!Q||!this._entity)return;let B=0;if(this._entity.isDynamic&&A&&Q.y>A.y){let Y=Q.y-A.y,J=Math.min(Y,this._maxJump)+0.75;this.jump(J);let C=Math.abs(this._entity.world.simulation.gravity.y),X=Math.sqrt(2*C*J),G=A.x+0.5,F=A.z+0.5,W=Q.x+0.5,E=Q.z+0.5,$=W-G,Z=E-F,U=Math.sqrt($*$+Z*Z),K=X/C,I=U/this._speed;B=Math.min(K*0.8,I)*1000}setTimeout(()=>{if(!this._entity)return;let Y=Date.now();this.face(Q,this._speed),this.move(Q,this._speed,{moveCompletesWhenStuck:!0,moveIgnoreAxes:{y:this._entity.isDynamic},moveStartIdleAnimationsOnCompletion:this._waypointNextIndex===this._waypoints.length-1,moveStoppingDistance:this._waypointStoppingDistance,moveCallback:()=>{if(Date.now()-Y>this._waypointTimeoutMs&&this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveSkipped?.(Q,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint()},moveCompleteCallback:()=>{if(this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveComplete?.(Q,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint();else this._onPathfindComplete?.()}})},B)}_pathfindingHeuristic(A,Q){return Math.abs(A.x-Q.x)+Math.abs(A.y-Q.y)+Math.abs(A.z-Q.z)}_isNeighborCoordinateBlocked(A,Q,B){if(!this._entity?.world)return!1;let Y=this._entity.world,J=Math.floor(Q.x),C=Math.floor(Q.y),X=Math.floor(Q.z),G=Math.floor(A.x),F=Math.floor(A.z);if(!Y.chunkLattice.hasBlock({x:J,y:C-1,z:X}))return!0;for(let W=0;W<B;W++)if(Y.chunkLattice.hasBlock({x:J,y:C+W,z:X}))return!0;if(J!==G&&X!==F)for(let W=0;W<B;W++){let E=Y.chunkLattice.hasBlock({x:J,y:C+W,z:F}),$=Y.chunkLattice.hasBlock({x:G,y:C+W,z:X});if(E||$)return!0}return!1}_findGroundedStart(){if(!this._entity?.world)return;let{x:A,y:Q,z:B}=this._entity.position,Y={x:Math.floor(A),y:Math.floor(Q),z:Math.floor(B)};for(let J=0;J<=Math.abs(this._maxFall);J++)if(this._entity.world.chunkLattice.hasBlock({...Y,y:Y.y-J-1}))return{...Y,y:Y.y-J};return}}export{yf0 as startServer,nPQ as WorldManagerEvent,XW as WorldManager,iPQ as WorldLoopEvent,lL as WorldLoop,Go as WorldEvent,cL as World,Yo as WebServerEvent,UV as WebServer,VV as Vector3,iL as Vector2,dL as Ticker,tZ as TelemetrySpanOperation,o0 as Telemetry,Jo as SimulationEvent,bL as Simulation,nL as SimpleEntityController,uL as SceneUIManager,Em as SceneUIEvent,SD as SceneUI,I7B as SUPPORTED_INPUTS,mH as RigidBodyType,j7 as RigidBody,KV as Quaternion,Nw as PlayerUIEvent,RD as PlayerUI,sPQ as PlayerManagerEvent,uC as PlayerManager,wD as PlayerEvent,i1 as PlayerEntity,NVA as PlayerCameraMode,Xm as PlayerCameraEvent,zD as PlayerCamera,ZU as Player,f7 as PersistenceManager,Io as PathfindingEntityController,mL as ParticleEmitterManager,Co as ParticleEmitterEvent,Xo as ParticleEmitter,RVA as PLAYER_ROTATION_UPDATE_THRESHOLD,zVA as PLAYER_POSITION_UPDATE_THRESHOLD_SQ,BJ as ModelRegistry,N9 as Matrix4,SX as Matrix3,B$ as Matrix2,bB as IterationMap,aPQ as GameServerEvent,GW as GameServer,GQ as EventRouter,r as ErrorHandler,kD as EntityManager,TD as EntityEvent,m0 as Entity,qVA as ENTITY_ROTATION_UPDATE_THRESHOLD,LVA as ENTITY_POSITION_UPDATE_THRESHOLD_SQ,C0 as DefaultPlayerEntityController,Zm as DefaultPlayerEntity,MVA as DEFAULT_ENTITY_RIGID_BODY_OPTIONS,T5 as CollisionGroupsBuilder,lW as CollisionGroup,c4 as ColliderShape,PD as ColliderMap,IC as Collider,Af as CoefficientCombineRule,Wm as ChunkLatticeEvent,OD as ChunkLattice,v9 as Chunk,jD as ChatManager,Gm as ChatEvent,Bf as BlockTypeRegistryEvent,uH as BlockTypeRegistry,Qf as BlockTypeEvent,HC as BlockType,Z7 as BlockTextureRegistry,J$ as Block,Oo as BaseEntityControllerEvent,UW as BaseEntityController,qV as AudioManager,Rk as AudioEvent,LV as Audio,zY as AssetsLibrary};
|