diff options
-rw-r--r-- | chat/apiNew.js | 24 | ||||
-rw-r--r-- | chat/message.js | 51 | ||||
-rw-r--r-- | chat/serverdata.js | 20 | ||||
-rw-r--r-- | commandManager.js | 98 | ||||
-rw-r--r-- | commands/claim.js | 59 | ||||
-rw-r--r-- | commands/fetchDiscord.js | 26 | ||||
-rw-r--r-- | commands/findColeweight.js | 22 | ||||
-rw-r--r-- | commands/help.js | 9 | ||||
-rw-r--r-- | commands/info.js | 23 | ||||
-rw-r--r-- | commands/tick.js | 64 | ||||
-rw-r--r-- | commands/time.js | 13 | ||||
-rw-r--r-- | commands/toggle.js | 9 | ||||
-rw-r--r-- | config.toml | 4 | ||||
-rw-r--r-- | gui/settingsGui.js | 29 | ||||
-rw-r--r-- | index.js | 16 | ||||
-rw-r--r-- | metadata.json | 2 | ||||
-rw-r--r-- | render/bobombOverlay.js | 22 | ||||
-rw-r--r-- | render/collectionGui.js | 43 | ||||
-rw-r--r-- | render/cwGui.js (renamed from gui/cwGui.js) | 39 | ||||
-rw-r--r-- | render/powertrackerGui.js | 132 | ||||
-rw-r--r-- | render/tabList.js | 26 | ||||
-rw-r--r-- | render/timerGui.js | 54 | ||||
-rw-r--r-- | settings.js | 136 | ||||
-rw-r--r-- | util/constants.js | 30 | ||||
-rw-r--r-- | util/grieferTrack.js | 44 | ||||
-rw-r--r-- | util/helperFunctions.js | 10 | ||||
-rw-r--r-- | util/updater.js | 36 |
27 files changed, 902 insertions, 139 deletions
diff --git a/chat/apiNew.js b/chat/apiNew.js new file mode 100644 index 0000000..eaab375 --- /dev/null +++ b/chat/apiNew.js @@ -0,0 +1,24 @@ +import constants from "../util/constants" +import axios from "../../axios" +const PREFIX = constants.PREFIX + + +register("chat", (key) => { + axios.get(`https://api.hypixel.net/key?key=${key}`) + .then(res => { + if(res.data.success == true) + { + constants.data.api_key = key + constants.data.save() + ChatLib.chat(`${PREFIX}&aSuccsessfully set api key!`) + } + else + ChatLib.chat(`${PREFIX}&eKey is not valid!`) + }) + .catch(err => { + ChatLib.chat(`${PREFIX}&eKey is not valid!`) + }) + ChatLib.chat(ChatLib.getCenteredText(`${PREFIX}&aApi Key Successfully Set!`)) +}).setCriteria(/Your new API key is (.+)/) + +export default ""
\ No newline at end of file diff --git a/chat/message.js b/chat/message.js new file mode 100644 index 0000000..7a221c7 --- /dev/null +++ b/chat/message.js @@ -0,0 +1,51 @@ +/* +Created 11/11/2022 by Ninjune. +*/ + +import axios from "../../axios" +import settings from "../settings" +import constants from "../util/constants" +import { addCommas } from "../util/helperFunctions" +const PREFIX = constants.PREFIX + +register("chat", (level, typeOfChat, hypixelRank, username, playerMessage, event) => { // CW Rank + if(!settings.rankChat) return + if(!settings.rankEverywhere && !(constants.serverData.map == "Crystal Hollows" || constants.serverData.map == "Dwarven Mines")) return + if(!settings.rankEverywhere && typeOfChat != "") return + let onward = true + + playerMessage.split(" ").forEach((chunk) => { + if (chunk.startsWith("https")) + onward = false + }) + if(!onward) return + + let message = ChatLib.getChatMessage(event, true), + messagePrefix = message, + newMessage = new Message() + cancel(event) + axios.get(`https://ninjune.dev/api/lbpos?username=${username}`) + .then(res => { + if(res.data.rank > 0 && res.data.rank < 501) + messagePrefix = message.slice(0, message.indexOf(':')) + ` &8[&6#${addCommas(res.data.rank)}&8]&f: ` + else if(hypixelRank == "" && typeOfChat == "") + messagePrefix = message.slice(0, message.indexOf(':')) + `&7: ` + else + messagePrefix = message.slice(0, message.indexOf(':')) + `&f: ` + + newMessage.addTextComponent(messagePrefix) + + if (hypixelRank == "" && typeOfChat == "") + playerMessage = "&7" + playerMessage.slice(0) + else + playerMessage = "&f" + playerMessage.slice(0) + + newMessage.addTextComponent(playerMessage) + ChatLib.chat(newMessage) + }) + .catch(err => { + ChatLib.chat(err) + }) +}).setCriteria(/^(\[\d+\] )?((?:(?:Guild|Party|Co-op) > )|(?:\[:v:\] ))?(\[\w+\+{0,2}\] )?(\w{1,16})(?: \[\w{1,6}\])?: (.*)$/g) + +export default ""
\ No newline at end of file diff --git a/chat/serverdata.js b/chat/serverdata.js new file mode 100644 index 0000000..6b634d0 --- /dev/null +++ b/chat/serverdata.js @@ -0,0 +1,20 @@ +import constants from "../util/constants"; +let needCheck = false + +register("chat", (message, event) => { + if(needCheck) + { + try + { + constants.serverData = JSON.parse(message) + cancel(event) + needCheck = false + } + catch (e) {} + } +}).setCriteria(/(\{"server":"(?:.*)","gametype":"(?:.*)","mode":"(?:.*)","map":"(?:.*)"\})/g) + +register('worldLoad', () => { + needCheck = true + ChatLib.command('locraw') +})
\ No newline at end of file diff --git a/commandManager.js b/commandManager.js index 9acc4e4..c903e6b 100644 --- a/commandManager.js +++ b/commandManager.js @@ -1,19 +1,24 @@ -import axios from '../axios' +import { openTimerGui } from "./render/timerGui.js" +import { openPowderGui, updateDisplay } from "./render/powertrackerGui" +import { openCwGui } from "./render/cwGui" import { help } from "./commands/help.js" import { reload } from "./commands/reload.js" import { setkey } from "./commands/setkey.js" import { spiral } from "./commands/spiral.js" import { throne } from "./commands/throne.js" -import { toggle } from "./commands/toggle.js" import { leaderboard } from "./commands/leaderboard.js" -import { update } from './commands/update' -import { openCwGui } from './gui/cwGui' -import Settings from "./gui/settingsGui"; -import constants from './util/constants.js' - -const PREFIX = constants.PREFIX +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 Settings from "./settings" +import constants from "./util/constants" register("command", (arg, arg2, arg3) => { + if (arg == undefined) {findColeweight(arg); return} switch(arg.toLowerCase()) { case "setkey": @@ -23,10 +28,22 @@ register("command", (arg, arg2, arg3) => { help() break case "move": - openCwGui() - break - case "toggle": - toggle() + if (arg2 == undefined) {ChatLib.chat(`${constants.PREFIX}&cNot enough arguments.`); return} + switch(arg2.toLowerCase()) + { + case "coleweight": + openCwGui() + break + case "powdertracker": + openPowderGui() + break + case "time": + case "timer": + openTimerGui() + break + default: + ChatLib.chat(`${constants.PREFIX}&cNo such gui as '${arg2}'.`) + } break case "throne": throne(arg2) @@ -43,29 +60,31 @@ register("command", (arg, arg2, arg3) => { case "update": update() break + case "config": case "settings": Settings.openGUI() break + case "claim": + claim(arg2) + break + case "powdertrackersync": + updateDisplay() + break + case "tick": + tick(arg2, arg3) + break + case "time": + time() + break + case "info": + info() + break default: - ChatLib.chat(`${constants.PREFIX}Finding Coleweight!`) - let username = "" - if(arg == undefined) - username = Player.getUUID() - else - username = arg - axios.get(`https://ninjune.dev/api/coleweight?username=${username}`) - .then(res => { - let coleweightMessage = new TextComponent(`${constants.PREFIX}&b${res.data.rank}. ${res.data.name}&b's Coleweight: ${res.data.coleweight} (Top &l${res.data.percentile}&b%)`) - .setHoverValue(`&fExperience&f: &a${res.data.exp}\n&fPowder&f: &a${res.data.pow}\n&fCollection&f: &a${res.data.col}\n&fMiscellaneous&f: &a${res.data.bes + res.data.nuc}`) - ChatLib.chat(coleweightMessage) - }) - .catch(err => { - ChatLib.chat(`${PREFIX}&eError. (api may be down)`) - }) + findColeweight(arg) } }).setTabCompletions((args) => { let output = [], - commands = ["setkey", "help", "gui", "toggle", "throne", "spiral", "reload", "leaderboard", "settings"] + commands = ["setkey", "help", "move", "toggle", "throne", "spiral", "reload", "leaderboard", "settings", "claim", "tick", "time", "info"] if(args[0].length == 0 || args[0] == undefined) output = commands @@ -86,30 +105,13 @@ register("command", (arg, arg2, arg3) => { }).setName("cw").setAliases(["coleweight"]) register("command", (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.hypixel.net/player?key=${constants.data.api_key}&uuid=${uuid}`) - .then(res2 => { - let discordMessage = new TextComponent(`${PREFIX}&a${res.data.username}'s Discord: `) - ChatLib.chat(discordMessage); - ChatLib.chat(`&b${res2.data.player.socialMedia.links.DISCORD}`) - }) - .catch(err => { - ChatLib.chat(`${PREFIX}&eNo discord linked :( (or no key linked)`) - }) - }) - .catch(err => { - ChatLib.chat(`${PREFIX}&eInvalid name! `) - }); + fetchDiscord(arg) }).setTabCompletions((args) => { let players = World.getAllPlayers().map((p) => p.getName()) .filter((n) => n.toLowerCase().startsWith(args.length ? args[0].toLowerCase() : "") ) - .sort(), - output = players + .sort() - return output + return players }).setName("fetchdiscord").setAliases(["fdiscord"]);
\ No newline at end of file diff --git a/commands/claim.js b/commands/claim.js new file mode 100644 index 0000000..fc0bc57 --- /dev/null +++ b/commands/claim.js @@ -0,0 +1,59 @@ +import axios from "../../axios" +import settings from "../settings" +import constants from "../util/constants" +const PREFIX = constants.PREFIX + + +export function claim(structure) +{ + if(!settings.claiming) + { + ChatLib.chat(`${PREFIX}&cPlease turn on the &3Claiming&c setting in /cw settings!`) + return + } + + if (constants.serverData.map != "Crystal Hollows") + { + ChatLib.chat(`${PREFIX}&cThis command is only available in the crystal hollows!`) + return + } + + if (structure == undefined || !(structure.toLowerCase() == "throne" || structure.toLowerCase() == "spiral")) + { + ChatLib.chat(`${PREFIX}&cPlease enter the structure you wish to claim! (&3throne&c or &3spiral&c)`) + return + } + + axios.get(`https://ninjune.dev/api/claim?type=${structure}&id=${constants.serverData.server}&key=${constants.data.api_key}`) + .then(res => { + if(res.data.success) + ChatLib.chat(`${PREFIX}&aSuccessfully claimed ${constants.serverData.server} as your server!`) + else + ChatLib.chat(`${PREFIX}&cError: ${res.data.reason}`) + }) + .catch(err => { + ChatLib.chat(`${PREFIX}&cError: ${err}`) + }) + // key is used above to verify that the player trying to claim the lobby is the intended player, don't know a better way of doing this. +} + + +register('worldLoad', () => { + if(!settings.claiming) return + setTimeout(() => { + console.log(constants.serverData.server) + axios.get(`https://ninjune.dev/api/claim?claimedlobby=${constants.serverData.server}`) + .then(res => { + if(res.data.claimed) + { + World.getAllPlayers().forEach((player) => { + if (player.getName() == res.data.player) + ChatLib.chat(`${PREFIX}&cThe ${res.data.structure} in this lobby is claimed by ${res.data.player}.`) + }) + } + }) + .catch(err => { + ChatLib.chat(`${PREFIX}Error: ${err}`) + }) + }, 2000) +})
\ No newline at end of file diff --git a/commands/fetchDiscord.js b/commands/fetchDiscord.js new file mode 100644 index 0000000..f44c385 --- /dev/null +++ b/commands/fetchDiscord.js @@ -0,0 +1,26 @@ +import axios from "../../axios" +import constants from "../util/constants" +const PREFIX = constants.PREFIX + +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.hypixel.net/player?key=${constants.data.api_key}&uuid=${uuid}`) + .then(res2 => { + let discordMessage = new TextComponent(`${PREFIX}&a${res.data.username}'s Discord: `) + ChatLib.chat(discordMessage); + ChatLib.chat(`&b${res2.data.player.socialMedia.links.DISCORD}`) + }) + .catch(err => { + ChatLib.chat(`${PREFIX}&eNo discord linked :( (or no key linked)`) + }) + }) + .catch(err => { + ChatLib.chat(`${PREFIX}&eInvalid name! `) + }) +} + diff --git a/commands/findColeweight.js b/commands/findColeweight.js new file mode 100644 index 0000000..d3fa38a --- /dev/null +++ b/commands/findColeweight.js @@ -0,0 +1,22 @@ +import axios from "../../axios" +import constants from "../util/constants" +const PREFIX = constants.PREFIX + +export function findColeweight(arg) +{ + ChatLib.chat(`${PREFIX}Finding Coleweight!`) + let username = "" + if(arg == undefined) + username = Player.getUUID() + else + username = arg + axios.get(`https://ninjune.dev/api/coleweight?username=${username}`) + .then(res => { + let coleweightMessage = new TextComponent(`${PREFIX}&b${res.data.rank}. ${res.data.name}&b's Coleweight: ${res.data.coleweight} (Top &l${res.data.percentile}&b%)`) + .setHoverValue(`&fExperience&f: &a${res.data.exp}\n&fPowder&f: &a${res.data.pow}\n&fCollection&f: &a${res.data.col}\n&fMiscellaneous&f: &a${res.data.bes + res.data.nuc}`) + ChatLib.chat(coleweightMessage) + }) + .catch(err => { + ChatLib.chat(`${PREFIX}&eError. (api may be down)`) + }) +}
\ No newline at end of file diff --git a/commands/help.js b/commands/help.js index bc22fda..3c20b01 100644 --- a/commands/help.js +++ b/commands/help.js @@ -6,9 +6,12 @@ export function help() ChatLib.chat("") ChatLib.chat(`${PREFIX}&b/cw [username] => Gets coleweight`) ChatLib.chat(`${PREFIX}&b/cw help => This menu.`) - ChatLib.chat(`${PREFIX}&b/cw move => Change gui location`) - ChatLib.chat(`${PREFIX}&b/cw toggle => Toggle gui (gui is only active when mining)`) - ChatLib.chat(`${PREFIX}&b/cw setkey (key) => Sets API key (can also use /api new)`) + ChatLib.chat(`${PREFIX}&b/cw settings => Open settings.`) + ChatLib.chat(`${PREFIX}&b/cw time => Prints time on timer (timer gui doesn't have to be visible).`) + ChatLib.chat(`${PREFIX}&b/cw tick <mining speed> <('r','jade', etc) || breaking power of block> => Shows tick data.`) + ChatLib.chat(`${PREFIX}&b/cw info => Prints coleweight info.`) + ChatLib.chat(`${PREFIX}&b/cw claim <throne || spiral> => Claims a chollows sapphire structure in a lobby.`) + ChatLib.chat(`${PREFIX}&b/cw setkey <key> => Sets API key (can also use /api new)`) ChatLib.chat(`${PREFIX}&b/cw reload => Reloads the gui.`) ChatLib.chat(`${PREFIX}&b/cw throne => Guide for setting up waypoints for throne.`) ChatLib.chat(`${PREFIX}&b/cw spiral => Guide for setting up waypoints for spiral.`) diff --git a/commands/info.js b/commands/info.js new file mode 100644 index 0000000..3967863 --- /dev/null +++ b/commands/info.js @@ -0,0 +1,23 @@ +import axios from "../../axios" +import constants from "../util/constants" +const PREFIX = constants.PREFIX + +export function info() +{ + axios.get(`https://ninjune.dev/api/cwinfo`) + .then((res) => { + let values = res.data, + powder = values.powder, + collection = values.collection, + miscellaneous = values.miscellaneous + + ChatLib.chat(`${PREFIX}&bEach of the following are equivalent to one unit of ColeWeight` + + `\n\n&4&lExperience \n&b${values.experience.req} mining exp` + + `\n\n&4&lPowder \n&b${powder[0].req} &bmithril powder\n&b${powder[1].req} gemstone powder` + // in theory I should have just added formatted names to the api + `\n\n&4&lCollections \n&b${collection[0].req} &bmithril\n&b${collection[1].req} gemstone\n&b${collection[2].req} gold\n&b${collection[3].req}netherrack\n&b${collection[4].req} diamond\n&b${collection[5].req} ice\n&b${collection[6].req} redstone\n&b${collection[7].req} lapis\n&b${collection[8].req} sulphur\n&b${collection[9].req} coal\n&b${collection[10].req} emerald\n&b${collection[11].req} endstone\n&b${collection[12].req} glowstone\n&b${collection[13].req} gravel\n&b${collection[14].req} iron\n&b${collection[15].req} mycelium\n&b${collection[16].req} quartz\n&b${collection[17].req} obsidian\n&b${collection[18].req} red sand\n&b${collection[19].req} sand\n&b${collection[20].req} cobblestone\n&b${collection[21].req} hardstone` + + `\n\n&4&lMiscellaneous \n&b${miscellaneous[0].req} scatha kills\n&b${miscellaneous[1].req} worm kills\n&b${miscellaneous[2].req} nucleus runs`) + }) + .catch((e) => { + return `${PREFIX}&cThere was an error. (api may be down)` + }) +}
\ No newline at end of file diff --git a/commands/tick.js b/commands/tick.js new file mode 100644 index 0000000..7af81e2 --- /dev/null +++ b/commands/tick.js @@ -0,0 +1,64 @@ +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/commands/time.js b/commands/time.js new file mode 100644 index 0000000..115964e --- /dev/null +++ b/commands/time.js @@ -0,0 +1,13 @@ +import constants from "../util/constants" +const PREFIX = constants.PREFIX + + +export function time() +{ + let timerHr = Math.floor(constants.timerdata.timer/60/60) + + if(timerHr >= 1) + ChatLib.chat(`${PREFIX}&aTimer (${constants.serverData.server}): &b${timerHr}h ${Math.floor(constants.timerdata.timer/60) - timerHr*60}m`) + else + ChatLib.chat(`${PREFIX}&aTimer (${constants.serverData.server}): &b${Math.floor(constants.timerdata.timer/60)}m ${Math.floor(constants.timerdata.timer%60)}s`) +}
\ No newline at end of file diff --git a/commands/toggle.js b/commands/toggle.js deleted file mode 100644 index a5e0ec2..0000000 --- a/commands/toggle.js +++ /dev/null @@ -1,9 +0,0 @@ -import constants from "../util/constants" -const PREFIX = constants.PREFIX - -export function toggle() -{ - constants.data.cwToggle = !constants.data.cwToggle - constants.data.save() - ChatLib.chat(`${PREFIX}&bSet gui to: &3${constants.data.cwToggle}`) -}
\ No newline at end of file diff --git a/config.toml b/config.toml deleted file mode 100644 index 7b57afa..0000000 --- a/config.toml +++ /dev/null @@ -1,4 +0,0 @@ - -[general] - tba = "" - diff --git a/gui/settingsGui.js b/gui/settingsGui.js deleted file mode 100644 index 48dbad7..0000000 --- a/gui/settingsGui.js +++ /dev/null @@ -1,29 +0,0 @@ -import { @Vigilant, @ButtonProperty, @SwitchProperty, @SelectorProperty, @TextProperty } from 'Vigilance' -import constants from "../util/constants.js" - -@Vigilant("Coleweight") -class Settings { - @ButtonProperty({ - name: "Change tracker position", - description: "Move the location of the tracker.", - category: "General", - placeholder: "Open" - }) - moveLocation() { - ChatLib.command("cw move", true); - } - - @TextProperty({ - name: "TBA", - description: "TBA; This menu will probably not work while this text is here.", - category: "General", - protected: false - }) - key = ""; - - constructor() { - this.initialize(this); - } -} - -export default new Settings()
\ No newline at end of file @@ -1,12 +1,15 @@ -import axios from '../axios' +import './chat/apiNew' +import './chat/message' + +import './chat/serverdata' +import './render/tabList' import './commandManager' +import './util/updater' +import './util/grieferTrack' +import axios from '../axios' import constants from './util/constants'; -import "./util/updater" -import Settings from "./gui/settingsGui.js" - const PREFIX = constants.PREFIX - //world update (coords) register("renderWorld", () => { if(constants.throneValues[0] != undefined) @@ -26,6 +29,7 @@ register("renderWorld", () => { }) + //update every second (dogshit code) register("step", () => { // first time check @@ -39,7 +43,7 @@ register("step", () => { new TextComponent(ChatLib.getCenteredText(`${PREFIX}&bView commands: /cw help`)).chat() ChatLib.chat("") } - if (constants.data.api_key == undefined) return + if (constants.data.api_key == undefined || constants.data.api_key == "") return // updates coleweight for gui let date_ob = new Date(), diff --git a/metadata.json b/metadata.json index 654a808..67d1e43 100644 --- a/metadata.json +++ b/metadata.json @@ -3,6 +3,6 @@ "creator": "Ninjune", "entry": "index.js", "description": "Simple Coleweight module to measure mining progression.", - "version": "1.5.3", + "version": "1.6.0", "requires": ["axios", "PogData", "Vigilance"] }
\ No newline at end of file diff --git a/render/bobombOverlay.js b/render/bobombOverlay.js new file mode 100644 index 0000000..02526bd --- /dev/null +++ b/render/bobombOverlay.js @@ -0,0 +1,22 @@ +/*import RenderLib from "../../RenderLib/index.js"; +Disabled. +register('renderWorld', () => { + try{ + if(Player.getHeldItem().getItemNBT().getTag('tag').getTag('ExtraAttributes').getTag("id").toString() != `"BOB_OMB"`) return + } catch(e) {return} + + const boxR = 0.3, + boxB = 0.5, + boxG = 0, + boxAlpha = 0.3 + + let x = Math.floor(Player.getX()) + 0.5, + y = Math.floor(Player.getY()) + z = Math.floor(Player.getZ()) + 0.5 + + + + RenderLib.drawInnerEspBox(x, y - 1, z - 8, 1, 1, boxR, boxB, boxG, boxAlpha, true) + RenderLib.drawInnerEspBox(x + 1, y + 1, z - 7, 1, 1, boxR, boxB, boxG, boxAlpha, true) + RenderLib.drawInnerEspBox(x + 1, y + 1, z - 7, 1, 1, boxR, boxB, boxG, boxAlpha, true) +})*/
\ No newline at end of file diff --git a/render/collectionGui.js b/render/collectionGui.js new file mode 100644 index 0000000..8197b11 --- /dev/null +++ b/render/collectionGui.js @@ -0,0 +1,43 @@ +/*import constants from "../util/constants" +const PREFIX = constants.PREFIX + +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)`) + } +} + +export function moveCollection() +{ + collectionGui.open() +} + +register("dragged", (dx, dy, x, y) => { + if (!collectionGui.isOpen()) return + constants.data.collectionX = x + constants.data.collectionY = y + constants.data.save() +}) + +register("renderOverlay", () => { + if (cwGui.isOpen()) + { + 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) + } + 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 diff --git a/gui/cwGui.js b/render/cwGui.js index 734593c..d0f4a5c 100644 --- a/gui/cwGui.js +++ b/render/cwGui.js @@ -1,33 +1,46 @@ +import settings from "../settings"; import constants from "../util/constants"; -let cwGui = new Gui() +const cwMove = new Gui(), + cwGui = new Display() + +cwGui.setBackgroundColor(Renderer.color(0, 0, 0, 75)); +cwGui.setBackground("full"); +cwGui.setMinWidth(100) export function openCwGui() { - cwGui.open() + cwMove.open() } register("dragged", (dx, dy, x, y) => { - if (!cwGui.isOpen()) return + if (!cwMove.isOpen()) return constants.data.x = x constants.data.y = y constants.data.save() }); register("renderOverlay", () => { - if (cwGui.isOpen()) + cwGui.setShouldRender(false) + cwGui.clearLines() + cwGui.setRenderLoc(constants.data.x, constants.data.y) + + if (cwMove.isOpen()) { 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(`&aCW: &b0\n&aCW/hr: &b0\n&aUptime: &b0m\n&aColeweight Gained: &b0`, constants.data.x, constants.data.y) + cwGui.addLines([`&aCW: &b0`, `&aCW/hr: &b0`, `&aUptime: &b69h 420m `, `&aColeweight Gained: &b0 `]) + cwGui.setShouldRender(true) } - if(!constants.data.cwToggle || constants.data.api_key == undefined) return - let coleweight = constants.data.coleweight || 0, - coleweightMessage = "" + if(!settings.cwToggle || constants.data.api_key == undefined) return + let coleweight = constants.data.coleweight || 0, + coleweightMessage = "", + uptimeHr = Math.floor(constants.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) { @@ -41,10 +54,12 @@ register("renderOverlay", () => { constants.calcCwPerHr = false } - if (cwGui.isOpen() || !constants.upTimeTrack) return - let uptimeHr = Math.floor(constants.uptime/60/60) + if (cwMove.isOpen() || !constants.upTimeTrack) return + + cwGui.setShouldRender(true) + 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) + cwGui.addLines([`&aCW: &b${coleweightMessage}`, `&aCW/hr: &b${constants.coleweightHr}`, `&aUptime: &b${uptimeHr}h ${Math.floor(constants.uptime/60) - uptimeHr*60}m`, `&aColeweight Gained: &b${Math.ceil(constants.cwValuesSum*100) / 100}`]) 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) + cwGui.addLines([`&aCW: &b${coleweightMessage}`, `&aCW/hr: &b${constants.coleweightHr}`, `&aUptime: &b${Math.floor(constants.uptime/60)}m ${Math.floor(constants.uptime%60)}s`, `&aColeweight Gained: &b${Math.ceil(constants.cwValuesSum*100) / 100}`]) })
\ No newline at end of file diff --git a/render/powertrackerGui.js b/render/powertrackerGui.js new file mode 100644 index 0000000..0e7985a --- /dev/null +++ b/render/powertrackerGui.js @@ -0,0 +1,132 @@ +/* +Major credit to Fabi019 for Powdertracker module. +*/ +import constants from "../util/constants" +import settings from "../settings" + +const moveGui = new Gui(), + powderGui = new Display(), + bossBar = Java.type("net.minecraft.entity.boss.BossStatus").field_82827_c + +powderGui.setBackgroundColor(Renderer.color(0, 0, 0, 75)); +powderGui.setBackground("full"); + +let sessionRunning = false, + sessionChests = 0, + sessionGemstone = 0, + sessionMithril = 0, + seconds = 0, + timeSinceLastGain = 0 + +export function openPowderGui() +{ + moveGui.open() +} + +function DoublePowderActive() +{ + return bossBar.includes("2X POWDER") +} + +register("dragged", (dx, dy, x, y) => { + if (!moveGui.isOpen()) return + sessionRunning = true + powderGui.setRenderLoc(x, y) + 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 + } + 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"); + +export function updateDisplay() +{ + if (!sessionRunning) {powderGui.setShouldRender(false); return} + else if (!settings.trackerVisible) {powderGui.setShouldRender(false); return} + else {powderGui.setShouldRender(true)} + + const renderText = (text, value) => { + powderGui.setLine(line++, `§a${text}: §b${value}`) + } + + let uptimeHr = Math.floor(seconds/60/60), + lines = [], + line = 0 + + powderGui.clearLines() + powderGui.setRenderLoc(constants.powderdata.x, constants.powderdata.y) + powderGui.setAlign( + settings.trackerAlignment == 0 ? "left" : + settings.trackerAlignment == 1 ? "right" : + "center" + ) + + if (settings.showTotals) + { + renderText("Total Chests", constants.powderdata.chests) + renderText("Total Gemstone", constants.powderdata.gemstonePowder) + renderText("Total Mithril", constants.powderdata.mithrilPowder) + line++ + } + + renderText("Session Chests", sessionChests) + renderText("Session Gemstone", sessionGemstone) + renderText("Session Mithril", sessionMithril) + + + if (settings.showRates) + { + line++ + renderText("Chests/hr", Math.round(((sessionChests ?? 0)/(seconds ?? 1)) * 3600)) + renderText("Gemstone/hr", Math.round(((sessionGemstone ?? 0)/(seconds ?? 1)) * 3600)) + renderText("Mithril/hr", Math.round(((sessionMithril ?? 0)/(seconds ?? 1)) * 3600)) + if(uptimeHr >= 1) + renderText("Uptime", `${uptimeHr}h ${Math.floor(seconds/60) - uptimeHr*60}m`) + else + renderText("Uptime", `${Math.floor(seconds/60)}m ${Math.floor(seconds%60)}s`) + } +} + +register("renderOverlay", () => { + if (moveGui.isOpen()) + { + let txt = "Drag to move." + Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2) + } +}) + +register("step", () => { + if(sessionRunning) + { + seconds += 1 + timeSinceLastGain += 1 + } + if(timeSinceLastGain > 300 && sessionRunning) + { + sessionRunning = false + } + updateDisplay() +}).setFps(1) diff --git a/render/tabList.js b/render/tabList.js new file mode 100644 index 0000000..fcf971e --- /dev/null +++ b/render/tabList.js @@ -0,0 +1,26 @@ +/*import axios from "../../axios" // implement when im not an idiot +import settings from "../settings" +import constants from "../util/constants" +const PREFIX = constants.PREFIX + + +register("worldLoad", () => { + const NetHandlerPlayClient = Client.getConnection(), + PlayerMap = NetHandlerPlayClient.func_175106_d() // getPlayerInfoMap + let tag = "" + + axios.get(`https://ninjune.dev/api/mminers`) + .then((res) => { + PlayerMap.filter(player => !player.func_178845_a().name.startsWith("!")).forEach((player) => { + res.data.macroers.forEach((macroer) => { + if(player == macroer) tag ="[M] " + }) + res.data.griefers.forEach((griefer) => { + if(player == griefer) tag ="[G] " + }) + + player.func_178859_a(new net.minecraft.util.IChatComponentText("Player")) + }) + }) + .catch((e) => {console.log(e)}) +})*/
\ No newline at end of file diff --git a/render/timerGui.js b/render/timerGui.js new file mode 100644 index 0000000..a46451f --- /dev/null +++ b/render/timerGui.js @@ -0,0 +1,54 @@ +import settings from "../settings"; +import constants from "../util/constants"; + + +const timerMove = new Gui(), + timerGui = new Display() + +timerGui.setBackgroundColor(Renderer.color(0, 0, 0, 50)); +timerGui.setBackground("full"); + +export function openTimerGui() +{ + timerMove.open() +} + +register("dragged", (dx, dy, x, y) => { + if (!timerMove.isOpen()) return + constants.timerdata.x = x + constants.timerdata.y = y + constants.timerdata.save() +}); + +register("renderOverlay", () => { + timerGui.setShouldRender(false) + timerGui.clearLines() + timerGui.setRenderLoc(constants.timerdata.x, constants.timerdata.y) + + if (timerMove.isOpen()) + { + let txt = "Click anywhere to move!" + Renderer.drawStringWithShadow(txt, Renderer.screen.getWidth()/2 - Renderer.getStringWidth(txt)/2, Renderer.screen.getHeight()/2) + timerGui.addLines([`&aTimer: &b0h 0m`]) + timerGui.setShouldRender(true) + return + } + + if(!settings.timerVisible) return + timerGui.setShouldRender(true) + let timerHr = Math.floor(constants.timerdata.timer/60/60) + + + if(timerHr >= 1) + timerGui.addLine(`&aTimer: &b${timerHr}h ${Math.floor(constants.timerdata.timer/60) - timerHr*60}m`) + else + timerGui.addLine(`&aTimer: &b${Math.floor(constants.timerdata.timer/60)}m ${Math.floor(constants.timerdata.timer%60)}s`) +}) + +register('worldLoad', () => { + constants.timerdata.timer = 0 +}) + +register("step", () => { + constants.timerdata.timer += 1 +}).setFps(1)
\ No newline at end of file diff --git a/settings.js b/settings.js new file mode 100644 index 0000000..20cb769 --- /dev/null +++ b/settings.js @@ -0,0 +1,136 @@ +import { @Vigilant, @ButtonProperty, @SwitchProperty, @SelectorProperty } from 'Vigilance' + +@Vigilant("Coleweight") +class Settings { + @ButtonProperty({ + name: "Change tracker position", + description: "Move the location of the tracker.", + category: "General", + placeholder: "Open" + }) + moveLocation() { + ChatLib.command("cw move coleweight", true); + } + + @SwitchProperty({ + name: "Coleweight tracker", + description: "Enables the Coleweight tracker.", + category: "General" + }) + cwToggle = true; + + @SwitchProperty({ + name: "Rank chat", + description: "Enables the Coleweight rank message after a name in chat.", + category: "General" + }) + rankChat = true; + + @SwitchProperty({ + name: "Rank everywhere", + description: "Enables showing Coleweight rank everywhere. (instead of just in crystal hollows)", + category: "General" + }) + rankEverywhere = false; + + @SwitchProperty({ + name: "Track griefers", + description: "Check lobbies for griefers (on join and when new players join.)", + category: "General" + }) + trackGriefers = true; + + @SwitchProperty({ + name: "Claiming", + description: "Enables lobby claiming (/claim).", + category: "General" + }) + claiming = true; + + @SwitchProperty({ + name: "Timer", + description: "Toggles visibility of CHollows timer", + category: "General" + }) + timerVisible = false; + + @SwitchProperty({ + name: "Show powdertracker", + description: "If the tracker overlay should be visible.", + category: "Powdertracker" + }) + trackerVisible = false; + + @SwitchProperty({ + name: "Show totals", + description: "If the tracker should show the total amount.", + category: "Powdertracker" + }) + showTotals = true; + + @SwitchProperty({ + name: "Show rates", + description: "If the tracker should show the estimated rates per hour.", + category: "Powdertracker" + }) + showRates = true; + + @SelectorProperty({ + name: "Alignment", + description: "Sets the alignment of the tracker.", + category: "Powdertracker", + options: ["Left", "Right", "Center"] + }) + trackerAlignment = 0; + + @ButtonProperty({ + name: "Change tracker position", + description: "Move the location of the tracker.", + category: "Powdertracker", + placeholder: "Open" + }) + moveLocation() { + ChatLib.command("cw move powdertracker", true); + } + + constructor() { + this.initialize(this); + this.registerListener("Rank chat", value => { + this.rankChat = value; + }) + this.registerListener("Rank everywhere", value => { + this.rankEverywhere = value; + }) + this.registerListener("Track griefers", value => { + this.trackGriefers = value; + }) + this.registerListener("Claiming", value => { + this.claiming = value; + }) + this.registerListener("Timer", value => { + this.timerVisible = value; + }) + this.registerListener("Show powdertracker", value => { + this.trackerVisible = value; + this.sync(); + }) + this.registerListener("Show totals", value => { + this.showTotals = value; + this.sync(); + }) + this.registerListener("Show rates", value => { + this.showRates = value; + this.sync(); + }) + this.registerListener("Alignment", value => { + this.trackerAlignment = value; + this.sync(); + }) + } + + sync() { + ChatLib.command("cw powdertrackersync", true); + } +} + +export default new Settings()
\ No newline at end of file diff --git a/util/constants.js b/util/constants.js index d7377fd..16cd037 100644 --- a/util/constants.js +++ b/util/constants.js @@ -1,20 +1,34 @@ import PogObject from "PogData" let PogData = new PogObject("Coleweight", { - "api_key": undefined, + "api_key": "", "x": 0.5, "y": 141, "coleweight": 0, - "cwToggle": true, - "first_time": true, - "api_key": undefined -}, ".cw_data.json"); + "first_time": true +}, "config/.cw_data.json") -export default +let PowderData = new PogObject("Coleweight", { + "chests": 0, + "gemstonePowder": 0, + "mithrilPowder": 0, + "x": 0, + "y": 0 +}, "config/.powdertracker_data.json") + +let TimerData = new PogObject("Coleweight", { + "x": 0, + "y": 0, + "timer": 0 +}, "config/.timer_data.json") + +export default { PREFIX: "&2[CW] ", VERSION: (JSON.parse(FileLib.read("Coleweight", "metadata.json"))).version, data: PogData, + powderdata: PowderData, + timerdata: TimerData, cwValues: [], calcCwPerHr: false, upTimeTrack: false, @@ -24,5 +38,7 @@ export default throneValues: [], spiralValues: [], coleweightHr: 0, - cwValuesSum: 0 + cwValuesSum: 0, + beta: false, + serverData: {} }
\ No newline at end of file diff --git a/util/grieferTrack.js b/util/grieferTrack.js new file mode 100644 index 0000000..a468191 --- /dev/null +++ b/util/grieferTrack.js @@ -0,0 +1,44 @@ +import axios from "../../axios" +import Settings from "../settings" +import constants from "./constants" +const PREFIX = constants.PREFIX +let players = [] // global variable moment + + +function checkMMiners() +{ + if (!Settings.trackGriefers) return + let tempPlayers = World.getAllPlayers().map((p) => p.getName()) + + tempPlayers.forEach((player, index) => { + if(players.indexOf(player) == -1) + { + axios.get(`https://ninjune.dev/api/mminers?username=${player}`) + .then(res => { + if(res.data.found == true && res.data.type == "griefer") + ChatLib.chat(`${PREFIX}&e'${res.data.name}' is a griefer!`) + }) + players.push(player) + } + }) + + return players +} + + +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", () => { + players = [] + checkMMiners() +}) + + +export default ""
\ No newline at end of file diff --git a/util/helperFunctions.js b/util/helperFunctions.js new file mode 100644 index 0000000..2bea5d0 --- /dev/null +++ b/util/helperFunctions.js @@ -0,0 +1,10 @@ +/* +Created 11/11/2022 by Ninjune. +*/ +export function addCommas(num) { + try { + return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); + } catch (error) { + return 0; + } +}// credit to senither for the regex, just don't care to make my own lol
\ No newline at end of file diff --git a/util/updater.js b/util/updater.js index 43693e3..ea8fa2c 100644 --- a/util/updater.js +++ b/util/updater.js @@ -1,12 +1,25 @@ import axios from "../../axios" import constants from "./constants" -PREFIX = constants.PREFIX -VERSION = constants.VERSION + +const PREFIX = constants.PREFIX, + VERSION = constants.VERSION register("worldLoad", () => { axios.get(`https://chattriggers.com/api/modules/1367`) .then(res => { - if(res.data.releases[0].releaseVersion != VERSION) + let ctVersionArray = (res.data.releases[0].releaseVersion).split('.'), + currentVersionArray = VERSION.split('.'), + newVersion = false + + for(let i = ctVersionArray.length; i >= 0; i--) + { + if (ctVersionArray[i] > currentVersionArray[i]) + newVersion = true + else if (currentVersionArray[i] > ctVersionArray[i]) + newVersion = false + } + + if(newVersion) { ChatLib.chat(`${PREFIX}&eYou are using an unsupported version of Coleweight!`) new TextComponent(`${PREFIX}&eClick &3here&e to update!`) @@ -15,23 +28,6 @@ register("worldLoad", () => { .chat() ChatLib.chat("") } - else - { - axios.get(`https://raw.githubusercontent.com/Ninjune/coleweight/main/metadata.json`) - .then(res => { - if(res.data.version == VERSION) return - ChatLib.chat(`${PREFIX}&eYou are using an unsupported version of Coleweight!`) - new TextComponent(`${PREFIX}&eClick &3here&e to open the github releases!`) - .setClickAction("open_url") - .setClickValue(`https://github.com/Ninjune/coleweight/releases`) - .chat() - ChatLib.chat("") - return - }) - .catch(err => { - ChatLib.chat(err) - }) - } }) }) |