From ce64a916c1af452c09861391d49f5595d4e40b40 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Tue, 1 Apr 2025 15:55:00 +0200 Subject: [PATCH] Added a hat menu (not functional) --- .../saturnclient/menus/CloaksMenu.java | 101 +++++++++----- .../saturnclient/menus/HatsMenu.java | 128 ++++++++++++++++++ .../java/org/saturnclient/ui/Textures.java | 9 +- .../textures/gui/components/cloak.png | Bin 0 -> 3205 bytes .../textures/gui/components/hat.png | Bin 0 -> 2808 bytes test.svg | 1 + 6 files changed, 202 insertions(+), 37 deletions(-) create mode 100644 src/main/java/org/saturnclient/saturnclient/menus/HatsMenu.java create mode 100644 src/main/resources/assets/saturnclient/textures/gui/components/cloak.png create mode 100644 src/main/resources/assets/saturnclient/textures/gui/components/hat.png create mode 100644 test.svg diff --git a/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java index 7638821..ea5bae1 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java @@ -6,6 +6,7 @@ import org.saturnclient.saturnclient.auth.SaturnSocket; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; +import org.saturnclient.ui.widgets.SaturnClickableImage; import org.saturnclient.ui.widgets.SaturnClickableSprite; import org.saturnclient.ui.widgets.SaturnImage; import org.saturnclient.ui.widgets.SaturnScroll; @@ -25,25 +26,56 @@ public class CloaksMenu extends SaturnUi { int rectY = (height - rectHeight + 15) / 2; draw( - new SaturnSprite(Textures.SETTINGS_BG) - .setX(rectX) - .setY(rectY) - .setWidth(rectWidth) - .setHeight(rectHeight) - .setAnimations(SaturnClient.getAnimations()) - ); + new SaturnSprite(Textures.SETTINGS_BG) + .setX(rectX) + .setY(rectY) + .setWidth(rectWidth) + .setHeight(rectHeight) + .setAnimations(SaturnClient.getAnimations())); int tabsX = (width - 43) / 2; int tabsY = rectY - 17; draw( - new SaturnSprite(Textures.TABS) - .setX(tabsX) - .setY(tabsY) - .setWidth(43) - .setHeight(15) - .setAnimations(SaturnClient.getAnimations()) - ); + new SaturnSprite(Textures.TABS) + .setX(tabsX) + .setY(tabsY) + .setWidth(43) + .setHeight(15) + .setAnimations(SaturnClient.getAnimations())); + + int tabSize = 9; + tabsX = (width - tabSize) / 2; + draw( + new SaturnClickableImage(Textures.HAT, () -> { + client.setScreen(new HatsMenu()); + }) + .setX(tabsX) + .setY(tabsY + 4) + .setWidth(tabSize) + .setHeight(7) + .setAnimations(SaturnClient.getAnimations())); + + draw( + new SaturnClickableImage(Textures.CLOAK, () -> { + client.setScreen(new CloaksMenu()); + }) + .setColor(SaturnClient.COLOR.value) + .setX(tabsX - 12) + .setY(tabsY + 3) + .setWidth(tabSize) + .setHeight(tabSize) + .setAnimations(SaturnClient.getAnimations())); + + draw( + new SaturnClickableImage(Textures.SEARCH, () -> { + System.out.println("Pressed"); + }) + .setX(tabsX + 12) + .setY(tabsY + 3) + .setWidth(tabSize) + .setHeight(tabSize) + .setAnimations(SaturnClient.getAnimations())); int cloakWidth = 32; int cloakHeight = 70; @@ -56,23 +88,21 @@ public class CloaksMenu extends SaturnUi { for (String cloak : Cloaks.availableCloaks) { modsScroll.draw( - new SaturnClickableSprite(Textures.BUTTON_BORDER, () -> { - Cloaks.setCloak(SaturnSocket.uuid, cloak); - }) - .setColor(10526880) - .setX(modX) - .setY(modY) - .setWidth(cloakWidth + 6) - .setHeight(cloakHeight + 6) - ); + new SaturnClickableSprite(Textures.BUTTON_BORDER, () -> { + Cloaks.setCloak(SaturnSocket.uuid, cloak); + }) + .setColor(10526880) + .setX(modX) + .setY(modY) + .setWidth(cloakWidth + 6) + .setHeight(cloakHeight + 6)); modsScroll.draw( - new SaturnImage(Textures.getCloakPreview(cloak)) - .setX(modX + 3) - .setY(modY + 3) - .setWidth(cloakWidth) - .setHeight(cloakHeight) - ); + new SaturnImage(Textures.getCloakPreview(cloak)) + .setX(modX + 3) + .setY(modY + 3) + .setWidth(cloakWidth) + .setHeight(cloakHeight)); col++; @@ -86,13 +116,12 @@ public class CloaksMenu extends SaturnUi { } draw( - modsScroll - .setX(rectX + 17) - .setY(rectY + 10) - .setWidth(rectWidth - 17) - .setHeight(rectHeight - 10) - .setAnimations(SaturnClient.getAnimations()) - ); + modsScroll + .setX(rectX + 17) + .setY(rectY + 10) + .setWidth(rectWidth - 17) + .setHeight(rectHeight - 10) + .setAnimations(SaturnClient.getAnimations())); super.init(); } diff --git a/src/main/java/org/saturnclient/saturnclient/menus/HatsMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/HatsMenu.java new file mode 100644 index 0000000..d7b4a02 --- /dev/null +++ b/src/main/java/org/saturnclient/saturnclient/menus/HatsMenu.java @@ -0,0 +1,128 @@ +package org.saturnclient.saturnclient.menus; + +import net.minecraft.text.Text; +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.saturnclient.cosmetics.Hats; +import org.saturnclient.ui.SaturnUi; +import org.saturnclient.ui.Textures; +import org.saturnclient.ui.widgets.SaturnClickableImage; +import org.saturnclient.ui.widgets.SaturnClickableSprite; +import org.saturnclient.ui.widgets.SaturnImage; +import org.saturnclient.ui.widgets.SaturnScroll; +import org.saturnclient.ui.widgets.SaturnSprite; + +public class HatsMenu extends SaturnUi { + + public HatsMenu() { + super(Text.of("Hats Menu")); + } + + @Override + protected void init() { + int rectWidth = 330; + int rectHeight = 228; + int rectX = (width - rectWidth) / 2; + int rectY = (height - rectHeight + 15) / 2; + + draw( + new SaturnSprite(Textures.SETTINGS_BG) + .setX(rectX) + .setY(rectY) + .setWidth(rectWidth) + .setHeight(rectHeight) + .setAnimations(SaturnClient.getAnimations())); + + int tabsX = (width - 43) / 2; + int tabsY = rectY - 17; + + draw( + new SaturnSprite(Textures.TABS) + .setX(tabsX) + .setY(tabsY) + .setWidth(43) + .setHeight(15) + .setAnimations(SaturnClient.getAnimations())); + + int tabSize = 9; + tabsX = (width - tabSize) / 2; + draw( + new SaturnClickableImage(Textures.HAT, () -> { + client.setScreen(new HatsMenu()); + }) + .setColor(SaturnClient.COLOR.value) + .setX(tabsX) + .setY(tabsY + 4) + .setWidth(tabSize) + .setHeight(7) + .setAnimations(SaturnClient.getAnimations())); + + draw( + new SaturnClickableImage(Textures.CLOAK, () -> { + client.setScreen(new CloaksMenu()); + }) + .setX(tabsX - 12) + .setY(tabsY + 3) + .setWidth(tabSize) + .setHeight(tabSize) + .setAnimations(SaturnClient.getAnimations())); + + draw( + new SaturnClickableImage(Textures.SEARCH, () -> { + System.out.println("Pressed"); + }) + .setX(tabsX + 12) + .setY(tabsY + 3) + .setWidth(tabSize) + .setHeight(tabSize) + .setAnimations(SaturnClient.getAnimations())); + + int hatSize = 32; + + int modX = 0; + int modY = 0; + int col = 0; + + SaturnScroll modsScroll = new SaturnScroll(); + + for (String hat : Hats.availableHats) { + modsScroll.draw( + new SaturnClickableSprite(Textures.BUTTON_BORDER, () -> { + // Hats.setHat(SaturnSocket.uuid, hat); + }) + .setColor(10526880) + .setX(modX) + .setY(modY) + .setWidth(hatSize + 6) + .setHeight(hatSize + 6) + .setAnimations(SaturnClient.getAnimations())); + + modsScroll.draw( + new SaturnImage(Textures.getHatPreview(hat)) + .setX(modX + 3) + .setY(modY + 3) + .setWidth(hatSize) + .setHeight(hatSize) + .setAnimations(SaturnClient.getAnimations())); + + col++; + + if (col < 6) { + modX += hatSize + 21; + } else { + modX = 0; + modY += hatSize + 20; + col = 0; + } + } + + draw( + modsScroll + .setX(rectX + 17) + .setY(rectY + 10) + .setWidth(rectWidth - 17) + .setHeight(rectHeight - 10) + .setAnimations(SaturnClient.getAnimations())); + + super.init(); + } +} diff --git a/src/main/java/org/saturnclient/ui/Textures.java b/src/main/java/org/saturnclient/ui/Textures.java index 360679e..1b39151 100644 --- a/src/main/java/org/saturnclient/ui/Textures.java +++ b/src/main/java/org/saturnclient/ui/Textures.java @@ -9,7 +9,10 @@ public class Textures { public static final Identifier CLOSE = Identifier.of("saturnclient", "textures/gui/components/close.png"); public static final Identifier MODS_TAB = Identifier.of("saturnclient", "textures/gui/components/mods_tab.png"); public static final Identifier SETTINGS = Identifier.of("saturnclient", "textures/gui/components/settings.png"); - public static final Identifier TOGGLE_INDICATOR = Identifier.of("saturnclient", "textures/gui/components/toggle_indicator.png"); + public static final Identifier CLOAK = Identifier.of("saturnclient", "textures/gui/components/cloak.png"); + public static final Identifier HAT = Identifier.of("saturnclient", "textures/gui/components/hat.png"); + public static final Identifier TOGGLE_INDICATOR = Identifier.of("saturnclient", + "textures/gui/components/toggle_indicator.png"); public static final Identifier TOGGLE_BG = Identifier.of("saturnclient", "textures/gui/components/toggle_bg.png"); public static final Identifier LOGO = Identifier.of("saturnclient", "textures/logo/logo.png"); @@ -27,6 +30,10 @@ public class Textures { return Identifier.of("saturnclient", "textures/gui/cloak/" + cloak + ".png"); } + public static Identifier getHatPreview(String hat) { + return Identifier.of("saturnclient", "textures/gui/hat/" + hat + ".png"); + } + public static Identifier getModIcon(String modId) { return Identifier.of("saturnclient", "textures/gui/mod/" + modId + ".png"); } diff --git a/src/main/resources/assets/saturnclient/textures/gui/components/cloak.png b/src/main/resources/assets/saturnclient/textures/gui/components/cloak.png new file mode 100644 index 0000000000000000000000000000000000000000..ab853dd725913fca63bcbcded62150566496e892 GIT binary patch literal 3205 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 literal 0 HcmV?d00001 diff --git a/test.svg b/test.svg new file mode 100644 index 0000000..3455337 --- /dev/null +++ b/test.svg @@ -0,0 +1 @@ + \ No newline at end of file