aboutsummaryrefslogtreecommitdiff
path: root/features/specialMining
diff options
context:
space:
mode:
Diffstat (limited to 'features/specialMining')
-rw-r--r--features/specialMining/index.js207
-rw-r--r--features/specialMining/metadata.json8
2 files changed, 215 insertions, 0 deletions
diff --git a/features/specialMining/index.js b/features/specialMining/index.js
new file mode 100644
index 0000000..c75d687
--- /dev/null
+++ b/features/specialMining/index.js
@@ -0,0 +1,207 @@
+import Feature from "../../featureClass/class";
+import SettingBase from "../settings/settingThings/settingBase";
+import { numberWithCommas } from "../../utils/numberUtils";
+import HudTextElement from "../hud/HudTextElement";
+import LocationSetting from "../settings/settingThings/location";
+import ToggleSetting from "../settings/settingThings/toggle";
+import { delay } from "../../utils/delayUtils";
+
+class PowderAndScatha extends Feature {
+ constructor() {
+ super();
+ }
+
+ onEnable() {
+ this.initVariables();
+ new SettingBase("Chest Miner", "Powder mining feature here are made mainly for powder chest grinding", undefined, "chest_mining_info", this);
+ this.PowderElement = new ToggleSetting("Powder Mining Info Hud (MAIN TOGGLE)", "This will show your current powder mining section (only in CH)", false, "powder_mining_hud", this).contributor("EmeraldMerchant");
+ this.PowderOverlayElement = new HudTextElement()
+ .setText("")
+ .setToggleSetting(this.PowderElement)
+ .setLocationSetting(new LocationSetting("Powder Mining Info Hud Location", "Allows you to edit the location of Powder Mining Info Hud", "powder_mining_hud_location", this, [10, 50, 1, 1]).requires(this.PowderElement).editTempText(`&b2x Powder: "&cINACTIVE"\n&aChests: &b32\n&bMithril: &d12,768\n&bGems: &d21,325`).contributor("EmeraldMerchant"));
+ this.hudElements.push(this.PowderOverlayElement);
+ this.PowderOverlayElement.disableRendering()
+
+ new SettingBase("/resetpowderdata", "to reset powder mining data", undefined, "reset_powder_data_command_info", this).requires(this.PowderElement);
+ this.resetPowderWhenLeaveCH = new ToggleSetting("Reset Powder When Left CH", "Should it reset powder hud whenever you left ch", false, "reset_powder_when_left_ch", this).requires(this.PowderElement);
+ this.resetPowderWhenLeaveGame = new ToggleSetting("Reset Powder When Left Game", "Should it reset powder hud whenever you left game", false, "reset_powder_when_left_game", this).requires(this.PowderElement);
+ this.chestUncoverAlert = new ToggleSetting("Alert When You Dug a Chest Out", "so you don't miss it", false, "chest_uncover_alert", this).requires(this.PowderElement);
+ this.chestUncoverAlertSound = new ToggleSetting("Alert Sound for Chest Alert", "should the alert also play a sound? (sound: levelup)", false, "chest_uncover_alert_sound", this).requires(this.chestUncoverAlert);
+ this.hideGemstoneMessage = new ToggleSetting("Gemstone Messages Hider", "like: &r&aYou received &r&f16 &r&f❈ &r&fRough Amethyst Gemstone&r&a.&r", false, "gemstone_message_hider", this).requires(this.PowderElement)
+ this.showFlawlessGemstone = new ToggleSetting("Gemstone Messages Hider Show Flawless", "should the hider ^ ignore flawless gemstones?", false, "gemstone_show_flawless", this).requires(this.hideGemstoneMessage)
+ this.hideWishingCompassMessage = new ToggleSetting("Wishing Compass Message Hider", "like: &r&aYou received &r&f1 &r&aWishing Compass&r&a.&r", false, "compass_message_hider", this).requires(this.PowderElement)
+ this.hideAscensionRope = new ToggleSetting("Ascension Rope Hider", "like: &r&aYou received &r&f1 &r&9Ascension Rope&r&a.&r", false, "ascension_rope_hider", this).requires(this.PowderElement)
+
+ new SettingBase("SCATHA FEATURE TODO!", "This will come in a later date...", undefined, "scatha_todo", this);
+
+ this.registerChat("&r&aYou received ${thing}&r&a.&r", (thing, e) => {
+ if (this.hideGemstoneMessage.getValue() && thing.endsWith("Gemstone") && (this.showFlawlessGemstone.getValue() ? !thing.includes("Flawless") : true)) cancel(e)
+ if (this.hideWishingCompassMessage.getValue() && thing.endsWith("Wishing Compass")) cancel(e)
+ if (this.hideAscensionRope.getValue() && thing.endsWith("Ascension Rope")) cancel(e)
+ })
+
+ this.registerStep(true, 1, () => {
+ if (this.FeatureManager.features["dataLoader"].class.area === "Crystal Hollows") {
+ if (!this.leftCH && !this.inCrystalHollows) {
+ this.foundWither = false
+ this.inCrystalHollows = true
+ }
+ } else if (this.inCHfromChest) {
+ this.inCrystalHollows = true
+ this.dPowder = false
+ this.inCHfromChest = false
+ }
+ })
+ this.dPowder = false;
+ this.registerStep(true, 2, this.step2fps);
+ this.sL = Renderer.getStringWidth(" ")
+
+ this.overlayLeft = []
+ this.overlayRight = []
+
+ this.leftCH = false;
+ this.registerChat("&7Sending to server ${s}&r", (s, e) => {
+ if (this.inCrystalHollows) {
+ this.leftCH = true;
+ this.inCrystalHollows = false;
+ if (this.resetPowderWhenLeaveCH.getValue()) {
+ this.resetMiningData("powder")
+ }
+ } else this.leftCH = false
+ })
+
+ this.miningData = {}
+ this.saveMiningData = () => {
+ new Thread(() => {
+ FileLib.write("soopyAddonsData", "miningData.json", JSON.stringify(this.miningData));
+ }).start();
+ }
+ this.miningData = JSON.parse(FileLib.read("soopyAddonsData", "miningData.json") || "{}") || {}
+ if (!this.miningData.powder) this.miningData.powder = { chests: 0, mithril: 0, gemstone: 0 }
+ //TODO if (!this.miningData.scatha) this.miningData.scatha = {}
+ this.saveMiningData();
+
+ this.registerCommand("resetpowderdata", () => {
+ this.resetMiningData("powder");
+ ChatLib.chat(`&6[SOOPY V2] &aSuccessfully reset powder data.`)
+ }, this)
+
+ this.registerChat("&r&aYou uncovered a treasure chest!&r", (e) => {
+ if (!this.inCrystalHollows) {
+ this.inCrystalHollows = true
+ this.inCHfromChest = true
+ }
+ if (this.chestUncoverAlert.getValue()) Client.showTitle("&aTreasure Chest!", "", 0, 60, 20);
+ if (this.chestUncoverAlertSound.getValue()) World.playSound("random.levelup", 1, 1);
+ })
+
+ this.registerChat("&r&r&r${space}&r&b&l2X POWDER ${status}!&r", (space, status, e) => {
+ if (status.removeFormatting() === "STARTED") {
+ this.dPowder = true
+ } else this.dPowder = false
+ })
+ this.inCHfromChest = false;
+ this.registerChat("&r&6You have successfully picked the lock on this chest!&r", (e) => {
+ this.miningData.powder.chests++
+ })
+ this.registerChat("&r&aYou received &r&b+${amount} &r&aMithril Powder&r", (amount, e) => {
+ this.miningData.powder.mithril += (this.dPowder ? 2 : 1) * parseInt(amount)
+ })
+ this.registerChat("&r&aYou received &r&b+${amount} &r&aGemstone Powder&r", (amount, e) => {
+ this.miningData.powder.gemstone += (this.dPowder ? 2 : 1) * parseInt(amount)
+ })
+
+ this.registerEvent("renderOverlay", this.renderOverlay)
+ }
+
+
+ resetMiningData(type) {
+ if (type === "powder") {
+ Object.keys(this.miningData.powder).forEach(thing => this.miningData.powder[thing] = 0)
+ } else if (type === "scatha") {
+ //TODO
+ }
+ }
+
+ renderOverlay() {
+ if (this.PowderOverlayElement.isEnabled()) {
+ let width = Renderer.getStringWidth(this.overlayLeft[0])
+
+ let x = this.PowderOverlayElement.locationSetting.x
+ let y = this.PowderOverlayElement.locationSetting.y
+ let scale = this.PowderOverlayElement.locationSetting.scale
+
+ Renderer.retainTransforms(true)
+ Renderer.scale(scale)
+ Renderer.translate(x / scale, y / scale)
+
+ this.overlayLeft.forEach((l, i) => {
+ Renderer.drawString(l, 0, 10 * i)
+ })
+
+ this.overlayRight.forEach((l, i) => {
+ Renderer.drawString(l, width - Renderer.getStringWidth(l), 10 * i)
+ })
+
+ Renderer.retainTransforms(false)
+ }
+ }
+
+ step2fps() {
+ if (!this.foundWither) {
+ World.getAllEntitiesOfType(net.minecraft.entity.boss.EntityWither)?.forEach(e => {
+ if (e.getName().includes("§e§lPASSIVE EVENT §b§l2X POWDER §e§lRUNNING FOR §a§l")) {
+ this.dPowder = true;
+ };
+ this.foundWither = true;
+ });
+ }
+
+ this.overlayLeft = []
+ this.overlayRight = []
+
+ if (this.PowderElement.getValue() && this.inCrystalHollows) {
+ this.overlayLeft.push(`&b2x Powder: ${this.dPowder ? "&aACTIVE" : "&cINACTIVE"}`)
+ this.overlayRight.push("")
+
+ if (this.miningData.powder.chests && this.miningData.powder.chests > 0) {
+ let c = this.miningData.powder.chests
+
+ this.overlayLeft.push(`&aChests:`)
+ this.overlayRight.push(`&b${numberWithCommas(c)}`)
+ }
+ if (this.miningData.powder.mithril && this.miningData.powder.mithril > 0) {
+ let m = this.miningData.powder.mithril
+
+ this.overlayLeft.push(`&bMithril:`)
+ this.overlayRight.push(`&d${numberWithCommas(m)}`)
+ }
+ if (this.miningData.powder.gemstone && this.miningData.powder.gemstone > 0) {
+ let g = this.miningData.powder.gemstone
+
+ this.overlayLeft.push(`&bGems:`)
+ this.overlayRight.push(`&d${numberWithCommas(g)}`)
+ }
+ }
+ }
+
+ initVariables() {
+ this.hudElements = [];
+ this.inCrystalHollows = false;
+ this.foundWither = true;
+ this.dPowder = false;
+ }
+
+ onDisable() {
+ this.hudElements.forEach(h => h.delete())
+ this.saveMiningData();
+ if (this.resetPowderWhenLeaveGame.getValue()) {
+ this.resetMiningData("powder");
+ }
+ this.initVariables();
+ }
+}
+
+module.exports = {
+ class: new PowderAndScatha(),
+};
diff --git a/features/specialMining/metadata.json b/features/specialMining/metadata.json
new file mode 100644
index 0000000..0e311c0
--- /dev/null
+++ b/features/specialMining/metadata.json
@@ -0,0 +1,8 @@
+{
+ "name": "SpecialMining",
+ "description": "Powder & Scatha Mining",
+ "isHidden": false,
+ "isTogglable": true,
+ "defaultEnabled": true,
+ "sortA": 1
+} \ No newline at end of file