From 37cf177fe0d84d2b01fefbbd2ee3a7533d03359f Mon Sep 17 00:00:00 2001 From: Leo dev Date: Thu, 13 Mar 2025 05:23:50 +0100 Subject: [PATCH] ui --- .../saturnclient/SaturnClient.java | 2 + .../saturnclient/menus/MainMenu.java | 6 +- .../saturnclient/menus/SettingsMenu.java | 55 +++++++++++------- .../org/saturnclient/ui/SaturnAnimation.java | 27 +++++---- .../org/saturnclient/ui/SaturnWidget.java | 17 +----- .../java/org/saturnclient/ui/Textures.java | 9 ++- .../saturnclient/ui/widgets/SaturnButton.java | 20 ++++--- .../ui/widgets/SaturnClickableImage.java | 39 +++++++++++++ .../ui/widgets/SaturnImageButton.java | 9 ++- .../ui/widgets/SaturnTexture.java | 5 +- .../sprites/{widget => }/saturn/button.png | Bin .../{widget => }/saturn/button.png.mcmeta | 0 .../{widget => }/saturn/button_border.png | Bin .../saturn/button_border.png.mcmeta | 0 .../textures/gui/sprites/saturn/rect.png | Bin 0 -> 1102 bytes .../gui/sprites/saturn/rect.png.mcmeta | 10 ++++ .../gui/sprites/saturn/settings_bg.png | Bin 0 -> 1033 bytes .../textures/gui/sprites/saturn/tabs.png | Bin 0 -> 523 bytes .../textures/gui/components/mod.png | Bin 0 -> 3212 bytes 19 files changed, 137 insertions(+), 62 deletions(-) create mode 100644 src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java rename src/main/resources/assets/minecraft/textures/gui/sprites/{widget => }/saturn/button.png (100%) rename src/main/resources/assets/minecraft/textures/gui/sprites/{widget => }/saturn/button.png.mcmeta (100%) rename src/main/resources/assets/minecraft/textures/gui/sprites/{widget => }/saturn/button_border.png (100%) rename src/main/resources/assets/minecraft/textures/gui/sprites/{widget => }/saturn/button_border.png.mcmeta (100%) create mode 100644 src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png create mode 100644 src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png.mcmeta create mode 100644 src/main/resources/assets/minecraft/textures/gui/sprites/saturn/settings_bg.png create mode 100644 src/main/resources/assets/minecraft/textures/gui/sprites/saturn/tabs.png create mode 100644 src/main/resources/assets/saturnclient/textures/gui/components/mod.png diff --git a/src/main/java/org/saturnclient/saturnclient/SaturnClient.java b/src/main/java/org/saturnclient/saturnclient/SaturnClient.java index 2ed2a85..824a865 100644 --- a/src/main/java/org/saturnclient/saturnclient/SaturnClient.java +++ b/src/main/java/org/saturnclient/saturnclient/SaturnClient.java @@ -1,6 +1,7 @@ package org.saturnclient.saturnclient; import net.fabricmc.api.ModInitializer; +import net.minecraft.util.math.ColorHelper; import org.saturnclient.saturnclient.cloaks.Cloaks; import org.saturnclient.saturnclient.event.KeyInputHandler; @@ -15,6 +16,7 @@ import org.slf4j.LoggerFactory; public class SaturnClient implements ModInitializer { public static final String MOD_ID = "saturnclient"; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + public static int COLOR = ColorHelper.getArgb(255, 251, 60, 79); @Override public void onInitialize() { diff --git a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java index d810bde..eb33830 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java @@ -23,7 +23,7 @@ public class MainMenu extends SaturnUi { client.setScreen(new SettingsMenu()); }).setX((width - buttonWidth) / 2).setY((height - buttonHeight) / 2).setWidth(buttonWidth) .setHeight(buttonHeight) - .setAnimation(SaturnAnimation.FADE_SLIDE.distance(15))); + .setAnimation(SaturnAnimation.FADE_SLIDE.offset(15).speed(0.1f))); draw( new SaturnImageButton(Textures.EMOTE, 14, 14, @@ -34,7 +34,7 @@ public class MainMenu extends SaturnUi { .setY((height - buttonHeight) / 2) .setWidth(buttonHeight) .setHeight(buttonHeight) - .setAnimation(SaturnAnimation.FADE_SLIDE.distance(15))); + .setAnimation(SaturnAnimation.FADE_SLIDE.offset(15).speed(0.1f))); draw( new SaturnImageButton(Textures.COSMETICS, 14, 14, @@ -45,6 +45,6 @@ public class MainMenu extends SaturnUi { .setY((height - buttonHeight) / 2) .setWidth(buttonHeight) .setHeight(buttonHeight) - .setAnimation(SaturnAnimation.FADE_SLIDE.distance(15))); + .setAnimation(SaturnAnimation.FADE_SLIDE.offset(15).speed(0.1f))); } } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java index 6114a60..c598db0 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java @@ -2,37 +2,52 @@ package org.saturnclient.saturnclient.menus; import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; -import org.saturnclient.ui.widgets.SaturnImageButton; -import org.saturnclient.ui.widgets.SaturnInputBox; +import org.saturnclient.ui.widgets.SaturnClickableImage; +import org.saturnclient.ui.widgets.SaturnTexture; +import org.saturnclient.ui.SaturnAnimation; import net.minecraft.text.Text; public class SettingsMenu extends SaturnUi { - public SaturnImageButton searchButton; - public SaturnInputBox searchInputBox; - public SettingsMenu() { super(Text.literal("Settings")); } @Override protected void init() { - searchInputBox = new SaturnInputBox("Search", 10, 10, 100, 20); - searchInputBox.visible = false; - draw(searchInputBox); + int rectWidth = 330; + int rectHeight = 228; + int modsX = (width - rectWidth) / 2; + int modsY = (height - rectHeight) / 2; - searchButton = (SaturnImageButton) new SaturnImageButton(Textures.SEARCH, 10, - 10, - () -> { - searchInputBox.visible = !searchInputBox.visible; - if (searchInputBox.visible) { - searchButton.sprite = Textures.CLOSE; - } else { - searchInputBox.clearText(); - searchButton.sprite = Textures.SEARCH; - } - }).setWidth(30).setHeight(30).setX(30).setY(30); + draw(new SaturnTexture(Textures.SETTINGS_BG) + .setX(modsX) + .setY(modsY) + .setWidth(rectWidth) + .setHeight(rectHeight) + .setAnimation(SaturnAnimation.FADE_SLIDE)); - draw(searchButton); + draw(new SaturnTexture(Textures.TABS) + .setX((width - 43) / 2) + .setY(modsY - 16) + .setWidth(43) + .setHeight(15) + .setAnimation(SaturnAnimation.FADE_SLIDE)); + + int modX = modsX + 15; + + for (int i = 0; i < 3; i++) { + draw(new SaturnClickableImage(Textures.MOD, () -> { + System.out.println("Pressed"); + }) + .setBackground(false) + .setX(modX) + .setY(modsY + 10) + .setWidth(86) + .setHeight(20) + .setAnimation(SaturnAnimation.FADE_SLIDE.offset(40))); + + modX += 86 + 15; + } } } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/ui/SaturnAnimation.java b/src/main/java/org/saturnclient/ui/SaturnAnimation.java index 15b3362..a36cebf 100644 --- a/src/main/java/org/saturnclient/ui/SaturnAnimation.java +++ b/src/main/java/org/saturnclient/ui/SaturnAnimation.java @@ -5,30 +5,37 @@ public enum SaturnAnimation { SLIDE, FADE_SLIDE; - public int distance = 0; - public int widgetY = 0; + public int offset = 10; + public float speed = 0.05f; public void apply(SaturnWidget widget) { switch (this) { case FADE: - widget.alpha = Math.min(widget.alpha + 0.05f, 1.0f); + widget.alpha = Math.min(widget.alpha + speed, 1.0f); break; case SLIDE: - if (widgetY < widget.y) { - widget.y -= 1; + if (offset > 0) { + widget.y--; + offset--; } break; case FADE_SLIDE: - widget.alpha = Math.min(widget.alpha + 0.05f, 1.0f); - if (widgetY < widget.y) { - widget.y -= 1; + widget.alpha = Math.min(widget.alpha + speed, 1.0f); + if (offset > 0) { + widget.y--; + offset--; } break; } } - public SaturnAnimation distance(int distance) { - this.distance = distance; + public SaturnAnimation offset(int offset) { + this.offset = offset; + return this; + } + + public SaturnAnimation speed(float speed) { + this.speed = speed; return this; } } diff --git a/src/main/java/org/saturnclient/ui/SaturnWidget.java b/src/main/java/org/saturnclient/ui/SaturnWidget.java index ea2811a..d92da92 100644 --- a/src/main/java/org/saturnclient/ui/SaturnWidget.java +++ b/src/main/java/org/saturnclient/ui/SaturnWidget.java @@ -10,7 +10,7 @@ public class SaturnWidget { public float alpha = 1.0f; public SaturnAnimation animation = null; public boolean visible = true; - + public void render(DrawContext context, boolean hovering) { } @@ -50,19 +50,8 @@ public class SaturnWidget { public SaturnWidget setAnimation(SaturnAnimation animation) { this.animation = animation; - switch (animation) { - case FADE: - this.alpha = 0.0f; - break; - case SLIDE: - this.animation.widgetY = y; - y += animation.distance; - break; - case FADE_SLIDE: - this.animation.widgetY = y; - y += animation.distance; - this.alpha = 0.0f; - break; + if (this.animation == SaturnAnimation.FADE || this.animation == SaturnAnimation.FADE_SLIDE) { + this.alpha = 0.0f; } return this; } diff --git a/src/main/java/org/saturnclient/ui/Textures.java b/src/main/java/org/saturnclient/ui/Textures.java index 9d04dbd..69fa8f1 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 SEARCH = Identifier.of("saturnclient", "textures/gui/components/search.png"); public static final Identifier CLOSE = Identifier.of("saturnclient", "textures/gui/components/close.png"); - // Button Textures - public static final Identifier BUTTON_BORDER = Identifier.ofVanilla("widget/saturn/button_border"); - public static final Identifier BUTTON = Identifier.ofVanilla("widget/saturn/button"); + // Widgets + public static final Identifier BUTTON_BORDER = Identifier.ofVanilla("saturn/button_border"); + public static final Identifier BUTTON = Identifier.ofVanilla("saturn/button"); + 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"); } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java b/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java index f58c88d..99558d6 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java @@ -1,6 +1,7 @@ package org.saturnclient.ui.widgets; import org.lwjgl.opengl.GL11; +import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.ui.SaturnWidget; import org.saturnclient.ui.Textures; @@ -16,6 +17,7 @@ public class SaturnButton extends SaturnWidget { public boolean active = true; public String text; public Runnable onPress; + public boolean background = true; public SaturnButton(String text, Runnable onPress) { this.text = text; @@ -26,22 +28,24 @@ public class SaturnButton extends SaturnWidget { public void render(DrawContext context, boolean hovering) { MinecraftClient minecraftClient = MinecraftClient.getInstance(); - RenderSystem.setShaderTexture(0, Textures.BUTTON); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR); + if (background) { + RenderSystem.setShaderTexture(0, Textures.BUTTON); + RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR); - context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON, this.x, - this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); + context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON, this.x, + this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); - if (hovering) { - context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON_BORDER, this.x, - this.y, this.width, this.height, ColorHelper.getArgb(255, 251, 60, 79)); + if (hovering) { + context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON_BORDER, this.x, + this.y, this.width, this.height, SaturnClient.COLOR); + } } 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), - i | MathHelper.ceil(this.alpha * 255.0F) << 24, false); + hovering ? SaturnClient.COLOR : 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 new file mode 100644 index 0000000..b77e96a --- /dev/null +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java @@ -0,0 +1,39 @@ +package org.saturnclient.ui.widgets; + +import org.saturnclient.saturnclient.SaturnClient; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.ColorHelper; + +public class SaturnClickableImage extends SaturnButton { + public Identifier sprite; + public boolean selected = false; + + public SaturnClickableImage(Identifier sprite, Runnable onPress) { + super("", onPress); + this.sprite = sprite; + } + + @Override + public void render(DrawContext context, boolean hovering) { + context.drawTexture(RenderLayer::getGuiTextured, sprite, x, y, 0, 0, width, height, width, + height, hovering || selected ? SaturnClient.COLOR : ColorHelper.getWhite(alpha)); + } + + @Override + public void click() { + this.onPress.run(); + } + + public SaturnClickableImage setSelected(boolean selected) { + this.selected = selected; + return this; + } + + public SaturnClickableImage setBackground(boolean background) { + this.background = background; + return this; + } +} diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java b/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java index 746de54..fb20dd4 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java @@ -1,5 +1,6 @@ package org.saturnclient.ui.widgets; +import org.saturnclient.saturnclient.SaturnClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; @@ -20,14 +21,18 @@ public class SaturnImageButton extends SaturnButton { @Override public void render(DrawContext context, boolean hovering) { super.render(context, hovering); - context.drawTexture(RenderLayer::getGuiTextured, sprite, x + (width - imageWidth) / 2, y + (height - imageHeight) / 2, 0, 0, imageWidth, imageHeight, imageWidth, - imageHeight, ColorHelper.getWhite(alpha)); + imageHeight, hovering ? SaturnClient.COLOR : ColorHelper.getWhite(alpha)); } @Override public void click() { this.onPress.run(); } + + public SaturnImageButton setBackground(boolean background) { + this.background = background; + return this; + } } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java b/src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java index 93649d9..8f7a3fc 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java @@ -1,6 +1,7 @@ package org.saturnclient.ui.widgets; import org.saturnclient.ui.SaturnWidget; + import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; @@ -15,7 +16,7 @@ public class SaturnTexture extends SaturnWidget { @Override public void render(DrawContext context, boolean hovering) { - 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/minecraft/textures/gui/sprites/widget/saturn/button.png b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button.png similarity index 100% rename from src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button.png rename to src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button.png diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button.png.mcmeta b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button.png.mcmeta similarity index 100% rename from src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button.png.mcmeta rename to src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button.png.mcmeta diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button_border.png b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button_border.png similarity index 100% rename from src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button_border.png rename to src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button_border.png diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button_border.png.mcmeta b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button_border.png.mcmeta similarity index 100% rename from src/main/resources/assets/minecraft/textures/gui/sprites/widget/saturn/button_border.png.mcmeta rename to src/main/resources/assets/minecraft/textures/gui/sprites/saturn/button_border.png.mcmeta diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png new file mode 100644 index 0000000000000000000000000000000000000000..7524902ba9cdef94015bf982940b2a5895582b3e GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0vp^Pe7Q14M=u`ck}`&&H|6fVg?3oVGw3ym^DWND9BhG zp^zUKQ_y>-TqA2Yr=oRx3-L;1wk4YCL9)_l9>eC564IwN`Bg!$LpufMf& zUMJztwjuv{c6*IQL(^l?Cl?vGUhJKi;>Wi%@1MPS&Qj{Y{cUFZmOuWK{AykE{XHKG&ea#o^>tfp sXZ{iV`g*}@b_?wzUritP@(1i^vzopr0ILjXTmS$7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png.mcmeta b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png.mcmeta new file mode 100644 index 0000000..4885e0d --- /dev/null +++ b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/rect.png.mcmeta @@ -0,0 +1,10 @@ +{ + "gui": { + "scaling": { + "type": "nine_slice", + "width": 228, + "height": 228, + "border": 13 + } + } +} diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/settings_bg.png b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/settings_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f9164703a54045c52ca98351c180c466b74426 GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjApK!1N$$uWX`ap`az$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(Gggd7h_>V@L(#+nXD6g991d9==}UF_rNI z!^=$!qRb4oi_#fZ+-P82@gh)5N}{Qa(}v+?#-*i?;&NO%p3GtVQ+w(En(uFZy@<*; z{#S1IJ?q`kJChj;Vz&LRo%Q?Y_lM8!@rTLW?~B!8?7R8)#?enzcjvs5Ul;u3_s-3X z2eKYs-Z^{cTdTmhGqrMllNk8dPJVj2bWx3YxhX?M#$28Ee$Sp3F%+Em{Pp_p;|vcL zOlCZ=xJ5{TL)AgRt3hE3gQEsxQvegoLKY4uPJvO0(I6S%#LyyoYBu8m#oMB%@|hc) zx6Q7!od0{*f0hUHZ|}Um{Bx1{_w08!86NEGFTU^p-Td}O?dMnT++?uGTiq`IY~PyM yXPfo)pWQnX`;NW9=i2GFU++DudXx0?c>V$}#YGca|4jzwTn0~9KbLh*2~7YFZ!L@f literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/tabs.png b/src/main/resources/assets/minecraft/textures/gui/sprites/saturn/tabs.png new file mode 100644 index 0000000000000000000000000000000000000000..4df55d98220c56821fb15de6e9ee77f22ec6305e GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^H9)M*!3HFEO?~qbNO2Z;L>4nJa0`PlBg3pY55jgR3=A9lx&I`x0_7HXx;TbZFut9mSac{r#5I4#ic?Gup$}IT z%qU~bSs;DjqHamnuBKI1A?5+$%&WM!dgLSv}piKqU9q@$e_ix{vas^3vS*yS_{K zb;`o1`;GGcv-*Cm=asup==$7WcsR3k@5*l9hi~4n`eYSEK9j0{@x?Lp$t>G;PtjdV zA1^KtE1D6qFgouL|Dnt}w#imCTb{=p)~x1Qd|;mJKaRzRS`HmI(Bjd&Guu?wjafod zCx(Yx{P3Zp8ww1GW-j<(FCkhc5_e$5hNT~Pd$_c@{YF;-dfz53uU~8v`fBl!zb(DLdtMpdQ`!B&xsSQh!P2DRQ|*=?Ru69n?Q>Y1 h@$c-rI}QJtubG;hm%6;*1u*UyJYD@<);T3K0RWxx;MD*C literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/saturnclient/textures/gui/components/mod.png b/src/main/resources/assets/saturnclient/textures/gui/components/mod.png new file mode 100644 index 0000000000000000000000000000000000000000..5301eee2dd917cb2978919873ce6e89adf86b985 GIT binary patch literal 3212 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