83 lines
3.2 KiB
JavaScript
83 lines
3.2 KiB
JavaScript
import { CommandPermissionLevel, Player, 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()));
|
|
system.beforeEvents.startup.subscribe((e) => {
|
|
e.customCommandRegistry.registerCommand({
|
|
name: 'lagoon',
|
|
description: 'Provides information for your Lagoon account.',
|
|
permissionLevel: CommandPermissionLevel.Any,
|
|
cheatsRequired: false
|
|
}, (origin) => {
|
|
const sender = origin.sourceEntity;
|
|
if (sender instanceof Player) {
|
|
sender.sendMessage(utils.prefix + '§aVotre lagoon code : ' + sender.lagoonCode + '\n§r§oMerci de ne pas divulguer ce code, il vous est propre !');
|
|
}
|
|
});
|
|
});
|
|
}
|
|
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();
|