From 1891ada92ab1911cfaaa7ad0e72c85573f4fcbb6 Mon Sep 17 00:00:00 2001 From: Ninjune x Date: Tue, 13 Dec 2022 20:47:42 -0600 Subject: v1.8.0 --- chat/grieferTrack.js | 62 +++++++ chat/message.js | 36 +++- commandManager.js | 110 +++++++++---- commands/calculate/calcSpeed.js | 47 ++++++ commands/calculate/calculate.js | 36 ++++ commands/calculate/hotmCalc.js | 66 ++++++++ commands/calculate/tick.js | 93 +++++++++++ commands/claim.js | 103 +++++++----- commands/credits.js | 7 + commands/fetchDiscord.js | 12 +- commands/help.js | 10 +- commands/reload.js | 11 -- commands/spiral.js | 2 +- commands/throne.js | 2 +- commands/tick.js | 64 -------- data/collections.json | 87 ++++++++++ data/hotm.json | 151 +++++++++++++++++ index.js | 149 +---------------- metadata.json | 2 +- render/collectionGui.js | 64 +++++--- render/cwGui.js | 178 ++++++++++++++++++-- render/dwarvenNotifier.js | 36 ++++ render/gemstoneMiningStats.js | 99 +++++++++++ render/miningAbilities.js | 95 +++++++++++ render/naturals.js | 37 +++-- render/tabList.js | 39 +++-- render/textGuiCreator.js | 20 +++ settings.js | 156 +++++++++++++++--- util/constants.js | 28 ++-- util/grieferTrack.js | 47 ------ util/helperFunctions.js | 352 +++++++++++++++++++++++++++++++++++++++- util/updater.js | 35 ---- 32 files changed, 1720 insertions(+), 516 deletions(-) create mode 100644 chat/grieferTrack.js create mode 100644 commands/calculate/calcSpeed.js create mode 100644 commands/calculate/calculate.js create mode 100644 commands/calculate/hotmCalc.js create mode 100644 commands/calculate/tick.js create mode 100644 commands/credits.js delete mode 100644 commands/reload.js delete mode 100644 commands/tick.js create mode 100644 data/collections.json create mode 100644 data/hotm.json create mode 100644 render/dwarvenNotifier.js create mode 100644 render/gemstoneMiningStats.js create mode 100644 render/miningAbilities.js create mode 100644 render/textGuiCreator.js delete mode 100644 util/grieferTrack.js delete mode 100644 util/updater.js diff --git a/chat/grieferTrack.js b/chat/grieferTrack.js new file mode 100644 index 0000000..2b745c3 --- /dev/null +++ b/chat/grieferTrack.js @@ -0,0 +1,62 @@ +import axios from "../../axios" +import settings from "../settings" +import constants from "../util/constants" +const PREFIX = constants.PREFIX +let checkedPlayers = [], + griefers = [] + + +register("step", () => { + let date_ob = new Date(), + seconds = date_ob.getSeconds() + + if(seconds == 0 || seconds == 15 || seconds == 30 || seconds == 45) + checkMMiners() +}).setFps(1) + + +register("worldLoad", () => { + checkedPlayers = [] + setTimeout(() => { + checkMMiners() + }, 1500) +}) + + +function checkMMiners() +{ + if (!settings.trackGriefers) return + try + { + const NetHandlerPlayClient = Client.getConnection(), + PlayerMap = NetHandlerPlayClient.func_175106_d() // getPlayerInfoMap + + PlayerMap.filter(player => player.func_178853_c() > 0 && !player.func_178845_a().name.startsWith("!")).forEach((PlayerMP) => { + let player = PlayerMP.func_178845_a().name + + if(!checkedPlayers.includes(player)) + { + if(griefers.includes(player)) + ChatLib.chat(`${PREFIX}&e'${player}' is a griefer!`) + checkedPlayers.push(player) + } + }) + } catch(err) { if(settings.debug) console.log("grieferTrack trycatch: " + err) } + + return checkedPlayers +} + + +register("gameLoad", () => { + axios.get(`https://ninjune.dev/api/mminers`) + .then(res => { + griefers = res.data.griefers + }) + .catch(err => { + if(!settings.debug) return + ChatLib.chat(err) + }) +}) + + +export default "" \ No newline at end of file diff --git a/chat/message.js b/chat/message.js index 79b6be1..27cf78f 100644 --- a/chat/message.js +++ b/chat/message.js @@ -40,6 +40,17 @@ register("chat", (level, typeOfChat, hypixelRank, username, playerMessage, event ChatLib.chat(newMessage) }).setCriteria(/^(\[\d+\] )?((?:(?:Guild|Party|Co-op) > )|(?:\[:v:\] ))?(\[\w+\+{0,2}\] )?(\w{1,16})(?: \[\w{1,6}\])?: (.*)$/g) +register("gameLoad", () => { + axios.get(`https://ninjune.dev/api/coleweight-leaderboard?length=500`) + .then(res => { + cwlbData = res.data + }) + .catch(err => { + ChatLib.chat(err) + }) +}) + + register("messageSent", (origMessage, event) => { // emotes! this was fun to make :) let commandState = 0, command = "", @@ -75,14 +86,21 @@ register("messageSent", (origMessage, event) => { // emotes! this was fun to mak ChatLib.say(`${message}`) }) -register("worldLoad", () => { - axios.get(`https://ninjune.dev/api/coleweight-leaderboard?length=500`) - .then(res => { - cwlbData = res.data - }) - .catch(err => { - ChatLib.chat(err) - }) -}) + +// first time check +register("step", () => { + if (constants.data.first_time) + { + constants.data.first_time = false + constants.data.save() + ChatLib.chat("") + new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bPlease Set Your Api Key By Doing /api new`)).chat() + new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bOr By Doing /cw setkey (key)`)).chat() + new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bView commands: /cw help`)).chat() + ChatLib.chat("") + } + if (constants.data.api_key == undefined || constants.data.api_key == "") return +}).setFps(1); + export default "" \ No newline at end of file diff --git a/commandManager.js b/commandManager.js index cf28a8c..591676c 100644 --- a/commandManager.js +++ b/commandManager.js @@ -2,9 +2,9 @@ import { openTimerGui } from "./render/timerGui.js" import { openPowderGui } from "./render/powertrackerGui" import { openCoordsGui } from "./render/coordsGui.js" import { openDowntimeGui } from "./render/downtimeGui.js" -import { openCwGui } from "./render/cwGui" +import { openCwGui, reloadColeweight } from "./render/cwGui" +import { openCollectionGui, reloadCollection, trackCollection } from "./render/collectionGui" import { help } from "./commands/help" -import { reload } from "./commands/reload" import { setkey } from "./commands/setkey" import { spiral } from "./commands/spiral" import { throne } from "./commands/throne" @@ -14,27 +14,30 @@ import { update } from "./commands/update" import { fetchDiscord } from "./commands/fetchDiscord" import { findColeweight } from "./commands/findColeweight" import { claim } from "./commands/claim" -import { tick } from "./commands/tick" import { time } from "./commands/time" import { info } from "./commands/info" +import { credits } from "./commands/credits" import Settings from "./settings" import constants from "./util/constants" import { clearLobbies } from "./commands/markingLobbies" import { divans } from "./commands/divans.js" +import { calculate } from "./commands/calculate/calculate.js" +import { openMiningAbilitiesGui } from "./render/miningAbilities.js" -register("command", (arg, arg2, arg3) => { - if (arg == undefined) {findColeweight(arg); return} - switch(arg.toLowerCase()) +register("command", (...args) => { + console.log(args[0]) + if (args[0] == undefined) {findColeweight(args[0]); return} + switch(args[0].toString().toLowerCase()) { case "setkey": - setkey(arg2) + setkey(args[1]) break case "help": help() break case "move": - if (arg2 == undefined) {ChatLib.chat(`${constants.PREFIX}&cNot enough arguments.`); return} - switch(arg2.toLowerCase()) + if (args[1] == undefined) {ChatLib.chat(`${constants.PREFIX}&cNot enough arguments.`); return} + switch(args[1].toLowerCase()) { case "coleweight": openCwGui() @@ -49,21 +52,37 @@ register("command", (arg, arg2, arg3) => { case "downtime": openDowntimeGui() break + case "collection": + openCollectionGui() + break + case "miningabilities": + openMiningAbilitiesGui() + break default: ChatLib.chat(`${constants.PREFIX}&cNo such gui as '${arg2}'.`) } break case "throne": - throne(arg2) + throne(args[1]) break case "spiral": - spiral(arg2) + spiral(args[1]) break case "reload": - reload() + switch(args[1].toLowerCase()) + { + case "coleweight": + reloadColeweight() + break + case "collection": + reloadCollection() + break + default: + ChatLib.chat(`${constants.PREFIX}&cNo such gui as '${args[1]}'.`) + } break case "leaderboard": - leaderboard(arg2, arg3) + leaderboard(args[1], args[2]) break case "update": update() @@ -73,14 +92,11 @@ register("command", (arg, arg2, arg3) => { Settings.openGUI() break case "claim": - claim(arg2) + claim(args[1]) break case "powdertrackersync": updateDisplay() break - case "tick": - tick(arg2, arg3) - break case "time": time() break @@ -91,37 +107,71 @@ register("command", (arg, arg2, arg3) => { clearLobbies() break case "yog": - yog(arg2) + yog(args[1]) break case "divans": case "divan": - divans(arg2) + divans(args[1]) break case "coord": case "coords": openCoordsGui() break + case "credits": + credits() + break + case "track": + trackCollection(args[1]) + break + case "calc": + case "calculate": + calculate(args.slice(1)) + break default: - findColeweight(arg) + findColeweight(args[0]) } }).setTabCompletions((args) => { let output = [], + calculateOptions = ["tick", "ms2toprofessional", "hotmcalc", "calchotm"], commands = ["setkey", "help", "move", "toggle", "throne", "spiral", "reload", "leaderboard", - "settings", "claim", "tick", "time", "info", "clearlobbies", "yog", "divan", "coords"] + "settings", "claim", "time", "info", "clearlobbies", "yog", "divan", "coords", "credits", "track", "calculate"] if(args[0].length == 0 || args[0] == undefined) - output = commands + return output = commands + + if(args[0] == "calc" || args[0] == "calculate") + { + if(args[1] == undefined) output = calculateOptions + + else + { + calculateOptions.forEach(calculateOption => { + for(let char = 0; char < args[1].length; char++) + { + if(calculateOption[char] != args[1][char]) + break + else if(char == args[1].length - 1) + output.push(calculateOption) + } + }) + } + } else { - for(let i = 0; i < commands.length; i++) + + if(args[0] == undefined) output = commands + + else { - for(let j = 0; j < args[0].length; j++) - { - if(commands[i][j] != args[0][j]) - break - else if(j == args[0].length - 1) - output.push(commands[i]) - } + commands.forEach(command => { + for(let char = 0; char < args[0].length; char++) + { + if(command[char] != args[0][char]) + break + else if(char == args[0].length - 1) + output.push(command) + } + }) } } return output diff --git a/commands/calculate/calcSpeed.js b/commands/calculate/calcSpeed.js new file mode 100644 index 0000000..1b2eae6 --- /dev/null +++ b/commands/calculate/calcSpeed.js @@ -0,0 +1,47 @@ +import constants from "../../util/constants" +import { parseNotatedInput } from "../../util/helperFunctions" +const PREFIX = constants.PREFIX + + +export function calcSpeed(powder) +{ + let speedLevels = 1, + professionalLevels = 1 + + if(powder == undefined || parseNotatedInput(powder) == "NI") return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + powder = parseNotatedInput(powder) + + while(powder > msPowder(speedLevels) + profPowder(professionalLevels)) + { + if(ms2SpeedPerPowder(speedLevels + 1) > professionalSpeedPerPowder(professionalLevels + 1) && speedLevels < 50) + { + powder -= msPowder(speedLevels++) + } + else if (professionalLevels < 140) + { + powder -= profPowder(professionalLevels++) + } + else break + } + return ChatLib.chat(`&bGet &6&l${speedLevels} &bmining speed levels and &6&l${professionalLevels} &bprofessional levels.`) +} + +function ms2SpeedPerPowder(miningSpeedLevel) // 40 speed per level +{ + return 40/msPowder(miningSpeedLevel) +} + +function professionalSpeedPerPowder(professionalLevel) // 5 speed per level +{ + return 5/profPowder(professionalLevel) +} + +function msPowder(miningSpeedLevel) +{ + return Math.floor(Math.pow(miningSpeedLevel+1, 3.2)) +} + +function profPowder(professionalLevel) +{ + return Math.floor(Math.pow(professionalLevel+1, 2.3)) +} \ No newline at end of file diff --git a/commands/calculate/calculate.js b/commands/calculate/calculate.js new file mode 100644 index 0000000..3d9d750 --- /dev/null +++ b/commands/calculate/calculate.js @@ -0,0 +1,36 @@ +import constants from "../../util/constants" +import { hotmCalc } from "./hotmCalc" +import { calcSpeed } from "./calcSpeed" +import { tickCommand } from "./tick" +import { helpCommand } from "../help" +const PREFIX = constants.PREFIX + + +export function calculate(args) +{ + switch(args[0].toLowerCase()) + { + case "hotm": + case "hotmcalc": + case "calchotm": + hotmCalc(args[1], args[2], args[3]) + break + case "tick": + tickCommand(args[1], args[2]) + break + case "calcspeed": + case "speed": + calcSpeed(args[1]) + break + case "help": + ChatLib.chat("&b--------------[ &a&l/cw calculate &b]--------------") + helpCommand("calculate tick", "Calculates tick data.", "(mining speed) (('r','jade', etc) || breaking power of block))") + helpCommand("calculate speed", "Calculates the ratio of mining speed 2 to professional with a certain amount of powder.", "(powder)") + helpCommand("calculate hotm", "Calculates powder between two levels of a certain perk.", "(perk) (minlevel) [maxlevel]") + ChatLib.chat("&b------------------------------------------") + return + default: + return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + } +} + diff --git a/commands/calculate/hotmCalc.js b/commands/calculate/hotmCalc.js new file mode 100644 index 0000000..583b2b8 --- /dev/null +++ b/commands/calculate/hotmCalc.js @@ -0,0 +1,66 @@ +import constants from "../../util/constants" +import { addCommas } from "../../util/helperFunctions" +const PREFIX = constants.PREFIX + + +export function hotmCalc(hotmName, minLevel, maxLevel) +{ + if(hotmName == undefined) + { + let hotmData = JSON.parse(FileLib.read("Coleweight", "data/hotm.json")).data + + ChatLib.chat(`/cw calc hotm (hotmName listed below) (minLevel) [maxLevel]`) + for(let i = 0; i < hotmData.length; i++) + { + ChatLib.chat(hotmData[i].names[0]) + } + return + } + if(maxLevel == undefined) + { + maxLevel = minLevel + minLevel = 1 + } + + if(minLevel != parseInt(minLevel) || maxLevel != parseInt(maxLevel)) return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + + minLevel = parseInt(minLevel) + maxLevel = parseInt(maxLevel) + let hotmObjectToFind = findHotmObject(hotmName) + if(hotmObjectToFind == undefined) return ChatLib.chat(`${PREFIX}&cDid not find HOTM perk with name '${hotmName}'!`) + + maxLevel = (maxLevel < hotmObjectToFind.maxLevel ? maxLevel : hotmObjectToFind.maxLevel) + + let powderSum = findCost(hotmObjectToFind.costFormula, minLevel, maxLevel), + reward = findReward(hotmObjectToFind.rewardFormula, minLevel, maxLevel) + + ChatLib.chat("") + ChatLib.chat(`&6${hotmObjectToFind.nameStringed} ${minLevel} - ${maxLevel} &bwill cost &6&l${addCommas(Math.round(powderSum))} &6${hotmObjectToFind.powderType[0].toUpperCase() + hotmObjectToFind.powderType.slice(1)} &bpowder.`) + ChatLib.chat(`&6${hotmObjectToFind.nameStringed} ${minLevel} - ${maxLevel} &bwill give &6&l${addCommas(Math.round(reward * 100) / 100)} &bof whatever reward is listed.`) + ChatLib.chat("") +} + +export function findHotmObject(hotmName) +{ + let hotmData = JSON.parse(FileLib.read("Coleweight", "data/hotm.json")).data + + for(let i = 0; i < hotmData.length; i++) + { + if(hotmData[i].names.includes(hotmName)) + return hotmData[i] + } +} + +export function findCost(costFormula, minLevel, maxLevel) +{ + let powderSum = 0 + + for(let currentLevel = minLevel; currentLevel < maxLevel; currentLevel++) // finds cost + powderSum += eval(costFormula.replace("currentLevel", currentLevel)) + return powderSum +} + +export function findReward(rewardFormula, minLevel, maxLevel) +{ + return eval(rewardFormula.replace("Level", 1+maxLevel-minLevel)) +} \ No newline at end of file diff --git a/commands/calculate/tick.js b/commands/calculate/tick.js new file mode 100644 index 0000000..f8b2433 --- /dev/null +++ b/commands/calculate/tick.js @@ -0,0 +1,93 @@ +import constants from "../../util/constants" +const PREFIX = constants.PREFIX + +export function tickCommand(speed, block) +{ + if(speed == undefined || parseInt(speed) != speed) + return ChatLib.chat(`${PREFIX}&cMining speed must be an integer!`) + if(block == undefined) + return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + const ticks = findTick(speed, block) + if(ticks.err) return ChatLib.chat(`${PREFIX}&cBlock must be a gemstone or positive breaking power! (or starting letter of gemstone)`) + + + ChatLib.chat(`\n&bCurrently mining blocks in &6&l${Math.round(ticks.currentBlockTick)} ticks` + + `\n&bCurrently mining shards in &6&l${Math.round(ticks.currentShardTick)} ticks` + + `\n&bNext block tick will be at: &6&l${Math.round(ticks.nextBlockSpeed)} mining speed` + + `\n&bNext shard tick will be at: &6&l${Math.round(ticks.nextShardSpeed)} mining speed` + + `\n&bYou need &6&l${Math.round(ticks.nextBlockSpeed - speed)} mining speed&b to get the next block tick.` + + `\n&bYou need &6&l${Math.round(ticks.nextShardSpeed - speed)} mining speed&b to get the next shard tick.\n`) +} + + +export function findTick(speed, block) +{ + let ticks = {err: false}, + strength = findStrength(block) + + ticks.currentBlockTick = strength*30/speed + ticks.currentShardTick = (strength-200)*30/speed + + if(strength < 1) return ticks.err = true + + + if(ticks.currentBlockTick < Math.floor(ticks.currentBlockTick) + 0.5) + ticks.nextBlockSpeed = strength*30/(Math.floor(ticks.currentBlockTick)-0.5) + else + ticks.nextBlockSpeed = strength*30/(Math.floor(ticks.currentBlockTick)+0.5) + + if(ticks.currentShardTick < Math.floor(ticks.currentShardTick) + 0.5) + ticks.nextShardSpeed = strength*30/(Math.floor(ticks.currentShardTick)-0.5) + else + ticks.nextShardSpeed = strength*30/(Math.floor(ticks.currentShardTick)+0.5) + + return ticks +} + +function findStrength(block) +{ + let strength = -1 + + if(block == parseInt(block) && block > 5) // change if add block to tick speed blocks in settings + strength = block + else + { + switch(block.toString().toLowerCase()) + { + case "0": + case "green_mithril": + strength = 800 + break + case "1": + case "blue_mithril": + strength = 1500 + break + case "2": + case "ruby": + case "r": + strength = 2500 + break + case "3": + case "j": + case "jade": + case "a": + case "amber": + case "amethyst": + case "s": + case "sapphire": + strength = 3200 + break + case "4": + case "t": + case "topaz": + case "o": + case "opal": + strength = 4000 + case "5": + case "jasper": + strength = 5000 + } + } + + return strength +} diff --git a/commands/claim.js b/commands/claim.js index ae20924..ef40b99 100644 --- a/commands/claim.js +++ b/commands/claim.js @@ -2,7 +2,10 @@ import axios from "../../axios" import settings from "../settings" import constants from "../util/constants" const PREFIX = constants.PREFIX +const path = `https://ninjune.dev` const serverId = java.util.UUID.randomUUID().toString().replace("-", "") +let claimedServers = [] + export function claim(structure) { @@ -24,71 +27,91 @@ export function claim(structure) return } - axios.get(`https://ninjune.dev/api/claim?type=${structure}&lobby=${constants.serverData.server}&username=${Player.getName()}&serverID=${serverId}`) + axios.get(`${path}/api/claim?type=${structure}&lobby=${constants.serverData.server}&username=${Player.getName()}&serverID=${serverId}`) .then(res => { if(res.data.success) + { ChatLib.chat(`${PREFIX}&aSuccessfully claimed ${constants.serverData.server} as your server!`) + claimedServers.push({player: Player.getName(), server: constants.serverData.server, structure: structure}) + return + } else { - ChatLib.chat(`${PREFIX}&cError: ${res.data.reason}.`) + if(res.data.code == 501) { ChatLib.chat(`${PREFIX}&cError: Not logged into the auth server. Try running the command again.`) - Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) + return Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) } + else + return ChatLib.chat(`${PREFIX}&cError: ${res.data.reason}.`) } }) .catch(err => { - ChatLib.chat(`${PREFIX}&cError: ${err}`) + return ChatLib.chat(`${PREFIX}&cError: ${err}`) }) - } + register('gameLoad', (event) => { - Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) + try + { + Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) + } + catch(e) {} + getClaimed() }) + register('worldLoad', () => { if(!settings.claiming) return - axios.get(`https://ninjune.dev/api/unclaim?username=${Player.getName()}&serverID=${serverId}`) - .then(res => { - if(settings.debug && !res.data.success) - ChatLib.chat("Unclaim: " + res.data.reason) - if(res.data.code == 501) - Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) - }) - .catch(err => { - if(settings.debug) - ChatLib.chat(`${PREFIX}&cError: ${err}`) - }) - // unclaims the lobby, isn't needed but will allow another player to claim lobby after claimer leaves. + getClaimed() setTimeout(() => { const NetHandlerPlayClient = Client.getConnection(), PlayerMap = NetHandlerPlayClient.func_175106_d() // getPlayerInfoMap - + let player + if(settings.debug) console.log(constants.serverData.server) - axios.get(`https://ninjune.dev/api/claimed?serverID=${constants.serverData.server}&authServer=${serverId}&passedName=${Player.getName()}`) - .then(res => { - if(res.data.claimed) - { - PlayerMap.filter(player => player.func_178853_c() /* getResponseTime */ > 0 && !player.func_178845_a()/* getGameProfile */.name.startsWith("!")).forEach((PlayerMP) => { - let player = PlayerMP.func_178845_a()/* getGameProfile */.name + + claimedServers.forEach((claimedServer) => { + PlayerMap.filter(player => player.func_178853_c() > 0 && !player.func_178845_a().name.startsWith("!")).forEach((PlayerMP) => { + player = PlayerMP.func_178845_a().name - res.data.structures.forEach((structure) => { - if (player == structure.player) - ChatLib.chat(`${PREFIX}&cThe ${structure.structure} in ${structure.server} is claimed by ${structure.player}.`) - //holy im so good at naming things, structure.structure I must be a genius. + if (player == claimedServer.player && claimedServer.server == constants.serverData.server) + ChatLib.chat(`${PREFIX}&cThe ${claimedServer.structure} in ${claimedServer.server} is claimed by ${claimedServer.player}.`) + }) + + if (Player.getName() == claimedServer.player) + { + axios.get(`${path}/api/unclaim?username=${Player.getName()}&serverID=${serverId}`) + .then(res => { + if(settings.debug && !res.data.success) + ChatLib.chat("Unclaim: " + res.data.reason) + if(res.data.code == 501) + Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) }) - }) - } - else if (res.data.err && settings.debug) - { - ChatLib.chat("Check claim: " + res.data.reason) - } - }) - .catch(err => { - if(!settings.debug) return - ChatLib.chat(`${PREFIX}&cError: ${err}`) + .catch(err => { + if(settings.debug) + ChatLib.chat(`${PREFIX}&cError: ${err}`) + }) + } }) }, 2000) -}) \ No newline at end of file +}) + + +function getClaimed() +{ + axios.get(`${path}/api/claimed?authServer=${serverId}&passedName=${Player.getName()}`) + .then(res => { + if(res.data.code == 501) + { + Client.getMinecraft().func_152347_ac().joinServer(Client.getMinecraft().func_110432_I().func_148256_e(), Client.getMinecraft().func_110432_I().func_148254_d(), serverId) + return + } + claimedServers = [] + res.data.forEach(server => { + claimedServers.push(server) + }) + }) +} diff --git a/commands/credits.js b/commands/credits.js new file mode 100644 index 0000000..af4aa28 --- /dev/null +++ b/commands/credits.js @@ -0,0 +1,7 @@ +import constants from "../util/constants" +const PREFIX = constants.PREFIX + +export function credits() +{ + ChatLib.chat(`${PREFIX}&bCW was made by Ninjune#0670 (NinOnCubed).`) +} \ No newline at end of file diff --git a/commands/fetchDiscord.js b/commands/fetchDiscord.js index f44c385..f254edb 100644 --- a/commands/fetchDiscord.js +++ b/commands/fetchDiscord.js @@ -6,14 +6,14 @@ export function fetchDiscord(arg) { if(arg == undefined) { ChatLib.chat(`${PREFIX}&eRequires a username!`); return } - axios.get(`https://api.ashcon.app/mojang/v2/user/${arg}`) - .then(res => { - let uuid = res.data.uuid + axios.get(`https://api.mojang.com/users/profiles/minecraft/${arg}`) + .then(mojangRes => { + let uuid = mojangRes.data.id axios.get(`https://api.hypixel.net/player?key=${constants.data.api_key}&uuid=${uuid}`) - .then(res2 => { - let discordMessage = new TextComponent(`${PREFIX}&a${res.data.username}'s Discord: `) + .then(hypixelRes => { + let discordMessage = new TextComponent(`${PREFIX}&a${mojangRes.data.name}'s Discord: `) ChatLib.chat(discordMessage); - ChatLib.chat(`&b${res2.data.player.socialMedia.links.DISCORD}`) + ChatLib.chat(`&b${hypixelRes.data.player.socialMedia.links.DISCORD}`) }) .catch(err => { ChatLib.chat(`${PREFIX}&eNo discord linked :( (or no key linked)`) diff --git a/commands/help.js b/commands/help.js index 05c5a04..8e06b51 100644 --- a/commands/help.js +++ b/commands/help.js @@ -7,14 +7,15 @@ export function help() helpCommand("", "Gets Coleweight of specified user", "(username)") helpCommand("help", "This menu.", "") helpCommand("time", "Prints time on timer (timer gui doesn't have to be visible).", "") - helpCommand("tick", "Shows tick data.", "(mining speed) (('r','jade', etc) || breaking power of block))") + helpCommand("calculate", "Calculates things. '/cw calculate help' for more info.", "") helpCommand("leaderboard", "Shows leaderboard.", "(min) [max]") helpCommand("info", "Prints coleweight info.", "") ChatLib.chat(ChatLib.getCenteredText("&a&lSettings")) helpCommand("settings", "Opens settings.", "") helpCommand("claim", "Claims a chollows sapphire structure in a lobby.", "(throne || spiral)") - helpCommand("setkey", "Sets API key (can also use /api new)-", "(key)") + helpCommand("setkey", "Sets API key (can also use /api new)", "(key)") helpCommand("reload", "Reloads the gui.", "") + helpCommand("track", "Sets tracked collection for collection tracker.", "(collection)") ChatLib.chat(ChatLib.getCenteredText("&a&lWaypoints")) helpCommand("coords", "Opens coords gui.", "") helpCommand("throne", "Guide for setting up waypoints for throne.", "[toggle]") @@ -27,8 +28,7 @@ export function help() } // Made by Almighty Stylla <3 -function helpCommand(command, desc, usage) +export function helpCommand(command, desc, usage) { ChatLib.chat(new TextComponent(`&a${PREFIX} /cw ${command} => &b${desc}`).setHoverValue(`${"/cw " + command + " " + usage}`)) -} - +} \ No newline at end of file diff --git a/commands/reload.js b/commands/reload.js deleted file mode 100644 index 1c5fcc0..0000000 --- a/commands/reload.js +++ /dev/null @@ -1,11 +0,0 @@ -import constants from "../util/constants" -const PREFIX = constants.PREFIX - -export function reload() -{ - constants.upTimeTrack = false - constants.stepsSinceLast = 0 - constants.cwValues = [] - constants.uptime = 0 - ChatLib.chat(`${PREFIX}Reloaded!`) -} \ No newline at end of file diff --git a/commands/spiral.js b/commands/spiral.js index 6574f18..f9f00aa 100644 --- a/commands/spiral.js +++ b/commands/spiral.js @@ -45,7 +45,7 @@ export function spiral(arg2) } register("renderWorld", () => { - waypointRender(spiralWaypoints, true) + waypointRender(spiralWaypoints, true, true) }) register("worldLoad", () => { diff --git a/commands/throne.js b/commands/throne.js index 517c93d..c3a2e1c 100644 --- a/commands/throne.js +++ b/commands/throne.js @@ -41,7 +41,7 @@ export function throne(arg2) register("renderWorld", () => { - waypointRender(throneWaypoints, true) + waypointRender(throneWaypoints, true, true) }) diff --git a/commands/tick.js b/commands/tick.js deleted file mode 100644 index 7af81e2..0000000 --- a/commands/tick.js +++ /dev/null @@ -1,64 +0,0 @@ -import constants from "../util/constants" -const PREFIX = constants.PREFIX - -export function tick(speed, block) -{ - if(speed == undefined || parseInt(speed) != speed) - return `${PREFIX}&cMining speed must be an integer!` - let strength = findStrength(block) - if(strength < 1) return `${PREFIX}&cBlock must be a gemstone or positive breaking power! (or starting letter of gemstone)` - let currentBlockTick = strength*30/speed, - currentShardTick = (strength-200)*30/speed, - nextBlockSpeed, nextShardSpeed - - if(currentBlockTick < Math.floor(currentBlockTick) + 0.5) - nextBlockSpeed = strength*30/(Math.floor(currentBlockTick)-0.5) - else - nextBlockSpeed = strength*30/(Math.floor(currentBlockTick)+0.5) - - if(currentShardTick < Math.floor(currentShardTick) + 0.5) - nextShardSpeed = strength*30/(Math.floor(currentShardTick)-0.5) - else - nextShardSpeed = strength*30/(Math.floor(currentShardTick)+0.5) - - ChatLib.chat(`\n&bCurrently mining blocks in &6&l${Math.round(currentBlockTick)} ticks` + - `\n&bCurrently mining shards in &6&l${Math.round(currentShardTick)} ticks` + - `\n&bNext block tick will be at: &6&l${Math.round(nextBlockSpeed)} mining speed` + - `\n&bNext shard tick will be at: &6&l${Math.round(nextShardSpeed)} mining speed` + - `\n&bYou need &6&l${Math.round(nextBlockSpeed - speed)} mining speed&b to get the next block tick.` + - `\n&bYou need &6&l${Math.round(nextShardSpeed - speed)} mining speed&b to get the next shard tick.\n`) -} - -function findStrength(block) -{ - let strength = -1 - - if(block == parseInt(block)) - strength = block - else - { - switch(block.toLowerCase()) - { - case "ruby": - case "r": - strength = 2500 - break - case "j": - case "jade": - case "a": - case "amber": - case "amethyst": - case "s": - case "sapphire": - strength = 3200 - break - case "t": - case "topaz": - case "o": - case "opal": - strength = 4000 - } - } - - return strength -} diff --git a/data/collections.json b/data/collections.json new file mode 100644 index 0000000..e61a942 --- /dev/null +++ b/data/collections.json @@ -0,0 +1,87 @@ +{ + "gemstone": + { + "collectionToTrack": "GEMSTONE_COLLECTION", + "collectionStringed": "Gemstone" + }, + "mithril": + { + "collectionToTrack": "MITHRIL_ORE", + "collectionStringed": "Mithril" + }, + "gold": + { + "collectionToTrack": "GOLD_INGOT", + "collectionStringed": "Gold" + }, + "obsidian": + { + "collectionToTrack": "OBSIDIAN", + "collectionStringed": "Obsidian" + }, + "netherrack": + { + "collectionToTrack": "NETHERRACK", + "collectionStringed": "Netherrack" + }, + "diamond": + { + "collectionToTrack": "DIAMOND", + "collectionStringed": "Diamond" + }, + "ice": + { + "collectionToTrack": "ICE", + "collectionStringed": "Ice" + }, + "redstone": + { + "collectionToTrack": "REDSTONE", + "collectionStringed": "Redstone" + }, + "lapis": + { + "collectionToTrack": "INK_SACK:4", + "collectionStringed": "Lapis" + }, + "coal": + { + "collectionToTrack": "COAL", + "collectionStringed": "Coal" + }, + "emerald": + { + "collectionToTrack": "EMERALD", + "collectionStringed": "Emerald" + }, + "endstone": + { + "collectionToTrack": "ENDER_STONE", + "collectionStringed": "Endstone" + }, + "glowstone": + { + "collectionToTrack": "GLOWSTONE_DUST", + "collectionStringed": "Glowstone" + }, + "iron": + { + "collectionToTrack": "IRON_INGOT", + "collectionStringed": "Iron" + }, + "mycelium": + { + "collectionToTrack": "MYCEL", + "collectionStringed": "Mycelium" + }, + "quartz": + { + "collectionToTrack": "QUARTZ", + "collectionStringed": "Endstone" + }, + "cobblestone": + { + "collectionToTrack": "COBBLESTONE", + "collectionStringed": "Cobblestone" + } +} \ No newline at end of file diff --git a/data/hotm.json b/data/hotm.json new file mode 100644 index 0000000..1904b57 --- /dev/null +++ b/data/hotm.json @@ -0,0 +1,151 @@ +{"data": [ + { + "costFormula": "Math.pow((currentLevel+1), 3)", + "rewardFormula": "Level*20", + "nameStringed": "Mining Speed", + "names": ["miningspeed", "speed", "ms"], + "maxLevel": 50, + "powderType": "mithril" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.05)", + "rewardFormula": "Level*5", + "nameStringed": "Mining Fortune", + "names": ["miningfortune", "fortune", "mf"], + "maxLevel": 50, + "powderType": "mithril" + + }, + { + "costFormula": "Math.pow((currentLevel+1), 4)", + "rewardFormula": "10+(Level*0.5)", + "nameStringed": "Quick Forge", + "names": ["quickforge", "forge"], + "maxLevel": 20, + "powderType": "mithril" + }, + { + "costFormula": "200+((currentLevel-1)*18)", + "rewardFormula": "(200+((Level-1)*18))*2", + "nameStringed": "Titanium Insanium", + "names": ["titaniuminsanium", "titanium", "tita"], + "maxLevel": 50, + "powderType": "mithril" + }, + { + "costFormula": "200+((currentLevel-1)*18)", + "rewardFormula": "(200+((Level-1)*18))*2", + "nameStringed": "Titanium Insanium", + "names": ["dailypowder"], + "maxLevel": 100, + "powderType": "mithril" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.07)", + "rewardFormula": "5+Level", + "nameStringed": "Luck Of The Cave", + "names": ["luckofthecave", "caveluck", "luck"], + "maxLevel": 45, + "powderType": "mithril" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.4)", + "rewardFormula": "20+((Level-1)*6)", + "nameStringed": "Crystallized", + "names": ["crystallized"], + "maxLevel": 30, + "powderType": "mithril" + }, + { + "costFormula": "Math.pow((currentLevel+1), 2.6)", + "rewardFormula": "10+(Level*0.4)", + "nameStringed": "Efficient Miner", + "names": ["efficientminer", "efficient"], + "maxLevel": 100, + "powderType": "mithril" + }, + { + "costFormula": "currentLevel*70", + "rewardFormula": "0.2+(Level*0.01)", + "nameStringed": "Orbiter", + "names": ["orbiter", "orbit"], + "maxLevel": 80, + "powderType": "mithril" + }, + { + "costFormula": "Math.pow((currentLevel+1), 2.3)", + "rewardFormula": "5+(Level*0.1)", + "nameStringed": "Seasoned Mineman", + "names": ["seasonedmineman", "mineman"], + "maxLevel": 100, + "powderType": "mithril" + }, + { + "1": { "cost": "0", "reward": "+1 Pickaxe Ability Level;+1 Token of the Mountain", "powderType": "mithril"}, + "2": { "cost": "50000", "reward": "+1 Forge Slot", "powderType": "mithril" }, + "3": { "cost": "75000", "reward": "+1 Commission Slot" }, + "4": { "cost": "100000", "reward": "+1 base ᠅ Mithril Powder when mining Mithril", "powderType": "mithril" }, + "5": { "cost": "125000", "reward": "+1 Token of the Mountain", "powderType": "mithril" }, + "6": { "cost": "500000", "reward": "+1 base ᠅ Gemstone Powder when mining Gemstones", "powderType": "gemstone" }, + "7": { "cost": "750000", "reward": "+1 Token of the Mountain", "powderType": "gemstone"}, + "nameStringed": "Peak of the Mountain", + "names": ["peakofthemountain", "peak", "potm"], + "maxLevel": 7 + }, + { + "costFormula": "Math.pow((currentLevel+1), 2.2)", + "rewardFormula": "50+((Level-1)*5)", + "nameStringed": "Mole", + "names": ["mole"], + "maxLevel": 190, + "powderType": "gemstone" + }, + { + "costFormula": "Math.pow((currentLevel+1), 2.3)", + "rewardFormula": "50+(Level*5)", + "nameStringed": "Professional", + "names": ["professional", "prof"], + "maxLevel": 140, + "powderType": "gemstone" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.07)", + "rewardFormula": "5+((Level-1)*0.5)", + "nameStringed": "Lonesome Miner", + "names": ["lonesomeminer", "lonesome"], + "maxLevel": 45, + "powderType": "gemstone" + }, + { + "costFormula": "Math.pow((currentLevel+1), 4)", + "rewardFormula": "20+(4*(Level-1))", + "nameStringed": "Great Explorer", + "names": ["greatexplorer", "explorer"], + "maxLevel": 20, + "powderType": "gemstone" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.2)", + "rewardFormula": "Level*0.01", + "nameStringed": "Powder Buff", + "names": ["powderbuff", "powder"], + "maxLevel": 50, + "powderType": "gemstone" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.2)", + "rewardFormula": "Level*40", + "nameStringed": "Mining Speed II", + "names": ["miningspeedii", "miningspeed2", "speed2", "ms2"], + "maxLevel": 50, + "powderType": "gemstone" + }, + { + "costFormula": "Math.pow((currentLevel+1), 3.2)", + "rewardFormula": "Level*5", + "nameStringed": "Mining Fortune II", + "names": ["miningfortuneii", "miningfortune2", "fortune2", "mf2"], + "maxLevel": 50, + "powderType": "gemstone" + } +]} \ No newline at end of file diff --git a/index.js b/index.js index bb38e78..4961946 100644 --- a/index.js +++ b/index.js @@ -1,153 +1,10 @@ import './render/naturals' import './render/tabList' +import './render/gemstoneMiningStats' +import './render/dwarvenNotifier' import './commands/yog' import './chat/apiNew' import './chat/message' import './chat/serverdata' import './commandManager' -import './util/updater' -import './util/grieferTrack' -import axios from '../axios' -import constants from './util/constants'; -const PREFIX = constants.PREFIX - -//update every second (dogshit code) -register("step", () => { - // first time check - if (constants.data.first_time) - { - constants.data.first_time = false - constants.data.save() - ChatLib.chat("") - new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bPlease Set Your Api Key By Doing /api new`)).chat() - new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bOr By Doing /cw setkey (key)`)).chat() - new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bView commands: /cw help`)).chat() - ChatLib.chat("") - } - if (constants.data.api_key == undefined || constants.data.api_key == "") return - - // updates coleweight for gui - let date_ob = new Date(), - seconds = date_ob.getSeconds() - - if(constants.upTimeTrack == true) - constants.uptime += 1 - if(seconds == 0 || seconds == 15 || seconds == 30 || seconds == 45) - { - try - { - let tempUuid = Player.getUUID(), - profileData = "", - coleweight = 0, - uuid = "" - - for(let i = 0; i < tempUuid.length; i++) - { - if(tempUuid[i] != "-") - { - uuid = uuid + tempUuid[i] - } - } - axios.get(`https://ninjune.dev/api/cwinfo`) - .then(cwInfoRes => { - axios.get(`https://api.hypixel.net/skyblock/profiles?key=${constants.data.api_key}&uuid=${uuid}`) - .then(res => { - let eq = 0, - cwInfo = cwInfoRes.data - - for(let i=0; i < res.data.profiles.length; i+=1) - { - if(res.data.profiles[i].selected == true) - profileData = res.data.profiles[i] - } - - coleweight += 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 - } - coleweight += 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 - coleweight += 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 - coleweight += eq - } - } - - if(constants.baseColeweight == 0) - { - constants.baseColeweight = coleweight - } - else if((coleweight - constants.baseColeweight) > 0) - { - constants.cwValues.push(coleweight - constants.baseColeweight) - constants.calcCwPerHr = true - constants.upTimeTrack = true - constants.stepsSinceLast = 0 - constants.baseColeweight = coleweight - } - else if(constants.stepsSinceLast > 20) - { - constants.upTimeTrack = false - constants.stepsSinceLast = 0 - constants.cwValues = [] - } - else - { - constants.stepsSinceLast += 1 - } - - constants.data.coleweight = Math.ceil(coleweight*100)/100 - constants.data.save() - }) - .catch(err => {ChatLib.chat(e)}) - }) - } - catch(e) - { - ChatLib.chat(e) - } - } -}).setFps(1); \ No newline at end of file +import './chat/grieferTrack' \ No newline at end of file diff --git a/metadata.json b/metadata.json index e177ffb..6f3dfd2 100644 --- a/metadata.json +++ b/metadata.json @@ -3,6 +3,6 @@ "creator": "Ninjune", "entry": "index.js", "description": "Mining utilities.", - "version": "1.6.9", + "version": "1.8.0", "requires": ["axios", "PogData", "Vigilance", "Elementa"] } \ No newline at end of file diff --git a/render/collectionGui.js b/render/collectionGui.js index 8197b11..4e6deee 100644 --- a/render/collectionGui.js +++ b/render/collectionGui.js @@ -1,43 +1,53 @@ -/*import constants from "../util/constants" +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) -let collectionGui = new Gui(), - collection = "" export function trackCollection(arg) { - switch(arg) - { - case "obby": - case "obsidian": - collection = "OBSIDIAN" - break - default: - ChatLib.chat(`${PREFIX}&eThat is not a valid collection! (or is not supported)`) - } + 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 moveCollection() +export function reloadCollection() { - collectionGui.open() + collectionGui.resetVars() } register("dragged", (dx, dy, x, y) => { - if (!collectionGui.isOpen()) return - constants.data.collectionX = x - constants.data.collectionY = y - constants.data.save() + if (!collectionGui.collectionMoveGui.isOpen()) return + constants.collectiondata.x = x + constants.collectiondata.y = y + constants.collectiondata.save() }) register("renderOverlay", () => { - if (cwGui.isOpen()) + collectionGui.renderGui(constants.collectiondata.x, constants.collectiondata.y, settings.collectionNotation, settings.collectionTracker) +}) + +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) { - let txt = "Please set your api key with /cw setkey (key)!" - 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(`&aCollection: &b0\n&aCW/hr: &b0\n&aUptime: &b0m\n&aColeweight Gained: &b0`, constants.data.collectionX, constants.data.collectionY) + collectionGui.calcApi(["members", Player.getUUID().replace(/-/g, ""), "collection"], Player.getUUID()) } - if(collection == "") return - coleweight > 1000 ?collectionMessage = `&b${coleweight.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`: coleweightMessage = `&b${coleweight.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}` -})*/ \ No newline at end of file +}).setFps(1) \ No newline at end of file diff --git a/render/cwGui.js b/render/cwGui.js index 96c0bf6..0d734cd 100644 --- a/render/cwGui.js +++ b/render/cwGui.js @@ -1,15 +1,37 @@ 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 @@ -28,27 +50,149 @@ register("renderOverlay", () => { } if(!settings.cwToggle || constants.data.api_key == undefined) return - let coleweight = constants.data.coleweight || 0, - coleweightMessage = "", - uptimeHr = Math.floor(constants.uptime/60/60) + 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(constants.cwValues[0] != undefined && constants.upTimeTrack && constants.calcCwPerHr) + if(cwValues[0] != undefined && upTimeTrack && calcCwPerHr) { - constants.cwValuesSum = 0 - for(let i = 0; i < constants.cwValues.length; i++) - { - constants.cwValuesSum += constants.cwValues[i] - } - let eq = Math.ceil((constants.cwValuesSum*(3600/constants.uptime)) * 100) / 100 - eq != Infinity ? constants.coleweightHr = eq : constants.coleweightHr = "Calculating..." - constants.calcCwPerHr = false + 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() || !constants.upTimeTrack) return + if (cwGui.isOpen() || !upTimeTrack) return if(uptimeHr >= 1) - Renderer.drawStringWithShadow(`&aCW: &b${coleweightMessage}\n&aCW/hr: &b${constants.coleweightHr}\n&aUptime: &b${uptimeHr}h ${Math.floor(constants.uptime/60) - uptimeHr*60}m\n&aColeweight Gained: &b${Math.ceil(constants.cwValuesSum*100) / 100}`, constants.data.x, constants.data.y) + 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${constants.coleweightHr}\n&aUptime: &b${Math.floor(constants.uptime/60)}m ${Math.floor(constants.uptime%60)}s\n&aColeweight Gained: &b${Math.ceil(constants.cwValuesSum*100) / 100}`, constants.data.x, constants.data.y) -}) \ No newline at end of file + 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/dwarvenNotifier.js b/render/dwarvenNotifier.js new file mode 100644 index 0000000..33739b0 --- /dev/null +++ b/render/dwarvenNotifier.js @@ -0,0 +1,36 @@ +import settings from "../settings" +import { checkInDwarven, drawTitle } from "../util/helperFunctions" +import constants from "../util/constants" +const PREFIX = constants.PREFIX + +let drawTitleState = 0, + drawTimestamp = undefined + +register("step", () => { + if(checkInDwarven() || !settings.dwarvenNotifier) return + const scoreboard = Scoreboard.getLines() + + for(let lineIndex = 0; lineIndex < scoreboard.length; lineIndex++) + { + let line = scoreboard[lineIndex].toString() + if (line.includes("☽") || line.includes("☀")) + { + let matches = /§7(\d\d?:\d\d)(am|pm)/g.exec(line) + if(matches == undefined) return ChatLib.chat("No matches.") + if(matches[1] == "12:00" && matches[2] == "am") + { + ChatLib.chat(`${PREFIX}&aA day has passed and your Skymall perk has changed!`) + drawTitleState = 1 + } + } + } +}).setDelay(10) + +register("renderOverlay", () => { + if(drawTitleState == 1) + { + titleResults = drawTitle(`&2A day has passed and your &bSkymall &2perk has changed!`, drawTimestamp, 3) + drawTitleState = titleResults.drawTitle + drawTimestamp = titleResults.drawTimestamp + } +}) \ No newline at end of file diff --git a/render/gemstoneMiningStats.js b/render/gemstoneMiningStats.js new file mode 100644 index 0000000..e86911d --- /dev/null +++ b/render/gemstoneMiningStats.js @@ -0,0 +1,99 @@ +import settings from "../settings" +import constants from "../util/constants" +import { findTick } from "../commands/calculate/tick" +import { addCommas, getSelectedProfile } from "../util/helperFunctions" +import axios from "../../axios" +const NBTTagString = Java.type("net.minecraft.nbt.NBTTagString") + + +register("itemTooltip", (lore, item) => { // this is so bad 💀 + if(!item.getLore()[0].startsWith("§o§aYour SkyBlock Profile") || !settings.gemstoneMiningStats) return + const list = new NBTTagList(item.getNBT().getCompoundTag("tag").getCompoundTag("display").getTagMap().get("Lore")), + tempList = [] + + for(let elementIndex = 0; elementIndex < list.getTagCount(); elementIndex++) + { + tempList.push(list.getStringTagAt(elementIndex)) + } + + for(let elementIndex = 0; elementIndex < list.getTagCount(); elementIndex++) + { + let element = list.getStringTagAt(elementIndex) + if(element !== ` §6⸕ Mining Speed §f${element.replace(" §6⸕ Mining Speed §f", "").replace("§", "")}` || constants.data.professional == 0) + { + if(element !== ` §6☘ Mining Fortune §f${element.replace(" §6☘ Mining Fortune §f", "").replace("§", "")}` || (constan