From dc7032bbb937cbff276d18fba263ef1625834c6b Mon Sep 17 00:00:00 2001
From: Soopyboo32 <49228220+Soopyboo32@users.noreply.github.com>
Date: Wed, 1 Jun 2022 18:40:02 +0800
Subject: + add stat history graph gui + fix streams gui stream previews
sometimes being wayyy too tall
---
features/statHistoryGui/index.js | 164 ++++++++++++++++++++++++++++++++++
features/statHistoryGui/metadata.json | 8 ++
features/streamsGUI/index.js | 6 +-
3 files changed, 175 insertions(+), 3 deletions(-)
create mode 100644 features/statHistoryGui/index.js
create mode 100644 features/statHistoryGui/metadata.json
(limited to 'features')
diff --git a/features/statHistoryGui/index.js b/features/statHistoryGui/index.js
new file mode 100644
index 0000000..173137f
--- /dev/null
+++ b/features/statHistoryGui/index.js
@@ -0,0 +1,164 @@
+///
+///
+import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
+import Feature from "../../featureClass/class";
+import GuiPage from "../soopyGui/GuiPage";
+import BoxWithLoading from "../../../guimanager/GuiElement/BoxWithLoading";
+import BoxWithTextAndDescription from "../../../guimanager/GuiElement/BoxWithTextAndDescription";
+import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
+import TextBox from "../../../guimanager/GuiElement/TextBox";
+import SoopyKeyPressEvent from "../../../guimanager/EventListener/SoopyKeyPressEvent";
+import { firstLetterWordCapital } from "../../utils/stringUtils";
+import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
+import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow";
+import { fetch } from "../../utils/networkUtils";
+import SoopyImageElement from "../../../guimanager/GuiElement/SoopyImageElement";
+import renderLibs from "../../../guimanager/renderLibs";
+
+class StatHistoryGUI extends Feature {
+ constructor() {
+ super()
+ }
+
+ onEnable() {
+ this.initVariables()
+
+ this.GuiPage = new StatGraphPage()
+
+ }
+
+ initVariables() {
+ this.GuiPage = undefined
+ }
+
+ onDisable() {
+ this.initVariables()
+ }
+}
+
+
+class StatGraphPage extends GuiPage {
+ constructor() {
+ super(7)
+
+ this.name = "Stat Graphs"
+
+ this.pages = [this.newPage()]
+
+ this.pages[0].addChild(new SoopyTextElement().setText("§0Stat Graphs").setMaxTextScale(3).setLocation(0.1, 0.05, 0.6, 0.1))
+ let button = new ButtonWithArrow().setText("§0Open in browser").setLocation(0.7, 0.05, 0.2, 0.1)
+ this.pages[0].addChild(button)
+
+ button.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ java.awt.Desktop.getDesktop().browse(
+ new java.net.URI("https://soopymc.my.to/stathistory")
+ );
+ }))
+
+ this.nameInput = new TextBox().setPlaceholder("Click to search").setLocation(0.1, 0.225, 0.8, 0.1)
+ this.pages[0].addChild(this.nameInput)
+
+ this.nameInput.addEvent(new SoopyKeyPressEvent().setHandler((key, keyId) => {
+ if (this.nameInput.text.selected && keyId === 28) {
+ this.playerLoad = this.nameInput.text.text
+ this.nameInput.setText("")
+ this.updateData(this.playerLoad)
+ }
+ }))
+
+ this.statArea = new SoopyGuiElement().setLocation(0.05, 0.325, 0.9, 0.675).setScrollable(true)
+ this.pages[0].addChild(this.statArea)
+
+ this.loadingElm = new BoxWithLoading().setLocation(0.35, 0.4, 0.3, 0.2)
+ this.errorElm = new BoxWithTextAndDescription().setLocation(0.2, 0.3, 0.6, 0.4).setText("Error!").setDesc("An error occured while loading the data!")
+ this.statArea.addChild(this.loadingElm)
+
+ this.playerLoad = undefined
+
+ this.finaliseLoading()
+ }
+
+ updateData(player) {
+ this.playerLoad = player
+
+ this.statArea._scrollAmount = 0
+ this.statArea.location.scroll.y.set(0, 100)
+
+ this.statArea.clearChildren()
+ this.statArea.addChild(this.loadingElm)
+
+ fetch("http://soopymc.my.to/api/v2/player/" + player).json(playerData => {
+
+ if (player !== this.playerLoad) return
+
+ if (!playerData.success) {
+ this.statArea.clearChildren()
+ this.statArea.addChild(this.errorElm)
+ this.errorElm.setText("§0" + playerData.error.name)
+ this.errorElm.setDesc("§0" + playerData.error.description)
+ return
+ }
+
+ fetch("http://soopymc.my.to/api/v2/player_skyblock/" + playerData.data.uuid).json(skyblockData => {
+
+ if (player !== this.playerLoad) return
+
+ this.statArea.clearChildren()
+
+ if (!skyblockData.success) {
+ this.statArea.addChild(this.errorElm)
+ this.errorElm.setText("§0" + skyblockData.error.name)
+ this.errorElm.setDesc("§0" + skyblockData.error.description)
+ return
+ }
+
+ let nameElm = new SoopyTextElement().setText(playerData.data.stats.nameWithPrefix.replace(/§f/g, "§7")).setMaxTextScale(2).setLocation(0.1, 0.05, 0.8, 0.1)
+ this.statArea.addChild(nameElm)
+
+ fetch("http://soopymc.my.to/statgraphgenerations/" + playerData.data.uuid + "/" + skyblockData.data.stats.bestProfileId).json(graphData => {
+ if (player !== this.playerLoad) return
+
+ new Thread(() => {
+ let y = 0.2
+ Object.keys(graphData).forEach(type => {
+ let typeElm = new SoopyTextElement().setText("§0" + firstLetterWordCapital(type.replace("total", ""))).setMaxTextScale(2).setLocation(0.1, y, 0.8, 0.1)
+ this.statArea.addChild(typeElm)
+ y += 0.15
+ let x = 0.05
+ Object.keys(graphData[type]).forEach((graph, i) => {
+ renderLibs.getImage(graphData[type][graph], true) //load image synchronously into cache so it knows the height
+ console.log(graphData[type][graph])
+ let graphElm = new SoopyImageElement()
+ this.statArea.addChild(graphElm)
+ graphElm.setImage(graphData[type][graph])
+
+ if (i === 0) {
+ graphElm.setLocation(0.1, y, 0.8, 0.25)
+ graphElm.loadHeightFromImage()
+ y += graphElm.location.size.y.get() + 0.05
+ } else {
+ graphElm.setLocation(x, y, 0.4, 0.25)
+ graphElm.loadHeightFromImage()
+ x += 0.5
+ if (x > 0.7 || i === Object.keys(graphData[type]).length - 1) {
+ x = 0.05
+ y += graphElm.location.size.y.get() + 0.05
+ }
+ }
+ })
+ })
+ }).start()
+ })
+ })
+ })
+ }
+
+ onOpen() {
+ this.playerLoad = Player.getName()
+ this.updateData(Player.getName())
+ }
+}
+
+module.exports = {
+ class: new StatHistoryGUI()
+}
\ No newline at end of file
diff --git a/features/statHistoryGui/metadata.json b/features/statHistoryGui/metadata.json
new file mode 100644
index 0000000..9345e0e
--- /dev/null
+++ b/features/statHistoryGui/metadata.json
@@ -0,0 +1,8 @@
+{
+ "name": "Stat History GUI",
+ "description": "Gui for Stat History",
+ "isHidden": true,
+ "isTogglable": false,
+ "defaultEnabled": true,
+ "sortA": 0
+}
\ No newline at end of file
diff --git a/features/streamsGUI/index.js b/features/streamsGUI/index.js
index 492728a..d7d75cd 100644
--- a/features/streamsGUI/index.js
+++ b/features/streamsGUI/index.js
@@ -10,7 +10,6 @@ import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow";
import BoxWithText from "../../../guimanager/GuiElement/BoxWithText";
-import { drawBoxAtBlock } from "../../utils/renderUtils";
import { fetch } from "../../utils/networkUtils";
class StreamsGui extends Feature {
@@ -94,9 +93,9 @@ class StreamPage extends GuiPage {
let title = new SoopyMarkdownElement().setText(data.title).setLocation(0.1, 0.15, 0.8, 0.1)
sidebar.addChild(title)
- let image = new SoopyImageElement().setImage(data.image).setLocation(0.1, 0.15 + title.getHeight(), 0.8, 0.4)
+ let image = new SoopyImageElement().setLocation(0.1, 0.15 + title.getHeight(), 0.8, 0.4).setImage(data.image)
sidebar.addChild(image)
- image.loadHeightFromImage()
+
let button = new ButtonWithArrow().setText("§0Watch on Twitch").setLocation(0.1, 0.15 + image.location.size.y.get() + title.getHeight(), 0.8, 0.1)
sidebar.addChild(button)
@@ -118,6 +117,7 @@ class StreamPage extends GuiPage {
button.location.location.y.set(0.15 + image.location.size.y.get() + title.getHeight())
if (language) language.location.location.y.set(0.25 + image.location.size.y.get() + title.getHeight())
}, this)
+ image.loadHeightFromImage()
}
onOpen() {
--
cgit