Add Lagoon proximity chat plugin with player initialization and utilities
This commit is contained in:
10
src/entities/player.ts
Normal file
10
src/entities/player.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Player } from "@minecraft/server";
|
||||
import utils from "utils";
|
||||
|
||||
export function InitPlayer(p: Player) {
|
||||
if(!p.initialized) {
|
||||
p.initialized = true;
|
||||
p.lagoonCode = utils.generateCode();
|
||||
p.sendMessage(utils.prefix+'§aVotre lagoon code : '+p.lagoonCode+'\n§r§oMerci de ne pas divulguer ce code, il vous est propre !')
|
||||
}
|
||||
}
|
||||
77
src/main.ts
Normal file
77
src/main.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { system, world } from "@minecraft/server";
|
||||
import utils from "utils";
|
||||
import { websocket, WebSocketClient } from "@minecraft/server-net";
|
||||
import { InitPlayer } from "entities/player";
|
||||
import { roomCode } from "properties";
|
||||
|
||||
class LagoonAddons {
|
||||
|
||||
private ws!: WebSocketClient;
|
||||
public timer: number = 0;
|
||||
|
||||
constructor () {
|
||||
world.afterEvents.worldLoad.subscribe(() => system.run(() => this.initEarlyExecution()));
|
||||
}
|
||||
|
||||
async initEarlyExecution() {
|
||||
this.ws = await websocket.connect('wss://lagoon.under-scape.com/ws/rooms/'+roomCode+'/plugins/proximity');
|
||||
this.ws.afterEvents.message.subscribe((event) => {
|
||||
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(`§cConnexion à lagoon fermé ! (${event})`);
|
||||
console.log(`Connexion à lagoon fermé ! (${event})`)
|
||||
});
|
||||
|
||||
world.getAllPlayers().forEach((p) => InitPlayer(p));
|
||||
world.afterEvents.playerSpawn.subscribe((e) => {
|
||||
system.runTimeout(() => {
|
||||
InitPlayer(e.player);
|
||||
}, 20 * 3);
|
||||
});
|
||||
|
||||
system.runInterval(() => this.clock(), 1);
|
||||
|
||||
utils.logStaff('§aLagoon loaded !');
|
||||
console.log('Lagoon loaded !');
|
||||
}
|
||||
|
||||
|
||||
async clock() {
|
||||
this.timer++;
|
||||
|
||||
// 1 seconde
|
||||
if (this.timer % 20 === 0) {
|
||||
|
||||
if (this.ws.isOpen) {
|
||||
const players: {x: number, y: number, z: number, code: string, muted: boolean}[] = world.getAllPlayers().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();
|
||||
1
src/properties.ts
Normal file
1
src/properties.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const roomCode = 'despia';
|
||||
8
src/type.d.ts
vendored
Normal file
8
src/type.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Player } from "@minecraft/server";
|
||||
|
||||
declare module "@minecraft/server" {
|
||||
export interface Player {
|
||||
lagoonCode: string;
|
||||
initialized: boolean;
|
||||
}
|
||||
}
|
||||
33
src/utils.ts
Normal file
33
src/utils.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { Player, system, world } from "@minecraft/server";
|
||||
|
||||
class Utils {
|
||||
public prefix: string = '§e[§cLagoon§e]§c ';
|
||||
|
||||
getRndInteger(min: number, max: number) {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
getStaffPlayers(): Player[] {
|
||||
return world.getPlayers({ tags: ['staff'] });
|
||||
}
|
||||
|
||||
logStaff(message: string) {
|
||||
this.getStaffPlayers().forEach((p) => p.sendMessage(this.prefix + message));
|
||||
}
|
||||
|
||||
makeid(length: number) {
|
||||
var result = '';
|
||||
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
var charactersLength = characters.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
generateCode() {
|
||||
return this.makeid(5);
|
||||
}
|
||||
}
|
||||
|
||||
export default new Utils();
|
||||
Reference in New Issue
Block a user