import { Player, Vector3, world } from "@minecraft/server"; import { vector3 } from "../utils/vectorUtils"; export class Trigger { point1: Vector3 = vector3(0, 0, 0); point2: Vector3 = vector3(0, 0, 0); eventToDispatch: string = ""; isPlayerInTrigger: Map = new Map(); hasTriggerd: boolean = false; constructor(point1: Vector3, point2: Vector3) { this.point1 = point1; this.point2 = point2; } hasPlayerEnterdTrigger(player: Player): boolean { const minX = Math.min(this.point1.x, this.point2.x); const maxX = Math.max(this.point1.x, this.point2.x); const minY = Math.min(this.point1.y, this.point2.y); const maxY = Math.max(this.point1.y, this.point2.y); const minZ = Math.min(this.point1.z, this.point2.z); const maxZ = Math.max(this.point1.z, this.point2.z); const playerPos = player.location; const inside = playerPos.x >= minX && playerPos.x <= maxX && playerPos.y >= minY && playerPos.y + 1 <= maxY && playerPos.z >= minZ && playerPos.z <= maxZ; let entererdTrigger = false; if (!this.isPlayerInTrigger.get(player.name) && inside) { entererdTrigger = true; } this.isPlayerInTrigger.set(player.name, inside); return entererdTrigger; } IsPlayerInside(player: Player): boolean { return this.isPlayerInTrigger.get(player.name) || false; } IsAnyPlayerInside(): boolean { let isInside = false; world.getAllPlayers().forEach((player) => { if (this.isPlayerInTrigger.get(player.name)) { isInside = true; } }); return isInside; } ShouldTrigger(): boolean { let isSomethingInTrigger = false; const players = world.getAllPlayers(); players.forEach((player) => { if (this.hasPlayerEnterdTrigger(player)) { isSomethingInTrigger = true; } }); return isSomethingInTrigger; } Update() { world .getDimension("overworld") .getEntities({ type: "minecraft:player" }) .forEach((player) => { //Check if the distance between the player and the trigger is less than the width of the trigger // if (this.hasPlayerEnterdTrigger(player.location)) { // world.sendMessage(`Player ${player.nameTag} is in trigger`); // } }); } }