aboutsummaryrefslogtreecommitdiff
path: root/src/features/betterGuis
diff options
context:
space:
mode:
authorSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2022-09-17 19:39:05 +0800
committerSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2022-09-17 19:39:05 +0800
commit431e4fc9d1657a50ebc34b8ac24f9bfaea06417f (patch)
tree5987bb14f38d2999c682970429f34b41eb3e5826 /src/features/betterGuis
parente73f2efdf0f50aa775c540317394d46428e9704f (diff)
downloadSoopyV2-431e4fc9d1657a50ebc34b8ac24f9bfaea06417f.tar.gz
SoopyV2-431e4fc9d1657a50ebc34b8ac24f9bfaea06417f.tar.bz2
SoopyV2-431e4fc9d1657a50ebc34b8ac24f9bfaea06417f.zip
Initial move to babel + change fetch to use async/await
Diffstat (limited to 'src/features/betterGuis')
-rw-r--r--src/features/betterGuis/dungeonReadyGui.js284
-rw-r--r--src/features/betterGuis/index.js386
-rw-r--r--src/features/betterGuis/metadata.json8
-rw-r--r--src/features/betterGuis/museumGui.js1024
4 files changed, 1702 insertions, 0 deletions
diff --git a/src/features/betterGuis/dungeonReadyGui.js b/src/features/betterGuis/dungeonReadyGui.js
new file mode 100644
index 0000000..ad9a5dd
--- /dev/null
+++ b/src/features/betterGuis/dungeonReadyGui.js
@@ -0,0 +1,284 @@
+import { SoopyGui, SoopyRenderEvent } from "../../../guimanager"
+import SoopyKeyPressEvent from "../../../guimanager/EventListener/SoopyKeyPressEvent"
+import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent"
+import BoxWithTextAndDescription from "../../../guimanager/GuiElement/BoxWithTextAndDescription"
+import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow"
+import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement"
+import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement"
+
+
+const ContainerChest = Java.type("net.minecraft.inventory.ContainerChest");
+
+class DungeonReadyGui {
+ constructor() {
+ this.checkMenu = false;
+
+ this.soopyGui = new SoopyGui();
+
+ this.soopyGui.optimisedLocations = true;
+
+ this.mainPage = new SoopyGuiElement().setLocation(0, 0, 1, 1);
+ this.soopyGui.element.addChild(this.mainPage);
+ this.soopyGui.element.addEvent(new SoopyKeyPressEvent().setHandler((...args) =>
+ this.keyPress(...args)
+ ));
+
+
+ this.startButton = new ButtonWithArrow()
+ .setText("§0Start Dungeon")
+ .setLocation(0.25, 0.25, 0.5, 0.5)
+ .addEvent(new SoopyMouseClickEvent().setHandler(() =>
+ this.startDungeon()
+ ));
+ this.soopyGui.element.addChild(this.startButton);
+
+ this.startButton.desc = new SoopyTextElement()
+ .setMaxTextScale(2)
+ .setLocation(0.05, 0.6, 0.7, 0.4)
+ .setText("");
+ this.startButton.addChild(this.startButton.desc);
+
+ this.closeMenu = 0;
+ this.nameToId = {};
+ this.nextId = 0;
+ this.currPlayers = 1;
+ this.readyBoxes = [];
+ this.confirmationCooldown = 0;
+ for (let i = 0; i < 4; i++) {
+ let readyBox = new BoxWithTextAndDescription()
+ .setText("§0")
+ .setDesc("§0")
+ .setLocation(0.1 + 0.2 * i, 0.75, 0.15, 0.15)
+ .setColor(255, 150, 150);
+ this.readyBoxes.push(readyBox);
+
+
+ readyBox.text.setLocation(0, 0, 1, 0.6);
+ readyBox.description.setLocation(0.05, 0.6, 0.9, 0.4);
+ readyBox.visable = false;
+
+
+ this.mainPage.addChild(readyBox);
+ }
+
+ this.classBoxes = [];
+ this.currentPlayerClass = -1;
+ this.classes = {
+ "Healer": new Item("minecraft:potion"),
+ "Mage": new Item("minecraft:blaze_rod"),
+ "Berserker": new Item("minecraft:iron_sword"),
+ "Archer": new Item("minecraft:bow"),
+ "Tank": new Item("minecraft:leather_chestplate")
+ };
+ Object.keys(this.classes).forEach((clas, i) => {
+ let classBox = new BoxWithTextAndDescription()
+ .setText("§0" + clas + "&7 - 0")
+ .setDesc("§0")
+ .setLocation(0.1 + 0.1625 * i, 0.1, 0.15, 0.1);
+ this.classBoxes.push(classBox);
+
+ let classIndex = i;
+
+ classBox.text.setLocation(0, 0, 1, 0.6);
+ classBox.description.setLocation(0.05, 0.6, 0.9, 0.4);
+ classBox.addEvent(new SoopyRenderEvent()
+ .setHandler(() => {
+ let scale = 16 / Math.min(classBox.location.getWidthExact(), classBox.location.getHeightExact() / 2) * 3;
+ this.classes[clas].draw(classBox.location.getXExact() + classBox.location.getWidthExact() / 2 - 16 * scale / 2, classBox.location.getYExact() + classBox.location.getHeightExact() - 16 * scale - 4, scale);
+ })).addEvent(new SoopyMouseClickEvent().setHandler(() =>
+ this.clickedClass(classIndex)
+ ));
+
+ this.mainPage.addChild(classBox)
+ })
+
+ this.playerReadyButton = new ButtonWithArrow()
+ .setText("§0Ready")
+ .setLocation(0.33, 0.33, 0.33, 0.33)
+ .setColor(255, 150, 150)
+ .addEvent(new SoopyMouseClickEvent()
+ .setHandler(() => this.ready()));
+ this.mainPage.addChild(this.playerReadyButton);
+ }
+
+ joinedDungeon(players) {
+ this.currPlayers = players;
+ }
+
+ startDungeon() {
+ if (Player.getContainer().getName() !== "Start Dungeon?") return;
+
+ if (!this.confirmationCooldown && World.getAllPlayers().filter(p => p.getPing() === 1).length !== this.currPlayers && !(World.getAllPlayers().filter(p => p.getPing() === 1).length === 1 && this.currPlayers === 2)) {
+ this.startButton.setText("§0Confirm starting Dungeon? (3s)");
+ this.startButton.desc.setText("§0(" + World.getAllPlayers().filter(p => p.getPing() === 1).length + "/" + this.currPlayers + " in dungeon)");
+ this.confirmationCooldown = Date.now() + 3000;
+ return;
+ }
+ if (Date.now() < this.confirmationCooldown) return;
+
+ this.startButton.visable = false;
+ Player.getContainer().click(13, false, "MIDDLE");
+ }
+
+ ready() {
+ if (!Player.getContainer().getName().startsWith("Catacombs - Floor ")) return;
+ this.playerReadyButton.setColor(150, 150, 150);
+ for (let i = 0; i < 5; i++) {
+ if (ChatLib.removeFormatting(Player.getContainer().getStackInSlot(3 + i).getName().split(" ").pop()) === Player.getName())
+ Player.getContainer().drop(12 + i, false);
+ }
+ }
+
+ clickedClass(classIndex) {
+ if (!Player.getContainer().getName().startsWith("Catacombs - Floor ")) return;
+
+ Player.getContainer().drop(2 + 4 * 9 + classIndex, false);
+
+ this.classBoxes[classIndex].setColor(150, 150, 150);
+
+ if (this.currentPlayerClass !== -1) this.classBoxes[this.currentPlayerClass].setColor(253, 255, 227);
+ }
+
+ reset() {
+ this.startButton.visable = true;
+ this.playerReadyButton.setColor(255, 150, 150);
+
+ this.nameToId = {};
+ this.nextId = 0;
+ this.closeMenu = 0;
+
+ this.startButton.setText("§0Start Dungeon");
+ this.startButton.desc.setText("");
+ this.confirmationCooldown = 0;
+
+ this.readyBoxes.forEach(b => b.visable = false);
+ }
+
+ readyInOneSecond() {
+ this.closeMenu = Date.now() + 1000;
+ }
+
+ tick() {
+ if (!this.soopyGui.ctGui.isOpen()) return;
+
+ if (this.closeMenu > 0 && Date.now() > this.closeMenu) {
+ this.soopyGui.close();
+ Client.currentGui.close();
+ this.closeMenu = 0;
+ return;
+ }
+
+ if (Player.getContainer().getName().startsWith("Catacombs - Floor ")) {
+ this.startButton.visable = false;
+
+ let clickingClassButton = -1;
+
+ for (let i = 0; i < 5; i++) {
+ //ready up buttons
+ if (Player.getContainer().getStackInSlot(3 + i)) {
+ if (ChatLib.removeFormatting(Player.getContainer().getStackInSlot(3 + i).getName().split(" ").pop()) === Player.getName()) {
+ if (Player.getContainer().getStackInSlot(12 + i)) {
+ if (ChatLib.removeFormatting(Player.getContainer().getStackInSlot(12 + i).getName()) === "Ready") {
+ this.playerReadyButton.setColor(150, 255, 150);
+ } else {
+ this.playerReadyButton.setColor(255, 150, 150);
+ }
+ } else {
+ this.playerReadyButton.setColor(150, 150, 150);
+ }
+ } else {
+ let boxId = this.nameToId[ChatLib.removeFormatting(Player.getContainer().getStackInSlot(3 + i).getName().split(" ").pop())];
+
+ if (boxId) {
+ this.readyBoxes[boxId].setColor(255, 150, 150);
+ if (ChatLib.removeFormatting(Player.getContainer().getStackInSlot(12 + i).getName()) === "Ready")
+ this.readyBoxes[boxId].setColor(150, 255, 150);
+
+ this.readyBoxes[boxId].setLore(Player.getContainer().getStackInSlot(3 + i).getLore());
+ this.readyBoxes[boxId].setDesc("§0" + ChatLib.removeFormatting(Player.getContainer().getStackInSlot(3 + i).getLore()[2]));
+ }
+ }
+ }
+
+
+ //select class buttons
+ if (Player.getContainer().getStackInSlot(2 + 4 * 9 + i)) {
+ this.classBoxes[i].setColor(253, 255, 227);
+ if (Player.getContainer().getStackInSlot(2 + 4 * 9 + i).getDamage() === 10)
+ this.classBoxes[i].setColor(250, 255, 150);
+
+ this.classBoxes[i]
+ .setText("§0" + Object.keys(this.classes)[i] + "§7 - " + ChatLib.removeFormatting(Player.getContainer().getStackInSlot(2 + 4 * 9 + i).getName().split(" ")[0]))
+ .setLore(Player.getContainer().getStackInSlot(2 + 4 * 9 + i).getLore());
+
+ let isPlayerClass = false;
+ Player.getContainer().getStackInSlot(2 + 4 * 9 + i).getLore().forEach(line => {
+ if (!ChatLib.removeFormatting(line).startsWith(" - ")) return;
+ if (ChatLib.removeFormatting(line.split(" ").pop()) === Player.getName())
+ isPlayerClass = true;
+ })
+
+ if (isPlayerClass) {
+ this.currentPlayerClass = i;
+ this.classBoxes[i].setColor(150, 255, 150);
+ }
+ } else clickingClassButton = i;
+ }
+
+ if (clickingClassButton !== -1) {
+ this.classBoxes[clickingClassButton].setColor(150, 150, 150);
+ if (this.currentPlayerClass !== -1) this.classBoxes[this.currentPlayerClass].setColor(253, 255, 227);
+ }
+ };
+
+ if (this.confirmationCooldown) {
+ this.startButton.setText("§0Confirm starting Dungeon? (" + Math.ceil(Math.max(0, this.confirmationCooldown - Date.now()) / 1000) + "s)");
+ };
+
+ World.getAllPlayers().filter(p => p.getPing() === 1).forEach(p => {
+ if (p.getUUID().toString() === Player.getUUID().toString()) return;
+
+ if (p.getName() in this.nameToId) return;
+
+ this.nameToId[p.getName()] = this.nextId++;
+
+ this.readyBoxes[this.nameToId[p.getName()]].setText("§0" + p.getName()).visable = true;
+ });
+ }
+
+ guiOpened(event) {
+ let name = "";
+ if (event.gui && event.gui.field_147002_h instanceof ContainerChest)
+ name = event.gui.field_147002_h.func_85151_d().func_145748_c_().func_150260_c();
+
+ if (this.soopyGui.ctGui.isOpen()) {
+ if (!event.gui || !event.gui.field_147002_h) return;
+ Player.getPlayer().field_71070_bA = event.gui.field_147002_h
+
+ if (!Player.getContainer().getName().startsWith("Catacombs - Floor ")) return;
+
+ event.gui = this.soopyGui.ctGui
+ this.soopyGui.ctGui.open();
+ return
+ }
+
+ if (name === "Start Dungeon?" || name.startsWith("Catacombs - Floor ")) {
+ if (event.gui && event.gui.field_147002_h) Player.getPlayer().field_71070_bA = event.gui.field_147002_h;
+
+ this.soopyGui.open();
+ event.gui = this.soopyGui.ctGui;
+ }
+ }
+
+ keyPress(key, keyId) {
+ if (keyId === 1) //escape key
+ // this.dontOpen = 1
+ Client.currentGui.close();
+
+ if (keyId === 18) //'e' key
+ Client.currentGui.close();
+
+ }
+}
+
+export default DungeonReadyGui; \ No newline at end of file
diff --git a/src/features/betterGuis/index.js b/src/features/betterGuis/index.js
new file mode 100644
index 0000000..dcd8fb9
--- /dev/null
+++ b/src/features/betterGuis/index.js
@@ -0,0 +1,386 @@
+/// <reference types="../../../../CTAutocomplete" />
+/// <reference lib="es2015" />
+import Feature from "../../featureClass/class";
+import logger from "../../logger";
+import { f, m } from "../../../mappings/mappings";
+import ToggleSetting from "../settings/settingThings/toggle";
+import MuseumGui from "./museumGui.js";
+import DungeonReadyGui from "./dungeonReadyGui";
+import { SoopyGui } from "../../../guimanager";
+import TextBox from "../../../guimanager/GuiElement/TextBox";
+import SoopyNumber from "../../../guimanager/Classes/SoopyNumber";
+
+class BetterGuis extends Feature {
+ constructor() {
+ super();
+ }
+
+ inSkyblock() {
+ return this.FeatureManager.features["dataLoader"] && this.FeatureManager.features["dataLoader"].class.isInSkyblock;
+ }
+
+ onEnable() {
+ this.initVariables();
+
+ this.museumGui = new MuseumGui();
+ this.dungeonReady = new DungeonReadyGui();
+
+ this.replaceSbMenuClicks = new ToggleSetting("Improve Clicks on SBMENU", "This will change clicks to middle clicks, AND use commands where possible (eg /pets)", true, "sbmenu_clicks", this);
+ this.reliableSbMenuClicks = { getValue: () => false }//removed because hypixel fixed, code kept incase hypixel adds back bug later //new ToggleSetting("Make SBMENU clicks reliable", "This will delay clicks on sbmenu to time them so they dont get canceled", true, "sbmenu_time", this)
+
+ this.museumGuiEnabled = new ToggleSetting("Custom Museum GUI", "Custom gui for the Museum", true, "custom_museum_enabled", this);
+ this.dungeonReadyGuiEnabled = new ToggleSetting("Custom Dungeon Ready GUI", "Custom gui for the dungeon ready up menu", false, "custom_dungeon_ready_enabled", this);
+
+ this.chestSearchBar = new ToggleSetting("Inventory Search Bar", "use '&' to make it filter by stuff that contains multiple things", false, "inv_search", this);
+ this.customBars = new ToggleSetting("Custom hp and mana bar", "Also hides stuff like armor bar", false, "custom_bars", this);
+
+ this.lastWindowId = 0;
+ this.shouldHold = 10;
+ this.clickSlot = -1;
+ this.clickSlotTime = 0;
+
+ this.middleClickGuis = [
+ "Your SkyBlock Profile",
+ "Your Skills",
+ "Farming Skill",
+ "Mining Skill",
+ "Heart of the Mountain",
+ "Combat Skill",
+ "Foraging Skill",
+ "Fishing Skill",
+ "Enchanting Skill",
+ "Alchemy Skill",
+ "Carpentry Skill",
+ "Runecrafting Skill",
+ "Social Skill",
+ "Taming Skill",
+ "Dungeoneering",
+ "Your Essence",
+ "Healer Class Perks",
+ "Mage Class Perks",
+ "Beserk Class Perks",
+ "Archer Class Perks",
+ "Tank Class Perks",
+ "Recipe Book",
+ "Trades",
+ "Quest Log",
+ "Quest Log (Completed)",
+ "Fairt Souls Guide",
+ "Dungeon Journals",
+ "Calendar and Events",
+ "Booster Cookie",
+ "Island Management",
+ "Toggle Potion Effects",
+ "Bank",
+ "Bank Account Upgrades",
+ "Co-op Bank Account",
+ "Bank Deposit",
+ "Bank Withdrawal",
+ "Personal Bank Account",
+ "Bazaar Orders",
+ "Co-op Bazaar Orders",
+ "Pets"
+ ]
+ this.middleClickStartsWith = [
+ "Bestiary",
+ "Private Island",
+ "Hub",
+ "Spiders Den",
+ "Blazing Fortress",
+ "The End",
+ "Deep Caverns",
+ "The Park",
+ "Spooky Festival",
+ "Catacombs",
+ "The Catacombs",
+ "Settings",
+ "Bazaar",
+ "Farming",
+ "Mining",
+ "Woods & Fishes",
+ "Oddities"
+ ];
+ this.middleClickEndsWith = [
+ "Recipe",
+ "Recipes",
+ ") Pets",
+ "Collection",
+ "Active Effects"
+ ];
+
+ this.registerChat("&r&aDungeon starts in 1 second.&r", () =>
+ this.dungeonReady.readyInOneSecond.call(this.dungeonReady));
+ this.registerChat("&r&aDungeon starts in 1 second. Get ready!&r", () =>
+ this.dungeonReady.readyInOneSecond.call(this.dungeonReady));
+ this.registerEvent("guiMouseClick", this.guiClicked);
+ this.registerEvent("guiOpened", (event) => {
+ if (this.museumGuiEnabled.getValue()) this.museumGui.guiOpened.call(this.museumGui, event);
+ if (this.dungeonReadyGuiEnabled.getValue()) this.dungeonReady.guiOpened.call(this.dungeonReady, event);
+ });
+ this.registerEvent("worldLoad", () => this.dungeonReady.reset());
+ this.registerChat("&e${*} &r&cThe Catacombs &r&ewith &r&9${players}/5 players &r&eon &r${*}&r", (players) => {
+ if (this.dungeonReadyGuiEnabled.getValue()) this.dungeonReady.joinedDungeon.call(this.dungeonReady, ~~players);
+ })
+ this.registerChat("&eSkyBlock Dungeon Warp &r&7(${players} players)&r", (players) => {
+ if (this.dungeonReadyGuiEnabled.getValue()) this.dungeonReady.joinedDungeon.call(this.dungeonReady, ~~players)
+ })
+ this.registerStep(true, 10, this.step)
+ this.registerEvent("worldUnload", () => this.museumGui.saveMuseumCache.call(this.museumGui));
+ this.registerStep(false, 30, () => this.museumGui.saveMuseumCache.call(this.museumGui));
+
+
+ this.invSearchSoopyGui = new SoopyGui();
+ this.invSearchSoopyGui._renderBackground = () => { };
+
+ this.invSearchTextBox = new TextBox().setPlaceholder("Click to search").setLocation(0.4, 0.05, 0.2, 0.05);
+ this.invSearchSoopyGui.element.addChild(this.invSearchTextBox);
+
+ this.mana = new SoopyNumber(0);
+ this.overflowMana = new SoopyNumber(0);
+ this.maxMana = new SoopyNumber(0);
+ this.lastOverFlow = Date.now();
+
+ this.slotMatches = new Map();
+ this.registerEvent("renderHealth", this.renderHealth).registeredWhen(() => this.inSkyblock() && this.customBars.getValue());
+ this.registerEvent("renderFood", cancel).registeredWhen(() => this.inSkyblock() && this.customBars.getValue());
+ this.registerEvent("renderArmor", this.renderMana).registeredWhen(() => this.inSkyblock() && this.customBars.getValue());
+ let registerActionBar = this.registerCustom("actionbar", this.actionbarMana);
+ registerActionBar.trigger.setCriteria('&b${curr}/${max}✎').setParameter('contains');
+ let registerActionBar2 = this.registerCustom("actionbar", this.actionbarOverflowMana);
+ registerActionBar2.trigger.setCriteria('&3${curr}ʬ').setParameter('contains');
+ //&c2532/2532❤ &a798&a❈ Defense &b2525/2525✎ &31ʬ&r (100)
+ //&c2532/2532❤ &f20&f❂ True Defense &b2414/2414✎ &3600ʬ&r (13)
+ //&c2665/2665❤ &a972&a❈ Defense &b2145/2145✎ &3600ʬ&r
+ //&c2,806/2,806❤ &a1,050&a❈ Defense &b1,945/1,945✎ &3600ʬ&r
+ this.registerEvent("guiRender", this.postGuiRender).registeredWhen(() => this.chestSearchBar.getValue());
+ this.registerEvent("guiMouseClick", this.guiMouseClick).registeredWhen(() => this.chestSearchBar.getValue());
+ this.registerEvent("guiKey", this.guiKey).registeredWhen(() => this.chestSearchBar.getValue());
+ this.registerEvent("renderSlot", this.renderSlot).registeredWhen(() => this.chestSearchBar.getValue());
+ this.registerEvent("guiOpened", this.guiOpened).registeredWhen(() => this.chestSearchBar.getValue());
+ }
+
+ actionbarMana(curr, max) {
+ if (curr.includes("Mana"))
+ curr = curr.split("&b").pop();
+
+ this.mana.set(parseInt(curr.replace(/,/g, "")), 500);
+ this.maxMana.set(parseInt(max.replace(/,/g, "")), 500);
+ if (Date.now() - this.lastOverFlow > 1000) this.overflowMana.set(0, 500);
+ }
+
+ actionbarOverflowMana(curr) {
+ this.overflowMana.set(parseInt(curr.replace(/,/g, "")), 500);
+ this.lastOverFlow = Date.now();
+ }
+
+ renderMana(event) {
+ cancel(event);
+
+ let left = Renderer.screen.getWidth() / 2 + 91 - 80;
+ let top = Renderer.screen.getHeight() - 40;
+
+ Renderer.retainTransforms(true);
+ Renderer.translate(left, top);
+
+ let totalAmt = Math.max(this.maxMana.get(), this.mana.get() + this.overflowMana.get());
+
+ let manaPercent = this.mana.get() / totalAmt;
+ let ofPercent = this.overflowMana.get() / totalAmt;
+
+ Renderer.drawRect(Renderer.color(0, 0, 0), 0, 0, 80, 10);
+ Renderer.drawRect(Renderer.color(50, 50, 50), 2, 2, 76, 6);
+ Renderer.drawRect(Renderer.color(0, 0, 255), 2, 2, manaPercent * 76, 6);
+ Renderer.drawRect(Renderer.color(0, 255, 255), 2 + manaPercent * 76, 2, ofPercent * 76, 6);
+ Renderer.retainTransforms(false);
+ }
+
+ renderHealth(event) {
+ cancel(event);
+
+ let left = Renderer.screen.getWidth() / 2 - 91;
+ let top = Renderer.screen.getHeight() - 40;
+
+ Renderer.retainTransforms(true);
+ Renderer.translate(left, top);
+
+ let totalAmt = Math.max(Player.asPlayerMP().getMaxHP(), Player.getHP() + Player.asPlayerMP().getAbsorption());
+
+ let hpPercent = Player.getHP() / totalAmt;
+ let abPercent = Player.asPlayerMP().getAbsorption() / totalAmt;
+
+
+ Renderer.drawRect(Renderer.color(0, 0, 0), 0, 0, 80, 10);
+ Renderer.drawRect(Renderer.color(50, 50, 50), 2, 2, 76, 6);
+ Renderer.drawRect(Renderer.color(255, 0, 0), 2, 2, hpPercent * 76, 6);
+ Renderer.drawRect(Renderer.color(255, 255, 0), 2 + hpPercent * 76, 2, abPercent * 76, 6);
+
+ Renderer.retainTransforms(false);
+ }
+
+ postGuiRender(x, y, gui) {
+ if (gui instanceof net.minecraft.client.gui.inventory.GuiChest)
+ this.invSearchSoopyGui._render(x, y, 0);
+ }
+ guiMouseClick(x, y, button, gui) {
+ if (gui instanceof net.minecraft.client.gui.inventory.GuiChest)
+ this.invSearchSoopyGui._onClick(x, y, button);
+ }
+ guiKey(char, code, gui, event) {
+ if (!(gui instanceof net.minecraft.client.gui.inventory.GuiChest)) return;
+
+ this.invSearchSoopyGui._onKeyPress(char, code);
+
+ if (this.invSearchTextBox.text.selected) {
+ cancel(event);
+ this.slotMatches.clear();
+ }
+ }
+ guiOpened() {
+ this.slotMatches.clear();
+ }
+
+ renderSlot(slot, gui, event) {
+ if (!(gui instanceof net.minecraft.client.gui.inventory.GuiChest)) return;
+ if (!this.invSearchTextBox.getText()) return;
+
+ let searchText = this.invSearchTextBox.getText().toLowerCase();
+
+ let isMatching = false;
+ let slotMatches = this.slotMatches.get(slot.getIndex());
+ if (slotMatches && Date.now() - slotMatches.timestamp < 500) {
+ if (!slotMatches.isMatching) {
+ Renderer.translate(0, 0, 100);
+ Renderer.drawRect(Renderer.color(0, 0, 0, 200), slot.getDisplayX(), slot.getDisplayY(), 8 * Renderer.screen.getScale(), 8 * Renderer.screen.getScale());
+ }
+ return;
+ }
+ let item = slot.getItem();
+ if (item) {
+ isMatching = !searchText.split("&").map(a => {
+ a = a.trim();
+ let isMatching2 = false;
+ if (ChatLib.removeFormatting(item.getName()).toLowerCase().includes(a)) isMatching2 = true;
+ if (!isMatching2 && item.getLore().some(b => ChatLib.removeFormatting(b).toLowerCase().includes(a))) isMatching2 = true;
+ return isMatching2;
+ }).includes(false);
+ }
+
+ this.slotMatches.set(slot.getIndex(), { isMatching, timestamp: Date.now() });
+
+ if (!isMatching) {
+ Renderer.translate(0, 0, 100);
+ Renderer.drawRect(Renderer.color(0, 0, 0, 200), slot.getDisplayX(), slot.getDisplayY(), 8 * Renderer.screen.getScale(), 8 * Renderer.screen.getScale());
+ }
+ }
+
+ guiClicked(mouseX, mouseY, button, gui, event) {
+ if (!(gui instanceof net.minecraft.client.gui.inventory.GuiChest) || button !== 0 || !this.replaceSbMenuClicks.getValue()) return;
+
+ let hoveredSlot = gui.getSlotUnderMouse();
+ if (!hoveredSlot) return;
+
+ let hoveredSlotId = hoveredSlot[f.slotNumber];
+
+ // logger.logMessage(hoveredSlotId, 4)
+
+ if (this.guiSlotClicked(ChatLib.removeFormatting(Player.getContainer().getName()), hoveredSlotId))
+ cancel(event);
+ }
+
+ step() {
+ if (this.museumGuiEnabled.getValue()) this.museumGui.tick.call(this.museumGui);
+ if (this.dungeonReadyGuiEnabled.getValue()) this.dungeonReady.tick.call(this.dungeonReady);
+
+ if (!this.replaceSbMenuClicks.getValue()) return
+ if (Player.getContainer() && Player.getContainer().getName() !== "SkyBlock Menu") {
+ this.lastWindowId = 0;
+ return;
+ }
+ if (this.lastWindowId === 0) {
+ this.lastWindowId = Player.getContainer().getWindowId();
+ return;
+ }
+ if (Player.getContainer().getWindowId() === this.lastWindowId) {
+ this.shouldHold--
+ return;
+ }
+
+ this.lastWindowId = Player.getContainer().getWindowId();
+ this.shouldHold += 10;
+ if (Date.now() - this.clickSlotTime > 1000) {
+ this.clickSlot = -1;
+ }
+ if (this.clickSlot && this.clickSlot != -1) {
+ Player.getContainer().click(this.clickSlot, false, "MIDDLE");
+ this.clickSlot = -1;
+ }
+ }
+
+ guiSlotClicked(inventoryName, slotId) {
+ if (inventoryName.endsWith(" Sack")) return false
+ switch (inventoryName) {
+ case "SkyBlock Menu":
+ switch (slotId) {
+ case 30:
+ ChatLib.command("pets")
+ break
+ case 25:
+ ChatLib.command("storage")
+ break
+ default:
+ if (this.shouldHold > 0 && this.reliableSbMenuClicks.getValue()) {
+ this.clickSlot = slotId
+ this.clickSlotTime = Date.now()
+ } else {
+ Player.getContainer().click(slotId, false, "MIDDLE")
+ }
+ break;
+ }
+ return true
+ break
+ default:
+ if (this.middleClickGuis.includes(inventoryName)) {
+ Player.getContainer().click(slotId, false, "MIDDLE")
+ return true
+ }
+ for (let thing of this.middleClickStartsWith) {
+ if (inventoryName.startsWith(thing)) {
+ Player.getContainer().click(slotId, false, "MIDDLE")
+ return true
+ }
+ }
+ for (let thing of this.middleClickEndsWith) {
+ if (inventoryName.endsWith(thing)) {
+ Player.getContainer().click(slotId, false, "MIDDLE")
+ return true
+ }
+ }
+ return false
+ break
+ }
+ }
+
+ initVariables() {
+ this.replaceSbMenuClicks = undefined;
+ this.lastWindowId = undefined;
+ this.shouldHold = undefined;
+ this.clickSlot = undefined;
+ this.clickSlotTime = undefined;
+ this.reliableSbMenuClicks = undefined;
+ this.middleClickGuis = undefined;
+ this.middleClickStartsWith = undefined;
+ this.middleClickEndsWith = undefined;
+
+ this.museumGui = undefined;
+ }
+
+ onDisable() {
+ this.initVariables();
+
+ this.invSearchSoopyGui.delete();
+ }
+}
+
+module.exports = {
+ class: new BetterGuis()
+} \ No newline at end of file
diff --git a/src/features/betterGuis/metadata.json b/src/features/betterGuis/metadata.json
new file mode 100644
index 0000000..6aeed27
--- /dev/null
+++ b/src/features/betterGuis/metadata.json
@@ -0,0 +1,8 @@
+{
+ "name": "Better guis",
+ "description": "Edits to a bunch of guis to make them nicer to use",
+ "isHidden": false,
+ "isTogglable": true,
+ "defaultEnabled": true,
+ "sortA": 1
+} \ No newline at end of file
diff --git a/src/features/betterGuis/museumGui.js b/src/features/betterGuis/museumGui.js
new file mode 100644
index 0000000..06497af
--- /dev/null
+++ b/src/features/betterGuis/museumGui.js
@@ -0,0 +1,1024 @@
+import { SoopyGui, SoopyRenderEvent } from "../../../guimanager"
+import SoopyContentChangeEvent from "../../../guimanager/EventListener/SoopyContentChangeEvent"
+import SoopyHoverChangeEvent from "../../../guimanager/EventListener/SoopyHoverChangeEvent"
+import SoopyKeyPressEvent from "../../../guimanager/EventListener/SoopyKeyPressEvent"
+import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent"
+import SoopyOpenGuiEvent from "../../../guimanager/EventListener/SoopyOpenGuiEvent"
+import BoxWithText from "../../../guimanager/GuiElement/BoxWithText"
+import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow"
+import ProgressBar from "../../../guimanager/GuiElement/ProgressBar"
+import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement"
+import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement"
+import SoopyMarkdownElement from "../../../guimanager/GuiElement/SoopyMarkdownElement"
+import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement"
+import TextBox from "../../../guimanager/GuiElement/TextBox"
+import Notification from "../../../guimanager/Notification"
+import renderLibs from "../../../guimanager/renderLibs"
+import { m } from "../../../mappings/mappings"
+import * as utils from "../../utils/utils"
+
+
+const ContainerChest = Java.type("net.minecraft.inventory.ContainerChest")
+
+class MuseumGui {
+ constructor() {
+ this.checkMenu = false
+
+ this.isInMuseum = false
+ this.guiOpenTickThing = false
+ this.dontOpen = 0
+ this.lastClosed = 0
+ this.itemsInPages = JSON.parse(FileLib.read("soopyAddonsData", "museumItemsCache.json") || "{}") || {}
+ this.itemsInPagesSaved = true
+
+ this.soopyGui = new SoopyGui()
+
+ this.soopyGui.optimisedLocations = true
+
+ this.soopyGui.element.addEvent(new SoopyKeyPressEvent().setHandler((...args) => {
+ this.keyPress(...args)
+ }))
+
+ this.mainPage = new SoopyGuiElement().setLocation(0, 0, 1, 1)
+ this.soopyGui.element.addChild(this.mainPage)
+
+ let widthPer = 0.2
+ let leftOffset = (1 - widthPer * 3 - widthPer * 4 / 5) / 2
+
+ this.weaponsIndicator = new SoopyBoxElement().setLocation(leftOffset, 0.05, widthPer * 4 / 5, 0.15)
+ this.weaponsIndicator.addEvent(new SoopyRenderEvent().setHandler(() => {
+ if (this.weaponsIndicator.hovered && ChatLib.removeFormatting(Player.getContainer().getStackInSlot(4).getName()) !== "Weapons") {
+ this.weaponText.location.location.x.set(0.05, 500)
+ this.weaponText.location.size.x.set(0.9, 500)
+ this.weaponText.location.location.y.set(0.025, 500)
+ this.weaponText.location.size.y.set(0.35, 500)
+
+ this.weaponsIndicator.setColorOffset(-20, -20, -20, 100)
+
+ Renderer.translate(0, 0, 100)
+ Renderer.drawRect(Renderer.color(0, 0, 0, 100), this.weaponsIndicator.location.getXExact(), this.weaponsIndicator.location.getYExact(), this.weaponsIndicator.location.getWidthExact(), this.weaponsIndicator.location.getHeightExact())
+ let clicks = Player.getContainer().getName() === "Your Museum" ? "1" : "2"
+ Renderer.translate(0, 0, 100)
+ renderLibs.drawStringCenteredFull(clicks, this.weaponsIndicator.location.getXExact() + this.weaponsIndicator.location.getWidthExact() / 2, this.weaponsIndicator.location.getYExact() + this.weaponsIndicator.location.getHeightExact() / 2, Math.min(this.weaponsIndicator.location.getWidthExact() / Renderer.getStringWidth(clicks) / 4, this.weaponsIndicator.location.getHeightExact() / 4 / 2))
+ } else {
+ this.weaponText.location.location.x.set(0.1, 500)
+ this.weaponText.location.size.x.set(0.8, 500)
+ this.weaponText.location.location.y.set(0.05, 500)
+ this.weaponText.location.size.y.set(0.3, 500)
+
+ this.weaponsIndicator.setColorOffset(0, 0, 0, 100)
+ }
+ })).addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ this.clickedTopButton("Weapons")
+ }))
+
+ this.weaponText = new SoopyTextElement().setText("§5Weapons").setMaxTextScale(10).setLocation(0.1, 0.05, 0.8, 0.3)
+ this.weaponsIndicator.addChild(this.weaponText)
+ this.weaponsPercentageText = new SoopyTextElement().setLocation(0.1, 0.4, 0.8, 0.2).setText("§0Items Donated: §7Loading...").setMaxTextScale(10)
+ this.weaponsIndicator.addChild(this.weaponsPercentageText)
+ this.weaponsProgressBar = new ProgressBar().setLocation(0.1, 0.6, 0.8, 0.35).showPercentage(true)
+ this.weaponsIndicator.addChild(this.weaponsProgressBar)
+ this.mainPage.addChild(this.weaponsIndicator)
+
+ this.armourIndicator = new SoopyBoxElement().setLocation(leftOffset + widthPer, 0.05, widthPer * 4 / 5, 0.15)
+ this.armourIndicator.addEvent(new SoopyRenderEvent().setHandler(() => {
+ if (this.armourIndicator.hovered && ChatLib.removeFormatting(Player.getContainer().getStackInSlot(4).getName()) !== "Armor Sets") {
+ this.armourText.location.location.x.set(0.05, 500)
+ this.armourText.location.size.x.set(0.9, 500)
+ this.armourText.location.location.y.set(0.025, 500)
+ this.armourText.location.size.y.set(0.35, 500)
+
+ this.armourIndicator.setColorOffset(-20, -20, -20, 100)
+
+ Renderer.translate(0, 0, 100)
+ Renderer.drawRect(Renderer.color(0, 0, 0, 100), this.armourIndicator.location.getXExact(), this.armourIndicator.location.getYExact(), this.armourIndicator.location.getWidthExact(), this.armourIndicator.location.getHeightExact())
+ let clicks = Player.getContainer().getName() === "Your Museum" ? "1" : "2"
+ Renderer.translate(0, 0, 100)
+ renderLibs.drawStringCenteredFull(clicks, this.armourIndicator.location.getXExact() + this.armourIndicator.location.getWidthExact() / 2, this.armourIndicator.location.getYExact() + this.armourIndicator.location.getHeightExact() / 2, Math.min(this.armourIndicator.location.getWidthExact() / Renderer.getStringWidth(clicks) / 4, this.armourIndicator.location.getHeightExact() / 4 / 2))
+ } else {
+ this.armourText.location.location.x.set(0.1, 500)
+ this.armourText.location.size.x.set(0.8, 500)
+ this.armourText.location.location.y.set(0.05, 500)
+ this.armourText.location.size.y.set(0.3, 500)
+
+ this.armourIndicator.setColorOffset(0, 0, 0, 100)
+ }
+ })).addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ this.clickedTopButton("Armor Sets")
+ }))
+
+ this.armourText = new SoopyTextElement().setText("§5Armor Sets").setMaxTextScale(10).setLocation(0.1, 0.05, 0.8, 0.3)
+ this.armourIndicator.addChild(this.armourText)
+ this.armourPercentageText = new SoopyTextElement().setLocation(0.1, 0.4, 0.8, 0.2).setText("§0Items Donated: §7Loading...").setMaxTextScale(10)
+ this.armourIndicator.addChild(this.armourPercentageText)
+ this.armourProgressBar = new ProgressBar().setLocation(0.1, 0.6, 0.8, 0.35).showPercentage(true)
+ this.armourIndicator.addChild(this.armourProgressBar)
+ this.mainPage.addChild(this.armourIndicator)
+
+ this.raritiesIndicator = new SoopyBoxElement().setLocation(leftOffset + widthPer * 2, 0.05, widthPer * 4 / 5, 0.15)
+ this.raritiesIndicator.addEvent(new SoopyRenderEvent().setHandler(() => {
+ if (this.raritiesIndicator.hovered && ChatLib.removeFormatting(Player.getContainer().getStackInSlot(4).getName()) !== "Rarities") {
+ this.raritiesText.location.location.x.set(0.05, 500)
+ this.raritiesText.location.size.x.set(0.9, 500)
+ this.raritiesText.location.location.y.set(0.025, 500)
+ this.raritiesText.location.size.y.set(0.35, 500)
+
+ this.raritiesIndicator.setColorOffset(-20, -20, -20, 100)
+
+ Renderer.translate(0, 0, 100)
+ Renderer.drawRect(Renderer.color(0, 0, 0, 100), this.raritiesIndicator.location.getXExact(), this.raritiesIndicator.location.getYExact(), this.raritiesIndicator.location.getWidthExact(), this.raritiesIndicator.location.getHeightExact())
+ let clicks = Player.getContainer().getName() === "Your Museum" ? "1" : "2"
+ Renderer.translate(0, 0, 100)
+ renderLibs.drawStringCenteredFull(clicks, this.raritiesIndicator.location.getXExact() + this.raritiesIndicator.location.getWidthExact() / 2, this.raritiesIndicator.location.getYExact() + this.raritiesIndicator.location.getHeightExact() / 2, Math.min(this.raritiesIndicator.location.getWidthExact() / Renderer.getStringWidth(clicks) / 4, this.raritiesIndicator.location.getHeightExact() / 4 / 2))
+ } else {
+ this.raritiesText.location.location.x.set(0.1, 500)
+ this.raritiesText.location.size.x.set(0.8, 500)
+ this.raritiesText.location.location.y.set(0.05, 500)
+ this.raritiesText.location.size.y.set(0.3, 500)
+
+ this.raritiesIndicator.setColorOffset(0, 0, 0, 100)
+ }
+ })).addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ this.clickedTopButton("Rarities")
+ }))
+
+ this.raritiesText = new SoopyTextElement().setText("§5Rarities").setMaxTextScale(10).setLocation(0.1, 0.05, 0.8, 0.3)
+ this.raritiesIndicator.addChild(this.raritiesText)
+ this.raritiesPercentageText = new SoopyTextElement().setLocation(0.1, 0.4, 0.8, 0.2).setText("§0Items Donated: §7Loading...").setMaxTextScale(10)
+ this.raritiesIndicator.addChild(this.raritiesPercentageText)
+ this.raritiesProgressBar = new ProgressBar().setLocation(0.1, 0.6, 0.8, 0.35).showPercentage(true)
+ this.raritiesIndicator.addChild(this.raritiesProgressBar)
+ this.mainPage.addChild(this.raritiesIndicator)
+
+ this.specialIndicator = new SoopyBoxElement().setLocation(leftOffset + widthPer * 3, 0.05, widthPer * 4 / 5, 0.15)
+ this.specialIndicator.addEvent(new SoopyRenderEvent().setHandler(() => {
+ if (this.specialIndicator.hovered && ChatLib.removeFormatting(Player.getContainer().getStackInSlot(4).getName()) !== "Special Items") {
+ this.specialText.location.location.x.set(0.05, 500)
+ this.specialText.location.size.x.set(0.9, 500)
+ this.specialText.location.location.y.set(0.025, 500)
+ this.specialText.location.size.y.set(0.35, 500)
+
+ this.specialIndicator.setColorOffset(-20, -20, -20, 100)
+
+ Renderer.translate(0, 0, 100)
+ Renderer.drawRect(Renderer.color(0, 0, 0, 100), this.specialIndicator.location.getXExact(), this.specialIndicator.location.getYExact(), this.specialIndicator.location.getWidthExact(), this.specialIndicator.location.getHeightExact())
+ let clicks = Player.getContainer().getName() === "Your Museum" ? "1" : "2"
+ Renderer.translate(0, 0, 100)
+ renderLibs.drawStringCenteredFull(clicks, this.specialIndicator.location.getXExact() + this.specialIndicator.location.getWidthExact() / 2, this.specialIndicator.location.getYExact() + this.specialIndicator.location.getHeightExact() / 2, Math.min(this.specialIndicator.location.getWidthExact() / Renderer.getStringWidth(clicks) / 4, this.specialIndicator.location.getHeightExact() / 4 / 2))
+
+ } else {
+ this.specialText.location.location.x.set(0.1, 500)
+ this.specialText.location.size.x.set(0.8, 500)
+ this.specialText.location.location.y.set(0.05, 500)
+ this.specialText.location.size.y.set(0.3, 500)
+
+ this.specialIndicator.setColorOffset(0, 0, 0, 100)
+ }
+ })).addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ this.clickedTopButton("Special Items")
+ }))
+
+ this.specialText = new SoopyTextElement().setText("§5Special Items").setMaxTextScale(10).setLocation(0.1, 0.05, 0.8, 0.3)
+ this.specialIndicator.addChild(this.specialText)
+ this.specialPercentageText = new SoopyTextElement().setLocation(0.1, 0.4, 0.8, 0.6).setText("§0Items Donated: §7Loading...").setMaxTextScale(10)
+ this.specialIndicator.addChild(this.specialPercentageText)
+ this.mainPage.addChild(this.specialIndicator)
+
+ let box = new SoopyBoxElement().setLocation(0.5 - widthPer * 0.75, 0.25, widthPer * 2 * 0.75, 0.075).setLore(["Click to search"])
+ this.pageTitle = new SoopyTextElement().setText("§5Your Museum").setMaxTextScale(10).setLocation(0, 0, 1, 1)
+ box.addChild(this.pageTitle)
+ this.mainPage.addChild(box)
+
+ this.searchText = ""
+ let search = new TextBox().setLocation(0.5 - widthPer * 0.75, 0.25, widthPer * 2 * 0.75, 0.075)
+ box.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ box.visable = false
+ search.visable = true
+ search.select()
+ }))
+ search.visable = false
+ search.text.mouseClickG = (mouseX, mouseY) => {
+ if (search.text.selected && !this.searchText) {
+ box.visable = true
+ search.visable = false
+ }
+ search.text.selected = false
+ }
+ search.text.addEvent(new SoopyContentChangeEvent().setHandler((newVal, oldVal, resetFunction) => {
+ this.searchText = newVal
+ this.showSearchItems()
+ }))
+ this.mainPage.addChild(search)
+ this.mainPage.addEvent(new SoopyOpenGuiEvent().setHandler(() => {
+ box.visable = true
+ search.visable = false
+ search.text.selected = false
+ search.setText("")
+ this.searchText = ""
+ }))
+
+ this.nextButton = new ButtonWithArrow().setLocation(0.5 + widthPer * 3 / 2 - widthPer / 2, 0.25, widthPer / 2, 0.075).setText("§0Next Page")
+ this.nextButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ if (this.nextButton.visable) this.nextPage()
+ }))
+ this.mainPage.addChild(this.nextButton)
+
+ this.previousButton = new ButtonWithArrow().setLocation(0.5 - widthPer * 3 / 2, 0.25, widthPer / 2, 0.075).setText("§0Previous Page").setDirectionRight(false)
+ this.previousButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ if (this.previousButton.visable) this.previousPage()
+ }))
+ this.mainPage.addChild(this.previousButton)
+
+ this.nextButton.visable = false
+ this.previousButton.visable = false
+
+ this.donateTitleBox = new SoopyBoxElement().setLocation(0.5 + widthPer * 3 / 2 + 0.025, 0.25, 0.5 - widthPer * 1.5 - 0.05, 0.075)
+ let donateTitle = new SoopyTextElement().setText("§5Donate").setMaxTextScale(10).setLocation(0, 0, 1, 1)
+
+ this.donateTitleBox.addChild(donateTitle)
+ this.mainPage.addChild(this.donateTitleBox)
+
+ this.donateBox = new SoopyBoxElement().setLocation(0.5 + widthPer * 3 / 2 + 0.025, 0.35, 0.5 - widthPer * 1.5 - 0.05, 0.6).setScrollable(true).enableFrameBuffer()
+ this.mainPage.addChild(this.donateBox)
+
+ this.favoriteTitleBox = new SoopyBoxElement().setLocation(0.025, 0.25, 0.5 - widthPer * 1.5 - 0.05, 0.075)
+ let favoriteTitle = new SoopyTextElement().setText("§5Favourite Items").setMaxTextScale(10).setLocation(0, 0, 1, 1)
+
+ this.favoriteTitleBox.addChild(favoriteTitle)
+ this.mainPage.addChild(this.favoriteTitleBox)
+
+ this.favoriteBox = new SoopyBoxElement().setLocation(0.025, 0.35, 0.5 - widthPer * 1.5 - 0.05, 0.6).setScrollable(true).enableFrameBuffer()
+ this.mainPage.addChild(this.favoriteBox)
+
+ this.itemsBox = new SoopyBoxElement().setLocation(0.5 - widthPer * 3 / 2, 0.35, widthPer * 3, 0.6).enableFrameBuffer()
+ this.mainPage.addChild(this.itemsBox)
+
+ new Array(this.donateBox, this.favoriteBox, this.itemsBox).forEach((box, i) => {
+ box.addEvent(new SoopyHoverChangeEvent().setHandler((hovered) => {
+ if (i === 2) {
+ if (this.searchText) {
+
+ } else {
+ box.enableFrameBuffer()
+ return
+ }
+ }
+ if (hovered) {
+ box.disableFrameBuffer()
+ } else {
+ box.enableFrameBuffer()
+ box.dirtyFrameBuffer(1000)
+ }
+ }))
+ })
+
+ this.donateItems = []
+
+ this.confirm_temp = ""
+
+ this.replacePage = {
+ "Your Museum": "Museum",
+ " Weapons": "Weapons",
+ " Armor Sets": "Armor Sets",
+ " Rarities": "Rarities",
+ " Special Items": "Special Items"
+ }
+
+ this.tickI = 0
+
+ this.lastGuiTitle = ""
+
+ this.favoriteItems = JSON.parse(FileLib.read("soopyAddonsData", "museumFavoriteData.json") || "[]") || []
+ this.favoriteIds = this.favoriteItems.map(a => a.sb_id)
+ this.updatedFavorites(false)
+ }
+
+ saveMuseumCache() {
+ //Called on worldUnload, and ever 30 seconds
+ if (this.itemsInPagesSaved) return
+ this.itemsInPagesSaved = true
+
+ new Thread(() => {
+ FileLib.write("soopyAddonsData", "museumItemsCache.json", JSON.stringify(this.itemsInPages))
+ }).start()
+ }
+
+ clickedTopButton(type) {
+ if (ChatLib.removeFormatting(Player.getContainer().getStackInSlot(4).getName()) === type) return
+
+ if (Player.getContainer().getName() === "Your Museum") {
+ //if on main page can just directly click on it
+ switch (type) {
+ case "Weapons":
+ Player.getContainer().click(19, false, "MIDDLE")
+ break
+ case "Armor Sets":
+ Player.getContainer().click(21, false, "MIDDLE")
+ break
+ case "Rarities":
+ Player.getContainer().click(23, false, "MIDDLE")
+ break
+ case "Special Items":
+ Player.getContainer().click(25, false, "MIDDLE")
+ break
+ }
+ } else {
+ Player.getContainer().click(48, false, "MIDDLE")
+ }
+ }
+
+ nextPage() {
+ let itempages = ["Weapons", "Armor Sets", "Rarities", "Special Items"]
+ if (itempages.includes(this.replacePage[Player.getContainer().getName().split("➜").pop()])) {
+ Player.getContainer().click(53, false, "MIDDLE")
+
+ let [currPage, pageNum] = Player.getContainer().getName().split(")")[0].split("(")[1].split("/").map(a => parseInt(a))
+ this.regenItems(currPage + 1)
+ }
+ }
+
+ previousPage() {
+ let itempages = ["Weapons", "Armor Sets", "Rarities", "Special Items"]
+ if (itempages.includes(this.replacePage[Player.getContainer().getName().split("➜").pop()])) {
+ Player.getContainer().click(45, false, "MIDDLE")
+
+ let [currPage, pageNum] = Player.getContainer().getName().split(")")[0].split("(")[1].split("/").map(a => parseInt(a))
+ this.regenItems(currPage - 1)
+ }
+ }
+
+ tickMenu(first = false) {
+ if (!first && (this.tickI++) % 5 !== 0) {
+ if (this.lastGuiTitle === Player.getContainer().getName()) {
+ return
+ }
+ }
+ this.lastGuiTitle = Player.getContainer().getName()
+
+ if (Player.getContainer().getName() === "Your Museum") {//main page
+ if (!Player.getContainer().getStackInSlot(19)) return
+
+ let lore = Player.getContainer().getStackInSlot(19).getLore()
+ lore.forEach((line, i) => {
+ if (i === 0) return
+
+ if (line.split(" ")?.[1]?.includes("/")) {
+ let data = ChatLib.removeFormatting(line).split(" ")[1].split("/")
+
+ this.weaponsProgressBar.setProgress(parseInt(data[0]) / parseInt(data[1]))
+ this.weaponsPercentageText.setText("§0Items Donated: §7" + data[0] + "/" + data[1])
+ }
+ })
+ this.weaponsIndicator.setLore(lore)
+
+ lore = Player.getContainer().getStackInSlot(21).getLore()
+ lore.forEach((line, i) => {
+ if (i === 0) return
+
+ if (line.split(" ")?.[1]?.includes("/")) {
+ let data = ChatLib.removeFormatting(line).split(" ")[1].split("/")
+
+ this.armourProgressBar.setProgress(parseInt(data[0]) / parseInt(data[1]))
+ this.armourPercentageText.setText("§0Items Donated: §7" + data[0] + "/" + data[1])
+ }
+ })
+ this.armourIndicator.setLore(lore)
+
+ lore = Player.getContainer().getStackInSlot(23).getLore()
+ lore.forEach((line, i) => {
+ if (i === 0) return
+
+ if (line.split(" ")?.[1]?.includes("/")) {
+ let data = ChatLib.removeFormatting(line).split(" ")[1].split("/")
+
+ this.raritiesProgressBar.setProgress(parseInt(data[0]) / parseInt(data[1]))
+ this.raritiesPercentageText.setText("§0Items Donated: §7" + data[0] + "/" + data[1])
+ }
+ })
+ this.raritiesIndicator.setLore(lore)
+
+ lore = Player.getContainer().getStackInSlot(25).getLore()
+ lore.forEach((line, i) => {
+ if (i === 0) return
+
+ if (ChatLib.removeFormatting(line).startsWith("Items Donated: ")) {
+ this.specialPercentageText.setText("§0Items Donated: §7" + ChatLib.removeFormatting(line).split(": ")[1])
+ }
+ })
+ this.specialIndicator.setLore(lore)
+
+ if ((this.pageTitle.text !== ("§5" + Player.getContainer().getName()) || first) && !this.searchText) {
+ this.itemsBox.clearChildren()
+ let rewardsButton = new ButtonWithArrow().setText("§5Rewards").setLocation(0.1, 0.05, 0.8, 0.2)
+ rewardsButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(40, false, "MIDDLE")
+ }))
+ this.itemsBox.addChild(rewardsButton)
+ let browserButton = new ButtonWithArrow().setText("§5Museum Browser").setLocation(0.1, 0.3, 0.8, 0.2)
+ browserButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(50, false, "MIDDLE")
+ }))
+ this.itemsBox.addChild(browserButton)
+
+ this.itemsBox.dirtyFrameBuffer()
+ }
+ }
+
+ this.nextButton.visable = false
+ this.previousButton.visable = false
+
+ this.donateTitleBox.visable = false
+ this.donateBox.visable = false
+
+ let itempages = ["Weapons", "Armor Sets", "Rarities", "Special Items"]
+ if (itempages.includes(this.replacePage[Player.getContainer().getName().split("➜").pop()])) {
+ let page = this.replacePage[Player.getContainer().getName().split("➜").pop()]
+ let currPage = 0
+ let pageNum = Player.getContainer().getStackInSlot(4) ? Math.ceil(ChatLib.removeFormatting(Player.getContainer().getStackInSlot(4).getLore().pop().split("/").pop()) / 28) : 0
+
+ // {
+ // let item = Player.getContainer().getStackInSlot(45)
+ // if (item) {
+ // let lore = item.getLore()
+ // let lastLine = ChatLib.removeFormatting(lore[lore.length - 1]).trim()
+ // let num = lastLine.match(/(\d+)$/g)
+ // currPage = parseInt(num) + 1
+ // }
+ // }
+ // {
+ // let item = Player.getContainer().getStackInSlot(53)
+ // if (item) {
+ // let lore = item.getLore()
+ // let lastLine = ChatLib.removeFormatting(lore[lore.length - 1]).trim()
+ // let num = lastLine.match(/(\d+)$/g)
+ // currPage = parseInt(num) - 1
+ // }
+ // }
+ console.log(currPage, pageNum)
+
+ if (!this.searchText) {
+ if (currPage > 1) {
+ this.previousButton.visable = true
+ if (Player.getContainer().getStackInSlot(45)) this.previousButton.setLore(Player.getContainer().getStackInSlot(45).getLore())
+ }
+ if (currPage < pageNum) {
+ this.nextButton.visable = true
+ if (Player.getContainer().getStackInSlot(53)) this.nextButton.setLore(Player.getContainer().getStackInSlot(53).getLore())
+ }
+ }
+
+ this.donateTitleBox.visable = true
+ this.donateBox.visable = true
+ let oldDonateItems = JSON.stringify(this.donateItems)
+ this.donateItems = []
+ let donateArmorSets = {}
+ let slot = 0
+ for (let item of Player.getContainer().getItems()) {
+ if (!item) continue
+ if (item.getID() === -1) continue
+ let lore = item.itemStack[m.getTooltip](Player.getPlayer(), false)
+ for (let line of lore) {
+ if (ChatLib.removeFormatting(line) === "Click to donate item!") {
+ let sb_id = utils.getSBID(item)
+
+ this.donateItems.push({
+ sb_id: sb_id || "NA",
+ name: item.getName() || "",
+ lore: item.getLore() || [],
+ slot: slot
+ })
+ }
+ if (ChatLib.removeFormatting(line) === "Click to donate armor set!") {
+ let sb_id = utils.getSBID(item)
+
+ let setId = sb_id.split("_")
+ setId.pop()
+ setId = setId.join("_")
+
+ donateArmorSets[setId] = (donateArmorSets[setId] || 0) + 1
+
+ if (donateArmorSets[setId] === 3) {
+ this.donateItems.push({
+ sb_id: sb_id || "NA",
+ name: item.getName() || "",
+ lore: item.getLore() || [],
+ slot: slot
+ })
+ }
+
+ }
+ }
+ slot++
+ }
+ if (oldDonateItems !== JSON.stringify(this.donateItems)) {
+ this.regenDonateItems()
+ }
+
+ if (!this.itemsInPages[page]) this.itemsInPages[page] = []
+
+ //10-16 43
+ let changed = false
+ for (let i = 0; i < 4; i++) {
+ for (let j = 10; j < 17; j++) {
+ let slot = i * 9 + j
+ let item = Player.getContainer().getStackInSlot(slot)
+ let sb_id = utils.getSBID(item)
+ if (!this.itemsInPages[page][currPage]) this.itemsInPages[page][currPage] = []
+
+ if (item && item.getID() !== -1) {
+
+ let itemData = {
+ sb_id: "NA",
+ name: item.getName() || "",
+ lore: item.getLore() || []
+ }
+
+ if (sb_id) {
+ itemData.sb_id = sb_id
+ }
+ if (!this.itemsInPages[page][currPage][slot] || this.itemsInPages[page][currPage][slot].sb_id !== itemData.sb_id) {
+ this.itemsInPages[page][currPage][slot] = itemData
+
+ changed = true
+ this.itemsInPagesSaved = false
+ }
+ } else {
+ if (this.itemsInPages[page][currPage][slot]) {
+ delete this.itemsInPages[page][currPage][slot]
+
+ changed = true
+ this.itemsInPagesSaved = false
+ }
+ }
+ }
+ }
+ if (changed || this.guiUpdated || first) this.regenItems(currPage)
+ }
+
+ if (Player.getContainer().getName() === "Confirm Donation") {
+ let this_confirm_temp_str = (Player.getContainer().getStackInSlot(4)?.getName() || "") + (Player.getContainer().getStackInSlot(2)?.getName() || "") + (Player.getContainer().getStackInSlot(20)?.getName() || "") + (Player.getContainer().getStackInSlot(24)?.getName() || "")//4, 24, 20
+ if (this.confirm_temp !== this_confirm_temp_str || first) {
+ this.confirm_temp = this_confirm_temp_str
+
+ this.itemsBox.clearChildren()
+
+ let isArmour = utils.getSBID(Player.getContainer().getStackInSlot(4)) === null
+ if (isArmour) {
+ let name = Player.getContainer().getStackInSlot(2).getName()
+ let itemBox = new BoxWithText().setText(name.startsWith("§f") ? "&7" + name.substr(2) : name).setLocation(0.1, 0.05, 0.8, 0.2).setLore(Player.getContainer().getStackInSlot(2).getLore())
+
+ this.itemsBox.addChild(itemBox)
+ } else {
+ let name = Player.getContainer().getStackInSlot(4).getName()
+ let itemBox = new BoxWithText().setText(name.startsWith("§f") ? "&7" + name.substr(2) : name).setLocation(0.1, 0.05, 0.8, 0.2).setLore(Player.getContainer().getStackInSlot(4).getLore())
+
+ this.itemsBox.addChild(itemBox)
+ }
+
+ if (Player.getContainer().getStackInSlot(24) && Player.getContainer().getStackInSlot(20)) {
+
+ let cancelButton = new ButtonWithArrow().setText("§cCancel").setLocation(0.1, 0.4, 0.35, 0.2).setDirectionRight(false).setLore(Player.getContainer().getStackInSlot(24).getLore())
+ cancelButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(24, false, "LEFT")
+ }))
+ this.itemsBox.addChild(cancelButton)
+
+ let confirmButton = new ButtonWithArrow().setText("§aConfirm Donation").setLocation(0.55, 0.4, 0.35, 0.2).setLore(Player.getContainer().getStackInSlot(20).getLore())
+ confirmButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(20, false, "LEFT")
+ }))
+ this.itemsBox.addChild(confirmButton)
+ }
+
+ this.itemsBox.dirtyFrameBuffer()
+ }
+
+ this.favoriteBox.visable = false
+ this.favoriteTitleBox.visable = false
+ } else {
+ if (this.confirm_temp && this.searchText) {
+ this.showSearchItems()
+ }
+ this.confirm_temp = ""
+
+ this.favoriteBox.visable = true
+ this.favoriteTitleBox.visable = true
+ }
+
+ this.pageTitle.setText("§5" + Player.getContainer().getName())
+ this.guiUpdated = false
+ }
+
+ regenDonateItems() {
+ this.donateBox.clearChildren()
+ this.donateItems.forEach((item, i) => {
+ let itemButton = new ButtonWithArrow().setText(item.name.startsWith("§f") ? "&7" + item.name.substr(2) : item.name).setLocation(0.05, 0.025 + 0.125 * i, 0.9, 0.1).setLore(item.lore)
+ itemButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(item.slot, false, "LEFT")
+ }))
+ this.donateBox.addChild(itemButton)
+ })
+
+ this.donateBox.dirtyFrameBuffer()
+ }
+
+ showSearchItems() {
+ if (Player.getContainer().getName() === "Confirm Donation") return
+
+ if (!this.searchText) {
+ this.tickMenu(true)
+ return
+ }
+
+
+ this.itemsBox.clearChildren()
+
+ let items = []
+
+ // this.itemsInPages[page][page2]
+ Object.keys(this.itemsInPages).forEach((pageKey) => {
+ let page = this.itemsInPages[pageKey]
+ page.forEach((page2, page2I) => {
+ if (!page2) return
+ if (items.length >= 4 * 7) return
+ page2.forEach((item, slotNum) => {
+ if (!item) return
+ if (items.length >= 4 * 7) return
+ if (item.name.toLowerCase().includes(this.searchText.toLowerCase())) {
+ let loreNew = []
+ Object.values(item.lore).forEach(a => {
+ loreNew.push(a)
+ })
+ item.lore = loreNew
+ item.page = pageKey //category eg: Weapons, armour sets ect
+ item.page2 = page2I //pagenum of category
+ item.slotNum = slotNum //slotnum
+
+ items.push(item)
+ }
+ })
+ })
+ })
+
+ let y = 0.0325
+ let itemNum = 0
+ let width = 3
+ let widthPer = 1 / (width + 1)
+ let offset = 0.0125
+
+ items.forEach((slot, slotNum) => {
+ if (!slot) return
+
+ let child
+
+ if (slot.sb_id === "NA") {
+ child = new BoxWithText().setText(slot.name.startsWith("§f") ? "&7" + slot.name.substr(2) : slot.name).setLore(slot.lore)
+ if (slot.name.startsWith("§c")) {
+ child.setColor(255, 100, 100)
+ child.setText("&0" + slot.name.substr(2))
+ }
+ if (slot.name.startsWith("§e")) {
+ child.setColor(255, 255, 100)
+ child.setText("&0" + slot.name.substr(2))
+ }
+ } else {
+ let fItem = slot
+ child = new ButtonWithArrow().setText(slot.name.startsWith("§f") ? "&7" + slot.name.substr(2) : slot.name).setLore(slot.lore)
+ child.addEvent(new SoopyMouseClickEvent().setHandler((mouseX, mouseY, button) => {
+ if (button === 2) { //middle click -> add item to favorites
+ this.addItemToFavorites(fItem, fItem.page, fItem.page2, fItem.slotNum)
+ return
+ }
+ // Player.getContainer().click(item.slotNum, false,button===1?"RIGHT":"LEFT")
+
+ let currPage, pageNum
+ if (Player.getContainer().getName().includes("/")) {
+ [currPage, pageNum] = Player.getContainer().getName().split(")")[0].split("(")[1].split("/").map(a => parseInt(a))
+ }
+
+ if (this.replacePage[Player.getContainer().getName().split("➜").pop()] === fItem.page) {
+ if (currPage === fItem.page2) {
+ Player.getContainer().click(fItem.slotNum, false, "LEFT")
+ } else {
+ if (currPage < fItem.page2) {
+ Player.getContainer().click(53, false, "MIDDLE")
+ } else {
+ Player.getContainer().click(45, false, "MIDDLE")
+ }
+ }
+ } else {
+ this.clickedTopButton(fItem.page)
+ }
+ })).addEvent(new SoopyRenderEvent().setHandler(() => {
+ if (child.hovered) {
+
+ child.setColorOffset(-20, -20, -20, 100)
+
+ Renderer.translate(0, 0, 100)
+ Renderer.drawRect(Renderer.color(0, 0, 0, 100), child.location.getXExact(), child.location.getYExact(), child.location.getWidthExact(), child.location.getHeightExact())
+
+ let clicks = "?"
+ let currPage, pageNum
+ if (Player.getContainer().getName().includes("/")) {
+ [currPage, pageNum] = Player.getContainer().getName().split(")")[0].split("(")[1].split("/").map(a => parseInt(a))
+ }
+ let pageClicks = Math.abs(currPage - fItem.page2)
+ if (this.replacePage[Player.getContainer().getName().split("➜").pop()] === fItem.page) {
+ clicks = (pageClicks + 1) + ""
+ } else {
+ if (Player.getContainer().getName() === "Your Museum") {
+ clicks = (1 + fItem.page2) + ""
+ } else {
+ clicks = (2 + fItem.page2) + ""
+ }
+ }
+
+ Renderer.translate(0, 0, 100)
+ renderLibs.drawStringCenteredFull(clicks, child.location.getXExact() + child.location.getWidthExact() / 2, child.location.getYExact() + child.location.getHeightExact() / 2, Math.min(child.location.getWidthExact() / Renderer.getStringWidth(clicks) / 4, child.location.getHeightExact() / 4 / 2))
+
+ }
+ }))
+ if (this.favoriteIds.includes(slot.sb_id)) {
+ child.setColor(200, 255, 200)
+ }
+ }
+ child.setLocation(offset + widthPer * itemNum, y, widthPer * 9 / 10, 0.125)
+ this.itemsBox.addChild(child)
+
+ itemNum++
+ if (itemNum > width) {
+ itemNum = 0
+ y += 0.135
+ }
+ })
+
+ this.itemsBox.dirtyFrameBuffer()
+ }
+
+ regenItems(page2) {
+ if (this.searchText) return
+
+ this.itemsBox.clearChildren()
+
+ let page = this.replacePage[Player.getContainer().getName().split("➜").pop()]
+
+ let y = 0.0325
+ let itemNum = 0
+ let width = 3
+ let widthPer = 1 / (width + 1)
+ let offset = 0.0125
+
+ if (!this.itemsInPages[page][page2]) this.itemsInPages[page][page2] = []
+
+ this.itemsInPages[page][page2].forEach((slot, slotNum) => {
+ if (!slot) return
+
+ let child
+
+ if (slot.sb_id === "NA") {
+ child = new BoxWithText().setText(slot.name.startsWith("§f") ? "&7" + slot.name.substr(2) : slot.name).setLore(slot.lore)
+ if (slot.name.startsWith("§c")) {
+ child.setColor(255, 100, 100)
+ child.setText("&0" + slot.name.substr(2))
+ }
+ if (slot.name.startsWith("§e")) {
+ child.setColor(255, 255, 100)
+ child.setText("&0" + slot.name.substr(2))
+ }
+ } else {
+ child = new ButtonWithArrow().setText(slot.name.startsWith("§f") ? "&7" + slot.name.substr(2) : slot.name).setLore(slot.lore)
+ child.addEvent(new SoopyMouseClickEvent().setHandler((mouseX, mouseY, button) => {
+ if (button === 2) { //middle click -> add item to favorites
+ this.addItemToFavorites(slot, page, page2, slotNum)
+ return
+ }
+ // Player.getContainer().click(slotNum, false,button===1?"RIGHT":"LEFT")
+ Player.getContainer().click(slotNum, false, "LEFT") //TODO: add right click support for viewing armour sets
+ }))
+ if (this.favoriteIds.includes(slot.sb_id)) {
+ child.setColor(200, 255, 200)
+ }
+ }
+ child.setLocation(offset + widthPer * itemNum, y, widthPer * 9 / 10, 0.125)
+ this.itemsBox.addChild(child)
+
+ itemNum++
+ if (itemNum > width) {
+ itemNum = 0
+ y += 0.135
+ }
+ })
+
+ this.itemsBox.dirtyFrameBuffer()
+ }
+
+ addItemToFavorites(slot, page, page2, slotNum) {
+ if (page === "Special Items") {
+ new Notification("§cError!", ["You cant add Special Items", ["to favorites"]])
+ return
+ }
+ if (this.favoriteItems.map(a => a.sb_id).includes(slot.sb_id)) {
+ //remove from favorites
+ this.favoriteItems = this.favoriteItems.filter(a => a.sb_id !== slot.sb_id)
+ this.favoriteIds = this.favoriteIds.filter(a => a !== slot.sb_id)
+ this.regenItems(page2)
+ this.updatedFavorites()
+ return
+ }
+ let loreNew = []
+ slot.lore.forEach(a => {
+ loreNew.push(a)
+ })
+ slot.lore = loreNew
+ slot.page = page //category eg: Weapons, armour sets ect
+ slot.page2 = page2 //pagenum of category
+ slot.slotNum = slotNum //slotnum
+ this.favoriteItems.push(slot)
+ this.favoriteIds.push(slot.sb_id)
+ this.regenItems(page2)
+ this.updatedFavorites()
+ }
+
+ updatedFavorites(saveToFile = true) {
+ this.favoriteBox.clearChildren()
+
+ if (this.favoriteItems.length === 0) {
+ let item = new SoopyMarkdownElement().setText("Middle click to add an item to your favorites list").setLocation(0.05, 0.025, 0.9, 0.9)
+
+ this.favoriteBox.addChild(item)
+ }
+
+ this.favoriteItems.forEach((fItem, i) => {
+ let item = new ButtonWithArrow().setText(fItem.name.startsWith("§f") ? "&7" + fItem.name.substr(2) : fItem.name).setLocation(0.05, 0.025 + 0.125 * i, 0.9, 0.1).setLore(fItem.lore)
+
+ item.addEvent(new SoopyMouseClickEvent().setHandler((mouseX, mouseY, button) => {
+ if (button === 2) { //middle click -> remove item from favorites (calling add will remove because it alr exists)
+ this.addItemToFavorites(fItem, fItem.page, fItem.page2, fItem.slotNum)
+ return
+ }
+ // Player.getContainer().click(item.slotNum, false,button===1?"RIGHT":"LEFT")
+
+ let currPage, pageNum
+ if (Player.getContainer().getName().includes("/")) {
+ [currPage, pageNum] = Player.getContainer().getName().split(")")[0].split("(")[1].split("/").map(a => parseInt(a))
+ }
+
+ if (this.replacePage[Player.getContainer().getName().split("➜").pop()] === fItem.page) {
+ if (currPage === fItem.page2) {
+ Player.getContainer().click(fItem.slotNum, false, "LEFT")
+ } else {
+ if (currPage < fItem.page2) {
+ Player.getContainer().click(53, false, "MIDDLE")
+ } else {
+ Player.getContainer().click(45, false, "MIDDLE")
+ }
+ }
+ } else {
+ this.clickedTopButton(fItem.page)
+ }
+ })).addEvent(new SoopyRenderEvent().setHandler(() => {
+ if (item.hovered) {
+
+ item.setColorOffset(-20, -20, -20, 100)
+
+ Renderer.translate(0, 0, 100)
+ Renderer.drawRect(Renderer.color(0, 0, 0, 100), item.location.getXExact(), item.location.getYExact(), item.location.getWidthExact(), item.location.getHeightExact())
+
+ let clicks = "?"
+ let currPage, pageNum
+ if (Player.getContainer().getName().includes("/")) {
+ [currPage, pageNum] = Player.getContainer().getName().split(")")[0].split("(")[1].split("/").map(a => parseInt(a))
+ }
+ let pageClicks = Math.abs(currPage - fItem.page2)
+ if (this.replacePage[Player.getContainer().getName().split("➜").pop()] === fItem.page) {
+ clicks = (pageClicks + 1) + ""
+ } else {
+ if (Player.getContainer().getName() === "Your Museum") {
+ clicks = (1 + fItem.page2) + ""
+ } else {
+ clicks = (2 + fItem.page2) + ""
+ }
+ }
+
+ Renderer.translate(0, 0, 100)
+ renderLibs.drawStringCenteredFull(clicks, item.location.getXExact() + item.location.getWidthExact() / 2, item.location.getYExact() + item.location.getHeightExact() / 2, Math.min(item.location.getWidthExact() / Renderer.getStringWidth(clicks) / 4, item.location.getHeightExact() / 4 / 2))
+
+ }
+ }))
+
+ this.favoriteBox.addChild(item)
+ })
+
+ if (saveToFile) {
+ new Thread(() => {
+ FileLib.write("soopyAddonsData", "museumFavoriteData.json", JSON.stringify(this.favoriteItems))
+ }).start()
+ }
+
+ this.favoriteBox.dirtyFrameBuffer()
+ }
+
+ guiOpened(event) {
+ let name = ""
+ if (event.gui && event.gui.field_147002_h instanceof ContainerChest) {
+ name = event.gui.field_147002_h.func_85151_d().func_145748_c_().func_150260_c()
+ }
+ if (this.dontOpen > 0) {
+ this.dontOpen--
+ }
+ if (this.soopyGui.ctGui.isOpen()) {
+ if (event.gui && event.gui.field_147002_h) {
+ Player.getPlayer().field_71070_bA = event.gui.field_147002_h
+
+ if (Player.getContainer().getName() === "Museum Rewards") {
+ return
+ }
+ if (Player.getContainer().getName().startsWith("Museum Browser")) {
+ return
+ }
+
+ event.gui = this.soopyGui.ctGui
+ this.guiUpdated = true
+ this.soopyGui.ctGui.open()
+
+ this.itemsBox.dirtyFrameBuffer()
+ }
+ return
+ }
+ if (this.isInMuseum) {
+ this.soopyGui.ctGui.open()
+
+ this.itemsBox.dirtyFrameBuffer()
+ } else {
+ if (name === "Your Museum" && !this.isInMuseum) {
+
+ if (event.gui && event.gui.field_147002_h) Player.getPlayer().field_71070_bA = event.gui.field_147002_h
+
+ this.isInMuseum = true
+
+ this.soopyGui.open()
+ event.gui = this.soopyGui.ctGui
+ this.guiOpenTickThing = true
+
+ this.itemsBox.clearChildren()
+ let rewardsButton = new ButtonWithArrow().setText("§5Rewards").setLocation(0.1, 0.05, 0.8, 0.2)
+ rewardsButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(40, false, "MIDDLE")
+ }))
+ this.itemsBox.addChild(rewardsButton)
+ let browserButton = new ButtonWithArrow().setText("§5Museum Browser").setLocation(0.1, 0.3, 0.8, 0.2)
+ browserButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ Player.getContainer().click(50, false, "MIDDLE")
+ }))
+ this.itemsBox.addChild(browserButton)
+
+ this.nextButton.visable = false
+ this.previousButton.visable = false
+
+ this.donateTitleBox.visable = false
+ this.donateBox.visable = false
+
+ this.pageTitle.setText("§5" + name)
+
+ this.tickMenu(true)
+
+ this.itemsBox.dirtyFrameBuffer()
+ }
+ }
+ }
+
+ keyPress(key, keyId) {
+ if (keyId === 1) { //escape key
+ this.isInMuseum = false
+ // this.dontOpen = 1
+ Client.currentGui.close()
+ }
+ }
+
+ tick() {
+ if (this.isInMuseum) {
+ if (this.soopyGui.ctGui.isOpen() || this.guiOpenTickThing) {
+ this.tickMenu()
+
+ this.guiOpenTickThing = false
+ } else {
+ // Client.currentGui.close()
+ this.isInMuseum = false
+
+ this.lastClosed = Date.now()
+ }
+ }
+
+ if (!(this.soopyGui.ctGui.isOpen() || this.guiOpenTickThing) && Date.now() - this.lastClosed > 1000) {
+ this.weaponsProgressBar.setProgress(0)
+ this.armourProgressBar.setProgress(0)
+ this.raritiesProgressBar.setProgress(0)
+ }
+
+ if (this.dontOpen > 0) {
+ Client.currentGui.close()
+ }
+ }
+}
+
+export default MuseumGui; \ No newline at end of file