diff options
Diffstat (limited to 'render')
-rw-r--r-- | render/efficientMinerOverlay.js | 189 | ||||
-rw-r--r-- | render/gemstoneMiningStats.js | 23 | ||||
-rw-r--r-- | render/guis/collectionGui.js | 3 | ||||
-rw-r--r-- | render/guis/efficientMinerOverlayGui.js | 113 | ||||
-rw-r--r-- | render/miningAbilities.js | 20 | ||||
-rw-r--r-- | render/treecapTimer.js | 2 |
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) |