///
///
import { m } from "../../../mappings/mappings";
import Feature from "../../featureClass/class";
import { drawCoolWaypoint } from "../../utils/renderUtils";
import SettingBase from "../settings/settingThings/settingBase";
import ToggleSetting from "../settings/settingThings/toggle";
class Waypoints extends Feature {
constructor() {
super()
}
onEnable() {
this.initVariables()
new SettingBase("/addwaypoint [name] [x] [y] [z] [r?] [g?] [b?] [area?]", "Allows you to create a waypoint", undefined, "create_waypoint", this)
new SettingBase("/delwaypoint [name]", "Allows you to delete a waypoint", undefined, "delete_waypoint", this)
new SettingBase("/clearwaypoints", "Allows you to clear all the waypoints", undefined, "clear_waypoints", this)
new SettingBase("/savewaypoints", "Copys the waypoints to your clipboard", undefined, "save_waypoints", this)
new SettingBase("/loadwaypoints", "Loads waypoints from your clipboard", undefined, "load_waypoints", this)
this.loadWaypointsFromSendCoords = new ToggleSetting("Load waypoints from /patcher sendcoords messages", "Will dissapear after 1min", true, "load_waypoints_from_sendcoords", this)
this.userWaypoints = JSON.parse(FileLib.read("soopyAddonsData", "soopyv2userwaypoints.json") || "{}")
this.userWaypointsHash = {}
this.userWaypointsAll = []
this.userWaypointsArr = Object.values(this.userWaypoints)
this.updateWaypointsHashes()
this.waypointsChanged = false
this.patcherWaypoints = []
this.registerEvent("renderWorld", this.renderWorld)
this.registerCommand("addwaypoint", (name, x = Math.floor(Player.getX()).toString(), y = Math.floor(Player.getY()).toString(), z = Math.floor(Player.getZ()).toString(), r = "0", g = "255", b = "0", area = "") => {
let lx = 0
let ly = 0
let lz = 0
if (Player.lookingAt().getX) {
lx = Player.lookingAt().getX()
ly = Player.lookingAt().getY()
lz = Player.lookingAt().getZ()
if (Player.lookingAt().getWidth) {
lx += -0.5
lz += -0.5
}
}
this.userWaypoints[name] = {
x: parseFloat(x.replace("l", lx).replace('p', Math.floor(Player.getX()))),
y: parseFloat(y.replace("l", ly).replace('p', Math.floor(Player.getY()))),
z: parseFloat(z.replace("l", lz).replace('p', Math.floor(Player.getZ()))),
r: parseInt(r) / 255,
g: parseInt(g) / 255,
b: parseInt(b) / 255,
area: area === "a" ? this.FeatureManager.features["dataLoader"].class.area : area.replace(/_/g, " "),
options: { name: ChatLib.addColor(name.replace(/_/g, " ")) }
}
this.userWaypointsArr = Object.values(this.userWaypoints)
this.waypointsChanged = true
this.updateWaypointsHashes()
ChatLib.chat(this.FeatureManager.messagePrefix + "Added waypoint " + name + "!")
})
this.registerCommand("delwaypoint", (name) => {
delete this.userWaypoints[name]
this.userWaypointsArr = Object.values(this.userWaypoints)
this.waypointsChanged = true
this.updateWaypointsHashes()
ChatLib.chat(this.FeatureManager.messagePrefix + "Deleted waypoint " + name + "!")
})
this.registerCommand("clearwaypoints", () => {
this.userWaypoints = {}
this.userWaypointsArr = []
this.waypointsChanged = true
this.updateWaypointsHashes()
ChatLib.chat(this.FeatureManager.messagePrefix + "Cleared waypoints!")
})
this.registerCommand("savewaypoints", () => {
Java.type("net.minecraft.client.gui.GuiScreen")[m.setClipboardString](JSON.stringify(this.userWaypoints))
ChatLib.chat(this.FeatureManager.messagePrefix + "Saved waypoints to clipboard!")
})
this.registerCommand("loadwaypoints", () => {
try {
this.userWaypoints = JSON.parse(Java.type("net.minecraft.client.gui.GuiScreen")[m.getClipboardString]())
this.userWaypointsArr = Object.values(this.userWaypoints)
this.waypointsChanged = true
this.updateWaypointsHashes()
ChatLib.chat(this.FeatureManager.messagePrefix + "Loaded waypoints from clipboard!")
} catch (e) {
ChatLib.chat(this.FeatureManager.messagePrefix + "Error loading from clipboard!")
}
})
this.registerChat("&r${*} &8> ${player}&f: &rx: ${x}, y: ${y}, z: ${z}", (player, x, y, z, e) => {
if (this.loadWaypointsFromSendCoords.getValue()) {
this.patcherWaypoints.push([Date.now(), parseInt(x), parseInt(y), parseInt(ChatLib.removeFormatting(z)), ChatLib.addColor(player)])
if (this.patcherWaypoints.length > 10) this.patcherWaypoints.shift()
}
})
this.registerChat("${player}&r&f: x: ${x}, y: ${y}, z: ${z}", (player, x, y, z, e) => {
if (player.includes(">")) return
if (this.loadWaypointsFromSendCoords.getValue()) {
this.patcherWaypoints.push([Date.now(), parseInt(x), parseInt(y), parseInt(ChatLib.removeFormatting(z)), ChatLib.addColor(player)])
if (this.patcherWaypoints.length > 10) this.patcherWaypoints.shift()
}
})
this.registerStep(false, 5, () => {
while (this.patcherWaypoints[0]?.[0] < Date.now() - 60000) {
this.patcherWaypoints.shift()
}
})
}
updateWaypointsHashes() {
this.userWaypointsAll = []
this.userWaypointsHash = {}
for (let waypoint of this.userWaypointsArr) {
if (!waypoint.area) {
this.userWaypointsAll.push(waypoint)
} else {
if (!this.userWaypointsHash[waypoint.area]) this.userWaypointsHash[waypoint.area] = []
this.userWaypointsHash[waypoint.area].push(waypoint)
}
}
}
renderWorld() {
for (let waypoint of this.userWaypointsAll) {
drawCoolWaypoint(waypoint.x, waypoint.y, waypoint.z, waypoint.r, waypoint.g, waypoint.b, waypoint.options)
}
if (this.userWaypointsHash[this.FeatureManager.features["dataLoader"].class.area]) {
for (let waypoint of this.userWaypointsHash[this.FeatureManager.features["dataLoader"].class.area]) {
drawCoolWaypoint(waypoint.x, waypoint.y, waypoint.z, waypoint.r, waypoint.g, waypoint.b, waypoint.options)
}
}
for (let waypoint of this.patcherWaypoints) {
drawCoolWaypoint(waypoint[1], waypoint[2], waypoint[3], 0, 255, 0, { name: waypoint[4] })
}
}
initVariables() {
}
onDisable() {
if (this.waypointsChanged) {
FileLib.write("soopyAddonsData", "soopyv2userwaypoints.json", JSON.stringify(this.userWaypoints))
}
this.initVariables()
}
}
module.exports = {
class: new Waypoints()
}