/// /// import Feature from "../../featureClass/class"; import { drawBoxAtBlock, drawFilledBox, drawLinePoints } from "../../utils/renderUtils"; import SettingBase from "../settings/settingThings/settingBase"; class DungeonRoutes extends Feature { constructor() { super() } onEnable() { if (Player.getUUID().toString() !== "dc8c3964-7b29-4e03-ae9e-d13ebd65dd29") { new SettingBase("Coming soontm", "maby", undefined, "coming_soontm", this) return } this.actionId = 0 this.recentEtherwarps = [] this.recentMines = [] this.recentLocations = [] this.recentTnts = [] this.lastLocationUpdatedTime = Date.now() this.registerEvent("soundPlay", this.playSound) this.registerEvent("worldLoad", this.worldLoad) this.registerStep(true, 5, () => { if (this.recentLocations.length === 0 || Math.ceil(Player.getX()) !== this.recentLocations[this.recentLocations.length - 1].loc[0] || Math.ceil(Player.getY()) !== this.recentLocations[this.recentLocations.length - 1].loc[1] || Math.ceil(Player.getZ()) !== this.recentLocations[this.recentLocations.length - 1].loc[2]) { this.recentLocations.push({ loc: [Math.ceil(Player.getX()), Math.ceil(Player.getY()), Math.ceil(Player.getZ())], id: this.actionId++ }) this.checkForRemove() } }) this.registerEvent("renderWorld", () => { this.recentEtherwarps.forEach(({ loc }) => { drawFilledBox(loc.x, loc.y - 1, loc.z, 1, 1, 1, 0, 0, 50 / 255, true) drawBoxAtBlock(loc.x - 0.5, loc.y - 1, loc.z - 0.5, 1, 0, 0, 1, 1, 1) }) this.recentMines.forEach(({ loc }) => { drawFilledBox(loc.x, loc.y - 0.5, loc.z, 1, 1, 0, 1, 0, 50 / 255, true) }) if (this.recentLocations.length >= 2) drawLinePoints(this.recentLocations.map(a => [a.loc[0] - 0.5, a.loc[1] + 0.1, a.loc[2] - 0.5]), 0, 0, 255, 2, true) }) } worldLoad() { this.recentEtherwarps = [] this.recentMines = [] this.recentLocations = [] this.recentTnts = [] } checkForRemove() { if (this.recentLocations.length + this.recentMines.length + this.recentEtherwarps.length + this.recentTnts.length > 50) { let arrs = [this.recentLocations, this.recentMines, this.recentEtherwarps, this.recentTnts] let smallestArr = undefined if (this.recentLocations[0].id < this.recentMines[0].id && this.recentLocations[0].id < this.recentEtherwarps[0].id) { this.recentLocations.shift() return } if (this.recentMines[0].id < this.recentLocations[0].id && this.recentMines[0].id < this.recentEtherwarps[0].id) { this.recentMines.shift() return } if (this.recentEtherwarps[0].id < this.recentMines[0].id && this.recentEtherwarps[0].id < this.recentLocations[0].id) { this.recentEtherwarps.shift() return } } } playSound(pos, name, volume, pitch, categoryName, event) { let nameSplitted = name.split(".") if (name === "mob.enderdragon.hit") { //etherwarp this.recentEtherwarps.push({ loc: pos, id: this.actionId++ }) this.checkForRemove() } if (name === "random.explode") { //etherwarp this.recentTnts.push({ loc: pos, id: this.actionId++ }) this.checkForRemove() } if (nameSplitted[0] === "dig") { //mining block if (!this.recentMines.some(a => a.loc.x === pos.x && a.loc.y === pos.y && a.loc.z === pos.z )) { this.recentMines.push({ loc: pos, id: this.actionId++ }) this.checkForRemove() } } } onDisable() { } } module.exports = { class: new DungeonRoutes() }