import { system, world } from "@minecraft/server"; import utils from "utils"; import { websocket } from "@minecraft/server-net"; import { InitPlayer } from "entities/player"; import { roomCode } from "properties"; class LagoonAddons { constructor() { this.timer = 0; world.afterEvents.worldLoad.subscribe(() => system.run(() => this.initEarlyExecution())); } async connect() { this.ws = await websocket.connect('wss://lagoon.under-scape.com/ws/rooms/' + roomCode + '/plugins/proximity'); this.ws.afterEvents.message.subscribe((event) => { console.log(`Lagoon Debug Message : ${event.message}`); try { const payload = JSON.parse(event.message); const type = payload.type; const data = payload.data; if (type == 'status' && data == 'connected !') { utils.logStaff('§aLagoon connected !'); console.log('Lagoon connected !'); } } catch (error) { utils.logStaff('ERROR With Payload : ' + event.message); console.log('ERROR With Payload : ' + event.message); } }); this.ws.afterEvents.close.subscribe((event) => { utils.logStaff(`§cConnection to Lagoon closed.`); console.log(`Connection to Lagoon closed.`); utils.logStaff(`§eReconnecting in 5 seconds.`); console.log(`Reconnecting in 5 seconds.`); system.runTimeout(() => { this.connect(); }, 20 * 5); }); } async initEarlyExecution() { await this.connect(); world.getAllPlayers().forEach((p) => InitPlayer(p)); world.afterEvents.playerSpawn.subscribe((e) => { system.runTimeout(() => { InitPlayer(e.player); }, 20 * 3); }); system.runInterval(() => this.clock(), 20); utils.logStaff('§aLagoon loaded !'); console.log('Lagoon loaded !'); } async clock() { this.timer += 20; if (this.ws.isOpen) { const players = world.getAllPlayers().filter((p) => p.initialized).map((p) => { return { ...p.location, code: p.lagoonCode, muted: p.hasTag('muted') }; }); this.ws.send(JSON.stringify({ type: 'positions', uuid: utils.makeid(100), data: players })); } } } new LagoonAddons();