aboutsummaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
Diffstat (limited to 'render')
-rw-r--r--render/efficientMinerOverlay.js189
-rw-r--r--render/gemstoneMiningStats.js23
-rw-r--r--render/guis/collectionGui.js3
-rw-r--r--render/guis/efficientMinerOverlayGui.js113
-rw-r--r--render/miningAbilities.js20
-rw-r--r--render/treecapTimer.js2
6 files changed, 335 insertions, 15 deletions
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 b0bf4b8..40eed1a 100644
--- a/render/gemstoneMiningStats.js
+++ b/render/gemstoneMiningStats.js
@@ -5,7 +5,7 @@ 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
@@ -62,8 +62,17 @@ register("itemTooltip", (lore, item) => { // this is so bad 💀
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
@@ -106,16 +115,16 @@ register("itemTooltip", (lore, item) => { // powder put into each perk
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) return
+ if(hotmObjectToFind == undefined || (hotmObjectToFind.costFormula == undefined && perk != "Fortunate")) return
let powderSum
if(perk == "Fortunate")
- powderSum = findCost(undefined, 1, parseInt(level), true)
+ powderSum = findCost(undefined, 2, parseInt(level), true)
else
- powderSum = findCost(hotmObjectToFind.costFormula, 1, parseInt(level))
+ powderSum = findCost(hotmObjectToFind.costFormula, 2, parseInt(level))
if(item.getLore()[1].includes("💀")) return
- list.set(0, new NBTTagString(item.getLore()[1] + ` §7(§b${addCommas(Math.round(powderSum))}§7)💀`)) // this is a perfect solution no cap
+ 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/guis/collectionGui.js b/render/guis/collectionGui.js
index 8f96d4a..3764fcf 100644
--- a/render/guis/collectionGui.js
+++ b/render/guis/collectionGui.js
@@ -2,7 +2,6 @@ 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/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/miningAbilities.js b/render/miningAbilities.js
index 4663327..41113ed 100644
--- a/render/miningAbilities.js
+++ b/render/miningAbilities.js
@@ -68,6 +68,19 @@ register("step", () => {
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/treecapTimer.js b/render/treecapTimer.js
index 3d9ecef..51352ef 100644
--- a/render/treecapTimer.js
+++ b/render/treecapTimer.js
@@ -7,7 +7,7 @@ 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()
+ 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)