aboutsummaryrefslogtreecommitdiff
path: root/src/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/features')
-rw-r--r--src/features/dataLoader/index.js1
-rw-r--r--src/features/hud/index.js86
-rw-r--r--src/features/waypoints/index.js6
3 files changed, 89 insertions, 4 deletions
diff --git a/src/features/dataLoader/index.js b/src/features/dataLoader/index.js
index b2a273d..fd72648 100644
--- a/src/features/dataLoader/index.js
+++ b/src/features/dataLoader/index.js
@@ -56,6 +56,7 @@ class DataLoader extends Feature {
this.currentMayorPerks = new Set()
this.loadedApiDatas = {}
+ this.isInDungeon = false
this.partyMembers = new Set()
this.partyMembers.add(Player.getName())
diff --git a/src/features/hud/index.js b/src/features/hud/index.js
index 8805dac..cb94cbe 100644
--- a/src/features/hud/index.js
+++ b/src/features/hud/index.js
@@ -10,7 +10,7 @@ import DropdownSetting from "../settings/settingThings/dropdownSetting";
import { getLevelByXp } from "../../utils/statUtils";
import { firstLetterCapital } from "../../utils/stringUtils";
import renderLibs from "../../../guimanager/renderLibs";
-import { addNotation, numberWithCommas } from "../../utils/numberUtils.js";
+import { addNotation, basiclyEqual, numberWithCommas, timeNumber, timeNumber2 } from "../../utils/numberUtils.js";
const ProcessBuilder = Java.type("java.lang.ProcessBuilder")
const Scanner = Java.type("java.util.Scanner")
@@ -201,6 +201,21 @@ class Hud extends Feature {
hudStatTypes["mythril_powder"] = "Mithril Powder"
hudStatTypes["gemstone_powder"] = "Gemstone Powder"
+ this.potsExpireAt = {}
+
+ this.potsOutAlert = new ToggleSetting("Alert when pots are about to run out", "Will show in chat", true, "pots_out_alert", this)
+ this.showPotsHud = new ToggleSetting("Show Pots On Hud", "", false, "pots_hud", this)
+ this.potsHudElement = new HudTextElement()
+ .setText("&6Potions&7> &fLoading...")
+ .setToggleSetting(this.showPotsHud)
+ .setLocationSetting(new LocationSetting("Pots Hud Location", "Allows you to edit the location of the pots hud", "pots_hud_location", this, [10, 100, 1, 1])
+ .requires(this.showPotsHud)
+ .editTempText("&6God potion&7> &f28h 32m"))
+ this.hudElements.push(this.potsHudElement)
+
+ this.lastPotAlerts = {}
+ this.registerStep(false, 1, this.updatePotsTime)
+
this.extendLevelCap = new ToggleSetting("Hud Stat Ignore Skill Level Cap", "level cap goes over 60 requiring 50m xp per level", false, "hud_ignore_level_cap", this).contributor("EmeraldMerchant")
this.showLevelUpMessage = new ToggleSetting("Show level-up message", "Shows skyblock skills level-up message over level 60 in chat", true, "skill_o60_level_message", this).requires(this.extendLevelCap).contributor("EmeraldMerchant")
@@ -218,6 +233,7 @@ class Hud extends Feature {
if (this.hudStat[i - 1]) {
this.hudStat[i].enabled.requires(this.hudStat[i - 1].enabled)
}
+ this.hudElements.push(this.hudStat[i].textElement)
}
@@ -600,6 +616,73 @@ class Hud extends Feature {
this.soulflowElement.setText("&6Soulflow&7> &f" + this.numberUtils.numberWithCommas(this.lastStatData.soulflow))
}
+ updatePotsTime() {
+ if (!this.showPotsHud.getValue()) return
+ if (!this.FeatureManager.features["dataLoader"] || !this.FeatureManager.features["dataLoader"].class.isInSkyblock || this.FeatureManager.features["dataLoader"].class.isInDungeon) {
+ this.potsHudElement.setText("")
+ return
+ }
+
+ let text = ""
+
+ let godPotTime = -1
+ if (this.potsExpireAt["water_breathing"]?.level === 6
+ && this.potsExpireAt["resistance"]?.level === 8
+ && basiclyEqual(this.potsExpireAt["water_breathing"]?.time, this.potsExpireAt["resistance"]?.time, 1000)) {
+ godPotTime = this.potsExpireAt["water_breathing"].time
+ }
+
+ if (godPotTime > 0) {
+ let timeLeft = ""
+ if (godPotTime - Date.now() > 60000 * 60) {
+ timeLeft = timeNumber2(godPotTime - Date.now())
+ } else {
+ timeLeft = timeNumber(godPotTime - Date.now())
+ }
+ text += `&6God potion&7>&f ${timeLeft}\n`
+
+ if (this.potsOutAlert.getValue() && godPotTime - Date.now() > 60000 && Date.now() - (this.lastPotAlerts["godpot"] || 0) > 2 * 60000) {
+ this.lastPotAlerts["godpot"] = Date.now()
+ ChatLib.chat(this.FeatureManager.messagePrefix + "Your God potion is about to run out!")
+ }
+ }
+
+ Object.keys(this.potsExpireAt).forEach(k => {
+ let potData = this.potsExpireAt[k]
+ if (potData.infinite) return
+ if (basiclyEqual(potData.time, godPotTime, 1000)) return
+
+ let potName = firstLetterCapital(k.replace(/_/g, " "))
+
+ if (this.potsOutAlert.getValue() && potData.time - Date.now() > 60000 && Date.now() - (this.lastPotAlerts[k] || 0) > 2 * 60000) {
+ this.lastPotAlerts[k] = Date.now()
+ ChatLib.chat(this.FeatureManager.messagePrefix + "Your " + potName + " is about to run out!")
+ }
+
+ let timeLeft = ""
+ if (potData.time - Date.now() > 60000 * 60) {
+ timeLeft = timeNumber2(potData.time - Date.now())
+ } else {
+ timeLeft = timeNumber(potData.time - Date.now())
+ }
+
+ text += `&6${potName} ${potData.level}&7> &f${timeLeft}\n`
+ })
+ this.potsHudElement.setText(text)
+ }
+
+ updatePotsData(data) {
+ this.potsExpireAt = {}
+ let now = Date.now()
+ data.active_effects.forEach(e => {
+ this.potsExpireAt[e.effect] = {
+ level: e.level,
+ time: now + e.ticks_remaining * 50,
+ infinite: e.infinite
+ }
+ })
+ }
+
statApiLoadThingo(data) {
data.profiles.forEach(p => {
if (!this.lastStatData || (p.members[Player.getUUID().toString().replace(/-/g, "")] && p.members[Player.getUUID().toString().replace(/-/g, "")].last_save > this.lastStatData.last_save)) {
@@ -608,6 +691,7 @@ class Hud extends Feature {
})
if (this.lastStatData) {
+ this.updatePotsData(this.lastStatData)
if (this.lastStatData.soulflow) this.apiSoulflow = true
if (this.apiSoulflow) this.soulflowElement.setText("&6Soulflow&7> &f" + this.numberUtils.numberWithCommas(this.lastStatData.soulflow))
diff --git a/src/features/waypoints/index.js b/src/features/waypoints/index.js
index 41b83d1..ef5a5b8 100644
--- a/src/features/waypoints/index.js
+++ b/src/features/waypoints/index.js
@@ -38,7 +38,7 @@ class Waypoints extends Feature {
this.loadWaypointsFromSendCoords = new ToggleSetting("Load waypoints from /patcher sendcoords messages", "Will dissapear after 1min", true, "load_waypoints_from_sendcoords", this)
this.mineWaypointsSetting = new ToggleSetting("CH waypoints", "Will sync between users", true, "minwaypoints", this)
- this.orderedWaypointsLine = new ToggleSetting("CH waypoints", "Draw a line from current to next ordered waypoint", false, "order_waypoints_line", this)
+ this.orderedWaypointsLine = new ToggleSetting("Ordered waypoints line", "Draw a line from you to next ordered waypoint", false, "order_waypoints_line", this)
try {
this.userWaypoints = JSON.parse(FileLib.read("soopyAddonsData", "soopyv2userwaypoints.json") || "{}")
@@ -206,8 +206,8 @@ class Waypoints extends Feature {
drawCoolWaypoint(nextWaypoint[0], nextWaypoint[1], nextWaypoint[2], 0, 255, 0, { name: nextWaypoint[3] })
}
- if (this.orderedWaypointsLine.getValue() && currentWaypoint && nextWaypoint) {
- drawLine(currentWaypoint[0] + 0.5, currentWaypoint[1], currentWaypoint[2] + 0.5, nextWaypoint[0] + 0.5, nextWaypoint[1], nextWaypoint[2] + 0.5, 0, 255, 0)
+ if (this.orderedWaypointsLine.getValue() && nextWaypoint) {
+ drawLine(Player.getX(), Player.getY(), Player.getZ(), nextWaypoint[0] + 0.5, nextWaypoint[1], nextWaypoint[2] + 0.5, 0, 255, 0)
}
if (this.lastCloser === this.currentOrderedWaypointIndex && distanceTo1 > distanceTo2 && distanceTo2 < 15) {