aboutsummaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorNinjune x <enderknight537@gmail.com>2023-01-08 02:12:14 -0600
committerNinjune x <enderknight537@gmail.com>2023-01-08 02:12:14 -0600
commit688e13930681bca7881d19468745f7067e9bc5c2 (patch)
tree9e95e59359dd2ae6e2e7761666b99a191bb62a1f /render
parent1891ada92ab1911cfaaa7ad0e72c85573f4fcbb6 (diff)
downloadcoleweight-future.tar.gz
coleweight-future.tar.bz2
coleweight-future.zip
v1.8.6future
Diffstat (limited to 'render')
-rw-r--r--render/cwGui.js198
-rw-r--r--render/efficientMinerOverlay.js189
-rw-r--r--render/gemstoneMiningStats.js51
-rw-r--r--render/guis/collectionGui.js (renamed from render/collectionGui.js)9
-rw-r--r--render/guis/coordsGui.js (renamed from render/coordsGui.js)14
-rw-r--r--render/guis/cwGui.js152
-rw-r--r--render/guis/downtimeGui.js (renamed from render/downtimeGui.js)6
-rw-r--r--render/guis/efficientMinerOverlayGui.js113
-rw-r--r--render/guis/powertrackerGui.js (renamed from render/powertrackerGui.js)4
-rw-r--r--render/guis/timerGui.js (renamed from render/timerGui.js)4
-rw-r--r--render/miningAbilities.js22
-rw-r--r--render/naturals.js8
-rw-r--r--render/textGuiCreator.js20
-rw-r--r--render/treecapTimer.js39
14 files changed, 564 insertions, 265 deletions
diff --git a/render/cwGui.js b/render/cwGui.js
deleted file mode 100644
index 0d734cd..0000000
--- a/render/cwGui.js
+++ /dev/null
@@ -1,198 +0,0 @@
-import settings from "../settings";
-import constants from "../util/constants";
-import axios from "../../axios"
-const cwGui = new Gui()
-let txt = "Please set your api key with /cw setkey (key)!"
-
-let cwValues = [],
- calcCwPerHr = false,
- upTimeTrack = false,
- uptime = 0,
- coleweight = 0,
- baseColeweight = 0,
- stepsSinceLast = 0,
- coleweightHr = 0,
- cwValuesSum = 0,
- cwInfo
-
-
-export function openCwGui()
-{
- cwGui.open()
-}
-
-
-export function reloadColeweight()
-{
- upTimeTrack = false
- stepsSinceLast = 0
- cwValues = []
- uptime = 0
- ChatLib.chat(`${PREFIX}Reloaded!`)
-}
-
-
-register("dragged", (dx, dy, x, y) => {
- if (!cwGui.isOpen()) return
- constants.data.x = x
- constants.data.y = y
- constants.data.save()
-})
-
-register("renderOverlay", () => {
- if (cwGui.isOpen())
- {
- if (constants.data.api_key != undefined)
- txt = "Click anywhere to move!"
- Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2)
- Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2)
- Renderer.drawStringWithShadow(`&aCW: &b0\n&aCW/hr: &b0\n&aUptime: &b0m\n&aColeweight Gained: &b0`, constants.data.x, constants.data.y)
- }
-
- if(!settings.cwToggle || constants.data.api_key == undefined) return
- let coleweightMessage = "",
- uptimeHr = Math.floor(uptime/60/60)
-
- coleweight > 1000 ?coleweightMessage = `&b${coleweight.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`: coleweightMessage = `&b${coleweight.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`
- if(cwValues[0] != undefined && upTimeTrack && calcCwPerHr)
- {
- cwValuesSum = 0
- for(let i = 0; i < cwValues.length; i++)
- cwValuesSum += cwValues[i]
- let eq = Math.ceil((cwValuesSum*(3600/uptime)) * 100) / 100
- eq != Infinity ? coleweightHr = eq : coleweightHr = "Calculating..."
- calcCwPerHr = false
- }
-
- if (cwGui.isOpen() || !upTimeTrack) return
-
- if(uptimeHr >= 1)
- Renderer.drawStringWithShadow(`&aCW: &b${coleweightMessage}\n&aCW/hr: &b${coleweightHr}\n&aUptime: &b${uptimeHr}h ${Math.floor(uptime/60) - uptimeHr*60}m\n&aColeweight Gained: &b${Math.ceil(cwValuesSum*100) / 100}`, constants.data.x, constants.data.y)
- else
- Renderer.drawStringWithShadow(`&aCW: &b${coleweightMessage}\n&aCW/hr: &b${coleweightHr}\n&aUptime: &b${Math.floor(uptime/60)}m ${Math.floor(uptime%60)}s\n&aColeweight Gained: &b${Math.ceil(cwValuesSum*100) / 100}`, constants.data.x, constants.data.y)
-})
-
-register("gameLoad", () => {
- axios.get(`https://ninjune.dev/api/cwinfo`)
- .then(cwInfoRes => {
- cwInfo = cwInfoRes.data
- })
-})
-
-
-register("step", () => {
- // updates coleweight for gui
- let date_ob = new Date(),
- seconds = date_ob.getSeconds()
-
- if(upTimeTrack == true)
- uptime += 1
- if(seconds == 0 || seconds == 15 || seconds == 30 || seconds == 45)
- {
- try
- {
- let tempUuid = Player.getUUID(),
- profileData = "",
- tempColeweight = 0,
- uuid = ""
-
- for(let i = 0; i < tempUuid.length; i++)
- {
- if(tempUuid[i] != "-")
- {
- uuid = uuid + tempUuid[i]
- }
- }
- axios.get(`https://api.hypixel.net/skyblock/profiles?key=${constants.data.api_key}&uuid=${uuid}`)
- .then(res => {
- let eq = 0
-
- for(let i=0; i < res.data.profiles.length; i+=1)
- {
- if(res.data.profiles[i].selected == true)
- profileData = res.data.profiles[i]
- }
-
- tempColeweight += Math.ceil((profileData.members[uuid][cwInfo.experience.name]/cwInfo.experience.req)*100) / 100
-
- for(let i = 0; i < cwInfo.powder.length; i++)
- {
- let sourceToSearch = cwInfo.powder[i].name,
- source = profileData.members[uuid].mining_core[sourceToSearch]
-
- if(source != undefined)
- {
- eq = Math.ceil(source/cwInfo.powder[i].req*100) / 100
-
- if(i == 0)
- {
- let powder2 = profileData.members[uuid].mining_core['powder_spent_mithril']
-
- if(powder2 != undefined)
- eq = Math.ceil((source+powder2)/cwInfo.powder[i].req*100) / 100
- }
- else
- {
- let powder2 = profileData.members[uuid].mining_core['powder_spent_gemstone']
-
- if(powder2 != undefined)
- eq = Math.ceil((source+powder2)/cwInfo.powder[i].req*100) / 100
- }
- tempColeweight += eq
- }
- }
-
- for(let i = 0; i < cwInfo.collection.length; i++)
- {
- let sourceToSearch = cwInfo.collection[i].name,
- source = profileData.members[uuid].collection[sourceToSearch]
-
- if(source != undefined)
- {
- eq = Math.ceil(source/cwInfo.collection[i].req*100) / 100
- tempColeweight += eq
- }
- }
- for(let i = 0; i < cwInfo.miscellaneous.length; i++)
- {
- let sourceToSearch = cwInfo.miscellaneous[i].name
- if(i == 0 || i == 1)
- source = profileData.members[uuid].bestiary[sourceToSearch]
- else
- source = profileData.members[uuid].mining_core.crystals.jade_crystal[sourceToSearch]
- if (source != undefined)
- {
- eq = Math.ceil(source/cwInfo.miscellaneous[i].req*100) / 100
- tempColeweight += eq
- }
- }
- if(baseColeweight == 0)
- {
- baseColeweight = tempColeweight
- }
- else if((tempColeweight - baseColeweight) > 0)
- {
- cwValues.push(tempColeweight - baseColeweight)
- calcCwPerHr = true
- upTimeTrack = true
- stepsSinceLast = 0
- baseColeweight = tempColeweight
- }
- else if(stepsSinceLast > 20)
- {
- uptime = 0
- upTimeTrack = false
- stepsSinceLast = 0
- cwValues = []
- }
- else
- {
- stepsSinceLast += 1
- }
-
- coleweight = Math.ceil(tempColeweight*100)/100
- })
- }
- catch(e) { if (settings.debug) console.log(e)}
- }
-}).setFps(1) \ No newline at end of file
diff --git a/render/efficientMinerOverlay.js b/render/efficientMinerOverlay.js
new file mode 100644
index 0000000..cd6468d
--- /dev/null
+++ b/render/efficientMinerOverlay.js
@@ -0,0 +1,189 @@
+import { drawEspBox, trace } from "../util/renderUtil"
+import settings from "../settings"
+
+let blockStatesToFind = [
+ {name: "minecraft:wool[color=light_blue]", prio: 2},
+ {name: "minecraft:obsidian", prio: 0},
+ {name: "minecraft:prismarine[variant=prismarine_bricks]", prio: 0},
+ {name: "minecraft:prismarine[variant=prismarine_bricks]", prio: 0},
+ {name: "minecraft:prismarine[variant=prismarine]", prio: 0}]
+let threadActive = false,
+ maxPrio = -10000000,
+ drawBlocks = [],
+ lookingAt
+
+let thread = new Thread(() => {
+ threadActive = true
+ let tempPrio, tempMax = { prio: -100000 }, tempSecondMax = { prio: -100000 }, block, blockState, tempBlocks = []
+
+ const playerX = Player.getX(),
+ playerY = Player.getY(),
+ playerZ = Player.getZ(),
+ playerReach = 4
+
+ if(playerX == undefined || playerY == undefined || playerZ == undefined || !World.isLoaded()) { threadActive = false; return thread.stop() }
+
+
+ for(let x = Math.round(playerX-playerReach); x < Math.ceil(playerX+playerReach); x++)
+ {
+ for(let y = Math.round(playerY-playerReach); y < Math.ceil(playerY+playerReach); y++)
+ {
+ for(let z = Math.round(playerZ-playerReach); z < Math.ceil(playerZ+playerReach); z++)
+ {
+ block = World.getBlockAt(x, y, z)
+ blockState = block.getState().toString()
+
+ if(blockStatesToFind.some(obj => obj.name === blockState) && isVisible(x, y, z))
+ {
+ tempPrio = findPrio(x, y, z, blockState, blockStatesToFind[blockStatesToFind.findIndex(obj => obj.name === blockState)].prio)
+ tempBlocks.push({x: Math.round(x) + 0.5, y: y, z: Math.round(z) + 0.5, prio: tempPrio})
+ }
+ }
+ }
+ }
+ for(let i = 0; i < tempBlocks.length; i++)
+ {
+ if(tempBlocks[i].prio > tempMax.prio)
+ {
+ tempMax = tempBlocks[i]
+ }
+ if(tempBlocks[i].prio > tempSecondMax.prio && tempBlocks[i].prio < tempMax.prio)
+ {
+ tempSecondMax = tempBlocks[i]
+ }
+ }
+
+ if(tempMax == undefined || tempSecondMax == undefined) drawBlocks = []
+ else if(drawBlocks[0] != undefined && drawBlocks[1] != undefined && drawBlocks[0].x != undefined && drawBlocks[1].x != undefined &&
+ World.getBlockAt(drawBlocks[0].x, drawBlocks[0].y, drawBlocks[0].z).type.getRegistryName() === "minecraft:bedrock") // if player just mined block
+ {
+ drawBlocks[0] = drawBlocks[1]
+ threadActive = false
+ drawBlocks[1] = tempSecondMax
+ }
+ else
+ {
+ drawBlocks[0] = tempMax
+ drawBlocks[1] = tempSecondMax
+ maxPrio = tempMax.prio
+ }
+
+ threadActive = false
+})
+
+
+register("renderWorld", () => {
+ if(!settings.efficientMinerOverlay || drawBlocks.length < 2 || drawBlocks[0] == undefined || drawBlocks[1] == undefined
+ || drawBlocks[0].x == undefined || drawBlocks[1].x == undefined) return
+
+ try{
+ trace(drawBlocks[0].x, drawBlocks[0].y + 5/10, drawBlocks[0].z, 1, 0, 0.3, 0.7, true)
+ drawEspBox(drawBlocks[0].x, drawBlocks[0].y, drawBlocks[0].z, 1, 0, 0.3, 0.7, true)
+ drawEspBox(drawBlocks[1].x, drawBlocks[1].y, drawBlocks[1].z, 1, 0.5, 0.3, 0.7, true)
+ } catch(err) {if(settings.debug) console.log(err)}
+
+})
+
+/*register("step", () => { // debug, comment when done
+
+}).setFps(1)*/
+
+register("step", () => {
+ if(!threadActive)
+ thread.start()
+}).setFps(20)
+
+register("gameUnload", () => {
+ thread.stop()
+})
+
+
+function findPrio(originX, originY, originZ, blockStateToFind, prio)
+{
+ let radius = 2 + 1/2,
+ blockCount = 0,
+ rayTraceX, rayTraceY, rayTraceZ
+ if(Player.lookingAt() != undefined && Player.lookingAt()?.getRegistryName() != "minecraft:air")
+ lookingAt = Player.lookingAt()
+
+ if(lookingAt != undefined)
+ {
+ rayTraceX = lookingAt.getX()
+ rayTraceY = lookingAt.getY()
+ rayTraceZ = lookingAt.getZ()
+ }
+
+
+ for(let x = Math.round(originX-radius); x < Math.round(originX+radius); x++) // second cube
+ {
+ for(let y = Math.round(originY-radius); y < Math.round(originY+radius); y++)
+ {
+ for(let z = Math.round(originZ-radius); z < Math.round(originZ+radius); z++)
+ {
+ if(World.getBlockAt(x, y, z)?.getState()?.toString() === blockStateToFind)
+ {
+ if(checkConnectedBlocks(x, y, z, originX, originY, originZ, blockStateToFind, 2.5))
+ blockCount++
+ }
+ else if (World.getBlockAt(x, y, z)?.getState()?.toString() === "minecraft:stone[variant=smooth_diorite]")
+ {
+ if(prio > 0)
+ prio = 0
+ else
+ prio += 2/10
+ }
+
+ // RAYTRACE
+ if(lookingAt != undefined)
+ {
+ prio -= Math.abs(rayTraceX - x)/100 // = 0.01 per block of distance
+ prio -= Math.abs(rayTraceY - y)/100
+ prio -= Math.abs(rayTraceZ - z)/100
+ }
+
+ }
+ }
+ }
+ if(blockCount > 6)
+ blockCount = 6
+ prio += blockCount*3/10
+
+ return Math.round(prio*100)/100
+}
+
+function isVisible(x, y, z)
+{
+ if(World.getBlockAt(x, y, z).type.getRegistryName() === "minecraft:bedrock") return false
+ if (World.getBlockAt(x, y+1, z).type.getRegistryName() === "minecraft:air") return true // above
+ if (World.getBlockAt(x, y-1, z).type.getRegistryName() === "minecraft:air") return true // below
+ if (World.getBlockAt(x+1, y, z).type.getRegistryName() === "minecraft:air") return true // east
+ if (World.getBlockAt(x-1, y, z).type.getRegistryName() === "minecraft:air") return true // west
+ if (World.getBlockAt(x, y, z+1).type.getRegistryName() === "minecraft:air") return true // north
+ if (World.getBlockAt(x, y, z-1).type.getRegistryName() === "minecraft:air") return true // south
+
+ return false
+}
+
+
+function checkConnectedBlocks(x, y, z, originX, originY, originZ, blockStateToFind, distance) {
+ if (World.getBlockAt(x, y, z).getState().toString() !== blockStateToFind) {
+ return false;
+ }
+ if (Math.abs(x - originX) + Math.abs(y - originY) + Math.abs(z - originZ) > distance) {
+ return false;
+ }
+
+ for (let dx = -1; dx <= 1; dx++) {
+ for (let dy = -1; dy <= 1; dy++) {
+ for (let dz = -1; dz <= 1; dz++) {
+ if (dx === 0 && dy === 0 && dz === 0) {
+ continue;
+ }
+ if (!checkConnectedBlocks(x + dx, y + dy, z + dz, distance)) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+} \ No newline at end of file
diff --git a/render/gemstoneMiningStats.js b/render/gemstoneMiningStats.js
index e86911d..e6277ef 100644
--- a/render/gemstoneMiningStats.js
+++ b/render/gemstoneMiningStats.js
@@ -3,8 +3,9 @@ import constants from "../util/constants"
import { findTick } from "../commands/calculate/tick"
import { addCommas, getSelectedProfile } from "../util/helperFunctions"
import axios from "../../axios"
+import { findCost, findHotmObject } from "../commands/calculate/hotmCalc"
const NBTTagString = Java.type("net.minecraft.nbt.NBTTagString")
-
+let powderTotals = {}
register("itemTooltip", (lore, item) => { // this is so bad 💀
if(!item.getLore()[0].startsWith("§o§aYour SkyBlock Profile") || !settings.gemstoneMiningStats) return
@@ -42,14 +43,15 @@ register("itemTooltip", (lore, item) => { // this is so bad 💀
professionalSpeed = miningSpeed + Math.floor(50+(constants.data.professional*5)),
miningSpeedText = `${element} §6(§b${addCommas(professionalSpeed)}§6)`,
tick
- if(settings.tickSpeedBlock > 1) // may need to change if add tick blocks (good programming real)
+
+ if(professionalSpeed > 50 && settings.tickSpeedBlock > 1) // may need to change if add tick blocks (good programming real)
tick = findTick(professionalSpeed, settings.tickSpeedBlock).currentBlockTick
else
tick = findTick(miningSpeed, settings.tickSpeedBlock).currentBlockTick
list.set(elementIndex, new NBTTagString(miningSpeedText))
list.set(elementIndex + 1, new NBTTagString(` §6⸕ Block Tick §f${Math.round(tick)}`)) // 1 new added
- for(let i = elementIndex + 2; i < list.getTagCount() + 1; i++)
+ for(let i = elementIndex + 2; i < list.getTagCount(); i++)
{
list.set(i, new NBTTagString(tempList[i - 1]))
}
@@ -57,13 +59,20 @@ register("itemTooltip", (lore, item) => { // this is so bad 💀
})
-
-
-register("worldLoad", () => {
+register("gameLoad", () => {
axios.get(`https://api.hypixel.net/skyblock/profiles?key=${constants.data.api_key}&uuid=${Player.getUUID()}`)
.then(res => {
- let professional = getSelectedProfile(res)?.members[Player.getUUID().replace(/-/g, "")]?.mining_core?.nodes?.professional,
- fortunate = getSelectedProfile(res)?.members[Player.getUUID().replace(/-/g, "")]?.mining_core?.nodes?.fortunate
+ let
+ selected = getSelectedProfile(res)?.members[Player.getUUID().replace(/-/g, "")]
+ professional = selected?.mining_core?.nodes?.professional,
+ fortunate = selected?.mining_core?.nodes?.fortunate
+
+ powderTotals = {
+ gemstone: (selected?.mining_core?.powder_gemstone_total ?? 0)
+ + (selected?.mining_core?.powder_spent_gemstone ?? 0),
+ mithril: (selected?.mining_core?.powder_mithril_total ?? 0)
+ + (selected?.mining_core?.powder_spent_mithril ?? 0)
+ }
if(professional != undefined)
constants.data.professional = professional
@@ -73,7 +82,7 @@ register("worldLoad", () => {
})
})
-register('step', () => { // idk how to get items so...
+register('step', () => {
let inventoryName = Player?.getOpenedInventory()?.getName()?.toString()
if(inventoryName == undefined) return
if(inventoryName.includes("Accessory Bag ")) {
@@ -89,7 +98,7 @@ register('step', () => { // idk how to get items so...
}).setFps(2)
-register("itemTooltip", (lore, item) => { // keeping for if api key isn't set
+register("itemTooltip", (lore, item) => {
if(item.getLore()[0].startsWith("§o§aFortunate§r"))
constants.data.fortunate = parseInt(item.getLore()[1].replace("§5§o§7Level ", ""))
else if (item.getLore()[0].startsWith("§o§aProfessional§r"))
@@ -97,3 +106,25 @@ register("itemTooltip", (lore, item) => { // keeping for if api key isn't set
else return
constants.data.save()
})
+
+register("itemTooltip", (lore, item) => { // powder put into each perk
+ if(!settings.showPowderSum || !item.getLore()[1]?.startsWith("§5§o§7Level ") || item?.getLore()[1]?.includes("💀")) return
+ new Thread(() => {
+ if(item.getLore()[1].includes("💀")) return
+ const list = new NBTTagList(item.getNBT().getCompoundTag("tag").getCompoundTag("display").getTagMap().get("Lore"))
+ let perk = item.getLore()[0].replace(/§.|\(.+\)/g, "").replace(/ /g, "")
+ let level = /Level (\d+)/g.exec(item.getLore()[1])[1]
+ let hotmObjectToFind = findHotmObject(perk)
+ if(hotmObjectToFind == undefined || (hotmObjectToFind.costFormula == undefined && perk != "Fortunate")) return
+
+ let powderSum
+
+ if(perk == "Fortunate")
+ powderSum = findCost(undefined, 2, parseInt(level), true)
+ else
+ powderSum = findCost(hotmObjectToFind.costFormula, 1, parseInt(level))
+
+ if(item.getLore()[1].includes("💀")) return
+ list.set(0, new NBTTagString(item.getLore()[1] + ` §7(§b${addCommas(Math.round(powderSum))} §l${Math.round(powderSum/powderTotals[hotmObjectToFind.powderType]*100)}%§7)💀`)) // this is a perfect solution no cap
+ }).start()
+}) \ No newline at end of file
diff --git a/render/collectionGui.js b/render/guis/collectionGui.js
index 4e6deee..3764fcf 100644
--- a/render/collectionGui.js
+++ b/render/guis/collectionGui.js
@@ -1,8 +1,7 @@
-import constants from "../util/constants"
-import settings from "../settings"
-import { trackerGui } from "../util/helperFunctions"
+import constants from "../../util/constants"
+import settings from "../../settings"
+import { trackerGui } from "../../util/helperFunctions"
const PREFIX = constants.PREFIX
-const collectionMoveGui = new Gui()
const collectionGui = new trackerGui("", "Collection Not set! /cw track", settings.collectionNotation)
@@ -37,7 +36,7 @@ register("dragged", (dx, dy, x, y) => {
})
register("renderOverlay", () => {
- collectionGui.renderGui(constants.collectiondata.x, constants.collectiondata.y, settings.collectionNotation, settings.collectionTracker)
+ collectionGui.renderGui(constants.collectiondata.x, constants.collectiondata.y, settings.collectionTracker, settings.collectionNotation, settings.showCollectionTrackerAlways)
})
register("step", () => {
diff --git a/render/coordsGui.js b/render/guis/coordsGui.js
index 9fd5f43..0c1f244 100644
--- a/render/coordsGui.js
+++ b/render/guis/coordsGui.js
@@ -1,25 +1,14 @@
import {
AdditiveConstraint,
- animate,
- Animations,
CenterConstraint,
- ChildBasedMaxSizeConstraint,
- ChildBasedSizeConstraint,
ConstantColorConstraint,
- FillConstraint,
- MaxConstraint,
- ScissorEffect,
- SiblingConstraint,
- SubtractiveConstraint,
UIBlock,
UIImage,
UIWrappedText,
- UIMultilineTextInput,
UIText,
WindowScreen,
- } from "../../Elementa"
+ } from "../../../Elementa"
-// stylla made 2 lines of code (gamer)
const Color = Java.type("java.awt.Color"),
URL = Java.type("java.net.URL"),
WIDTH = 3.5, // not actually width more like reverse of width lmao, bigger = smaller
@@ -83,6 +72,7 @@ export function openCoordsGui()
coordsWindow(1, 2, "Throne", "cw throne toggle", "https://i.imgur.com/7BWzO1c.jpg", true, "Go back of throne. (image isn't loading)").setChildOf(this.getWindow())
coordsWindow(1, 3, "Yog", "cw yog toggle", "https://i.imgur.com/DojoypL.jpg", true, "Go to the leftmost corner of the topaz crystal facing bal close to bal. (image isn't loading)").setChildOf(this.getWindow())
coordsWindow(2, 1, "Divans", "cw divans toggle", "https://i.imgur.com/bkC6yp3.jpg", true, "Go to the middle of jade crystal. (image isn't loading)").setChildOf(this.getWindow())
+ coordsWindow(2, 2, "Automatons", "cw automatons toggle", "https://media.discordapp.net/attachments/1049475464667856926/1052749218055475210/image.png", true, "Sit in pot somewhere (check image in command) (image isn't loading)").setChildOf(this.getWindow())
new UIText("Click box to enable/disable.")
.setX(new CenterConstraint())
.setY((ScreenH-ScreenH/12).pixels())
diff --git a/render/guis/cwGui.js b/render/guis/cwGui.js
new file mode 100644
index 0000000..a2645d5
--- /dev/null
+++ b/render/guis/cwGui.js
@@ -0,0 +1,152 @@
+import settings from "../../settings";
+import constants from "../../util/constants";
+import axios from "../../../axios"
+import { getObjectValue } from "../../util/helperFunctions"
+const cwGui = new Gui()
+let txt = "Please set your api key with /cw setkey (key)!"
+
+let cwValues = [],
+ calcCwPerHr = false,
+ upTimeTrack = false,
+ uptime = 0,
+ coleweight = 0,
+ baseColeweight = 0,
+ stepsSinceLast = 0,
+ coleweightHr = 0,
+ cwValuesSum = 0,
+ cwInfo
+
+
+export function openCwGui()
+{
+ cwGui.open()
+}
+
+
+export function reloadColeweight()
+{
+ upTimeTrack = false
+ stepsSinceLast = 0
+ cwValues = []
+ uptime = 0
+ ChatLib.chat(`${constants.PREFIX}&bReloaded!`)
+}
+
+
+register("dragged", (dx, dy, x, y) => {
+ if (!cwGui.isOpen()) return
+ constants.data.x = x
+ constants.data.y = y
+ constants.data.save()
+})
+
+register("renderOverlay", () => {
+ if (cwGui.isOpen())
+ {
+ if (constants.data.api_key != undefined)
+ txt = "Click anywhere to move!"
+ Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2)
+ Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2)
+ Renderer.drawStringWithShadow(`&aCW: &b0\n&aCW/hr: &b0\n&aUptime: &b0m\n&aColeweight Gained: &b0`, constants.data.x, constants.data.y)
+ }
+
+ if(!settings.cwToggle || constants.data.api_key == undefined) return
+ let coleweightMessage = "",
+ uptimeHr = Math.floor(uptime/60/60)
+
+ coleweight > 1000 ?coleweightMessage = `&b${coleweight.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`: coleweightMessage = `&b${coleweight.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`
+ if(cwValues[0] != undefined && upTimeTrack && calcCwPerHr)
+ {
+ cwValuesSum = 0
+ for(let i = 0; i < cwValues.length; i++)
+ cwValuesSum += cwValues[i]
+ let eq = Math.ceil((cwValuesSum*(3600/uptime)) * 100) / 100
+ eq != Infinity ? coleweightHr = eq : coleweightHr = "Calculating..."
+ calcCwPerHr = false
+ }
+
+ if (cwGui.isOpen() || !upTimeTrack) return
+
+ if(uptimeHr >= 1)
+ Renderer.drawStringWithShadow(`&aCW: &b${coleweightMessage}\n&aCW/hr: &b${coleweightHr}\n&aUptime: &b${uptimeHr}h ${Math.floor(uptime/60) - uptimeHr*60}m\n&aColeweight Gained: &b${Math.ceil(cwValuesSum*100) / 100}`, constants.data.x, constants.data.y)
+ else
+ Renderer.drawStringWithShadow(`&aCW: &b${coleweightMessage}\n&aCW/hr: &b${coleweightHr}\n&aUptime: &b${Math.floor(uptime/60)}m ${Math.floor(uptime%60)}s\n&aColeweight Gained: &b${Math.ceil(cwValuesSum*100) / 100}`, constants.data.x, constants.data.y)
+})
+
+register("step", () => {
+ // updates coleweight for gui
+ let date_ob = new Date(),
+ seconds = date_ob.getSeconds(),
+ cwinfo = constants.CWINFO
+
+ if(upTimeTrack == true)
+ uptime += 1
+ if((seconds == 0 || seconds == 15 || seconds == 30 || seconds == 45) && settings.cwToggle && cwinfo.length > 1)
+ {
+ try
+ {
+ let tempUuid = Player.getUUID(),
+ profileData = "",
+ tempColeweight = 0,
+ uuid = ""
+
+ for(let i = 0; i < tempUuid.length; i++)
+ {
+ if(tempUuid[i] != "-")
+ uuid += tempUuid[i]
+ }
+
+ axios.get(`https://api.hypixel.net/skyblock/profiles?key=${constants.data.api_key}&uuid=${uuid}`)
+ .then(res => {
+ for(let i=0; i < res.data.profiles.length; i+=1)
+ {
+ if(res.data.profiles[i].selected == true)
+ profileData = res.data.profiles[i]
+ }
+
+ for(let i = 0; i < cwinfo.length; i++)
+ {
+ let source = getObjectValue(profileData.members[uuid], cwinfo[i].path),
+ source2 = getObjectValue(profileData.members[uuid], cwinfo[i].path2),
+ eq
+
+ if(source == undefined) continue
+
+ eq = Math.ceil(source/cwinfo[i].cost*100) / 100
+ if(source2 != undefined)
+ eq = Math.ceil((source+source2)/cwinfo[i].cost*100) / 100
+
+ if(eq != undefined)
+ tempColeweight += eq
+ }
+
+ if(baseColeweight == 0) // case: first run
+ {
+ baseColeweight = tempColeweight
+ }
+ else if((tempColeweight - baseColeweight) > 0) // case: new coleweight
+ {
+ cwValues.push(tempColeweight - baseColeweight)
+ calcCwPerHr = true
+ upTimeTrack = true
+ stepsSinceLast = 0
+ baseColeweight = tempColeweight
+ }
+ else if(stepsSinceLast > 20) // case: over 5m have passed with no cw updates
+ {
+ uptime = 0
+ upTimeTrack = false
+ stepsSinceLast = 0
+ cwValues = []
+ }
+ else // case: none of the above
+ {
+ stepsSinceLast += 1
+ }
+
+ coleweight = Math.ceil(tempColeweight*100)/100
+ })
+ }
+ catch(e) { if(settings.debug) console.log(e) }
+ }
+}).setFps(1) \ No newline at end of file
diff --git a/render/downtimeGui.js b/render/guis/downtimeGui.js
index 538c590..11be0d3 100644
--- a/render/downtimeGui.js
+++ b/render/guis/downtimeGui.js
@@ -1,6 +1,6 @@
-import settings from "../settings"
-import constants from "../util/constants"
-import { textGui } from "../util/helperFunctions"
+import settings from "../../settings"
+import constants from "../../util/constants"
+import { textGui } from "../../util/helperFunctions"
const downtimeMoveGui = new Gui()
const downtimeGui = new textGui()
diff --git a/render/guis/efficientMinerOverlayGui.js b/render/guis/efficientMinerOverlayGui.js
new file mode 100644
index 0000000..8c2f609
--- /dev/null
+++ b/render/guis/efficientMinerOverlayGui.js
@@ -0,0 +1,113 @@
+/*import { // after careful consideration I have decided not to make this with elementa, if anyone wants to make it for me (be it with elementa or Renderer) make https://imgur.com/a/D0XpIUx, dm Ninjune#0670 if need help
+ AdditiveConstraint,
+ CenterConstraint,
+ ConstantColorConstraint,
+ UIBlock,
+ UIImage,
+ UIWrappedText,
+ UIText,
+ WindowScreen,
+ } from "../../../Elementa"
+
+const Color = Java.type("java.awt.Color"),
+ URL = Java.type("java.net.URL"),
+ COORDS_WIDTH = 3.5, // not actually width more like reverse of width lmao, bigger = smaller
+ COORDS_HEIGHT = 2.877 // ^
+ ITEM_WIDTH = 3.5,
+ ITEM_HEIGHT = 2.877
+let ScreenW = Renderer.screen.getWidth(),
+ ScreenH = Renderer.screen.getHeight(),
+ itemCount = 0
+
+ class itemGui
+ {
+ constructor(item)
+ {
+ this.item = item
+ itemCount++
+
+ const textWindow = new UIBlock(new Color(0, 0, 0, 0.5)) // 320 960
+ .setX(new CenterConstraint())
+ .setY((ScreenH/2*itemCount + ScreenH/10.8).pixels())
+ .setWidth((ScreenW/ITEM_WIDTH).pixels())
+ .setHeight((ScreenH/ITEM_HEIGHT).pixels())
+ .onMouseClick(() => {
+ ChatLib.command(command, true)
+ })
+ new UIText(this.item, false)
+ .setX(new RelativeConstraint())
+ .setY((2).pixels())
+ .setTextScale((1).pixels())
+ .setColor(new ConstantColorConstraint(Color.WHITE))
+ .setChildOf(textWindow)
+ }
+}
+
+function coordsWindow(row, column, title, command, desc, image=false, alternateText="")
+{
+ const coordWindow = new UIBlock(new Color(0, 0, 0, 0.5)) // 320 960
+ .setX(((ScreenW/3*(column))-ScreenW/3.25).pixels())
+ .setY((ScreenH/2*(row-1)+ScreenH/10.8).pixels())
+ .setWidth((ScreenW/COORDS_WIDTH).pixels())
+ .setHeight((ScreenH/COORDS_HEIGHT).pixels())
+ .onMouseClick(() => {
+ ChatLib.command(command, true)
+ })
+ new UIText(title, false)
+ .setX(new CenterConstraint())
+ .setY((2).pixels())
+ .setTextScale((2).pixels())
+ .setColor(new ConstantColorConstraint(Color.GREEN.darker()))
+ .setChildOf(coordWindow)
+ if(image == true)
+ {
+ new UIWrappedText(alternateText)
+ .setX((12).pixels())
+ .setY((25).pixels())
+ .setWidth((ScreenW/5).pixels())
+ .setTextScale((1).pixels())
+ .setColor(new ConstantColorConstraint(Color.WHITE))
+ .setChildOf(coordWindow)
+ new UIImage.ofURL(new URL(desc))
+ .setX(new CenterConstraint())
+ .setY(new AdditiveConstraint(new CenterConstraint(), (4).pixels()))
+ .setWidth((ScreenW/3.7).pixels())
+ .setHeight((ScreenH/3.7).pixels())
+ .setChildOf(coordWindow)
+ }
+ else
+ {
+ new UIWrappedText(desc)
+ .setX((2).pixels())
+ .setY((25).pixels())
+ .setWidth((ScreenW/3.7).pixels())
+ .setTextScale((1).pixels())
+ .setColor(new ConstantColorConstraint(Color.WHITE))
+ .setChildOf(coordWindow)
+ }
+
+ return coordWindow
+}
+
+export function openCoordsGui()
+{
+ ScreenW = Renderer.screen.getWidth()
+ ScreenH = Renderer.screen.getHeight()
+ const CoordsGui = new JavaAdapter(WindowScreen, {
+ init() {
+ coordsWindow(1, 1, "Spiral", "cw spiral toggle", "https://i.imgur.com/dyL30GD.png", true, "Do /cw spiral to see image. (image isn't loading.)").setChildOf(this.getWindow())
+ coordsWindow(1, 2, "Throne", "cw throne toggle", "https://i.imgur.com/7BWzO1c.jpg", true, "Go back of throne. (image isn't loading)").setChildOf(this.getWindow())
+ coordsWindow(1, 3, "Yog", "cw yog toggle", "https://i.imgur.com/DojoypL.jpg", true, "Go to the leftmost corner of the topaz crystal facing bal close to bal. (image isn't loading)").setChildOf(this.getWindow())
+ coordsWindow(2, 1, "Divans", "cw divans toggle", "https://i.imgur.com/bkC6yp3.jpg", true, "Go to the middle of jade crystal. (image isn't loading)").setChildOf(this.getWindow())
+ coordsWindow(2, 2, "Automatons", "cw automatons toggle", "https://media.discordapp.net/attachments/1049475464667856926/1052749218055475210/image.png", true, "Sit in pot somewhere (check image in command) (image isn't loading)").setChildOf(this.getWindow())
+ new UIText("Click box to enable/disable.")
+ .setX(new CenterConstraint())
+ .setY((ScreenH-ScreenH/12).pixels())
+ .setTextScale((2).pixels())
+ .setColor(Color.WHITE)
+ .setChildOf(this.getWindow())
+ },
+ })
+ CoordsGui.init()
+ GuiHandler.openGui(CoordsGui)
+}*/ \ No newline at end of file
diff --git a/render/powertrackerGui.js b/render/guis/powertrackerGui.js
index cf6fc2c..f6bc96b 100644
--- a/render/powertrackerGui.js
+++ b/render/guis/powertrackerGui.js
@@ -1,8 +1,8 @@
/*
Major credit to Fabi019 for Powdertracker module.
*/
-import constants from "../util/constants"
-import settings from "../settings"
+import constants from "../../util/constants"
+import settings from "../../settings"
const powderGui = new Gui(),
bossBar = Java.type("net.minecraft.entity.boss.BossStatus").field_82827_c
diff --git a/render/timerGui.js b/render/guis/timerGui.js
index 87171ff..0487f2b 100644
--- a/render/timerGui.js
+++ b/render/guis/timerGui.js
@@ -1,5 +1,5 @@
-import settings from "../settings";
-import constants from "../util/constants";
+import settings from "../../settings";
+import constants from "../../util/constants";
const timerGui = new Gui()
diff --git a/render/miningAbilities.js b/render/miningAbilities.js
index d920e50..41113ed 100644
--- a/render/miningAbilities.js
+++ b/render/miningAbilities.js
@@ -63,11 +63,24 @@ register("step", () => {
else if (ability.drawTitle == 0)
ability.drawTitle = 1
})
-}).setDelay(1) // delay instead of fps for accuracy ?
+}).setDelay(1)
register("chat", (abilityName, event) => {
let found = false
+ let timer
+
+ switch(capitalizeFirst(abilityName))
+ {
+ case "Pickobulus":
+ timer = 110
+ break
+ case "Vein seeker":
+ timer = 60
+ break
+ default:
+ timer = 120
+ }
activeAbilities.forEach(ability => {
if(ability.name == capitalizeFirst(abilityName))
@@ -75,16 +88,13 @@ register("chat", (abilityName, event) => {
found = true
drawTimestamp = undefined
ability.drawTitle = 0
- if (capitalizeFirst(abilityName) === "Pickobulus")
- ability.timer = 110
- else
- ability.timer = 120
+ ability.timer = timer
}
})
if (!found)
{
- let object = {timer: capitalizeFirst(abilityName) === "Pickobulus" ? 110 : 120, name: capitalizeFirst(abilityName), drawTitle: 0, drawTimestamp: undefined}
+ let object = {timer: timer, name: capitalizeFirst(abilityName), drawTitle: 0, drawTimestamp: undefined}
activeAbilities.push(object)
}
diff --git a/render/naturals.js b/render/naturals.js
index a4d4393..2591fb0 100644
--- a/render/naturals.js
+++ b/render/naturals.js
@@ -6,13 +6,7 @@ let coords = [],
visibleCoords = []
register("gameLoad", res => {
- axios.get(`https://ninjune.dev/api/coords`)
- .then((res) => {
- coords = res.data
- })
- .catch((err) => {
- if(settings.debug) return console.log(err)
- })
+ coords = JSON.parse(FileLib.read("Coleweight", "data/naturalCoords.json"))
})
register("step", () => {
diff --git a/render/textGuiCreator.js b/render/textGuiCreator.js
deleted file mode 100644
index e85b7e4..0000000
--- a/render/textGuiCreator.js
+++ /dev/null
@@ -1,20 +0,0 @@
-export function createGui(guiObject, x, y)
-// format: { leftValues: [], rightValues: [] } (must have same amount of each or error).
-{
- let string = ""
- guiObject.leftValues.forEach((leftValue, index) => {
- if(leftValue == "Uptime")
- {
- let uptime = guiObject.rightValues[index],
- uptimeHr = Math.floor(uptime/60/60)
-
- if(uptimeHr >= 1)
- string += `&aUptime: &b${uptimeHr}h ${Math.floor(uptime/60) - uptimeHr*60}m\n`
- else
- string += `&aUptime: &b${Math.floor(uptime/60)}m ${Math.floor(uptime%60)}s\n`
- }
- else
- string += `&a${leftValue}: &b${guiObject.rightValues[index]}\n`
- })
- Renderer.drawStringWithShadow(string, x, y)
-} \ No newline at end of file
diff --git a/render/treecapTimer.js b/render/treecapTimer.js
new file mode 100644
index 0000000..51352ef
--- /dev/null
+++ b/render/treecapTimer.js
@@ -0,0 +1,39 @@
+import settings from "../settings"
+import { checkInPark } from "../util/helperFunctions"
+
+treecapCooldown = 0.0
+monkeyLevel = 0
+
+register("renderOverlay", () => {
+ if(!settings.treecapTimer || !checkInPark()) return
+ // ChatLib.chat(Player.getHeldItem().getItemNBT().getTag('tag').getTag('ExtraAttributes').getTag("id").toString())
+ let itemId = Player.getHeldItem()?.getItemNBT()?.getTag('tag')?.getTag('ExtraAttributes')?.getTag("id")?.toString()
+ if(!(itemId == `"TREECAPITATOR_AXE"` || itemId == `"ASPECT_OF_THE_VOID"` || Player?.getHeldItem()?.getRegistryName() == "minecraft:fishing_rod")) return
+ let txt = Math.ceil(treecapCooldown*10)/10
+ Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2 - Renderer.screen.getHeight()/25)
+})
+
+register("step", () => {
+ if(!settings.treecapTimer || !checkInPark()) return
+ if(treecapCooldown > 0)
+ {
+ let multipler = 1 + Math.floor(1/2 * parseInt(monkeyLevel))/100
+ if(treecapCooldown - 0.1*multipler < 0)
+ treecapCooldown = 0
+ else
+ treecapCooldown -= 0.1 * multipler
+ }
+}).setFps(10)
+
+register("blockBreak", (block) => {
+ if(!settings.treecapTimer || !checkInPark()) return
+ let blockRegistryName = block.type.getRegistryName()
+ if (treecapCooldown > 0.5 || !(blockRegistryName == "minecraft:log" || blockRegistryName == "minecraft:log2")) return
+ treecapCooldown = 2.0
+})
+
+register("chat", (lvl, pet, event) => {
+ if(!settings.treecapTimer || !checkInPark()) return
+ if(pet != "Monkey") return monkeyLevel = 0
+ monkeyLevel = lvl
+}).setCriteria(/&cAutopet &eequipped your &.\[Lvl ([0-9]+)] &.([a-zA-Z]+)&e! &a&lVIEW RULE&r/g) \ No newline at end of file