diff options
-rw-r--r-- | featureClass/featureManager.js | 1 | ||||
-rw-r--r-- | features/events/index.js | 873 | ||||
-rw-r--r-- | features/streamsGUI/index.js | 87 | ||||
-rw-r--r-- | features/waypoints/index.js | 6 | ||||
-rw-r--r-- | metadata.json | 4 |
5 files changed, 502 insertions, 469 deletions
diff --git a/featureClass/featureManager.js b/featureClass/featureManager.js index ad67c7f..abfdd0d 100644 --- a/featureClass/featureManager.js +++ b/featureClass/featureManager.js @@ -469,6 +469,7 @@ class FeatureManager { } unregisterForge(event) { + if (!this.forgeEvents[event.id]) return unregisterForgeBase(this.forgeEvents[event.id].trigger) delete this.forgeEvents[event.id] } diff --git a/features/events/index.js b/features/events/index.js index 61ba36e..5190808 100644 --- a/features/events/index.js +++ b/features/events/index.js @@ -1,5 +1,6 @@ /// <reference types="../../../CTAutocomplete" /> /// <reference lib="es2015" /> +import { m } from "../../../mappings/mappings"; import Feature from "../../featureClass/class"; import socketConnection from "../../socketConnection"; import { drawBoxAtBlock, drawBoxAtBlockNotVisThruWalls, drawCoolWaypoint, drawLine } from "../../utils/renderUtils"; @@ -8,427 +9,459 @@ import SettingBase from "../settings/settingThings/settingBase"; import ToggleSetting from "../settings/settingThings/toggle"; class Events extends Feature { - constructor() { - super() - } - - onEnable() { - this.initVariables() - - this.burrialData = { - points: [], - locations: [], - historicalLocations: [] - } - this.lastWorldChange = 0 - this.lastRequest = 0 - this.potentialParticleLocs = {} - this.showingWaypoints = false - this.lastPath = [] - this.updatingPath = false - this.lastPathCords = undefined - - - this.loadFromParticles = new ToggleSetting("Load burrials from particles", "Will load particles from burrows in the world", true, "burrial_from_partles", this) - this.showBurrialGuess = new ToggleSetting("Estimate burrial location from ability", "Will show a line + box where it thinks the burrial is", true, "burrial_guess", this) - new SettingBase("NOTE: You must have music disabled for burrial guessess to work", "/togglemusic", false, "burrial_guess_into", this).requires(this.showBurrialGuess) - - this.otherInquisWaypoints = new ToggleSetting("Show other users inquis locations", "May be usefull for loot share", true, "inquis_location_other", this) - - this.shinyBlocks = [] - - this.lastDing = 0 - this.lastDingPitch = 0 - this.firstPitch = 0 - this.lastParticlePoint = undefined - this.particlePoint = undefined - this.guessPoint1 = undefined - this.guessPoint = undefined - this.guessPoint2 = undefined - this.dingIndex = 0 - - this.slayerLocationDataH = {} - this.todoE = [] - - this.shinyBlockOverlayEnabled = new ToggleSetting("Shiny blocks highlight", "Will highlight shiny blocks in the end", false, "shiny_blocks_overlay", this) - - this.registerEvent("worldLoad", this.worldLoad) - this.registerEvent("spawnParticle", this.spawnParticle).registeredWhen(() => this.showingWaypoints) - this.registerEvent("renderWorld", this.renderWorld).registeredWhen(() => this.showingWaypoints || this.shinyBlockOverlayEnabled.getValue()) - this.registerStep(true, 2, this.step) - this.registerStep(false, 5, this.step_5s) - - this.registerEvent("soundPlay", this.playSound).registeredWhen(() => this.showingWaypoints) - this.registerForge(net.minecraftforge.event.entity.EntityJoinWorldEvent, this.entityJoinWorldEvent).registeredWhen(() => this.showingWaypoints); - - this.registerChat("&r&eYou dug out a Griffin Burrow! &r&7(${*}/4)&r", this.burrialClicked) - this.registerChat("&r&eYou finished the Griffin burrow chain! &r&7(4/4)&r", this.burrialClicked) - this.inquisWaypointSpawned = false - } - - entityJoinWorldEvent(e) { - this.todoE.push(e.entity); - } - - inquisData(loc, user) { - if (!loc) { - delete this.slayerLocationDataH[user] - return - } - this.slayerLocationDataH[user] = [loc, Date.now()] - } - - renderWorld(ticks) { - this.shinyBlocks.forEach(([loc]) => { - drawBoxAtBlockNotVisThruWalls(loc[0], loc[1], loc[2], 0, 255, 0, 0.1, 0.1) - }) - if (this.showingWaypoints) { - if (this.guessPoint && this.showBurrialGuess.getValue()) { - drawCoolWaypoint(this.guessPoint[0] - 0.5, this.guessPoint[1] - 0.5, this.guessPoint[2] - 0.5, 255, 255, 0, { name: "§eGuess" }) - drawLine(this.guessPoint1[0], this.guessPoint1[1], this.guessPoint1[2], this.guessPoint2[0], this.guessPoint2[1], this.guessPoint2[2], 255, 255, 0) - } - this.burrialData.locations.forEach((loc, i) => { - - let typeReplace = [ - "Start", - "Mob", - "Treasure", - "Finish", - "Unknown" - ] - if (!loc.clicked) { - blue = false - if (loc.lastPing && Date.now() - loc.lastPing < 500) { - blue = true - } - - let name = "" - - if (loc.fromApi) { - name = (loc.nearest ? "§c" : "§a") + "(" + (loc.chain + 1) + "/4) " + typeReplace[loc.type] + " burrial" - } else { - name = (loc.nearest ? "§c" : "§a") + typeReplace[loc.type] + " burrial" - } - - drawCoolWaypoint(loc.x, loc.y, loc.z, 0, blue ? 100 : 255, blue ? 255 : 0, { name: name }) - } - }) - } - - if (this.otherInquisWaypoints.getValue()) { - Object.keys(this.slayerLocationDataH).forEach(key => { - drawCoolWaypoint(this.slayerLocationDataH[key][0][0], this.slayerLocationDataH[key][0][1], this.slayerLocationDataH[key][0][2], 255, 0, 0, { name: key + "'s inquis" }) - }) - } - } - - sortBurrialLocations() { - let sorted = [...this.burrialData.locations] - sorted.sort((a, b) => { - let aDist = calculateDistanceQuick([Player.getX(), Player.getY(), Player.getZ()], [a.x + 0.5, a.y + 2.5, a.z + 0.5]) - let bDist = calculateDistanceQuick([Player.getX(), Player.getY(), Player.getZ()], [b.x + 0.5, b.y + 2.5, b.z + 0.5]) - - return bDist - aDist - }) - this.burrialData.locations = sorted - } - - step() { - if (!Player.getInventory()) return - - hasDianaShovle = false - let slots = [0, 1, 2, 3, 4, 5, 6, 7, 8] - slots.forEach(a => { - item = Player.getInventory().getStackInSlot(a) - if (!item) return - if (ChatLib.removeFormatting(item.getName()) === "Ancestral Spade") { - hasDianaShovle = true - } - }) - - let showingWaypointsNew = (this.lastWorldChange + 5000 < Date.now() ? hasDianaShovle && this.FeatureManager.features["dataLoader"].class.area === "Hub" && this.loadFromParticles.getValue() : this.showingWaypoints || (hasDianaShovle && this.FeatureManager.features["dataLoader"].class.area === "Hub" && this.loadFromParticles.getValue())) - - this.showingWaypoints = showingWaypointsNew - - this.shinyBlocks = this.shinyBlocks.filter(([loc, time]) => { - return time > Date.now() - 5000 - }) - - if (this.lastParticlePoint && this.showBurrialGuess.getValue() && Date.now() - this.lastDing > 500 && Date.now() - this.lastDing < 100000) { - // console.log(this.firstPitch, this.lastDingPitch, this.lastDingPitch / this.firstPitch) - this.lastDing = 0 - - let distance1 = 142.837 / ((this.lastDingPitch / this.firstPitch) - 0.984354) - 57.1417 - let distance = 142.837 / ((this.lastDingPitch / this.firstPitch + 0.025) - 0.984354) - 57.1417 - let distance2 = 142.837 / ((this.lastDingPitch / this.firstPitch + 0.05) - 0.984354) - 67.1417 - - - // this.lastParticlePoint = undefined - // this.particlePoint = undefined - let lineDist = Math.hypot(this.lastParticlePoint[0] - this.particlePoint[0], this.lastParticlePoint[1] - this.particlePoint[1], this.lastParticlePoint[2] - this.particlePoint[2]) - let changes = [this.particlePoint[0] - this.lastParticlePoint[0], this.particlePoint[1] - this.lastParticlePoint[1], this.particlePoint[2] - this.lastParticlePoint[2]] - changes = changes.map(a => a / lineDist) - - let finalPoint1 = [this.particlePoint[0] + changes[0] * distance1, this.particlePoint[1] + changes[1] * distance1, this.particlePoint[2] + changes[2] * distance1] - this.guessPoint1 = finalPoint1 - let finalPoint = [this.particlePoint[0] + changes[0] * distance, this.particlePoint[1] + changes[1] * distance, this.particlePoint[2] + changes[2] * distance] - this.guessPoint = finalPoint - let finalPoint2 = [this.particlePoint[0] + changes[0] * distance2, this.particlePoint[1] + changes[1] * distance2, this.particlePoint[2] + changes[2] * distance2] - this.guessPoint2 = finalPoint2 - - if (this.showingWaypoints) Client.showTitle("&cGo!", "", 0, 20, 20) - } - - - Object.keys(this.slayerLocationDataH).forEach(n => { - if (this.slayerLocationDataH[n][1] + 60000 * 3 < Date.now()) { - delete this.slayerLocationDataH[n] - } - }) - - this.todoE.forEach(e => { - e = new Entity(e) - if (e.getName().toLowerCase().includes("inquis") && Math.abs(e.getY() - Player.getY()) < 10 && Math.abs(e.getX() - Player.getX()) < 10 && Math.abs(e.getZ() - Player.getZ()) < 10) { - socketConnection.sendInquisData({ loc: [Math.round(Player.getX()), Math.round(Player.getY()), Math.round(Player.getZ())] }); - this.inquisWaypointSpawned = true - } - }) - this.todoE = [] - } - - step_5s() { - this.sortBurrialLocations() - } - - worldLoad() { - this.burrialData.points = [] - this.burrialData.locations = [] - this.burrialData.historicalLocations = [] - this.lastDing = 0 - this.lastDingPitch = 0 - this.firstPitch = 0 - this.lastParticlePoint = undefined - this.particlePoint = undefined - this.guessPoint1 = undefined - this.guessPoint = undefined - this.guessPoint2 = undefined - this.dingIndex = 0 - - this.lastPath = undefined - this.lastPathCords = undefined - - this.lastWorldChange = Date.now() - } - - playSound(pos, name, volume, pitch, categoryName, event) { - if (!this.showBurrialGuess.getValue()) return - // if (pos.getX() === Math.floor(Player.getX() * 8) / 8 && pos.getZ() === Math.floor(Player.getZ() * 8) / 8) return - if (name !== "note.harp") return - if (this.lastDing === 0) { - this.firstPitch = pitch - } - this.lastDing = Date.now() - this.lastDingPitch = pitch - } - - spawnParticle(particle, type, event) { - if (this.showingWaypoints && this.showBurrialGuess.getValue() && particle.toString().startsWith("SparkFX,")) { - let run = false - if (Math.abs(particle.getX() - Player.getX()) < 3 && Math.abs(particle.getY() - Player.getY()) < 3 && Math.abs(particle.getZ() - Player.getZ()) < 3) { - run = true - } - if (this.particlePoint && !run && Math.abs(particle.getX() - this.particlePoint[0]) < 2 && Math.abs(particle.getY() - this.particlePoint[1]) < 0.5 && Math.abs(particle.getZ() - this.particlePoint[2]) < 2) { - run = true - } - if (run) { - this.lastParticlePoint = this.particlePoint - this.particlePoint = [particle.getX(), particle.getY(), particle.getZ()] - Client.showTitle("&cStand still...", "", 0, 20, 20) - } - } - if (this.shinyBlockOverlayEnabled.getValue() && this.FeatureManager.features["dataLoader"].class.areaFine === "The End") { - if (particle.toString().startsWith("EntitySpellParticleFX,")) { - if (particle.getUnderlyingEntity().func_70534_d() === particle.getUnderlyingEntity().func_70535_g()) { - let arr = [particle.getX(), particle.getY(), particle.getZ()] - if (arr.map(a => Math.abs(a % 1)).includes(0.25) || arr.map(a => Math.abs(a % 1)).includes(0.75)) { - this.shinyBlocks.push([[particle.getX(), particle.getY(), particle.getZ()], Date.now()]) - } - } - } - } - if (this.showingWaypoints && this.loadFromParticles.getValue()) { - let foundEnchant = false - let foundCrit = false - let foundStep = false - let isMob = undefined - - if (particle.toString().startsWith('EntityEnchantmentTableParticleFX, ')) { - foundEnchant = true - } - else if (particle.toString().startsWith('EntityCrit2FX, ')) { - foundCrit = true - - isMob = particle.getUnderlyingEntity().func_70534_d() > 0.5 //mob) - } - else if (particle.toString().startsWith('EntityFootStepFX, ')) { - foundStep = true - } - else if (particle.toString().startsWith('EntityCritFX, ')) { - - let locstr = Math.floor(particle.getX()) + "," + Math.floor(particle.getY() - 1) + "," + Math.floor(particle.getZ()) - - let removed = false - this.burrialData.locations.filter((loc, i) => { - if (!loc.clicked && loc.x + "," + loc.y + "," + loc.z === locstr) { - loc.clicked = true - removed = true - - this.lastPathCords.shift() - } - }) - if (!removed) return; - this.burrialData.locations = this.burrialData.locations.filter(a => { - if (!a.clicked) return true - if (calculateDistanceQuick([a.x, a.y, a.z], [Player.getX(), Player.getY(), Player.getZ()]) < 15 * 15) return true; - - this.burrialData.historicalLocations.unshift(a) - - return false - }) - if (this.burrialData.historicalLocations.length > 10) this.burrialData.historicalLocations.pop() - - return; - } - - if (!foundEnchant && !foundCrit && !foundStep) return; - - let locstr = Math.floor(particle.getX()) + "," + Math.floor(particle.getY() - 1) + "," + Math.floor(particle.getZ()) - let locarr = [Math.floor(particle.getX()), Math.floor(particle.getY() - 1), Math.floor(particle.getZ())] - - let found = false - - this.burrialData.locations.forEach((loc) => { - if (loc.x + "," + loc.y + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if ((loc.x + 1) + "," + loc.y + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if ((loc.x + 1) + "," + (loc.y + 1) + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if ((loc.x + 1) + "," + (loc.y - 1) + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if ((loc.x - 1) + "," + (loc.y + 1) + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if ((loc.x - 1) + "," + (loc.y - 1) + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if ((loc.x - 1) + "," + loc.y + "," + loc.z === locstr) { - found = true - loc.lastPing = Date.now() - } - if (loc.x + "," + loc.y + "," + (loc.z + 1) === locstr) { - found = true - loc.lastPing = Date.now() - } - if (loc.x + "," + loc.y + "," + (loc.z - 1) === locstr) { - found = true - loc.lastPing = Date.now() - } - }) - if (this.burrialData.historicalLocations) { - this.burrialData.historicalLocations.forEach((loc) => { - if (loc.x + "," + loc.y + "," + loc.z === locstr) { - found = true - } - }) - } - - if (found) return; - - - if (!this.potentialParticleLocs[locstr]) this.potentialParticleLocs[locstr] = { enchant: 0, crit: 0, step: 0, isMob: 0, timestamp: Date.now() } - - if (foundEnchant) this.potentialParticleLocs[locstr].enchant++ - if (foundCrit) this.potentialParticleLocs[locstr].crit++ - if (foundStep) this.potentialParticleLocs[locstr].step++ - if (foundCrit && isMob) this.potentialParticleLocs[locstr].isMob++ - if (foundCrit && !isMob) this.potentialParticleLocs[locstr].isMob-- - - this.potentialParticleLocs[locstr].timestamp = Date.now() - - if (this.potentialParticleLocs[locstr].enchant > 1 && this.potentialParticleLocs[locstr].step > 3) { - this.burrialData.locations.push({ - "x": locarr[0], - "y": locarr[1], - "z": locarr[2], - "type": this.potentialParticleLocs[locstr].isMob > 1 ? 1 : (this.potentialParticleLocs[locstr].crit > this.potentialParticleLocs[locstr].enchant / 20 ? 0 : 2), - "tier": -1, - "chain": -1, - "fromApi": false - }) - World.playSound("note.pling", 100, 2) - } - } - } - - burrialClicked() { - if (this.inquisWaypointSpawned) { - socketConnection.sendInquisData({ loc: null }); - this.inquisWaypointSpawned = false - } - if (!this.showingWaypoints) return - - let nearestBurriali = undefined - let nearestBurrialDist = Infinity - - this.burrialData.locations.forEach((loc, i) => { - let dist = calculateDistanceQuick([loc.x, loc.y, loc.z], [Player.getX(), Player.getY(), Player.getZ()]) - if (dist < nearestBurrialDist) { - nearestBurrialDist = dist - nearestBurriali = i - } - }) - - if (nearestBurriali === undefined) return; - this.burrialData.locations[nearestBurriali].clicked = true - - this.burrialData.locations = this.burrialData.locations.filter(a => { - if (!a.clicked) return true - if (calculateDistanceQuick([a.x, a.y, a.z], [Player.getX(), Player.getY(), Player.getZ()]) < 15 * 15) return true; - - this.burrialData.historicalLocations.unshift(a) - - return false - }) - if (this.burrialData.historicalLocations.length > 10) this.burrialData.historicalLocations.pop() - if (this.lastPathCords) this.lastPathCords.shift() - } - - initVariables() { - this.burrialData = undefined - this.potentialParticleLocs = undefined - this.showingWaypoints = undefined - this.lastPath = undefined - this.updatingPath = undefined - this.hudElements = undefined - this.lastPathCords = undefined - } - - onDisable() { - this.initVariables() - } + constructor() { + super() + } + + onEnable() { + this.initVariables() + + this.burrialData = { + points: [], + locations: [], + historicalLocations: [] + } + this.lastWorldChange = 0 + this.lastRequest = 0 + this.potentialParticleLocs = {} + this.showingWaypoints = false + this.lastPath = [] + this.updatingPath = false + this.lastPathCords = undefined + + + this.loadFromParticles = new ToggleSetting("Load burrials from particles", "Will load particles from burrows in the world", true, "burrial_from_partles", this) + this.showBurrialGuess = new ToggleSetting("Estimate burrial location from ability", "Will show a line + box where it thinks the burrial is", true, "burrial_guess", this) + new SettingBase("NOTE: You must have music disabled for burrial guessess to work", "/togglemusic", false, "burrial_guess_into", this).requires(this.showBurrialGuess) + + this.otherInquisWaypoints = new ToggleSetting("Show other users inquis locations", "May be usefull for loot share", true, "inquis_location_other", this) + + this.shinyBlocks = [] + + this.particleColorAverages = [0, 0, 0, 0] + + this.lastDing = 0 + this.lastDingPitch = 0 + this.firstPitch = 0 + this.lastParticlePoint = undefined + this.firstParticlePoint = undefined + this.particlePoint = undefined + this.guessPoint = undefined + this.particleC = 0 + this.distance = undefined + this.dingIndex = 0 + this.dingSlope = [] + + this.slayerLocationDataH = {} + this.todoE = [] + + this.shinyBlockOverlayEnabled = new ToggleSetting("Shiny blocks highlight", "Will highlight shiny blocks in the end", false, "shiny_blocks_overlay", this) + + this.registerEvent("worldLoad", this.worldLoad) + this.registerEvent("spawnParticle", this.spawnParticle).registeredWhen(() => this.showingWaypoints) + this.registerEvent("renderWorld", this.renderWorld).registeredWhen(() => this.showingWaypoints || this.shinyBlockOverlayEnabled.getValue()) + this.registerStep(true, 2, this.step) + this.registerStep(false, 5, this.step_5s) + + this.registerEvent("soundPlay", this.playSound).registeredWhen(() => this.showingWaypoints) + this.registerForge(net.minecraftforge.event.entity.EntityJoinWorldEvent, this.entityJoinWorldEvent).registeredWhen(() => this.showingWaypoints); + + this.registerChat("&r&eYou dug out a Griffin Burrow! &r&7(${*}/4)&r", this.burrialClicked) + this.registerChat("&r&eYou finished the Griffin burrow chain! &r&7(4/4)&r", this.burrialClicked) + this.inquisWaypointSpawned = false + } + + entityJoinWorldEvent(e) { + this.todoE.push(e.entity); + } + + inquisData(loc, user) { + if (!loc) { + delete this.slayerLocationDataH[user] + return + } + this.slayerLocationDataH[user] = [loc, Date.now()] + } + + renderWorld(ticks) { + this.shinyBlocks.forEach(([loc]) => { + drawBoxAtBlockNotVisThruWalls(loc[0], loc[1], loc[2], 0, 255, 0, 0.1, 0.1) + }) + if (this.showingWaypoints) { + if (this.guessPoint && this.showBurrialGuess.getValue()) { + drawCoolWaypoint(this.guessPoint[0] - 0.5, this.guessPoint[1] - 0.5, this.guessPoint[2] - 0.5, 255, 255, 0, { name: "§eGuess" }) + } + this.burrialData.locations.forEach((loc, i) => { + + let typeReplace = [ + "Start", + "Mob", + "Treasure", + "Finish", + "Unknown" + ] + if (!loc.clicked) { + blue = false + if (loc.lastPing && Date.now() - loc.lastPing < 500) { + blue = true + } + + let name = "" + + if (loc.fromApi) { + name = (loc.nearest ? "§c" : "§a") + "(" + (loc.chain + 1) + "/4) " + typeReplace[loc.type] + " burrial" + } else { + name = (loc.nearest ? "§c" : "§a") + typeReplace[loc.type] + " burrial" + } + + drawCoolWaypoint(loc.x, loc.y, loc.z, 0, blue ? 100 : 255, blue ? 255 : 0, { name: name }) + } + }) + } + + if (this.otherInquisWaypoints.getValue()) { + Object.keys(this.slayerLocationDataH).forEach(key => { + drawCoolWaypoint(this.slayerLocationDataH[key][0][0], this.slayerLocationDataH[key][0][1], this.slayerLocationDataH[key][0][2], 255, 0, 0, { name: key + "'s inquis" }) + }) + } + } + + sortBurrialLocations() { + let sorted = [...this.burrialData.locations] + sorted.sort((a, b) => { + let aDist = calculateDistanceQuick([Player.getX(), Player.getY(), Player.getZ()], [a.x + 0.5, a.y + 2.5, a.z + 0.5]) + let bDist = calculateDistanceQuick([Player.getX(), Player.getY(), Player.getZ()], [b.x + 0.5, b.y + 2.5, b.z + 0.5]) + + return bDist - aDist + }) + this.burrialData.locations = sorted + } + + step() { + if (!Player.getInventory()) return + + hasDianaShovle = false + let slots = [0, 1, 2, 3, 4, 5, 6, 7, 8] + slots.forEach(a => { + item = Player.getInventory().getStackInSlot(a) + if (!item) return + if (ChatLib.removeFormatting(item.getName()) === "Ancestral Spade") { + hasDianaShovle = true + } + }) + + let showingWaypointsNew = (this.lastWorldChange + 5000 < Date.now() ? hasDianaShovle && this.FeatureManager.features["dataLoader"].class.area === "Hub" && this.loadFromParticles.getValue() : this.showingWaypoints || (hasDianaShovle && this.FeatureManager.features["dataLoader"].class.area === "Hub" && this.loadFromParticles.getValue())) + + this.showingWaypoints = showingWaypointsNew + + this.shinyBlocks = this.shinyBlocks.filter(([loc, time]) => { + return time > Date.now() - 5000 + }) + + + Object.keys(this.slayerLocationDataH).forEach(n => { + if (this.slayerLocationDataH[n][1] + 60000 * 3 < Date.now()) { + delete this.slayerLocationDataH[n] + } + }) + + this.todoE.forEach(e => { + e = new Entity(e) + if (e.getName().toLowerCase().includes("inquis") && Math.abs(e.getY() - Player.getY()) < 10 && Math.abs(e.getX() - Player.getX()) < 10 && Math.abs(e.getZ() - Player.getZ()) < 10) { + socketConnection.sendInquisData({ loc: [Math.round(Player.getX()), Math.round(Player.getY()), Math.round(Player.getZ())] }); + this.inquisWaypointSpawned = true + } + }) + this.todoE = [] + } + + step_5s() { + this.sortBurrialLocations() + } + + worldLoad() { + this.burrialData.points = [] + this.burrialData.locations = [] + this.burrialData.historicalLocations = [] + this.lastDing = 0 + this.lastDingPitch = 0 + this.firstPitch = 0 + this.lastParticlePoint = undefined + this.lastParticlePoint2 = undefined + this.lastParticlePoint3 = undefined + this.firstParticlePoint = undefined + this.particlePoint = undefined + this.guessPoint = undefined + this.particleC = 0 + this.distance = undefined + this.dingIndex = 0 + this.dingSlope = [] + + this.lastPath = undefined + this.lastPathCords = undefined + + this.lastWorldChange = Date.now() + } + + playSound(pos, name, volume, pitch, categoryName, event) { + if (!this.showBurrialGuess.getValue()) return + // if (this.dingIndex > 13) return + // if (pos.getX() === Math.floor(Player.getX() * 8) / 8 && pos.getZ() === Math.floor(Player.getZ() * 8) / 8) return + if (name !== "note.harp") return + if (this.lastDing === 0) { + this.firstPitch = pitch + } + this.lastDing = Date.now() + if (pitch < this.lastDingPitch) { + this.firstPitch = pitch + this.dingIndex = 0 + this.dingSlope = [] + this.lastDingPitch = pitch + this.lastParticlePoint = undefined + this.lastParticlePoint2 = undefined + this.lastParticlePoint3 = undefined + this.firstParticlePoint = undefined + this.particleC = 0 + } + if (this.lastDingPitch === 0) { + this.lastDingPitch = pitch + this.lastParticlePoint = undefined + this.lastParticlePoint2 = undefined + this.lastParticlePoint3 = undefined + this.firstParticlePoint = undefined + this.particleC = 0 + return + } + if (this.dingSlope.length > 15) return + + this.dingIndex++ + if (this.dingIndex > 3) this.dingSlope.push(pitch - this.lastDingPitch) + let slope = this.dingSlope.reduce((a, b) => a + b, 0) / this.dingSlope.length + // console.log(slope) + this.distance = Math.E / slope + // console.log(this.dingIndex + " " + this.dingSlope / this.dingIndex + " " + pitch + " " + (pitch - this.lastDingPitch)) + + this.lastDingPitch = pitch + if (!this.lastParticlePoint3 || !this.particlePoint || !this.firstParticlePoint) return + + let lineDist = Math.hypot(this.lastParticlePoint3[0] - this.particlePoint[0], this.lastParticlePoint3[1] - this.particlePoint[1], this.lastParticlePoint3[2] - this.particlePoint[2]) + let distance = this.distance - Math.hypot(this.firstParticlePoint[0] - this.particlePoint[0], this.firstParticlePoint[2] - this.particlePoint[2]) + let changes = [this.particlePoint[0] - this.lastParticlePoint3[0], this.particlePoint[1] - this.lastParticlePoint3[1], this.particlePoint[2] - this.lastParticlePoint3[2]] + changes = changes.map(a => a / lineDist) + this.guessPoint = [this.particlePoint[0] + changes[0] * distance, this.particlePoint[1] + changes[1] * distance, this.particlePoint[2] + changes[2] * distance] + } + + spawnParticle(particle, type, event) { + if (this.showingWaypoints && this.showBurrialGuess.getValue() && particle.toString().startsWith("SparkFX,")) { + let run = false + if (Math.abs(particle.getX() - Player.getX()) < 3 && Math.abs(particle.getY() - Player.getY()) < 3 && Math.abs(particle.getZ() - Player.getZ()) < 3) { + run = true + } + if (this.particlePoint && !run && Math.abs(particle.getX() - this.particlePoint[0]) < 2 && Math.abs(particle.getY() - this.particlePoint[1]) < 0.5 && Math.abs(particle.getZ() - this.particlePoint[2]) < 2) { + run = true + } + if (run) { + this.particleC++ + if (this.particleC > 15) return + if (this.lastParticlePoint === undefined) { + this.firstParticlePoint = [particle.getX(), particle.getY(), particle.getZ()] + } + this.lastParticlePoint3 = this.lastParticlePoint2 + this.lastParticlePoint2 = this.lastParticlePoint + this.lastParticlePoint = this.particlePoint + this.particlePoint = [particle.getX(), particle.getY(), particle.getZ()] + + if (!this.lastParticlePoint3 || !this.particlePoint || !this.firstParticlePoint || !this.distance) return + + let lineDist = Math.hypot(this.lastParticlePoint3[0] - this.particlePoint[0], this.lastParticlePoint3[1] - this.particlePoint[1], this.lastParticlePoint3[2] - this.particlePoint[2]) + let distance = this.distance - Math.hypot(this.firstParticlePoint[0] - this.particlePoint[0], this.firstParticlePoint[2] - this.particlePoint[2]) + let changes = [this.particlePoint[0] - this.lastParticlePoint3[0], this.particlePoint[1] - this.lastParticlePoint3[1], this.particlePoint[2] - this.lastParticlePoint3[2]] + changes = changes.map(a => a / lineDist) + this.guessPoint = [this.particlePoint[0] + changes[0] * distance, this.particlePoint[1] + changes[1] * distance, this.particlePoint[2] + changes[2] * distance] + } + } + if (this.shinyBlockOverlayEnabled.getValue() && this.FeatureManager.features["dataLoader"].class.areaFine === "The End") { + if (particle.toString().startsWith("EntitySpellParticleFX,")) { + if (particle.getUnderlyingEntity().func_70534_d() === particle.getUnderlyingEntity().func_70535_g()) { + let arr = [particle.getX(), particle.getY(), particle.getZ()] + if (arr.map(a => Math.abs(a % 1)).includes(0.25) || arr.map(a => Math.abs(a % 1)).includes(0.75)) { + this.shinyBlocks.push([[particle.getX(), particle.getY(), particle.getZ()], Date.now()]) + } + } + } + } + if (this.showingWaypoints && this.loadFromParticles.getValue()) { + let foundEnchant = false + let foundCrit = false + let foundStep = false + let isMob = undefined + + if (particle.toString().startsWith('EntityEnchantmentTableParticleFX, ')) { + foundEnchant = true + } + else if (particle.toString().startsWith('EntityCrit2FX, ')) { + foundCrit = true + + isMob = particle.getUnderlyingEntity().func_70534_d() > 0.5 //mob) + } + else if (particle.toString().startsWith('EntityFootStepFX, ')) { + foundStep = true + } + else if (particle.toString().startsWith('EntityCritFX, ')) { + + let locstr = Math.floor(particle.getX()) + "," + Math.floor(particle.getY() - 1) + "," + Math.floor(particle.getZ()) + + let removed = false + this.burrialData.locations.filter((loc, i) => { + if (!loc.clicked && loc.x + "," + loc.y + "," + loc.z === locstr) { + loc.clicked = true + removed = true + } + }) + if (!removed) return; + this.burrialData.locations = this.burrialData.locations.filter(a => { + if (!a.clicked) return true + if (calculateDistanceQuick([a.x, a.y, a.z], [Player.getX(), Player.getY(), Player.getZ()]) < 15 * 15) return true; + + this.burrialData.historicalLocations.unshift(a) + + return false + }) + if (this.burrialData.historicalLocations.length > 10) this.burrialData.historicalLocations.pop() + + return; + } + + if (!foundEnchant && !foundCrit && !foundStep) return; + + let locstr = Math.floor(particle.getX()) + "," + Math.floor(particle.getY() - 1) + "," + Math.floor(particle.getZ()) + let locarr = [Math.floor(particle.getX()), Math.floor(particle.getY() - 1), Math.floor(particle.getZ())] + + let found = false + + this.burrialData.locations.forEach((loc) => { + if (loc.x + "," + loc.y + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if ((loc.x + 1) + "," + loc.y + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if ((loc.x + 1) + "," + (loc.y + 1) + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if ((loc.x + 1) + "," + (loc.y - 1) + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if ((loc.x - 1) + "," + (loc.y + 1) + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if ((loc.x - 1) + "," + (loc.y - 1) + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if ((loc.x - 1) + "," + loc.y + "," + loc.z === locstr) { + found = true + loc.lastPing = Date.now() + } + if (loc.x + "," + loc.y + "," + (loc.z + 1) === locstr) { + found = true + loc.lastPing = Date.now() + } + if (loc.x + "," + loc.y + "," + (loc.z - 1) === locstr) { + found = true + loc.lastPing = Date.now() + } + }) + if (this.burrialData.historicalLocations) { + this.burrialData.historicalLocations.forEach((loc) => { + if (loc.x + "," + loc.y + "," + loc.z === locstr) { + found = true + } + }) + } + + if (found) return; + + + if (!this.potentialParticleLocs[locstr]) this.potentialParticleLocs[locstr] = { enchant: 0, crit: 0, step: 0, isMob: 0, timestamp: Date.now() } + + if (foundEnchant) this.potentialParticleLocs[locstr].enchant++ + if (foundCrit) this.potentialParticleLocs[locstr].crit++ + if (foundStep) this.potentialParticleLocs[locstr].step++ + if (foundCrit && isMob) this.potentialParticleLocs[locstr].isMob++ + if (foundCrit && !isMob) this.potentialParticleLocs[locstr].isMob-- + + this.potentialParticleLocs[locstr].timestamp = Date.now() + + if (this.potentialParticleLocs[locstr].enchant > 1 && this.potentialParticleLocs[locstr].step > 3) { + this.burrialData.locations.push({ + "x": locarr[0], + "y": locarr[1], + "z": locarr[2], + "type": this.potentialParticleLocs[locstr].isMob > 1 ? 1 : (this.potentialParticleLocs[locstr].crit > this.potentialParticleLocs[locstr].enchant / 20 ? 0 : 2), + "tier": -1, + "chain": -1, + "fromApi": false + }) + World.playSound("note.pling", 100, 2) + } + } + } + + burrialClicked() { + this.particleColorAverages = [0, 0, 0, 0] + if (this.inquisWaypointSpawned) { + socketConnection.sendInquisData({ loc: null }); + this.inquisWaypointSpawned = false + } + if (!this.showingWaypoints) return + + let nearestBurriali = undefined + let nearestBurrialDist = Infinity + + this.burrialData.locations.forEach((loc, i) => { + let dist = calculateDistanceQuick([loc.x, loc.y, loc.z], [Player.getX(), Player.getY(), Player.getZ()]) + if (dist < nearestBurrialDist) { + nearestBurrialDist = dist + nearestBurriali = i + } + }) + + if (nearestBurriali === undefined) return; + this.burrialData.locations[nearestBurriali].clicked = true + + this.burrialData.locations = this.burrialData.locations.filter(a => { + if (!a.clicked) return true + if (calculateDistanceQuick([a.x, a.y, a.z], [Player.getX(), Player.getY(), Player.getZ()]) < 15 * 15) return true; + + this.burrialData.historicalLocations.unshift(a) + + return false + }) + if (this.burrialData.historicalLocations.length > 10) this.burrialData.historicalLocations.pop() + if (this.lastPathCords) this.lastPathCords.shift() + } + + initVariables() { + this.burrialData = undefined + this.potentialParticleLocs = undefined + this.showingWaypoints = undefined + this.lastPath = undefined + this.updatingPath = undefined + this.hudElements = undefined + this.lastPathCords = undefined + } + + onDisable() { + this.initVariables() + } } module.exports = { - class: new Events() + class: new Events() }
\ No newline at end of file diff --git a/features/streamsGUI/index.js b/features/streamsGUI/index.js index bc3fa6e..492728a 100644 --- a/features/streamsGUI/index.js +++ b/features/streamsGUI/index.js @@ -18,27 +18,27 @@ class StreamsGui extends Feature { super() } - onEnable(){ + onEnable() { this.initVariables() this.GuiPage = new StreamPage() } - initVariables(){ + initVariables() { this.GuiPage = undefined } - onDisable(){ + onDisable() { this.initVariables() } } class StreamPage extends GuiPage { - constructor(){ + constructor() { super(7) - + this.name = "Skyblock Streams" this.pages = [this.newPage()] @@ -49,10 +49,10 @@ class StreamPage extends GuiPage { let button = new ButtonWithArrow().setText("§0Open in browser").setLocation(0.7, 0.05, 0.2, 0.1) this.pages[0].addChild(button) - button.addEvent(new SoopyMouseClickEvent().setHandler(()=>{ + button.addEvent(new SoopyMouseClickEvent().setHandler(() => { java.awt.Desktop.getDesktop().browse( new java.net.URI("https://soopymc.my.to/skyblockstreams") - ); + ); })) this.streamsBox = new SoopyGuiElement().setLocation(0.1, 0.15, 0.8, 0.85) @@ -64,102 +64,101 @@ class StreamPage extends GuiPage { this.finaliseLoading() } - updateStreams(){ - fetch("http://soopymc.my.to/api/skyblockstreams").json(streams=>{ + updateStreams() { + fetch("http://soopymc.my.to/api/skyblockstreams").json(streams => { this.streamsBox.clearChildren() - + let y = 0 - - Object.keys(streams.twitch).forEach((channel, i)=>{ + + Object.keys(streams.twitch).forEach((channel, i) => { let stream = streams.twitch[channel] - - if(i%2===0){ + + if (i % 2 === 0) { this.streamsBox.addChild(new StreamElement().setStream(stream, true).setLocation(0, y, 0.45, 0.55).setStreamPage(this)) } - if(i%2===1){ + if (i % 2 === 1) { this.streamsBox.addChild(new StreamElement().setStream(stream, true).setLocation(0.55, y, 0.45, 0.55).setStreamPage(this)) - y+= 0.6 + y += 0.6 } }) }) } - openStreamSidebar(data){ - let sidebar = new SoopyGuiElement().setLocation(0,0,1,1) + openStreamSidebar(data) { + let sidebar = new SoopyGuiElement().setLocation(0, 0, 1, 1) this.openSidebarPage(sidebar) - sidebar.addChild(new SoopyTextElement().setText("§0"+data.user_name).setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1)) + sidebar.addChild(new SoopyTextElement().setText("§0" + data.user_name).setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1)) let title = new SoopyMarkdownElement().setText(data.title).setLocation(0.1, 0.15, 0.8, 0.1) sidebar.addChild(title) - let image = new SoopyImageElement().setImage(data.image).setLocation(0.1, 0.15+title.getHeight(), 0.8, 0.4) + let image = new SoopyImageElement().setImage(data.image).setLocation(0.1, 0.15 + title.getHeight(), 0.8, 0.4) sidebar.addChild(image) image.loadHeightFromImage() - let button = new ButtonWithArrow().setText("§0Watch on Twitch").setLocation(0.1, 0.15+image.location.size.y.get()+title.getHeight(), 0.8, 0.1) + let button = new ButtonWithArrow().setText("§0Watch on Twitch").setLocation(0.1, 0.15 + image.location.size.y.get() + title.getHeight(), 0.8, 0.1) sidebar.addChild(button) - button.addEvent(new SoopyMouseClickEvent().setHandler(()=>{ + button.addEvent(new SoopyMouseClickEvent().setHandler(() => { java.awt.Desktop.getDesktop().browse( new java.net.URI("https://twitch.tv/" + data.user_login) - ); + ); })) let language - if(data.language){ - language = new BoxWithText().setText("§0Language: "+data.language).setLocation(0.3, 0.25+image.location.size.y.get()+title.getHeight(), 0.4, 0.1) + if (data.language) { + language = new BoxWithText().setText("§0Language: " + data.language).setLocation(0.3, 0.25 + image.location.size.y.get() + title.getHeight(), 0.4, 0.1) sidebar.addChild(language) } - - image.onImageHeightChange(()=>{ - button.location.location.y.set(0.15+image.location.size.y.get()+title.getHeight()) - if(language) language.location.location.y.set(0.25+image.location.size.y.get()+title.getHeight()) + + image.onImageHeightChange(() => { + button.location.location.y.set(0.15 + image.location.size.y.get() + title.getHeight()) + if (language) language.location.location.y.set(0.25 + image.location.size.y.get() + title.getHeight()) }, this) } - onOpen(){ + onOpen() { this.updateStreams() } } class StreamElement extends SoopyBoxElement { - constructor(){ + constructor() { super() this.streamData = undefined - this.channelElement = new SoopyTextElement().setLocation(0.1,0.025,0.8,0.1).setMaxTextScale(10) + this.channelElement = new SoopyTextElement().setLocation(0.1, 0.025, 0.8, 0.1).setMaxTextScale(10) - this.channelImg = new SoopyImageElement().setLocation(0.1,0.125,0.8,0.2) + this.channelImg = new SoopyImageElement().setLocation(0.1, 0.125, 0.8, 0.2) - this.titleElement = new SoopyMarkdownElement().setLocation(0.1,0.45,0.8,0.1) + this.titleElement = new SoopyMarkdownElement().setLocation(0.1, 0.45, 0.8, 0.1) - this.channelImg.onImageHeightChange(()=>{ - this.titleElement.location.location.y.set(0.15+this.channelImg.location.size.y.get()) - },this) + this.channelImg.onImageHeightChange(() => { + this.titleElement.location.location.y.set(0.15 + this.channelImg.location.size.y.get()) + }, this) this.streamPage = undefined - this.addEvent(new SoopyMouseClickEvent().setHandler(()=>{ + this.addEvent(new SoopyMouseClickEvent().setHandler(() => { this.streamPage.openStreamSidebar(this.streamData) })) this.addChild(this.channelElement) this.addChild(this.titleElement) this.addChild(this.channelImg) - this.channelImg.loadHeightFromImage() } - setStream(stream, twitch){ + setStream(stream, twitch) { this.streamData = stream this.titleElement.setText(stream.title) - this.channelElement.setText((twitch ? "§0"+stream.user_name : "§0"+stream.channelTitle) + (twitch?"&7 - " + stream.viewer_count + " viewer"+(stream.viewer_count!==1?"s":""):"")) - + this.channelElement.setText((twitch ? "§0" + stream.user_name : "§0" + stream.channelTitle) + (twitch ? "&7 - " + stream.viewer_count + " viewer" + (stream.viewer_count !== 1 ? "s" : "") : "")) + this.streamData.image = twitch ? `https://static-cdn.jtvnw.net/previews-ttv/live_user_${stream.user_login}-640x360.jpg` : stream.thumbnails.high.url this.channelImg.setImage(this.streamData.image) this.channelImg.loadHeightFromImage() @@ -167,9 +166,9 @@ class StreamElement extends SoopyBoxElement { return this } - setStreamPage(page){ + setStreamPage(page) { this.streamPage = page - + return this } } diff --git a/features/waypoints/index.js b/features/waypoints/index.js index bcd3fc5..7d2edb6 100644 --- a/features/waypoints/index.js +++ b/features/waypoints/index.js @@ -97,18 +97,18 @@ class Waypoints extends Feature { ChatLib.chat(this.FeatureManager.messagePrefix + "Error loading from clipboard!") } }) - //&r&9Party &8> &6[MVP&4++&6] Soopyboo32&f: &rx: -150, y: 73, z: -97 &r - //&r&6[MVP&r&4++&r&6] Soopyboo32&r&f: x: 23, y: 100, z: -2&r - //&r&6[MVP&r&4++&r&6] Soopyboo32&r&f: x: -22, y: 100, z: 7&r + 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() } }) diff --git a/metadata.json b/metadata.json index b81569f..8e371d0 100644 --- a/metadata.json +++ b/metadata.json @@ -5,8 +5,8 @@ "entry": "index.js", "description": "SoopyV2", "name": "SoopyV2", - "version": "2.1.70", - "versionId": 197, + "version": "2.1.71", + "versionId": 198, "requires": [ "soopyApis", "soopyAddonsData", |