diff options
Diffstat (limited to 'render/guis')
-rw-r--r-- | render/guis/collectionGui.js | 52 | ||||
-rw-r--r-- | render/guis/coordsGui.js | 86 | ||||
-rw-r--r-- | render/guis/cwGui.js | 152 | ||||
-rw-r--r-- | render/guis/downtimeGui.js | 85 | ||||
-rw-r--r-- | render/guis/efficientMinerOverlayGui.js | 113 | ||||
-rw-r--r-- | render/guis/powertrackerGui.js | 116 | ||||
-rw-r--r-- | render/guis/timerGui.js | 43 |
7 files changed, 647 insertions, 0 deletions
diff --git a/render/guis/collectionGui.js b/render/guis/collectionGui.js new file mode 100644 index 0000000..3764fcf --- /dev/null +++ b/render/guis/collectionGui.js @@ -0,0 +1,52 @@ +import constants from "../../util/constants" +import settings from "../../settings" +import { trackerGui } from "../../util/helperFunctions" +const PREFIX = constants.PREFIX +const collectionGui = new trackerGui("", "Collection Not set! /cw track", settings.collectionNotation) + + +export function trackCollection(arg) +{ + collectionGui.resetVars() + let collections = JSON.parse(FileLib.read("Coleweight", "data/collections.json")) + if(arg == "obby") arg = "obsidian" + if(arg == "cobble") arg = "cobblestone" + if(collections[arg.toLowerCase()] == undefined) return ChatLib.chat(`${PREFIX}&eThat is not a valid collection! (or is not supported)`) + collectionGui.trackedItem = collections[arg].collectionToTrack + collectionGui.itemStringed = collections[arg].collectionStringed + + ChatLib.chat(`${PREFIX}&bSet collection to ${collectionGui.itemStringed}!`) +} + +export function openCollectionGui() +{ + collectionGui.moveGui() +} + +export function reloadCollection() +{ + collectionGui.resetVars() +} + +register("dragged", (dx, dy, x, y) => { + if (!collectionGui.collectionMoveGui.isOpen()) return + constants.collectiondata.x = x + constants.collectiondata.y = y + constants.collectiondata.save() +}) + +register("renderOverlay", () => { + collectionGui.renderGui(constants.collectiondata.x, constants.collectiondata.y, settings.collectionTracker, settings.collectionNotation, settings.showCollectionTrackerAlways) +}) + +register("step", () => { + let date_ob = new Date(), + seconds = date_ob.getSeconds() + + if(collectionGui.trackingItem == true) + collectionGui.uptimeSeconds += 1 + if(seconds == 0 || seconds == 15 || seconds == 30 || seconds == 45) + { + collectionGui.calcApi(["members", Player.getUUID().replace(/-/g, ""), "collection"], Player.getUUID()) + } +}).setFps(1)
\ No newline at end of file diff --git a/render/guis/coordsGui.js b/render/guis/coordsGui.js new file mode 100644 index 0000000..0c1f244 --- /dev/null +++ b/render/guis/coordsGui.js @@ -0,0 +1,86 @@ +import { + AdditiveConstraint, + CenterConstraint, + ConstantColorConstraint, + UIBlock, + UIImage, + UIWrappedText, + UIText, + WindowScreen, + } from "../../../Elementa" + +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 + HEIGHT = 2.877 // ^ +let ScreenW = Renderer.screen.getWidth(), + ScreenH = Renderer.screen.getHeight() + +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/WIDTH).pixels()) + .setHeight((ScreenH/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/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/guis/downtimeGui.js b/render/guis/downtimeGui.js new file mode 100644 index 0000000..11be0d3 --- /dev/null +++ b/render/guis/downtimeGui.js @@ -0,0 +1,85 @@ +import settings from "../../settings" +import constants from "../../util/constants" +import { textGui } from "../../util/helperFunctions" + +const downtimeMoveGui = new Gui() +const downtimeGui = new textGui() +let oldFuel = 0, + timeAtLastFuel = 0, + overallDowntime = 0, + trackingDowntime = false, + downtime = 0, + downtimeCount = 0, + uptime = 0 + + +export function openDowntimeGui() +{ + downtimeMoveGui.open() +} + + +register("dragged", (dx, dy, x, y) => { + if (!downtimeMoveGui.isOpen()) return + constants.downtimedata.x = x + constants.downtimedata.y = y + constants.downtimedata.save() +}) + +register('actionbar', (xp) => { + if(!settings.downtimeTracker) return + if(Player.getHeldItem() == null) return + let heldItem = Player.getHeldItem().getNBT().toObject()["tag"]["ExtraAttributes"], + newFuel = parseInt(heldItem["drill_fuel"]) // credit to DocilElm because I'm lazy. + + if(!newFuel) return + else if(oldFuel == 0) oldFuel = newFuel + else if(oldFuel !== newFuel) + { + if(timeAtLastFuel == 0) + { + timeAtLastFuel = Date.now() + return + } + downtime = Date.now() - timeAtLastFuel + overallDowntime += downtime + downtimeCount += 1 + timeAtLastFuel = Date.now() + trackingDowntime = true + oldFuel = newFuel + } +}).setCriteria('${*}+${xp} Mining ${*}') + + +register("renderOverlay", () => { + if (downtimeMoveGui.isOpen()) + { + let txt = "Drag to move." + Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2) + downtimeGui.guiObject = {leftValues: ["Downtime", "Overall Downtime", "Average Downtime", "Uptime"], rightValues: [0, 0, 0, 0]} + downtimeGui.x = constants.downtimedata.x + downtimeGui.y = constants.downtimedata.y + downtimeGui.renderGui() + return + } + if (downtimeCount == 0 || !trackingDowntime || !settings.downtimeTracker) return + let avgDowntime = Math.ceil((overallDowntime/downtimeCount)*100) / 100 + downtimeGui.guiObject = {leftValues: ["Downtime", "Overall Downtime", "Average Downtime", "Uptime"], rightValues: [downtime, overallDowntime, avgDowntime, uptime]} + downtimeGui.x = constants.downtimedata.x + downtimeGui.y = constants.downtimedata.y + downtimeGui.renderGui() +}) + + +register("step", () => { + if((Date.now()-timeAtLastFuel)/1000 >= 60) + { + uptime = 0 + oldFuel = 0 + overallDowntime = 0 + timeAtLastFuel = 0 + trackingDowntime = false + } // over 60 seconds then stop making gui + else if(trackingDowntime) + uptime += 1 +}).setFps(1)
\ No newline at end of file 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/guis/powertrackerGui.js b/render/guis/powertrackerGui.js new file mode 100644 index 0000000..f6bc96b --- /dev/null +++ b/render/guis/powertrackerGui.js @@ -0,0 +1,116 @@ +/* +Major credit to Fabi019 for Powdertracker module. +*/ +import constants from "../../util/constants" +import settings from "../../settings" + +const powderGui = new Gui(), + bossBar = Java.type("net.minecraft.entity.boss.BossStatus").field_82827_c + +let sessionRunning = false, + sessionChests = 0, + sessionGemstone = 0, + sessionMithril = 0, + seconds = 0, + timeSinceLastGain = 0 + +export function openPowderGui() +{ + powderGui.open() +} + +function DoublePowderActive() +{ + return bossBar.includes("2X POWDER") +} + +register("dragged", (dx, dy, x, y) => { + if (!powderGui.isOpen()) return + constants.powderdata.x = x + constants.powderdata.y = y + constants.powderdata.save() +}) + +register("chat", (value, type) => { + let powder = parseInt(value) + + if (DoublePowderActive()) + powder *= 2 + if(type.toLowerCase() == "gemstone") + { + constants.powderdata.gemstonePowder += powder + sessionGemstone += powder + } + else if (type.toLowerCase() == "mithril") + { + constants.powderdata.mithrilPowder += powder + sessionMithril += powder + } + constants.powderdata.save() + timeSinceLastGain = 0 + sessionRunning = true +}).setCriteria(/You received \+([0-9]+) ([a-zA-Z]+) Powder/g) + +register("chat", event => { + constants.powderdata.chests += 1 + sessionChests += 1 + sessionRunning = true +}).setCriteria("&r&6You have successfully picked the lock on this chest!&r"); + +register("renderOverlay", () => { + if (powderGui.isOpen()) + { + let txt = "Drag to move." + Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2) + } + if (!settings.trackerVisible || !sessionRunning) return + + let uptimeHr = Math.floor(seconds/60/60), + lines = [], + message ="" + + function addText(item, value) + { + lines.push("&a" + item + ": &b" + value) + } + + if (settings.showTotals) + { + addText("Total Chest", constants.powderdata.chests) + addText("Total Gemstone", constants.powderdata.gemstonePowder) + addText("Total Mithril", constants.powderdata.mithrilPowder) + } + + addText("Session Chests", sessionChests) + addText("Session Gemstone", sessionGemstone) + addText("Session Mithril", sessionMithril) + + + if (settings.showRates) + { + addText("Chests/hr", Math.round(((sessionChests ?? 0)/(seconds ?? 1)) * 3600)) + addText("Gemstone/hr", Math.round(((sessionGemstone ?? 0)/(seconds ?? 1)) * 3600)) + addText("Mithril/hr", Math.round(((sessionMithril ?? 0)/(seconds ?? 1)) * 3600)) + if(uptimeHr >= 1) + addText("Uptime", `${uptimeHr}h ${Math.floor(seconds/60) - uptimeHr*60}m`) + else + addText("Uptime", `${Math.floor(seconds/60)}m ${Math.floor(seconds%60)}s`) + } + + lines.forEach((line) => { + message += line + "\n" + }) + Renderer.drawStringWithShadow(message, constants.powderdata.x, constants.powderdata.y) +}) + +register("step", () => { + if(sessionRunning) + { + seconds += 1 + timeSinceLastGain += 1 + } + if(timeSinceLastGain > 300 && sessionRunning) + { + sessionRunning = false + } +}).setFps(1) diff --git a/render/guis/timerGui.js b/render/guis/timerGui.js new file mode 100644 index 0000000..0487f2b --- /dev/null +++ b/render/guis/timerGui.js @@ -0,0 +1,43 @@ +import settings from "../../settings"; +import constants from "../../util/constants"; + + +const timerGui = new Gui() + +export function openTimerGui() +{ + timerGui.open() +} + +register("dragged", (dx, dy, x, y) => { + if (!timerGui.isOpen()) return + constants.timerdata.x = x + constants.timerdata.y = y + constants.timerdata.save() +}); + +register("renderOverlay", () => { + if (timerGui.isOpen()) + { + let txt = "Drag to move." + Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2) + } + if (!settings.timerVisible) return + + let timerHr = Math.floor(constants.timerdata.timer/60/60), message + + if(timerHr >= 1) + message = `&aTimer: &b${timerHr}h ${Math.floor(constants.timerdata.timer/60) - timerHr*60}m` + else + message = `&aTimer: &b${Math.floor(constants.timerdata.timer/60)}m ${Math.floor(constants.timerdata.timer%60)}s` + + Renderer.drawStringWithShadow(message, constants.timerdata.x, constants.timerdata.y) +}) + +register('worldLoad', () => { + constants.timerdata.timer = 0 +}) + +register("step", () => { + constants.timerdata.timer += 1 +}).setFps(1)
\ No newline at end of file |