From 6e7acb27167dac53553c0140c3f14067c39ef8cd Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sun, 16 Mar 2025 16:25:15 +0100 Subject: [PATCH] cloak menu --- .../saturnclient/menus/CloaksMenu.java | 77 ++++++++++++++++++ .../saturnclient/menus/MainMenu.java | 8 +- .../saturnclient/menus/SettingsMenu.java | 10 +-- .../java/org/saturnclient/ui/Textures.java | 4 + .../saturnclient/ui/widgets/SaturnButton.java | 12 +-- .../ui/widgets/SaturnClickableImage.java | 6 +- .../ui/widgets/SaturnClickableSprite.java | 58 +++++++++++++ .../saturnclient/ui/widgets/SaturnImage.java | 4 +- .../saturnclient/ui/widgets/SaturnSprite.java | 4 +- .../gui/{cloaks/.prev.png => cloak/.png} | Bin .../astelic.prev.png => cloak/astelic.png} | Bin .../glitch.prev.png => cloak/glitch.png} | Bin 12 files changed, 164 insertions(+), 19 deletions(-) create mode 100644 src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java create mode 100644 src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java rename src/main/resources/assets/saturnclient/textures/gui/{cloaks/.prev.png => cloak/.png} (100%) rename src/main/resources/assets/saturnclient/textures/gui/{cloaks/astelic.prev.png => cloak/astelic.png} (100%) rename src/main/resources/assets/saturnclient/textures/gui/{cloaks/glitch.prev.png => cloak/glitch.png} (100%) diff --git a/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java new file mode 100644 index 0000000..8fc2549 --- /dev/null +++ b/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java @@ -0,0 +1,77 @@ +package org.saturnclient.saturnclient.menus; + +import org.saturnclient.saturnclient.auth.SaturnApi; +import org.saturnclient.saturnclient.cloaks.Cloaks; +import org.saturnclient.ui.SaturnUi; +import org.saturnclient.ui.Textures; +import org.saturnclient.ui.animations.FadeIn; +import org.saturnclient.ui.widgets.SaturnClickableSprite; +import org.saturnclient.ui.widgets.SaturnSprite; +import org.saturnclient.ui.widgets.SaturnImage; + +import net.minecraft.text.Text; + +public class CloaksMenu extends SaturnUi { + public CloaksMenu() { + super(Text.of("Cloaks 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(new FadeIn(1))); + + int tabsX = (width - 43) / 2; + int tabsY = rectY - 17; + + draw(new SaturnSprite(Textures.TABS) + .setX(tabsX) + .setY(tabsY) + .setWidth(43) + .setHeight(15) + .setAnimations(new FadeIn(1))); + + int cloakWidth = 32; + int cloakHeight = 70; + + int modX = rectX + 15; + int modY = rectY + 10; + int col = 0; + + for (String cloak : Cloaks.availableCloaks) { + draw(new SaturnImage(Textures.getCloakPreview(cloak)) + .setX(modX) + .setY(modY) + .setWidth(cloakWidth) + .setHeight(cloakHeight)); + + draw(new SaturnClickableSprite(Textures.BUTTON_BORDER, () -> { + SaturnApi.setCloak(cloak); + }) + .setColor(10526880) + .setX(modX - 3) + .setY(modY - 3) + .setWidth(cloakWidth + 6) + .setHeight(cloakHeight + 6)); + + col++; + + if (col < 6) { + modX += cloakWidth + 21; + } else { + modX = rectX + 15; + modY += cloakHeight + 20; + col = 0; + } + } + } +} diff --git a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java index b871b1e..d34e274 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java @@ -6,7 +6,7 @@ import org.saturnclient.ui.animations.FadeIn; import org.saturnclient.ui.animations.Slide; import org.saturnclient.ui.widgets.SaturnButton; import org.saturnclient.ui.widgets.SaturnImageButton; -import org.saturnclient.ui.widgets.SaturnSprite; +import org.saturnclient.ui.widgets.SaturnImage; import net.minecraft.text.Text; @@ -42,7 +42,7 @@ public class MainMenu extends SaturnUi { draw( new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> { - client.setScreen(new SettingsMenu()); + client.setScreen(new CloaksMenu()); }) .setX((width / 2) + (buttonWidth / 2) + 3) .setY((height - buttonHeight) / 2) @@ -53,7 +53,7 @@ public class MainMenu extends SaturnUi { int logoSize = 49; draw( - new SaturnSprite(Textures.LOGO_TEXT) + new SaturnImage(Textures.LOGO_TEXT) .setX((width - logoSize) / 2) .setY((height - 8) / 2 - 23) .setWidth(logoSize) @@ -61,7 +61,7 @@ public class MainMenu extends SaturnUi { .setAnimations(new FadeIn(3))); draw( - new SaturnSprite(Textures.LOGO) + new SaturnImage(Textures.LOGO) .setX((width - logoSize) / 2) .setY(height / 2 - logoSize - 24) .setWidth(logoSize) diff --git a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java index 4bf8643..0d49420 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java @@ -4,7 +4,7 @@ import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; import org.saturnclient.ui.animations.FadeIn; import org.saturnclient.ui.widgets.SaturnClickableImage; -import org.saturnclient.ui.widgets.SaturnImage; +import org.saturnclient.ui.widgets.SaturnSprite; import net.minecraft.text.Text; @@ -18,9 +18,9 @@ public class SettingsMenu extends SaturnUi { int rectWidth = 330; int rectHeight = 228; int modsX = (width - rectWidth) / 2; - int modsY = (height - rectHeight) / 2; + int modsY = (height - rectHeight + 15) / 2; - draw(new SaturnImage(Textures.SETTINGS_BG) + draw(new SaturnSprite(Textures.SETTINGS_BG) .setX(modsX) .setY(modsY) .setWidth(rectWidth) @@ -30,7 +30,7 @@ public class SettingsMenu extends SaturnUi { int tabsX = (width - 43) / 2; int tabsY = modsY - 17; - draw(new SaturnImage(Textures.TABS) + draw(new SaturnSprite(Textures.TABS) .setX(tabsX) .setY(tabsY) .setWidth(43) @@ -70,7 +70,7 @@ public class SettingsMenu extends SaturnUi { int modY = modsY + 10; int col = 0; - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 20; i++) { draw(new SaturnClickableImage(Textures.MOD, (m) -> { }) .setX(modX) diff --git a/src/main/java/org/saturnclient/ui/Textures.java b/src/main/java/org/saturnclient/ui/Textures.java index db7f218..8477cd7 100644 --- a/src/main/java/org/saturnclient/ui/Textures.java +++ b/src/main/java/org/saturnclient/ui/Textures.java @@ -20,4 +20,8 @@ public class Textures { public static final Identifier SETTINGS_BG = Identifier.ofVanilla("saturn/settings_bg"); public static final Identifier TABS = Identifier.ofVanilla("saturn/tabs"); public static final Identifier MOD = Identifier.of("saturnclient", "textures/gui/components/mod.png"); + + public static Identifier getCloakPreview(String cloak) { + return Identifier.of("saturnclient", "textures/gui/cloak/" + cloak + ".png"); + } } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java b/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java index 5b28a39..89a4dbf 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java @@ -48,11 +48,13 @@ public class SaturnButton extends SaturnWidget { } } - int i = this.active ? 16777215 : 10526880; - context.drawText(minecraftClient.textRenderer, this.text, - this.x + ((this.width - minecraftClient.textRenderer.getWidth(this.text)) / 2), - this.y + ((this.height - minecraftClient.textRenderer.fontHeight + 1) / 2), - hovering ? hoverColor : i | MathHelper.ceil(this.alpha * 255.0F) << 24, false); + if (alpha != 0.0f) { + int i = this.active ? 16777215 : 10526880; + context.drawText(minecraftClient.textRenderer, this.text, + this.x + ((this.width - minecraftClient.textRenderer.getWidth(this.text)) / 2), + this.y + ((this.height - minecraftClient.textRenderer.fontHeight + 1) / 2), + hovering ? hoverColor : i | MathHelper.ceil(this.alpha * 255.0F) << 24, false); + } } @Override diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java index 14a686e..6fbcfa2 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java @@ -9,11 +9,14 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; +import net.minecraft.util.math.MathHelper; public class SaturnClickableImage extends SaturnWidget { public Identifier sprite; public boolean selected = false; public Consumer onPress; + public int color = ColorHelper.getWhite(1.0f); + public int hoverColor = SaturnClient.COLOR; public SaturnClickableImage(Identifier sprite, Consumer onPress) { this.sprite = sprite; @@ -29,7 +32,7 @@ public class SaturnClickableImage extends SaturnWidget { @Override public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { context.drawTexture(RenderLayer::getGuiTextured, sprite, x, y, 0, 0, width, height, width, - height, hovering || selected ? SaturnClient.COLOR : ColorHelper.getWhite(alpha)); + height, (hovering || selected ? hoverColor : color) | MathHelper.ceil(this.alpha * 255.0F) << 24); } @Override @@ -41,4 +44,5 @@ public class SaturnClickableImage extends SaturnWidget { this.selected = selected; return this; } + } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java new file mode 100644 index 0000000..417f7f7 --- /dev/null +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java @@ -0,0 +1,58 @@ +package org.saturnclient.ui.widgets; + +import java.util.function.Consumer; + +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.ui.SaturnWidget; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.ColorHelper; +import net.minecraft.util.math.MathHelper; + +public class SaturnClickableSprite extends SaturnWidget { + public Identifier sprite; + public boolean selected = false; + public Consumer onPress; + public int color = ColorHelper.getWhite(1.0f); + public int hoverColor = SaturnClient.COLOR; + + public SaturnClickableSprite(Identifier sprite, Consumer onPress) { + this.sprite = sprite; + this.onPress = onPress; + } + + public SaturnClickableSprite(Identifier sprite, Runnable onPress) { + this(sprite, (m) -> { + onPress.run(); + }); + } + + @Override + public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { + context.drawGuiTexture(RenderLayer::getGuiTextured, sprite, this.x, + this.y, this.width, this.height, + (hovering || selected ? hoverColor : color) | MathHelper.ceil(this.alpha * 255.0F) << 24); + } + + @Override + public void click() { + this.onPress.accept(this); + } + + public SaturnClickableSprite setSelected(boolean selected) { + this.selected = selected; + return this; + } + + public SaturnClickableSprite setColor(int color) { + this.color = color; + return this; + } + + public SaturnClickableSprite setHoverColor(int color) { + this.hoverColor = color; + return this; + } +} diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnImage.java b/src/main/java/org/saturnclient/ui/widgets/SaturnImage.java index 1a2a660..995731b 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnImage.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnImage.java @@ -16,7 +16,7 @@ public class SaturnImage extends SaturnWidget { @Override public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { - context.drawGuiTexture(RenderLayer::getGuiTextured, sprite, this.x, - this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); + context.drawTexture(RenderLayer::getGuiTextured, sprite, x, y, 0, 0, width, height, width, + height, ColorHelper.getWhite(alpha)); } } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnSprite.java b/src/main/java/org/saturnclient/ui/widgets/SaturnSprite.java index bc3f7fa..162c829 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnSprite.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnSprite.java @@ -16,7 +16,7 @@ public class SaturnSprite extends SaturnWidget { @Override public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { - context.drawTexture(RenderLayer::getGuiTextured, sprite, x, y, 0, 0, width, height, width, - height, ColorHelper.getWhite(alpha)); + context.drawGuiTexture(RenderLayer::getGuiTextured, sprite, this.x, + this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); } } diff --git a/src/main/resources/assets/saturnclient/textures/gui/cloaks/.prev.png b/src/main/resources/assets/saturnclient/textures/gui/cloak/.png similarity index 100% rename from src/main/resources/assets/saturnclient/textures/gui/cloaks/.prev.png rename to src/main/resources/assets/saturnclient/textures/gui/cloak/.png diff --git a/src/main/resources/assets/saturnclient/textures/gui/cloaks/astelic.prev.png b/src/main/resources/assets/saturnclient/textures/gui/cloak/astelic.png similarity index 100% rename from src/main/resources/assets/saturnclient/textures/gui/cloaks/astelic.prev.png rename to src/main/resources/assets/saturnclient/textures/gui/cloak/astelic.png diff --git a/src/main/resources/assets/saturnclient/textures/gui/cloaks/glitch.prev.png b/src/main/resources/assets/saturnclient/textures/gui/cloak/glitch.png similarity index 100% rename from src/main/resources/assets/saturnclient/textures/gui/cloaks/glitch.prev.png rename to src/main/resources/assets/saturnclient/textures/gui/cloak/glitch.png