///
///
import Feature from "../../featureClass/class";
import socketConnection from "../../socketConnection";
import { fetch } from "../../utils/networkUtils";
class DataLoader extends Feature {
constructor() {
super()
}
onEnable() {
this.initVariables()
this.stats = {}
this.area = undefined
this.areaFine = undefined
this.isInSkyblock = false
this.dungeonPercentCleared = 0
this.registerStep(true, 2, this.step)
this.registerStep(false, 170, this.loadApiStepThing)
this.registerEvent("worldLoad", this.worldLoad)
this.api_loaded_event = this.createCustomEvent("apiLoad")
this.lastServer = undefined
this.lastSentServer = 0
this.loadedApiDatas = {}
this.lastApiData = {
"skyblock": undefined,
"player": undefined,
"skyblock_raw": undefined, //the _raw is loaded from hypixel api instead of soopy api
"player_raw": undefined
}
this.worldLoaded = true
this.loadApi()
this.firstLoaded = false
}
worldLoad() {
this.area = undefined
this.areaFine = undefined
this.loadApiData("skyblock", false)
}
loadApiStepThing() {
this.loadApiData("skyblock", false)
}
loadApi() {
fetch("http://soopymc.my.to/api/v2/player_skyblock/" + Player.getUUID().replace(/-/g, "")).json(data => {
if (!data.success) return
this.api_loaded_event.trigger(data, "skyblock", true, true)
this.lastApiData.skyblock = data
})
}
loadApiData(type, soopyServer) {
if (this.FeatureManager.features["globalSettings"] === undefined || this.FeatureManager.features["globalSettings"].class.apiKeySetting === undefined) {
return
}
let key = this.FeatureManager.features["globalSettings"].class.apiKeySetting.getValue()
if (!key) return
if (this.loadedApiDatas[type] !== undefined) {
if (Date.now() - this.loadedApiDatas[type] < 5000) return
}
this.loadedApiDatas[type] = Date.now()
if (soopyServer) {
} else {
if (type === "skyblock") {
fetch("https://api.hypixel.net/skyblock/profiles?key=" + key + "&uuid=" + Player.getUUID().replace(/-/g, "")).json(data => {
if (!data.success) return
this.api_loaded_event.trigger(data, "skyblock", false, true)
this.lastApiData.skyblock_raw = data
})
}
}
}
step() { //2fps
if (!this.firstLoaded) {
if (!(this.FeatureManager.features["globalSettings"] === undefined || this.FeatureManager.features["globalSettings"].class.apiKeySetting === undefined)) {
this.loadApiData("skyblock", false)
this.firstLoaded = true
}
}
this.isInSkyblock = Scoreboard.getTitle()?.removeFormatting().includes("SKYBLOCK")
if (!this.isInSkyblock) {
this.stats = {}
return
}
this.stats["Area"] = undefined
this.stats["Dungeon"] = undefined
if (World.isLoaded() && TabList.getNames()) {
TabList.getNames().forEach(n => {
n = ChatLib.removeFormatting(n)
if (n.includes(": ")) {
if (n.includes('Secrets Found')) {
if (n.includes('%')) {
this.stats["Secrets Found%"] = n.split(": ")[1]
} else {
this.stats["Secrets Found"] = n.split(": ")[1]
}
} else {
this.stats[n.split(": ")[0].trim()] = n.split(": ")[1].trim()
}
}
})
}
if (this.stats["Dungeon"]) {
this.stats["Area"] = this.stats["Dungeon"]
this.isInDungeon = true
} else {
this.isInDungeon = false
}
this.dungeonFloor = undefined
this.slayerXpToSpawn = undefined
Scoreboard.getLines().forEach(line => {
let name = ChatLib.removeFormatting(line.getName()).replace(/[^A-z0-9 \:\(\)\.]/g, "")
if (this.isInDungeon) {
if (name.includes("The Catacombs (")) {
this.dungeonFloor = name.split("(")[1].split(")")[0].toUpperCase()
}
}
if (ChatLib.removeFormatting(line).startsWith(" ⏣ ")) {
this.areaFine = ChatLib.removeFormatting(line).split(" ⏣ ")[1].replace(/[^A-z0-9 \:\(\)\.\-]/g, "")
}
if (name.startsWith("Purse: ")) {
this.purse = parseInt(name.split("Purse: ")[1].split(" ")[0])
}
if (name.startsWith("Bits: ")) {
this.bits = parseInt(name.split("Bits: ")[1].split(" ")[0])
}
if (name.startsWith("Cleared: ")) {
this.dungeonPercentCleared = parseInt(name.split(" ")[1]) / 100
}
if (name.endsWith("Combat XP")) {
this.slayerXpToSpawn = ChatLib.removeFormatting(name).split("(")[1].split(")")[0].split("/").map(parseInt)
}
})
this.area = this.stats["Area"]
if (this.lastServer !== this.stats.Server || Date.now() - this.lastSentServer > 60000 * 5) {
this.lastServer = this.stats.Server;
this.lastSentServer = Date.now()
socketConnection.setServer(this.stats.Server, this.area, this.areaFine);
}
}
initVariables() {
this.stats = undefined
this.isInDungeon = false
this.dungeonFloor = undefined
this.area = undefined
this.areaFine = undefined
this.bits = undefined
this.purse = undefined
this.lastApiData = undefined
this.isInSkyblock = undefined
}
onDisable() {
this.initVariables()
}
}
module.exports = {
class: new DataLoader()
}