From 8648c4a41b6e17d599d892ef08dd3a3604b95c65 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:01:33 +0300 Subject: [PATCH 01/13] added a 'padding' value to avoid 'magic numbers' (see comments) --- .../configlib/lib/gui/elements/ConfigGuiButton.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index 8ad23524..67cfc509 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -15,6 +15,7 @@ public abstract class ConfigGuiButton implements ConfigUIElement { + protected static final int PADDING = 8; protected final Minecraft mc = Minecraft.getMinecraft(); protected final Field field; private final Method event; @@ -46,11 +47,11 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in this.posX = drawX; this.posY = drawY; GuiUtil.drawBoxWithOutline(drawX, drawY, drawX + boxWidth, drawY + getHeight(), colorPalette.SETTING_BACKGROUND, colorPalette.SETTING_BACKGROUND_BORDER); - mc.fontRendererObj.drawStringWithShadow(annotation.name(), drawX + 8, drawY + 8, colorPalette.SETTING_NAME_TEXT); + mc.fontRendererObj.drawStringWithShadow(annotation.name(), drawX + PADDING, drawY + PADDING, colorPalette.SETTING_NAME_TEXT); if (hasComment) { - int commentY = drawY + 8 + mc.fontRendererObj.FONT_HEIGHT + 8; + int commentY = drawY + PADDING + mc.fontRendererObj.FONT_HEIGHT + 8; // '8' here represents the vertical space between name and comment (can be different from padding) for (final String line : commentToRender) { - mc.fontRendererObj.drawStringWithShadow(line, drawX + 8, commentY, colorPalette.SETTING_COMMENT_TEXT); + mc.fontRendererObj.drawStringWithShadow(line, drawX + PADDING, commentY, colorPalette.SETTING_COMMENT_TEXT); commentY += mc.fontRendererObj.FONT_HEIGHT; } } @@ -59,9 +60,9 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in @Override public int getHeight() { if (hasComment) { - return 8 + mc.fontRendererObj.FONT_HEIGHT + 8 + mc.fontRendererObj.FONT_HEIGHT * commentToRender.size() + 8 - 1; + return PADDING + mc.fontRendererObj.FONT_HEIGHT + PADDING + mc.fontRendererObj.FONT_HEIGHT * commentToRender.size() + 8 - 1; // '8' here represents the vertical space between name and comment (can be different from padding) } - return 8 + mc.fontRendererObj.FONT_HEIGHT + 8 - 1; + return PADDING + mc.fontRendererObj.FONT_HEIGHT + PADDING - 1; } @Override @@ -94,5 +95,4 @@ protected void invokeConfigEvent() { protected void playPressSound() { this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); } - } From 6ab5d072c4e0ac1baa90a8437109514430e21bca Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:11:29 +0300 Subject: [PATCH 02/13] added a getLeftPadding method to give inheritors more control (mostly for custom elemenets) --- .../configlib/lib/gui/elements/ConfigGuiButton.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index 67cfc509..d45c2acd 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -16,6 +16,7 @@ public abstract class ConfigGuiButton implements ConfigUIElement { protected static final int PADDING = 8; + protected final Minecraft mc = Minecraft.getMinecraft(); protected final Field field; private final Method event; @@ -47,11 +48,12 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in this.posX = drawX; this.posY = drawY; GuiUtil.drawBoxWithOutline(drawX, drawY, drawX + boxWidth, drawY + getHeight(), colorPalette.SETTING_BACKGROUND, colorPalette.SETTING_BACKGROUND_BORDER); - mc.fontRendererObj.drawStringWithShadow(annotation.name(), drawX + PADDING, drawY + PADDING, colorPalette.SETTING_NAME_TEXT); + final int textX = drawX + getLeftPadding(); + mc.fontRendererObj.drawStringWithShadow(annotation.name(), textX, drawY + PADDING, colorPalette.SETTING_NAME_TEXT); if (hasComment) { int commentY = drawY + PADDING + mc.fontRendererObj.FONT_HEIGHT + 8; // '8' here represents the vertical space between name and comment (can be different from padding) for (final String line : commentToRender) { - mc.fontRendererObj.drawStringWithShadow(line, drawX + PADDING, commentY, colorPalette.SETTING_COMMENT_TEXT); + mc.fontRendererObj.drawStringWithShadow(line, textX, commentY, colorPalette.SETTING_COMMENT_TEXT); commentY += mc.fontRendererObj.FONT_HEIGHT; } } @@ -95,4 +97,6 @@ protected void invokeConfigEvent() { protected void playPressSound() { this.mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); } + + protected int getLeftPadding() { return PADDING; } } From c2b48247e9d75cae3cda9fdc9d01c417f6ce2d80 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:14:05 +0300 Subject: [PATCH 03/13] added an abstract method that each inheritor must implemenet, at this moment it is only used for 100% correct comment trimming --- .../configlib/lib/gui/elements/ConfigGuiButton.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index d45c2acd..c6ebe835 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -33,11 +33,16 @@ protected ConfigGuiButton(Field field, Method event, ConfigProperty annotation) this.hasComment = !this.annotation.comment().isEmpty(); } + /** + * @return The distance between the left-most position of the content (button) and the right side of the rect + */ + protected abstract int getRightSideContentWidth(); + @Override public void setBoxWidth(int boxWidth) { this.boxWidth = boxWidth; if (hasComment) { - final int wrapWidth = boxWidth - mc.fontRendererObj.getStringWidth(" Disabled ") - 20 - 20; + final int wrapWidth = boxWidth - getLeftPadding() - getRightSideContentWidth() - 12; // 20 this.commentToRender.clear(); this.commentToRender.addAll(resizeCommentLines(annotation.comment(), wrapWidth, mc)); } From ab60fabf7ef2e71c3591fcf6ef91cd5291b4acb9 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:18:25 +0300 Subject: [PATCH 04/13] added a helper method to get the width of a 'main button' --- .../alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index c6ebe835..a93bc368 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -104,4 +104,8 @@ protected void playPressSound() { } protected int getLeftPadding() { return PADDING; } + + protected final int getMainButtonWidth() { + return mc.fontRendererObj.getStringWidth("Disabled") + 9; + } } From 386763e9d2716060b7319b5755a5378670f7b1b3 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:21:58 +0300 Subject: [PATCH 05/13] added a helper method to get a 'main button' --- .../alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index a93bc368..7a727298 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -105,6 +105,10 @@ protected void playPressSound() { protected int getLeftPadding() { return PADDING; } + protected final ClickGuiButton getMainButton(String text) { + return new ClickGuiButton(-1, 0, 0, getMainButtonWidth(), 20, text); + } + protected final int getMainButtonWidth() { return mc.fontRendererObj.getStringWidth("Disabled") + 9; } From 226cd81d9330bfc3412e0dc4152e67dec7eef5cb Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:23:26 +0300 Subject: [PATCH 06/13] added a shared value for inheritors who use a 'main button' --- .../fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index 7a727298..c605afd7 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -16,6 +16,7 @@ public abstract class ConfigGuiButton implements ConfigUIElement { protected static final int PADDING = 8; + protected static final int BUTTON_RIGHT_MARGIN = 20; protected final Minecraft mc = Minecraft.getMinecraft(); protected final Field field; From 72abc2949dda6eeb6a5fd2ec161b013256b82bad Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:27:30 +0300 Subject: [PATCH 07/13] added a shared helper method to get 'boolean text' (enabled/disabled) --- .../alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index c605afd7..64ced305 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -5,6 +5,7 @@ import fr.alexdoru.configlib.lib.gui.GuiUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import java.lang.reflect.Field; @@ -113,4 +114,8 @@ protected final ClickGuiButton getMainButton(String text) { protected final int getMainButtonWidth() { return mc.fontRendererObj.getStringWidth("Disabled") + 9; } + + protected static String getBooleanText(boolean value) { + return value ? EnumChatFormatting.GREEN + "Enabled" : EnumChatFormatting.RED + "Disabled"; + } } From 5f19c98a8943e0240b6be3a1bb256e41d3845b10 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:57:09 +0300 Subject: [PATCH 08/13] added a value for inheritors to use to position their content (buttons, etc...) --- .../alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index 64ced305..7b1a2517 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -27,6 +27,7 @@ public abstract class ConfigGuiButton implements ConfigUIElement { protected final boolean hasComment; protected int boxWidth; protected int posX, posY; + protected int contentLeft; protected ConfigGuiButton(Field field, Method event, ConfigProperty annotation) { this.field = field; @@ -54,7 +55,9 @@ public void setBoxWidth(int boxWidth) { public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, int mouseY) { this.posX = drawX; this.posY = drawY; - GuiUtil.drawBoxWithOutline(drawX, drawY, drawX + boxWidth, drawY + getHeight(), colorPalette.SETTING_BACKGROUND, colorPalette.SETTING_BACKGROUND_BORDER); + final int right = drawX + boxWidth; + this.contentLeft = right - getRightSideContentWidth(); + GuiUtil.drawBoxWithOutline(drawX, drawY, right, drawY + getHeight(), colorPalette.SETTING_BACKGROUND, colorPalette.SETTING_BACKGROUND_BORDER); final int textX = drawX + getLeftPadding(); mc.fontRendererObj.drawStringWithShadow(annotation.name(), textX, drawY + PADDING, colorPalette.SETTING_NAME_TEXT); if (hasComment) { From bc848ae227e18147cf9022f903b568ccb8109888 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 02:19:15 +0300 Subject: [PATCH 09/13] fixed typo --- .../configlib/lib/gui/elements/SliderGuiButton.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java index ff200d35..bc0944c8 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java @@ -19,7 +19,7 @@ public class SliderGuiButton extends ConfigGuiButton { private int plusButtonX, plusButtonY; private int sliderIncrement; private final boolean isIntValue; - private boolean isPourcentage; + private boolean isPercentage; private final int minValue, maxValue; private int sliderValueI; private double sliderValueD; @@ -38,7 +38,7 @@ public SliderGuiButton(Field field, Method event, ConfigProperty annotation) thr isIntValue = false; sliderValueD = (double) field.get(null); if (minValue == 0 && maxValue == 1) { - isPourcentage = true; + isPercentage = true; sliderValueI = (int) ((double) field.get(null) * 100d); sliderIncrement = MathHelper.clamp_int((SLIDER_WIDTH - 1) * (sliderValueI) / 100, 0, SLIDER_WIDTH - 1); } else { @@ -87,7 +87,7 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in if (isIntValue) { valueText = String.valueOf(sliderValueI); } else { - if (isPourcentage) { + if (isPercentage) { valueText = MathHelper.floor_double(sliderValueI) + "%"; } else { valueText = String.format("%.2f", sliderValueD); @@ -143,7 +143,7 @@ private void updateSliderFromPosition(int sliderIncrementIn) { if (prevValue != sliderValueI) { invokeConfigEvent(); } - } else if (isPourcentage) { + } else if (isPercentage) { final int prevValue = sliderValueI; sliderValueI = MathHelper.clamp_int(sliderIncrement * 100 / (SLIDER_WIDTH - 1), 0, 100); field.setDouble(null, MathHelper.clamp_double(sliderValueI / 100d, 0, 1)); @@ -170,7 +170,7 @@ public void updateSliderFromIncrement(int valueIncrement) { sliderValueI = MathHelper.clamp_int(sliderValueI + valueIncrement, minValue, maxValue); sliderIncrement = MathHelper.clamp_int((SLIDER_WIDTH - 1) * (sliderValueI - minValue) / (maxValue - minValue), 0, SLIDER_WIDTH - 1); field.setInt(null, sliderValueI); - } else if (isPourcentage) { + } else if (isPercentage) { sliderValueI = MathHelper.clamp_int(sliderValueI + valueIncrement, 0, 100); sliderIncrement = MathHelper.clamp_int((SLIDER_WIDTH - 1) * sliderValueI / (100), 0, SLIDER_WIDTH - 1); field.setDouble(null, MathHelper.clamp_double(sliderValueI / 100d, 0, 1)); From 59aec131b7247160f36b7a04cdd7915a9b77c440 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 03:08:03 +0300 Subject: [PATCH 10/13] updated to use the new methods and values, implement 'getRightSideContentWidth' and so fixed comment trimming for all --- .../lib/gui/elements/BooleanGuiButton.java | 19 +++++++------- .../lib/gui/elements/ColorEnumGuiButton.java | 5 ++-- .../lib/gui/elements/ColorGuiButton.java | 18 +++++++------ .../lib/gui/elements/EnumGuiButton.java | 11 +++++--- .../lib/gui/elements/RendererGuiButton.java | 25 +++++++++---------- .../lib/gui/elements/SliderGuiButton.java | 21 ++++++++-------- 6 files changed, 53 insertions(+), 46 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/BooleanGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/BooleanGuiButton.java index 4fb5b0f4..b61e711b 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/BooleanGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/BooleanGuiButton.java @@ -2,7 +2,6 @@ import fr.alexdoru.configlib.api.ColorPalette; import fr.alexdoru.configlib.api.ConfigProperty; -import net.minecraft.util.EnumChatFormatting; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -15,14 +14,19 @@ public class BooleanGuiButton extends ConfigGuiButton { public BooleanGuiButton(Field field, Method event, ConfigProperty annotation) throws IllegalAccessException { super(field, event, annotation); this.toggled = (boolean) this.field.get(null); - this.button = new ClickGuiButton(0, 0, 0, mc.fontRendererObj.getStringWidth(" Disabled "), 20, getButtonText()); + this.button = getMainButton(getBooleanText(toggled)); + } + + @Override + protected int getRightSideContentWidth() { + return button.width + BUTTON_RIGHT_MARGIN; } @Override public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, int mouseY) { super.draw(colorPalette, drawX, drawY, mouseX, mouseY); - button.xPosition = drawX + boxWidth - button.width - 20; - button.yPosition = drawY + (hasComment ? 8 + mc.fontRendererObj.FONT_HEIGHT / 2 : (getHeight() - button.height) / 2); + button.xPosition = contentLeft; + button.yPosition = drawY + (hasComment ? PADDING + mc.fontRendererObj.FONT_HEIGHT / 2 : (getHeight() - button.height) / 2); button.drawButton(colorPalette, mc, mouseX, mouseY); } @@ -30,7 +34,7 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) throws IllegalAccessException { if (mouseButton == 0 && button.mousePressed(mc, mouseX, mouseY)) { flipBooleanConfig(); - button.displayString = getButtonText(); + button.displayString = getBooleanText(toggled); button.playPressSound(mc.getSoundHandler()); return true; } @@ -42,9 +46,4 @@ private void flipBooleanConfig() throws IllegalAccessException { toggled = (boolean) this.field.get(null); invokeConfigEvent(); } - - private String getButtonText() { - return toggled ? EnumChatFormatting.GREEN + "Enabled" : EnumChatFormatting.RED + "Disabled"; - } - } diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorEnumGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorEnumGuiButton.java index dc341a0a..2509be97 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorEnumGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorEnumGuiButton.java @@ -20,9 +20,10 @@ public ColorEnumGuiButton(Field field, Method event, ConfigProperty annotation) @Override public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, int mouseY) { super.draw(colorPalette, drawX, drawY, mouseX, mouseY); - final int left = this.button.xPosition - 20 - 1; + final int colorBoxSize = button.height; + final int left = this.button.xPosition - colorBoxSize - 1; final int top = this.button.yPosition; - GuiUtil.drawBoxWithOutline(left, top, left + 20, top + 20, 255 << 24 | color, colorPalette.COLOR_BUTTON_INDICATOR_BORDER); + GuiUtil.drawBoxWithOutline(left, top, left + colorBoxSize, top + colorBoxSize, 255 << 24 | color, colorPalette.COLOR_BUTTON_INDICATOR_BORDER); } @Override diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorGuiButton.java index 6393822b..a76babf0 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ColorGuiButton.java @@ -20,18 +20,23 @@ public ColorGuiButton(ConfigGuiScreen configGuiScreen, Field field, ConfigProper this.parentScreen = configGuiScreen; this.color = (int) this.field.get(null); this.defaultColor = defaultColor; - this.button = new ClickGuiButton(0, 0, 0, mc.fontRendererObj.getStringWidth(" Disabled "), 20, "Change"); + this.button = getMainButton("Change"); + } + + @Override + protected int getRightSideContentWidth() { + return button.width + BUTTON_RIGHT_MARGIN + button.height /* color box width */ + 1; } @Override public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, int mouseY) { super.draw(colorPalette, drawX, drawY, mouseX, mouseY); - button.xPosition = drawX + boxWidth - button.width - 20; - button.yPosition = drawY + (hasComment ? 8 + mc.fontRendererObj.FONT_HEIGHT / 2 : (getHeight() - button.height) / 2); + final int top = drawY + (hasComment ? PADDING + mc.fontRendererObj.FONT_HEIGHT / 2 : (getHeight() - button.height) / 2); + final int colorBoxSize = button.height; + GuiUtil.drawBoxWithOutline(contentLeft, top, contentLeft + colorBoxSize, top + colorBoxSize, 255 << 24 | color, colorPalette.COLOR_BUTTON_INDICATOR_BORDER); + button.xPosition = contentLeft + colorBoxSize + 1; + button.yPosition = top; button.drawButton(colorPalette, mc, mouseX, mouseY); - final int left = button.xPosition - 20 - 1; - final int top = button.yPosition; - GuiUtil.drawBoxWithOutline(left, top, left + 20, top + 20, 255 << 24 | color, colorPalette.COLOR_BUTTON_INDICATOR_BORDER); } @Override @@ -43,5 +48,4 @@ public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) throws Ille } return false; } - } diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/EnumGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/EnumGuiButton.java index d8eccb31..e7ef796b 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/EnumGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/EnumGuiButton.java @@ -23,17 +23,22 @@ public EnumGuiButton(Field field, Method event, ConfigProperty annotation) throw } int width = 0; for (final Enum e : values) { - width = Math.max(width, mc.fontRendererObj.getStringWidth(" " + e.name())); + width = Math.max(width, mc.fontRendererObj.getStringWidth(e.name()) + 9); } this.button = new ClickGuiButton(0, 0, 0, width, 20, ""); this.setValue((Enum) this.field.get(null)); } + @Override + protected int getRightSideContentWidth() { + return button.width + BUTTON_RIGHT_MARGIN; + } + @Override public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, int mouseY) { super.draw(colorPalette, drawX, drawY, mouseX, mouseY); - button.xPosition = drawX + boxWidth - button.width - 20; - button.yPosition = drawY + (hasComment ? 8 + mc.fontRendererObj.FONT_HEIGHT / 2 : (getHeight() - button.height) / 2); + button.xPosition = contentLeft; + button.yPosition = drawY + (hasComment ? PADDING + mc.fontRendererObj.FONT_HEIGHT / 2 : (getHeight() - button.height) / 2); button.drawButton(colorPalette, mc, mouseX, mouseY); } 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..4848a932 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 @@ -9,7 +9,6 @@ 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; @@ -40,22 +39,27 @@ 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.buttonEnabled = getMainButton(getBooleanText(toggled)); this.buttonMoveHud = new ClickGuiButton(0, 0, 0, 20, 20, ""); this.buttonResetPos = new ClickGuiButton(0, 0, 0, 20, 20, ""); } + @Override + protected int getRightSideContentWidth() { + return buttonEnabled.width + BUTTON_RIGHT_MARGIN; + } + @Override public void setBoxWidth(int boxWidth) { - super.setBoxWidth(boxWidth - mc.fontRendererObj.getStringWidth("Reset Position") - 10); + super.setBoxWidth(boxWidth - mc.fontRendererObj.getStringWidth("Reset Position")); this.boxWidth = boxWidth; } @Override public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, int mouseY) { super.draw(colorPalette, drawX, drawY, mouseX, mouseY); - buttonEnabled.xPosition = drawX + boxWidth - buttonEnabled.width - 20; - buttonEnabled.yPosition = drawY + 8; + buttonEnabled.xPosition = contentLeft; + buttonEnabled.yPosition = drawY + PADDING; buttonEnabled.drawButton(colorPalette, mc, mouseX, mouseY); buttonMoveHud.xPosition = buttonEnabled.xPosition; buttonMoveHud.yPosition = buttonEnabled.yPosition + buttonEnabled.height + 1; @@ -82,7 +86,7 @@ public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) { if (mouseButton == 0) { if (buttonEnabled.mousePressed(mc, mouseX, mouseY)) { flipBooleanConfig(); - buttonEnabled.displayString = getButtonText(); + buttonEnabled.displayString = getBooleanText(toggled); buttonEnabled.playPressSound(mc.getSoundHandler()); return true; } else if (buttonMoveHud.mousePressed(mc, mouseX, mouseY)) { @@ -105,7 +109,7 @@ public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) { @Override public int getHeight() { - return Math.max(super.getHeight(), 8 + buttonEnabled.height + 1 + buttonMoveHud.height + 8 - 1); + return Math.max(super.getHeight(), PADDING + buttonEnabled.height + 1 + buttonMoveHud.height + PADDING - 1); } private void drawIcon(ResourceLocation icon, int drawX, int drawY) { @@ -116,7 +120,7 @@ private void drawIcon(ResourceLocation icon, int drawX, int drawY) { 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); + mc.getTextureManager().bindTexture(icon); GlStateManager.color(1, 1, 1); Gui.drawModalRectWithCustomSizedTexture(drawX, drawY, 0f, 0f, 14, 14, 14f, 14f); GlStateManager.popMatrix(); @@ -127,9 +131,4 @@ private void flipBooleanConfig() { toggled = rendererPosition.isEnabled(); invokeConfigEvent(); } - - private String getButtonText() { - return toggled ? EnumChatFormatting.GREEN + "Enabled" : EnumChatFormatting.RED + "Disabled"; - } - } diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java index bc0944c8..9eeba155 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java @@ -51,9 +51,8 @@ public SliderGuiButton(Field field, Method event, ConfigProperty annotation) thr } @Override - public void setBoxWidth(int boxWidth) { - super.setBoxWidth(boxWidth - 60); - this.boxWidth = boxWidth; + protected int getRightSideContentWidth() { + return (PLUS_BUTTON_SIZE + SLIDER_BUTTON_SIZE / 2 + 1) * 2 + SLIDER_WIDTH + 6; } @Override @@ -63,14 +62,15 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in updateSliderFromPosition(mouseX - sliderBarX); } final int SLIDER_HEIGHT = 6; - sliderBarX = drawX + boxWidth - SLIDER_WIDTH - 20; - final int sliderBarY = drawY + 8 + mc.fontRendererObj.FONT_HEIGHT; - sliderButtonX = sliderBarX + sliderIncrement - SLIDER_BUTTON_SIZE / 2; + final int HALF_SLIDER_BUTTON_SIZE = SLIDER_BUTTON_SIZE / 2; + sliderBarX = contentLeft + PLUS_BUTTON_SIZE + HALF_SLIDER_BUTTON_SIZE + 1; + final int sliderBarY = drawY + PADDING + mc.fontRendererObj.FONT_HEIGHT; + sliderButtonX = sliderBarX + sliderIncrement - HALF_SLIDER_BUTTON_SIZE; sliderButtonY = sliderBarY + (SLIDER_HEIGHT - SLIDER_BUTTON_SIZE) / 2; - minusButtonX = sliderBarX - SLIDER_BUTTON_SIZE / 2 - PLUS_BUTTON_SIZE - 1; + minusButtonX = contentLeft; minusButtonY = sliderBarY + (SLIDER_HEIGHT - PLUS_BUTTON_SIZE) / 2; - plusButtonX = sliderBarX + SLIDER_WIDTH + SLIDER_BUTTON_SIZE / 2; - plusButtonY = sliderBarY + (SLIDER_HEIGHT - PLUS_BUTTON_SIZE) / 2; + plusButtonX = sliderBarX + SLIDER_WIDTH + HALF_SLIDER_BUTTON_SIZE + 1; + plusButtonY = minusButtonY; GuiUtil.drawBoxWithOutline(sliderBarX, sliderBarY, sliderBarX + SLIDER_WIDTH, sliderBarY + SLIDER_HEIGHT, colorPalette.SLIDER_BUTTON_TRACK, colorPalette.SLIDER_BUTTON_TRACK_BORDER); final boolean silderHovered = isMouseOnButton(mouseX, mouseY, sliderButtonX, sliderButtonY, SLIDER_BUTTON_SIZE, SLIDER_BUTTON_SIZE); final int sliderColor = silderHovered ? GuiUtil.brightenColor(colorPalette.SLIDER_BUTTON_THUMB, 0.12f) : colorPalette.SLIDER_BUTTON_THUMB; @@ -100,7 +100,7 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in @Override public int getHeight() { - return Math.max(super.getHeight(), 8 + mc.fontRendererObj.FONT_HEIGHT + SLIDER_BUTTON_SIZE + 8); + return Math.max(super.getHeight(), PADDING + mc.fontRendererObj.FONT_HEIGHT + SLIDER_BUTTON_SIZE + PADDING); } @Override @@ -184,5 +184,4 @@ public void updateSliderFromIncrement(int valueIncrement) { } invokeConfigEvent(); } - } From 0d7eac3b27677b2441a92fa6f0d612a273901699 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 03:14:03 +0300 Subject: [PATCH 11/13] fill in track before slider button for better ui --- .../alexdoru/configlib/lib/gui/elements/SliderGuiButton.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java index 9eeba155..f4631452 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java @@ -3,6 +3,7 @@ import fr.alexdoru.configlib.api.ColorPalette; import fr.alexdoru.configlib.api.ConfigProperty; import fr.alexdoru.configlib.lib.gui.GuiUtil; +import net.minecraft.client.gui.Gui; import net.minecraft.util.MathHelper; import java.lang.reflect.Field; @@ -74,6 +75,10 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in GuiUtil.drawBoxWithOutline(sliderBarX, sliderBarY, sliderBarX + SLIDER_WIDTH, sliderBarY + SLIDER_HEIGHT, colorPalette.SLIDER_BUTTON_TRACK, colorPalette.SLIDER_BUTTON_TRACK_BORDER); final boolean silderHovered = isMouseOnButton(mouseX, mouseY, sliderButtonX, sliderButtonY, SLIDER_BUTTON_SIZE, SLIDER_BUTTON_SIZE); final int sliderColor = silderHovered ? GuiUtil.brightenColor(colorPalette.SLIDER_BUTTON_THUMB, 0.12f) : colorPalette.SLIDER_BUTTON_THUMB; + if (sliderButtonX > (sliderBarX + 1)) { + final int top = sliderBarY + 1; + Gui.drawRect(sliderBarX + 1, top, sliderButtonX, top + SLIDER_HEIGHT - 2, sliderColor); + } GuiUtil.drawBoxWithOutline(sliderButtonX, sliderButtonY, sliderButtonX + SLIDER_BUTTON_SIZE, sliderButtonY + SLIDER_BUTTON_SIZE, sliderColor, colorPalette.SLIDER_BUTTON_THUMB_BORDER); final boolean isMinusHovered = isMouseOnButton(mouseX, mouseY, minusButtonX, minusButtonY, PLUS_BUTTON_SIZE, PLUS_BUTTON_SIZE); final int minusColor = isMinusHovered ? GuiUtil.brightenColor(colorPalette.SLIDER_BUTTON_PLUS_BACKGROUND, 0.12f) : colorPalette.SLIDER_BUTTON_PLUS_BACKGROUND; From 354bb1d1f4d15b99186fdb92986c12c600a11438 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 03:16:36 +0300 Subject: [PATCH 12/13] shortened the vertical distance between property name and commet start --- .../alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java index 7b1a2517..597c204c 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/ConfigGuiButton.java @@ -61,7 +61,7 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in final int textX = drawX + getLeftPadding(); mc.fontRendererObj.drawStringWithShadow(annotation.name(), textX, drawY + PADDING, colorPalette.SETTING_NAME_TEXT); if (hasComment) { - int commentY = drawY + PADDING + mc.fontRendererObj.FONT_HEIGHT + 8; // '8' here represents the vertical space between name and comment (can be different from padding) + int commentY = drawY + PADDING + mc.fontRendererObj.FONT_HEIGHT + 6; // '6' here represents the vertical space between name and comment for (final String line : commentToRender) { mc.fontRendererObj.drawStringWithShadow(line, textX, commentY, colorPalette.SETTING_COMMENT_TEXT); commentY += mc.fontRendererObj.FONT_HEIGHT; @@ -72,7 +72,7 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in @Override public int getHeight() { if (hasComment) { - return PADDING + mc.fontRendererObj.FONT_HEIGHT + PADDING + mc.fontRendererObj.FONT_HEIGHT * commentToRender.size() + 8 - 1; // '8' here represents the vertical space between name and comment (can be different from padding) + return PADDING + mc.fontRendererObj.FONT_HEIGHT + PADDING + mc.fontRendererObj.FONT_HEIGHT * commentToRender.size() + 6 - 1; // '6' here represents the vertical space between name and comment } return PADDING + mc.fontRendererObj.FONT_HEIGHT + PADDING - 1; } From 712b17cff0a62b080d33a2555c9d7f6af85e13a9 Mon Sep 17 00:00:00 2001 From: shvaich <260186867+shvaich@users.noreply.github.com> Date: Sun, 19 Jul 2026 04:02:40 +0300 Subject: [PATCH 13/13] fixed a mistake where i added 1px to plusButtonX --- .../alexdoru/configlib/lib/gui/elements/SliderGuiButton.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java index f4631452..7a0a3da8 100644 --- a/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java +++ b/src/configlib/java/fr/alexdoru/configlib/lib/gui/elements/SliderGuiButton.java @@ -53,7 +53,7 @@ public SliderGuiButton(Field field, Method event, ConfigProperty annotation) thr @Override protected int getRightSideContentWidth() { - return (PLUS_BUTTON_SIZE + SLIDER_BUTTON_SIZE / 2 + 1) * 2 + SLIDER_WIDTH + 6; + return (PLUS_BUTTON_SIZE + SLIDER_BUTTON_SIZE / 2) * 2 + 1 + SLIDER_WIDTH + 6; } @Override @@ -70,7 +70,7 @@ public void draw(ColorPalette colorPalette, int drawX, int drawY, int mouseX, in sliderButtonY = sliderBarY + (SLIDER_HEIGHT - SLIDER_BUTTON_SIZE) / 2; minusButtonX = contentLeft; minusButtonY = sliderBarY + (SLIDER_HEIGHT - PLUS_BUTTON_SIZE) / 2; - plusButtonX = sliderBarX + SLIDER_WIDTH + HALF_SLIDER_BUTTON_SIZE + 1; + plusButtonX = sliderBarX + SLIDER_WIDTH + HALF_SLIDER_BUTTON_SIZE; plusButtonY = minusButtonY; GuiUtil.drawBoxWithOutline(sliderBarX, sliderBarY, sliderBarX + SLIDER_WIDTH, sliderBarY + SLIDER_HEIGHT, colorPalette.SLIDER_BUTTON_TRACK, colorPalette.SLIDER_BUTTON_TRACK_BORDER); final boolean silderHovered = isMouseOnButton(mouseX, mouseY, sliderButtonX, sliderButtonY, SLIDER_BUTTON_SIZE, SLIDER_BUTTON_SIZE);