From 0b587701b09543177bc75bd566ce17b0491529f3 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:26:40 +0300 Subject: [PATCH 01/11] added custombutton class --- .../lib/gui/RendererEditGuiScreen.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java index 5d6f839a..3d91dd5b 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java @@ -3,14 +3,20 @@ import fr.alexdoru.configlib.api.IRenderer; import fr.alexdoru.configlib.api.RendererPosition; import fr.alexdoru.configlib.lib.RendererManager; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; import java.io.IOException; public class RendererEditGuiScreen extends GuiScreen { + private static final int BUTTON_SIZE = 10; + private final RendererManager rendererManager; private final IRenderer renderer; private final RendererPosition rendererPosition; @@ -96,4 +102,34 @@ private void renderCrosshair() { drawTexturedModalRect(this.width / 2 - 7, this.height / 2 - 7, 0, 0, 16, 16); } + private static class CustomButton { + private final ResourceLocation icon; + private final String hoveringText; + private final GuiButton button; + + public CustomButton(ResourceLocation icon, String hoveringText) { + this.icon = icon; + this.hoveringText = hoveringText; + this.button = new GuiButton(-1, 0, 0, BUTTON_SIZE, BUTTON_SIZE, ""); + } + + public void onResize(int x, int y) { + this.button.xPosition = x; + this.button.yPosition = y; + } + + public String draw(Minecraft mc, int mouseX, int mouseY) { + button.drawButton(mc, mouseX, mouseY); + GlStateManager.color(1f, 1f, 1f, 1f); + mc.getTextureManager().bindTexture(icon); + final int iconSize = 6; + final int iconOffset = (BUTTON_SIZE - iconSize) / 2; + GuiUtil.drawFullTextureWithCustomSize(button.xPosition + iconOffset, button.yPosition + iconOffset, iconSize, iconSize); + return button.isMouseOver() ? hoveringText : null; + } + + public boolean isMouseOver(int mouseX, int mouseY) { + return button.isMouseOver(); + } + } } From 01443984dead8f722df2e0d30b9c896bc71432a3 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:27:30 +0300 Subject: [PATCH 02/11] re-order of logic, updating cords should come before drawing --- .../fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java index 3d91dd5b..1b7b08a9 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java @@ -45,13 +45,13 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.rendererManager.renderEditScreenBackground(this.renderer); this.rendererPosition.setEnabled(prevEnabled); super.drawDefaultBackground(); - this.renderer.renderDummy(); if (this.dragging) { this.rendererPosition.setAbsolutePositionForRender( this.rendererPosition.getAbsoluteRenderX() + mouseX - this.prevX, this.rendererPosition.getAbsoluteRenderY() + mouseY - this.prevY ); } + this.renderer.renderDummy(); this.prevX = mouseX; this.prevY = mouseY; } From ea930209c64c90d1b3fd0477c2367fcaa8fe79f7 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 23:07:00 +0300 Subject: [PATCH 03/11] removed 'reset' button and icons. edited 'move hud' button --- .../lib/gui/elements/RendererGuiButton.java | 47 ++----------------- 1 file changed, 3 insertions(+), 44 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java index 88f170d5..0fb7f565 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java @@ -7,27 +7,19 @@ import fr.alexdoru.configlib.lib.RendererManager; import fr.alexdoru.configlib.lib.gui.ConfigGuiScreen; import fr.alexdoru.configlib.lib.gui.RendererEditGuiScreen; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.opengl.GL11; import java.lang.reflect.Field; import java.lang.reflect.Method; public class RendererGuiButton extends ConfigGuiButton { - private static final ResourceLocation MOVE_ICON = new ResourceLocation("configlib", "move_icon_64x64.png"); - private static final ResourceLocation RESET_ICON = new ResourceLocation("configlib", "reset_icon_64x64.png"); - private final ConfigGuiScreen parentScreen; private final RendererManager rendererManager; private final RendererPosition rendererPosition; private boolean toggled; private final ClickGuiButton buttonEnabled; private final ClickGuiButton buttonMoveHud; - private final ClickGuiButton buttonResetPos; public RendererGuiButton( ConfigGuiScreen configGuiScreen, @@ -40,9 +32,9 @@ public RendererGuiButton( this.rendererManager = rendererManager; this.rendererPosition = ((RendererPosition) field.get(null)); this.toggled = this.rendererPosition.isEnabled(); - this.buttonEnabled = new ClickGuiButton(0, 0, 0, mc.fontRendererObj.getStringWidth(" Disabled "), 20, getButtonText()); - this.buttonMoveHud = new ClickGuiButton(0, 0, 0, 20, 20, ""); - this.buttonResetPos = new ClickGuiButton(0, 0, 0, 20, 20, ""); + final int btnWidth = mc.fontRendererObj.getStringWidth(" Disabled "); + this.buttonEnabled = new ClickGuiButton(0, 0, 0, btnWidth, 20, getButtonText()); + this.buttonMoveHud = new ClickGuiButton(0, 0, 0, btnWidth, 20, "Position"); } @Override @@ -60,21 +52,6 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in buttonMoveHud.xPosition = buttonEnabled.xPosition; buttonMoveHud.yPosition = buttonEnabled.yPosition + buttonEnabled.height + 1; buttonMoveHud.drawButton(colorPalette, mc, mouseX, mouseY); - buttonResetPos.xPosition = buttonEnabled.xPosition + buttonEnabled.width - buttonResetPos.width - 1; - buttonResetPos.yPosition = buttonMoveHud.yPosition; - buttonResetPos.drawButton(colorPalette, mc, mouseX, mouseY); - drawIcon(MOVE_ICON, buttonMoveHud.xPosition, buttonMoveHud.yPosition); - drawIcon(RESET_ICON, buttonResetPos.xPosition, buttonResetPos.yPosition); - if (buttonMoveHud.isMouseOver()) { - final int textX = buttonEnabled.xPosition - 4 - mc.fontRendererObj.getStringWidth("Move HUD"); - final int textY = buttonMoveHud.yPosition + mc.fontRendererObj.FONT_HEIGHT / 2 + 1; - mc.fontRendererObj.drawStringWithShadow("Move HUD", textX, textY, colorPalette.HUD_BUTTON_HINT_TEXT); - } - if (buttonResetPos.isMouseOver()) { - final int textX = buttonEnabled.xPosition - 4 - mc.fontRendererObj.getStringWidth("Reset Position"); - final int textY = buttonResetPos.yPosition + mc.fontRendererObj.FONT_HEIGHT / 2 + 1; - mc.fontRendererObj.drawStringWithShadow("Reset Position", textX, textY, colorPalette.HUD_BUTTON_HINT_TEXT); - } } @Override @@ -94,10 +71,6 @@ public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) { throw new RuntimeException("No registered renderer associated to " + field.getName()); } return true; - } else if (buttonResetPos.mousePressed(mc, mouseX, mouseY)) { - rendererPosition.resetToDefault(); - buttonEnabled.playPressSound(mc.getSoundHandler()); - return true; } } return false; @@ -108,20 +81,6 @@ public int getHeight() { return Math.max(super.getHeight(), 8 + buttonEnabled.height + 1 + buttonMoveHud.height + 8 - 1); } - private void drawIcon(ResourceLocation icon, int drawX, int drawY) { - drawX += 3; - drawY += 3; - GlStateManager.pushMatrix(); - GlStateManager.enableAlpha(); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - parentScreen.mc.getTextureManager().bindTexture(icon); - GlStateManager.color(1, 1, 1); - Gui.drawModalRectWithCustomSizedTexture(drawX, drawY, 0f, 0f, 14, 14, 14f, 14f); - GlStateManager.popMatrix(); - } - private void flipBooleanConfig() { rendererPosition.setEnabled(!rendererPosition.isEnabled()); toggled = rendererPosition.isEnabled(); From 5fc9907d85099e08d0217cd4ed6ace331fec8864 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 23:08:06 +0300 Subject: [PATCH 04/11] added a helper method to render a full texture --- .../java/fr/alexdoru/configlib/lib/gui/GuiUtil.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java index 9b945a23..da067ddc 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java @@ -1,11 +1,15 @@ package fr.alexdoru.configlib.lib.gui; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; public final class GuiUtil { private GuiUtil() {} + public static final int MOUSE_LEFT = 0; + public static void drawBoxWithOutline(int left, int top, int right, int bot, int boxColor, int borderColor) { drawHorizontalLine(left, right - 1, top, borderColor); drawHorizontalLine(left, right - 1, bot - 1, borderColor); @@ -43,4 +47,7 @@ public static int brightenColor(int color, float amount) { return (a << 24) | (r << 16) | (g << 8) | b; } + public static void drawFullTextureWithCustomSize(int left, int top, int drawWidth, int drawHeight) { + Gui.drawModalRectWithCustomSizedTexture(left, top, 0, 0, drawWidth, drawHeight, drawWidth, drawHeight); + } } From 00a9d1dc3b5ee2dfc7888ba72d76926b4a835470 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 23:09:42 +0300 Subject: [PATCH 05/11] added 'reset' button and 'undo' button --- .../lib/gui/RendererEditGuiScreen.java | 66 +++++++++++++++++-- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java index 1b7b08a9..338d517a 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java @@ -10,8 +10,10 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; import java.io.IOException; +import java.util.Collections; public class RendererEditGuiScreen extends GuiScreen { @@ -21,6 +23,8 @@ public class RendererEditGuiScreen extends GuiScreen { private final IRenderer renderer; private final RendererPosition rendererPosition; private final GuiScreen parent; + private final CustomButton[] customButtons; + private final double originalRelativeX, originalRelativeY; private boolean dragging; private int prevX, prevY; @@ -29,12 +33,25 @@ public RendererEditGuiScreen(RendererManager rendererManager, IRenderer renderer this.renderer = renderer; this.rendererPosition = renderer.getPosition(); this.parent = parent; + this.originalRelativeX = rendererPosition.getRelativeX(); + this.originalRelativeY = rendererPosition.getRelativeY(); + this.customButtons = new CustomButton[]{ + new CustomButton(new ResourceLocation("configlib", "reload.png"), "Reset to Default Position"), + new CustomButton(new ResourceLocation("configlib", "undo.png"), "Undo Changes") + }; } @Override public void initGui() { - this.rendererPosition.updateAbsolutePosition(); - this.adjustBounds(); + final int buttonX = this.width - BUTTON_SIZE - 2; + int buttonY = 2; + for (final CustomButton button : customButtons) { + button.onResize(buttonX, buttonY); + buttonY += BUTTON_SIZE + 2; + } + final ScaledResolution res = new ScaledResolution(mc); + this.rendererPosition.updateAbsolutePosition(res); + this.adjustBounds(res); } @Override @@ -52,20 +69,56 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) { ); } this.renderer.renderDummy(); + if (!this.dragging) { + String hoveringText = null; + GlStateManager.enableAlpha(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); + for (final CustomButton button : customButtons) { + final String textIfHovered = button.draw(mc, mouseX, mouseY); + if (hoveringText == null || hoveringText.isEmpty()) hoveringText = textIfHovered; + } + GlStateManager.disableBlend(); + GlStateManager.color(1f, 1f, 1f, 1f); + if (hoveringText != null && !hoveringText.isEmpty()) { + drawHoveringText(Collections.singletonList(hoveringText), mouseX, mouseY + fontRendererObj.FONT_HEIGHT + 6); + } + } this.prevX = mouseX; this.prevY = mouseY; } @Override protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + if (mouseButton == GuiUtil.MOUSE_LEFT) { + if (!this.dragging) { + int clickedButtonIdx = -1; + for (int i = 0; i < customButtons.length; ++i) { + if (customButtons[i].isMouseOver()) { + clickedButtonIdx = i; + break; + } + } + if (clickedButtonIdx != -1) { + if (clickedButtonIdx == 0) rendererPosition.resetToDefault(); + else rendererPosition.setRelativePosition(originalRelativeX, originalRelativeY); + final ScaledResolution res = new ScaledResolution(mc); + this.rendererPosition.updateAbsolutePosition(res); + this.adjustBounds(res); + return; + } + } + this.dragging = true; + } super.mouseClicked(mouseX, mouseY, mouseButton); - this.dragging = true; } @Override protected void mouseReleased(int mouseX, int mouseY, int state) { super.mouseReleased(mouseX, mouseY, state); - this.dragging = false; + if (state == GuiUtil.MOUSE_LEFT) { + this.dragging = false; + } } @Override @@ -88,8 +141,7 @@ public boolean doesGuiPauseGame() { /** * Makes sure the HUD can't get out of the screen */ - private void adjustBounds() { - final ScaledResolution res = new ScaledResolution(mc); + private void adjustBounds(ScaledResolution res) { final int screenWidth = res.getScaledWidth(); final int screenHeight = res.getScaledHeight(); final int absoluteX = Math.max(0, Math.min(rendererPosition.getAbsoluteRenderX(), screenWidth)); @@ -128,7 +180,7 @@ public String draw(Minecraft mc, int mouseX, int mouseY) { return button.isMouseOver() ? hoveringText : null; } - public boolean isMouseOver(int mouseX, int mouseY) { + public boolean isMouseOver() { return button.isMouseOver(); } } From 5d85d9ad373524183add1c0063d990a508d70a51 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 23:12:08 +0300 Subject: [PATCH 06/11] added 'reload' and 'undo' icons. removed 'reset' and 'move' icons --- .../assets/configlib/move_icon_64x64.png | Bin 2153 -> 0 bytes .../resources/assets/configlib/reload.png | Bin 0 -> 162 bytes .../assets/configlib/reset_icon_64x64.png | Bin 1477 -> 0 bytes .../resources/assets/configlib/undo.png | Bin 0 -> 144 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/configlib/resources/assets/configlib/move_icon_64x64.png create mode 100644 src/configlib/resources/assets/configlib/reload.png delete mode 100644 src/configlib/resources/assets/configlib/reset_icon_64x64.png create mode 100644 src/configlib/resources/assets/configlib/undo.png diff --git a/src/configlib/resources/assets/configlib/move_icon_64x64.png b/src/configlib/resources/assets/configlib/move_icon_64x64.png deleted file mode 100644 index 05eeeb4652b05aae91aa26ce66fa275af3dbb707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2153 zcmV-v2$uJWP)EX>4Tx04R}tkvmAkP!xv$rb>%c9NIy|AwzYtAii*vDi*;)X)CnqU~DJcp4-27+VlGXaDZ~A(E54p00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=m--CHZC8=P5l4>24+b_K~!ko?VDMM97Pz%tE%VN z&FtZ*i`gg$E9OB^)EL2dJb8fVM)3AQP<&7y^vyRP6}%8p5zoX656B@Z9;o1h5QvI` z*|3N)S+nPKwx_$Nd#bAI`#v9B!))8rJ2UBZXNUcs270Tye)WCz^}oKVWo*MXtY?k? z-!HUnJ2x~mbc+z;G9vmj48wPahlj(So#AS=S_FVyLk`=a{Y?O{ zuN~k9@co|Wm3rR8F+%{@KbkVd~er#+_vp}M!=2W@6XTATU`sSl)8?H zOcMZuh|pvW*AY=QX%{J_uFi6tBGb-W^M2c(o2G(5XG0oo{~u54H$7X!cnA_@@kh}Qb{b&?E8q6-3pIOp_#zOZfR zZq78H8o{TPfzDpQ%esTW1dCCKLB7tYkmLGqet5sY?Cz&@io1Y zO;1mYD2g6N#0f+^YK(c(^Su5{forwe5CD7?8?aJJ-H-wFvh3YrKjTCc#gyB}p66}K zB)n_2+Hik=|Hndz>tji$U|H5pYZ2Z;h@G({%!LrQl}e>ut$19t0Q{j4qM1kSwUYTs zlP83@y;Lf_(|%R2ASp+i4}VS6?InVFfN zwrtt*RiRM0r%A%Qp})WX!&uvLlG5RF*$jC?t0534cut$Lb z0G{8xd2_TZdsnN~XUgUBS(arzlBU#%NDwZCfjqdh!79YBO*|thOr~R}v>msZPbo^+Z%l0e*T#;0Ex5G3JdF z@C7O5j*Mie>0}a>Qr9A)lLGu~%fK=4*Hge}>-G9r2GDKGP$}g_h|1zeZ8?nBzEwRg0_1$w_he@ZpY1wkanZS9UlSJ~=tbSvOmjm6KDkjT4Tn z%yr#z5CmhDN~NWB7B2zYwp|Q@V60lL4tM=l=E#vFJc^=65V1l;5&(WtN?p=Ucq^r@ zK*ZmONFw5#*1Ee38})kqQX;Cyl-rC_YI`f%TPbzb(u6gdABN%9t_|;8F1MXAw(Lxq zb3U5S=RcKF-b_S0k_v-}xI;=gp3mp^a?a0;3z2+2e@WMRdTH0w_C*^+G%4-0l=AYf z^|a@C-yz~hO(d(uIZu2a=iFim7j%{idT%+7^J7=9Yu9!AjWHi&ba`%9wOTE%i-MHn zIDN*L_fGMe}a2oV5)Pdv{XWW8+j^YfP0dZ#hw39a=Vi;If| fwqYB#VOiPVg#1o`dsu*v00000NkvXXu0mjf{qPhU diff --git a/src/configlib/resources/assets/configlib/reload.png b/src/configlib/resources/assets/configlib/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..ee452639a0d9128f428768e93c2b6813e5a9bc02 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4g?qX_f>C>S|f?5t2wl%JNFlghxL zF|l@{t;b;pnWOQ+OGCBz-YO`~SZEbFLFCpK**qUQjuiWtXC09~Vm#Y) z?q|Egj;SiGKju^%TEH!2Uld#Rqqq2CT4Q=!k5AS-3l|-+-4XAS!i+*5Wj@-lC~Jy- zifougeqoq)>9u|8^@$4W*Dl%VSIknVqu8k8a$?2e9k+8)Mzu?wzlSo1#lbkvrOirGDHczXcn;yH0Qv_)lD+Z}@k&V3}z}VI9NSzn-a*4O)47+HTB$ z<8H0;-j7M(FT;a4|CNj{X50u5VP@gaP;h8A8JjdwwPfBrR zzl@Gu;|oE{n42XgHH)4Ymu>JCJl;9OD`oAkl?z@9zvI5m_xPiH-%|5TW=4G$-HYq0 R7XTg3;OXk;vd$@?2>^{>FR}mt diff --git a/src/configlib/resources/assets/configlib/undo.png b/src/configlib/resources/assets/configlib/undo.png new file mode 100644 index 0000000000000000000000000000000000000000..7f377385ab2b5edb29c5cc690a301cdc13f67e26 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFquAVNAAr*`zy^LH83LMO*|Nq}v zmb5Ts@x>zdTO7KYNjqf%wx2Sw)tUYz$6~e+qxLlBH`+6pO3E4@vBxs3_{_ZF`;2&V npgI5l2Zt~{05aG>1~M~PlgTe~DWM4fI>jsp literal 0 HcmV?d00001 From cf9d466d01266ae6e3224e70159346342ca5efec Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 9 Jul 2026 23:17:34 +0300 Subject: [PATCH 07/11] removed unused imports --- src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java index da067ddc..e671ac44 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/GuiUtil.java @@ -1,8 +1,6 @@ package fr.alexdoru.configlib.lib.gui; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiScreen; public final class GuiUtil { From adfee8b8818f0f7fcedc7f7ae479399997be5a4b Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:19:54 +0300 Subject: [PATCH 08/11] added public method to get the color palatte --- .../java/fr/alexdoru/configlib/lib/gui/ConfigGuiScreen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/ConfigGuiScreen.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/ConfigGuiScreen.java index 29a59ea9..9c831966 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/ConfigGuiScreen.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/ConfigGuiScreen.java @@ -536,4 +536,5 @@ private void updateSearch(String search) { } } + public ColorPalette getColorPalette() { return colorPalette; } } From a8645710621771eb2b3a8c48d388c7bc1c23a986 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:20:52 +0300 Subject: [PATCH 09/11] send the config screen color palette to renderer edit screen --- .../alexdoru/configlib/lib/gui/elements/RendererGuiButton.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java index 0fb7f565..30631e29 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java @@ -66,7 +66,7 @@ public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) { buttonEnabled.playPressSound(mc.getSoundHandler()); final IRenderer renderer = this.rendererManager.getRendererFromPosition(rendererPosition); if (renderer != null) { - mc.displayGuiScreen(new RendererEditGuiScreen(this.rendererManager, renderer, parentScreen)); + mc.displayGuiScreen(new RendererEditGuiScreen(this.rendererManager, renderer, parentScreen, parentScreen.getColorPalette())); } else { throw new RuntimeException("No registered renderer associated to " + field.getName()); } From 4b4041697d66b7865591164eb03433a64da199e0 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:22:17 +0300 Subject: [PATCH 10/11] changed the way i create 'custom buttons' and fixed bad buttons click code --- .../lib/gui/RendererEditGuiScreen.java | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java index 338d517a..8ff3d728 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/RendererEditGuiScreen.java @@ -1,11 +1,12 @@ package fr.alexdoru.configlib.lib.gui; +import fr.alexdoru.configlib.api.ColorPalette; import fr.alexdoru.configlib.api.IRenderer; import fr.alexdoru.configlib.api.RendererPosition; import fr.alexdoru.configlib.lib.RendererManager; +import fr.alexdoru.configlib.lib.gui.elements.ClickGuiButton; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; @@ -23,32 +24,28 @@ public class RendererEditGuiScreen extends GuiScreen { private final IRenderer renderer; private final RendererPosition rendererPosition; private final GuiScreen parent; - private final CustomButton[] customButtons; + private final ColorPalette colorPalette; + private final Button[] buttons; private final double originalRelativeX, originalRelativeY; private boolean dragging; private int prevX, prevY; - public RendererEditGuiScreen(RendererManager rendererManager, IRenderer renderer, GuiScreen parent) { + public RendererEditGuiScreen(RendererManager rendererManager, IRenderer renderer, GuiScreen parent, ColorPalette colorPalette) { this.rendererManager = rendererManager; this.renderer = renderer; this.rendererPosition = renderer.getPosition(); this.parent = parent; + this.colorPalette = colorPalette; this.originalRelativeX = rendererPosition.getRelativeX(); this.originalRelativeY = rendererPosition.getRelativeY(); - this.customButtons = new CustomButton[]{ - new CustomButton(new ResourceLocation("configlib", "reload.png"), "Reset to Default Position"), - new CustomButton(new ResourceLocation("configlib", "undo.png"), "Undo Changes") + this.buttons = new Button[]{ + new Button(new ResourceLocation("configlib", "reload.png"), "Reset to Default Position"), + new Button(new ResourceLocation("configlib", "undo.png"), "Undo Changes") }; } @Override public void initGui() { - final int buttonX = this.width - BUTTON_SIZE - 2; - int buttonY = 2; - for (final CustomButton button : customButtons) { - button.onResize(buttonX, buttonY); - buttonY += BUTTON_SIZE + 2; - } final ScaledResolution res = new ScaledResolution(mc); this.rendererPosition.updateAbsolutePosition(res); this.adjustBounds(res); @@ -70,13 +67,20 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) { } this.renderer.renderDummy(); if (!this.dragging) { + final int buttonX = this.width - BUTTON_SIZE - 2; + int buttonY = 2; String hoveringText = null; GlStateManager.enableAlpha(); GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); - for (final CustomButton button : customButtons) { - final String textIfHovered = button.draw(mc, mouseX, mouseY); - if (hoveringText == null || hoveringText.isEmpty()) hoveringText = textIfHovered; + for (final Button button : buttons) { + button.xPosition = buttonX; + button.yPosition = buttonY; + button.drawButton(colorPalette, mc, mouseX, mouseY); + if (button.isMouseOver() && (hoveringText == null || hoveringText.isEmpty())) { + hoveringText = button.getHoveringText(); + } + buttonY += BUTTON_SIZE + 2; } GlStateManager.disableBlend(); GlStateManager.color(1f, 1f, 1f, 1f); @@ -93,19 +97,23 @@ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOEx if (mouseButton == GuiUtil.MOUSE_LEFT) { if (!this.dragging) { int clickedButtonIdx = -1; - for (int i = 0; i < customButtons.length; ++i) { - if (customButtons[i].isMouseOver()) { + for (int i = 0; i < buttons.length; i++) { + if (buttons[i].mousePressed(mc, mouseX, mouseY)) { clickedButtonIdx = i; + buttons[i].playPressSound(mc.getSoundHandler()); break; } } if (clickedButtonIdx != -1) { - if (clickedButtonIdx == 0) rendererPosition.resetToDefault(); - else rendererPosition.setRelativePosition(originalRelativeX, originalRelativeY); - final ScaledResolution res = new ScaledResolution(mc); - this.rendererPosition.updateAbsolutePosition(res); - this.adjustBounds(res); - return; + success: { + if (clickedButtonIdx == 0) rendererPosition.resetToDefault(); + else if (clickedButtonIdx == 1) rendererPosition.setRelativePosition(originalRelativeX, originalRelativeY); + else break success; + final ScaledResolution res = new ScaledResolution(mc); + this.rendererPosition.updateAbsolutePosition(res); + this.adjustBounds(res); + return; + } } } this.dragging = true; @@ -154,34 +162,26 @@ private void renderCrosshair() { drawTexturedModalRect(this.width / 2 - 7, this.height / 2 - 7, 0, 0, 16, 16); } - private static class CustomButton { + private static final class Button extends ClickGuiButton { private final ResourceLocation icon; private final String hoveringText; - private final GuiButton button; - public CustomButton(ResourceLocation icon, String hoveringText) { + public Button(ResourceLocation icon, String hoveringText) { + super(-1, 0, 0, BUTTON_SIZE, BUTTON_SIZE, ""); this.icon = icon; this.hoveringText = hoveringText; - this.button = new GuiButton(-1, 0, 0, BUTTON_SIZE, BUTTON_SIZE, ""); } - public void onResize(int x, int y) { - this.button.xPosition = x; - this.button.yPosition = y; - } - - public String draw(Minecraft mc, int mouseX, int mouseY) { - button.drawButton(mc, mouseX, mouseY); + @Override + public void drawButton(ColorPalette colorPalette, Minecraft mc, int mouseX, int mouseY) { + super.drawButton(colorPalette, mc, mouseX, mouseY); GlStateManager.color(1f, 1f, 1f, 1f); mc.getTextureManager().bindTexture(icon); final int iconSize = 6; final int iconOffset = (BUTTON_SIZE - iconSize) / 2; - GuiUtil.drawFullTextureWithCustomSize(button.xPosition + iconOffset, button.yPosition + iconOffset, iconSize, iconSize); - return button.isMouseOver() ? hoveringText : null; + GuiUtil.drawFullTextureWithCustomSize(xPosition + iconOffset, yPosition + iconOffset, iconSize, iconSize); } - public boolean isMouseOver() { - return button.isMouseOver(); - } + public String getHoveringText() { return hoveringText; } } } From 9b2da5ce0e6f6b81379490ac2aed76ecc742d6f6 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sat, 18 Jul 2026 21:10:45 +0300 Subject: [PATCH 11/11] removed unnecessary comment trimming --- .../alexdoru/configlib/lib/gui/elements/RendererGuiButton.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java index 30631e29..c648969d 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/RendererGuiButton.java @@ -39,7 +39,7 @@ public RendererGuiButton( @Override public void setBoxWidth(int boxWidth) { - super.setBoxWidth(boxWidth - mc.fontRendererObj.getStringWidth("Reset Position") - 10); + super.setBoxWidth(boxWidth); this.boxWidth = boxWidth; }