Browse Source

Add list entry highlight

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel 5 years ago
parent
commit
78a6e46685

+ 1 - 1
gradle.properties

@@ -5,5 +5,5 @@ minecraft_version=1.16
 yarn_mappings=1.16+build.4+legacy.20w09a+build.8
 yarn_mappings=1.16+build.4+legacy.20w09a+build.8
 loader_version=0.8.8+build.202
 loader_version=0.8.8+build.202
 fabric_version=0.13.1+build.370-1.16
 fabric_version=0.13.1+build.370-1.16
-mod_version=4.5.7
+mod_version=4.6.0
 modmenu_version=1.12.1+build.15
 modmenu_version=1.12.1+build.15

+ 0 - 18
src/main/java/me/shedaniel/clothconfig2/ClothConfigInitializer.java

@@ -9,10 +9,6 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.Logger;
 import org.jetbrains.annotations.ApiStatus;
 import org.jetbrains.annotations.ApiStatus;
 
 
-import java.net.URLClassLoader;
-import java.util.Arrays;
-import java.util.stream.Collectors;
-
 @Environment(EnvType.CLIENT)
 @Environment(EnvType.CLIENT)
 public class ClothConfigInitializer {
 public class ClothConfigInitializer {
     public static final Logger LOGGER = LogManager.getFormatterLogger("ClothConfig");
     public static final Logger LOGGER = LogManager.getFormatterLogger("ClothConfig");
@@ -56,18 +52,4 @@ public class ClothConfigInitializer {
     public static double getBounceBackMultiplier() {
     public static double getBounceBackMultiplier() {
         return -10;
         return -10;
     }
     }
-    
-    static {
-        printClassPath();
-    }
-    
-    public static void printClassPath() {
-        System.out.println(
-                Arrays.stream(
-                        ((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs()
-                ).map(
-                        url ->  url.getFile().replace("%20", " ") 
-                ).collect(Collectors.joining("\n"))
-        );
-    }
 }
 }

+ 20 - 0
src/main/java/me/shedaniel/clothconfig2/api/AbstractConfigListEntry.java

@@ -1,7 +1,10 @@
 package me.shedaniel.clothconfig2.api;
 package me.shedaniel.clothconfig2.api;
 
 
+import me.shedaniel.clothconfig2.gui.ClothConfigScreen;
+import me.shedaniel.math.Rectangle;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.fabricmc.api.Environment;
+import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 
 
 @Environment(EnvType.CLIENT)
 @Environment(EnvType.CLIENT)
@@ -37,6 +40,23 @@ public abstract class AbstractConfigListEntry<T> extends AbstractConfigEntry<T>
         return getConfigError().isPresent() ? 16733525 : 16777215;
         return getConfigError().isPresent() ? 16733525 : 16777215;
     }
     }
     
     
+    public Rectangle getEntryArea(int x, int y, int entryWidth, int entryHeight) {
+        return new Rectangle(getParent().left, y, getParent().right - getParent().left, getItemHeight() - 4);
+    }
+    
+    public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
+        return getParent().isMouseOver(mouseX, mouseY) && getEntryArea(x, y, entryWidth, entryHeight).contains(mouseX, mouseY);
+    }
+    
+    @Override
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        if (isMouseInside(mouseX, mouseY, x, y, entryWidth, entryHeight)) {
+            Rectangle area = getEntryArea(x, y, entryWidth, entryHeight);
+            if (getParent() instanceof ClothConfigScreen.ListWidget)
+                ((ClothConfigScreen.ListWidget<AbstractConfigEntry<T>>) getParent()).thisTimeTarget = area;
+        }
+    }
+    
     @Override
     @Override
     public Text getFieldName() {
     public Text getFieldName() {
         return fieldName;
         return fieldName;

+ 68 - 0
src/main/java/me/shedaniel/clothconfig2/gui/ClothConfigScreen.java

@@ -5,6 +5,7 @@ import com.google.common.collect.Maps;
 import com.mojang.blaze3d.systems.RenderSystem;
 import com.mojang.blaze3d.systems.RenderSystem;
 import me.shedaniel.clothconfig2.api.*;
 import me.shedaniel.clothconfig2.api.*;
 import me.shedaniel.clothconfig2.gui.widget.DynamicElementListWidget;
 import me.shedaniel.clothconfig2.gui.widget.DynamicElementListWidget;
+import me.shedaniel.clothconfig2.impl.EasingMethod;
 import me.shedaniel.math.Point;
 import me.shedaniel.math.Point;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.math.Rectangle;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.EnvType;
@@ -331,6 +332,15 @@ public class ClothConfigScreen extends AbstractTabbedConfigScreen {
     
     
     public static class ListWidget<R extends DynamicElementListWidget.ElementEntry<R>> extends DynamicElementListWidget<R> {
     public static class ListWidget<R extends DynamicElementListWidget.ElementEntry<R>> extends DynamicElementListWidget<R> {
         private AbstractConfigScreen screen;
         private AbstractConfigScreen screen;
+        private boolean hasCurrent;
+        private double currentX;
+        private double currentY;
+        private double currentWidth;
+        private double currentHeight;
+        public Rectangle target;
+        public Rectangle thisTimeTarget;
+        public long start;
+        public long duration;
         
         
         public ListWidget(AbstractConfigScreen screen, MinecraftClient client, int width, int height, int top, int bottom, Identifier backgroundLocation) {
         public ListWidget(AbstractConfigScreen screen, MinecraftClient client, int width, int height, int top, int bottom, Identifier backgroundLocation) {
             super(client, width, height, top, bottom, backgroundLocation);
             super(client, width, height, top, bottom, backgroundLocation);
@@ -355,6 +365,64 @@ public class ClothConfigScreen extends AbstractTabbedConfigScreen {
             super.renderItem(matrices, item, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
             super.renderItem(matrices, item, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
         }
         }
         
         
+        @Override
+        protected void renderList(MatrixStack matrices, int startX, int startY, int int_3, int int_4, float delta) {
+            thisTimeTarget = null;
+            if (hasCurrent) {
+                fillGradient(matrices, currentX, currentY, currentX + currentWidth, currentY + currentHeight, 0x24FFFFFF, 0x24FFFFFF);
+            }
+            super.renderList(matrices, startX, startY, int_3, int_4, delta);
+            if (thisTimeTarget != null && !thisTimeTarget.equals(target)) {
+                if (!hasCurrent) {
+                    currentX = thisTimeTarget.x;
+                    currentY = thisTimeTarget.y;
+                    currentWidth = thisTimeTarget.width;
+                    currentHeight = thisTimeTarget.height;
+                    hasCurrent = true;
+                }
+                target = thisTimeTarget.clone();
+                start = System.currentTimeMillis();
+                this.duration = 40;
+            } else if (hasCurrent && target != null) {
+                currentX = (int) ScrollingContainer.ease(currentX, target.x, Math.min((System.currentTimeMillis() - start) / (double) duration * delta * 3, 1), EasingMethod.EasingMethodImpl.LINEAR);
+                currentY = (int) ScrollingContainer.ease(currentY, target.y, Math.min((System.currentTimeMillis() - start) / (double) duration * delta * 3, 1), EasingMethod.EasingMethodImpl.LINEAR);
+                currentWidth = (int) ScrollingContainer.ease(currentWidth, target.width, Math.min((System.currentTimeMillis() - start) / (double) duration * delta * 3, 1), EasingMethod.EasingMethodImpl.LINEAR);
+                currentHeight = (int) ScrollingContainer.ease(currentHeight, target.height, Math.min((System.currentTimeMillis() - start) / (double) duration * delta * 3, 1), EasingMethod.EasingMethodImpl.LINEAR);
+            }
+        }
+        
+        protected void fillGradient(MatrixStack matrices, double xStart, double yStart, double xEnd, double yEnd, int colorStart, int colorEnd) {
+            RenderSystem.disableTexture();
+            RenderSystem.enableBlend();
+            RenderSystem.disableAlphaTest();
+            RenderSystem.defaultBlendFunc();
+            RenderSystem.shadeModel(7425);
+            Tessellator tessellator = Tessellator.getInstance();
+            BufferBuilder bufferBuilder = tessellator.getBuffer();
+            bufferBuilder.begin(7, VertexFormats.POSITION_COLOR);
+            fillGradient(matrices.peek().getModel(), bufferBuilder, xStart, yStart, xEnd, yEnd, this.getZOffset(), colorStart, colorEnd);
+            tessellator.draw();
+            RenderSystem.shadeModel(7424);
+            RenderSystem.disableBlend();
+            RenderSystem.enableAlphaTest();
+            RenderSystem.enableTexture();
+        }
+        
+        protected static void fillGradient(Matrix4f matrix4f, BufferBuilder bufferBuilder, double xStart, double yStart, double xEnd, double yEnd, int i, int j, int k) {
+            float f = (float) (j >> 24 & 255) / 255.0F;
+            float g = (float) (j >> 16 & 255) / 255.0F;
+            float h = (float) (j >> 8 & 255) / 255.0F;
+            float l = (float) (j & 255) / 255.0F;
+            float m = (float) (k >> 24 & 255) / 255.0F;
+            float n = (float) (k >> 16 & 255) / 255.0F;
+            float o = (float) (k >> 8 & 255) / 255.0F;
+            float p = (float) (k & 255) / 255.0F;
+            bufferBuilder.vertex(matrix4f, (float) xEnd, (float) yStart, (float) i).color(g, h, l, f).next();
+            bufferBuilder.vertex(matrix4f, (float) xStart, (float) yStart, (float) i).color(g, h, l, f).next();
+            bufferBuilder.vertex(matrix4f, (float) xStart, (float) yEnd, (float) i).color(n, o, p, m).next();
+            bufferBuilder.vertex(matrix4f, (float) xEnd, (float) yEnd, (float) i).color(n, o, p, m).next();
+        }
+        
         @Override
         @Override
         public boolean mouseClicked(double mouseX, double mouseY, int button) {
         public boolean mouseClicked(double mouseX, double mouseY, int button) {
             this.updateScrollingState(mouseX, mouseY, button);
             this.updateScrollingState(mouseX, mouseY, button);

+ 11 - 0
src/main/java/me/shedaniel/clothconfig2/gui/GlobalizedClothConfigScreen.java

@@ -336,6 +336,11 @@ public class GlobalizedClothConfigScreen extends AbstractConfigScreen implements
         public Optional<Object> getDefaultValue() {
         public Optional<Object> getDefaultValue() {
             return Optional.empty();
             return Optional.empty();
         }
         }
+    
+        @Override
+        public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
+            return false;
+        }
         
         
         @Override
         @Override
         public void save() {}
         public void save() {}
@@ -380,8 +385,14 @@ public class GlobalizedClothConfigScreen extends AbstractConfigScreen implements
         @Override
         @Override
         public void save() {}
         public void save() {}
         
         
+        @Override
+        public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
+            return false;
+        }
+        
         @Override
         @Override
         public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
         public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+            super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
             int yy = y + 2;
             int yy = y + 2;
             List<StringRenderable> texts = MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(this.text, getParent().getItemWidth());
             List<StringRenderable> texts = MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(this.text, getParent().getItemWidth());
             for (StringRenderable text : texts) {
             for (StringRenderable text : texts) {

+ 8 - 16
src/main/java/me/shedaniel/clothconfig2/gui/entries/BaseListEntry.java

@@ -202,12 +202,12 @@ public abstract class BaseListEntry<T, C extends BaseListCell, SELF extends Base
     }
     }
     
     
     @Override
     @Override
-    public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
+    public Rectangle getEntryArea(int x, int y, int entryWidth, int entryHeight) {
         labelWidget.rectangle.x = x - 15;
         labelWidget.rectangle.x = x - 15;
         labelWidget.rectangle.y = y;
         labelWidget.rectangle.y = y;
         labelWidget.rectangle.width = entryWidth + 15;
         labelWidget.rectangle.width = entryWidth + 15;
         labelWidget.rectangle.height = 24;
         labelWidget.rectangle.height = 24;
-        return labelWidget.rectangle.contains(mouseX, mouseY) && getParent().isMouseOver(mouseX, mouseY) && !resetWidget.isMouseOver(mouseX, mouseY);
+        return new Rectangle(getParent().left, y, getParent().right - getParent().left, 20);
     }
     }
     
     
     protected boolean isInsideCreateNew(double mouseX, double mouseY) {
     protected boolean isInsideCreateNew(double mouseX, double mouseY) {
@@ -229,31 +229,23 @@ public abstract class BaseListEntry<T, C extends BaseListCell, SELF extends Base
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        labelWidget.rectangle.x = x - 19;
-        labelWidget.rectangle.y = y;
-        labelWidget.rectangle.width = entryWidth + 19;
-        labelWidget.rectangle.height = 24;
-        if (isMouseInside(mouseX, mouseY, x, y, entryWidth, entryHeight)) {
-            Optional<Text[]> tooltip = getTooltip(mouseX, mouseY);
-            if (tooltip.isPresent() && tooltip.get().length > 0)
-                addTooltip(Tooltip.of(new Point(mouseX, mouseY), tooltip.get()));
-        }
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         MinecraftClient.getInstance().getTextureManager().bindTexture(CONFIG_TEX);
         MinecraftClient.getInstance().getTextureManager().bindTexture(CONFIG_TEX);
         DiffuseLighting.disable();
         DiffuseLighting.disable();
         RenderSystem.color4f(1, 1, 1, 1);
         RenderSystem.color4f(1, 1, 1, 1);
         BaseListCell focused = !expanded || getFocused() == null || !(getFocused() instanceof BaseListCell) ? null : (BaseListCell) getFocused();
         BaseListCell focused = !expanded || getFocused() == null || !(getFocused() instanceof BaseListCell) ? null : (BaseListCell) getFocused();
         boolean insideCreateNew = isInsideCreateNew(mouseX, mouseY);
         boolean insideCreateNew = isInsideCreateNew(mouseX, mouseY);
         boolean insideDelete = isInsideDelete(mouseX, mouseY);
         boolean insideDelete = isInsideDelete(mouseX, mouseY);
-        drawTexture(matrices, x - 15, y + 4, 24 + 9, (labelWidget.rectangle.contains(mouseX, mouseY) && !insideCreateNew && !insideDelete ? 18 : 0) + (expanded ? 9 : 0), 9, 9);
-        drawTexture(matrices, x - 15 + 13, y + 4, 24 + 18, insideCreateNew ? 9 : 0, 9, 9);
+        drawTexture(matrices, x - 15, y + 5, 24 + 9, (labelWidget.rectangle.contains(mouseX, mouseY) && !insideCreateNew && !insideDelete ? 18 : 0) + (expanded ? 9 : 0), 9, 9);
+        drawTexture(matrices, x - 15 + 13, y + 5, 24 + 18, insideCreateNew ? 9 : 0, 9, 9);
         if (isDeleteButtonEnabled())
         if (isDeleteButtonEnabled())
-            drawTexture(matrices, x - 15 + 26, y + 4, 24 + 27, focused == null ? 0 : insideDelete ? 18 : 9, 9, 9);
+            drawTexture(matrices, x - 15 + 26, y + 5, 24 + 27, focused == null ? 0 : insideDelete ? 18 : 9, 9, 9);
         resetWidget.x = x + entryWidth - resetWidget.getWidth();
         resetWidget.x = x + entryWidth - resetWidget.getWidth();
         resetWidget.y = y;
         resetWidget.y = y;
         resetWidget.active = isEdited();
         resetWidget.active = isEdited();
         resetWidget.render(matrices, mouseX, mouseY, delta);
         resetWidget.render(matrices, mouseX, mouseY, delta);
-        MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, getDisplayedFieldName(), isDeleteButtonEnabled() ? x + 24 : x + 24 - 9, y + 5, labelWidget.rectangle.contains(mouseX, mouseY) && !resetWidget.isMouseOver(mouseX, mouseY) && !insideDelete && !insideCreateNew ? 0xffe6fe16 : getPreferredTextColor());
+        MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, getDisplayedFieldName(), isDeleteButtonEnabled() ? x + 24 : x + 24 - 9, y + 6, labelWidget.rectangle.contains(mouseX, mouseY) && !resetWidget.isMouseOver(mouseX, mouseY) && !insideDelete && !insideCreateNew ? 0xffe6fe16 : getPreferredTextColor());
         if (expanded) {
         if (expanded) {
             int yy = y + 24;
             int yy = y + 24;
             for (BaseListCell cell : cells) {
             for (BaseListCell cell : cells) {

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/BooleanListEntry.java

@@ -81,8 +81,8 @@ public class BooleanListEntry extends TooltipListEntry<Boolean> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && defaultValue.get() != bool.get();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && defaultValue.get() != bool.get();
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -91,11 +91,11 @@ public class BooleanListEntry extends TooltipListEntry<Boolean> {
         this.buttonWidget.setMessage(getYesNoText(bool.get()));
         this.buttonWidget.setMessage(getYesNoText(bool.get()));
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, 16777215);
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, 16777215);
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.buttonWidget.x = x + resetButton.getWidth() + 2;
             this.buttonWidget.x = x + resetButton.getWidth() + 2;
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.buttonWidget.x = x + entryWidth - 150;
             this.buttonWidget.x = x + entryWidth - 150;
         }
         }

+ 2 - 2
src/main/java/me/shedaniel/clothconfig2/gui/entries/ColorEntry.java

@@ -46,8 +46,8 @@ public class ColorEntry extends TextFieldListEntry<Integer> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         this.colorDisplayWidget.y = y;
         this.colorDisplayWidget.y = y;
         ColorValue value = getColorValue(textFieldWidget.getText());
         ColorValue value = getColorValue(textFieldWidget.getText());
         if (!value.hasError())
         if (!value.hasError())

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/DropdownBoxEntry.java

@@ -61,8 +61,8 @@ public class DropdownBoxEntry<T> extends TooltipListEntry<T> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && (!defaultValue.get().equals(getValue()) || getConfigError().isPresent());
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && (!defaultValue.get().equals(getValue()) || getConfigError().isPresent());
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -70,11 +70,11 @@ public class DropdownBoxEntry<T> extends TooltipListEntry<T> {
         this.selectionElement.bounds.y = y;
         this.selectionElement.bounds.y = y;
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, getPreferredTextColor());
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.selectionElement.bounds.x = x + resetButton.getWidth() + 1;
             this.selectionElement.bounds.x = x + resetButton.getWidth() + 1;
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.selectionElement.bounds.x = x + entryWidth - 150 + 1;
             this.selectionElement.bounds.x = x + entryWidth - 150 + 1;
         }
         }

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/IntegerSliderEntry.java

@@ -119,8 +119,8 @@ public class IntegerSliderEntry extends TooltipListEntry<Integer> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && defaultValue.get() != value.get();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && defaultValue.get() != value.get();
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -128,11 +128,11 @@ public class IntegerSliderEntry extends TooltipListEntry<Integer> {
         this.sliderWidget.y = y;
         this.sliderWidget.y = y;
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, getPreferredTextColor());
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.sliderWidget.x = x + resetButton.getWidth() + 1;
             this.sliderWidget.x = x + resetButton.getWidth() + 1;
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.sliderWidget.x = x + entryWidth - 150;
             this.sliderWidget.x = x + entryWidth - 150;
         }
         }

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/KeyCodeEntry.java

@@ -104,8 +104,8 @@ public class KeyCodeEntry extends TooltipListEntry<ModifierKeyCode> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && !getDefaultValue().get().equals(getValue());
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && !getDefaultValue().get().equals(getValue());
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -116,11 +116,11 @@ public class KeyCodeEntry extends TooltipListEntry<ModifierKeyCode> {
             this.buttonWidget.setMessage(new LiteralText("> ").formatted(Formatting.WHITE).append(this.buttonWidget.getMessage().copy().formatted(Formatting.YELLOW)).append(new LiteralText(" <").formatted(Formatting.WHITE)));
             this.buttonWidget.setMessage(new LiteralText("> ").formatted(Formatting.WHITE).append(this.buttonWidget.getMessage().copy().formatted(Formatting.YELLOW)).append(new LiteralText(" <").formatted(Formatting.WHITE)));
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, 16777215);
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, 16777215);
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.buttonWidget.x = x + resetButton.getWidth() + 2;
             this.buttonWidget.x = x + resetButton.getWidth() + 2;
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.buttonWidget.x = x + entryWidth - 150;
             this.buttonWidget.x = x + entryWidth - 150;
         }
         }

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/LongSliderEntry.java

@@ -119,8 +119,8 @@ public class LongSliderEntry extends TooltipListEntry<Long> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && defaultValue.get() != value.get();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && defaultValue.get() != value.get();
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -128,11 +128,11 @@ public class LongSliderEntry extends TooltipListEntry<Long> {
         this.sliderWidget.y = y;
         this.sliderWidget.y = y;
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, getPreferredTextColor());
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.sliderWidget.x = x + resetButton.getWidth() + 1;
             this.sliderWidget.x = x + resetButton.getWidth() + 1;
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.sliderWidget.x = x + entryWidth - 150;
             this.sliderWidget.x = x + entryWidth - 150;
         }
         }

+ 9 - 14
src/main/java/me/shedaniel/clothconfig2/gui/entries/MultiElementListEntry.java

@@ -4,7 +4,6 @@ import com.google.common.collect.Lists;
 import com.mojang.blaze3d.systems.RenderSystem;
 import com.mojang.blaze3d.systems.RenderSystem;
 import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import me.shedaniel.clothconfig2.api.Expandable;
 import me.shedaniel.clothconfig2.api.Expandable;
-import me.shedaniel.clothconfig2.gui.widget.DynamicEntryListWidget;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.math.Rectangle;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.fabricmc.api.Environment;
@@ -90,25 +89,21 @@ public class MultiElementListEntry<T> extends TooltipListEntry<T> implements Exp
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
-        widget.rectangle.x = x - 19;
-        widget.rectangle.y = y;
-        widget.rectangle.width = entryWidth + 19;
-        widget.rectangle.height = 24;
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         MinecraftClient.getInstance().getTextureManager().bindTexture(CONFIG_TEX);
         MinecraftClient.getInstance().getTextureManager().bindTexture(CONFIG_TEX);
         DiffuseLighting.disable();
         DiffuseLighting.disable();
         RenderSystem.color4f(1, 1, 1, 1);
         RenderSystem.color4f(1, 1, 1, 1);
-        drawTexture(matrices, x - 15, y + 4, 24, (widget.rectangle.contains(mouseX, mouseY) ? 18 : 0) + (expanded ? 9 : 0), 9, 9);
-        MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, getDisplayedFieldName(), x, y + 5, widget.rectangle.contains(mouseX, mouseY) ? 0xffe6fe16 : -1);
-        for (AbstractConfigListEntry<?> entry : entries) {
-            entry.setParent((DynamicEntryListWidget) getParent());
+        drawTexture(matrices, x - 15, y + 5, 24, (widget.rectangle.contains(mouseX, mouseY) ? 18 : 0) + (expanded ? 9 : 0), 9, 9);
+        MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, getDisplayedFieldName(), x, y + 6, widget.rectangle.contains(mouseX, mouseY) ? 0xffe6fe16 : -1);
+        for (AbstractConfigListEntry entry : entries) {
+            entry.setParent(getParent());
             entry.setScreen(getConfigScreen());
             entry.setScreen(getConfigScreen());
         }
         }
         if (expanded) {
         if (expanded) {
             int yy = y + 24;
             int yy = y + 24;
             for (AbstractConfigListEntry<?> entry : entries) {
             for (AbstractConfigListEntry<?> entry : entries) {
-                entry.render(matrices, -1, yy, x + 14, entryWidth - 14, entry.getItemHeight(), mouseX, mouseY, isSelected, delta);
+                entry.render(matrices, -1, yy, x + 14, entryWidth - 14, entry.getItemHeight(), mouseX, mouseY, isHovered, delta);
                 yy += entry.getItemHeight();
                 yy += entry.getItemHeight();
                 yy += Math.max(0, entry.getMorePossibleHeight());
                 yy += Math.max(0, entry.getMorePossibleHeight());
             }
             }
@@ -116,12 +111,12 @@ public class MultiElementListEntry<T> extends TooltipListEntry<T> implements Exp
     }
     }
     
     
     @Override
     @Override
-    public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
+    public Rectangle getEntryArea(int x, int y, int entryWidth, int entryHeight) {
         widget.rectangle.x = x - 15;
         widget.rectangle.x = x - 15;
         widget.rectangle.y = y;
         widget.rectangle.y = y;
         widget.rectangle.width = entryWidth + 15;
         widget.rectangle.width = entryWidth + 15;
         widget.rectangle.height = 24;
         widget.rectangle.height = 24;
-        return widget.rectangle.contains(mouseX, mouseY) && getParent().isMouseOver(mouseX, mouseY);
+        return new Rectangle(getParent().left, y, getParent().right - getParent().left, 20);
     }
     }
     
     
     @Override
     @Override

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/SelectionListEntry.java

@@ -99,8 +99,8 @@ public class SelectionListEntry<T> extends TooltipListEntry<T> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && getDefaultIndex() != this.index.get();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && getDefaultIndex() != this.index.get();
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -109,11 +109,11 @@ public class SelectionListEntry<T> extends TooltipListEntry<T> {
         this.buttonWidget.setMessage(nameProvider.apply(getValue()));
         this.buttonWidget.setMessage(nameProvider.apply(getValue()));
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, getPreferredTextColor());
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.buttonWidget.x = x + resetButton.getWidth() + 2;
             this.buttonWidget.x = x + resetButton.getWidth() + 2;
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.buttonWidget.x = x + entryWidth - 150;
             this.buttonWidget.x = x + entryWidth - 150;
         }
         }

+ 4 - 8
src/main/java/me/shedaniel/clothconfig2/gui/entries/SubCategoryListEntry.java

@@ -83,15 +83,11 @@ public class SubCategoryListEntry extends TooltipListEntry<List<AbstractConfigLi
     @Override
     @Override
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
         super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
-        widget.rectangle.x = x - 19;
-        widget.rectangle.y = y;
-        widget.rectangle.width = entryWidth + 19;
-        widget.rectangle.height = 24;
         MinecraftClient.getInstance().getTextureManager().bindTexture(CONFIG_TEX);
         MinecraftClient.getInstance().getTextureManager().bindTexture(CONFIG_TEX);
         DiffuseLighting.disable();
         DiffuseLighting.disable();
         RenderSystem.color4f(1, 1, 1, 1);
         RenderSystem.color4f(1, 1, 1, 1);
-        drawTexture(matrices, x - 15, y + 4, 24, (widget.rectangle.contains(mouseX, mouseY) ? 18 : 0) + (expanded ? 9 : 0), 9, 9);
-        MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, getDisplayedFieldName(), x, y + 5, widget.rectangle.contains(mouseX, mouseY) ? 0xffe6fe16 : -1);
+        drawTexture(matrices, x - 15, y + 5, 24, (widget.rectangle.contains(mouseX, mouseY) ? 18 : 0) + (expanded ? 9 : 0), 9, 9);
+        MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, getDisplayedFieldName(), x, y + 6, widget.rectangle.contains(mouseX, mouseY) ? 0xffe6fe16 : -1);
         for (AbstractConfigListEntry<?> entry : entries) {
         for (AbstractConfigListEntry<?> entry : entries) {
             entry.setParent((DynamicEntryListWidget) getParent());
             entry.setParent((DynamicEntryListWidget) getParent());
             entry.setScreen(getConfigScreen());
             entry.setScreen(getConfigScreen());
@@ -148,12 +144,12 @@ public class SubCategoryListEntry extends TooltipListEntry<List<AbstractConfigLi
     }
     }
     
     
     @Override
     @Override
-    public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
+    public Rectangle getEntryArea(int x, int y, int entryWidth, int entryHeight) {
         widget.rectangle.x = x - 15;
         widget.rectangle.x = x - 15;
         widget.rectangle.y = y;
         widget.rectangle.y = y;
         widget.rectangle.width = entryWidth + 15;
         widget.rectangle.width = entryWidth + 15;
         widget.rectangle.height = 24;
         widget.rectangle.height = 24;
-        return widget.rectangle.contains(mouseX, mouseY) && getParent().isMouseOver(mouseX, mouseY);
+        return new Rectangle(getParent().left, y, getParent().right - getParent().left, 20);
     }
     }
     
     
     @Override
     @Override

+ 4 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/TextFieldListEntry.java

@@ -98,8 +98,8 @@ public abstract class TextFieldListEntry<T> extends TooltipListEntry<T> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         Window window = MinecraftClient.getInstance().getWindow();
         Window window = MinecraftClient.getInstance().getWindow();
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && !isMatchDefault(textFieldWidget.getText());
         this.resetButton.active = isEditable() && getDefaultValue().isPresent() && !isMatchDefault(textFieldWidget.getText());
         this.resetButton.y = y;
         this.resetButton.y = y;
@@ -107,11 +107,11 @@ public abstract class TextFieldListEntry<T> extends TooltipListEntry<T> {
         this.textFieldWidget.y = y + 1;
         this.textFieldWidget.y = y + 1;
         Text displayedFieldName = getDisplayedFieldName();
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 6, getPreferredTextColor());
             this.resetButton.x = x;
             this.resetButton.x = x;
             this.textFieldWidget.x = x + resetButton.getWidth();
             this.textFieldWidget.x = x + resetButton.getWidth();
         } else {
         } else {
-            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 5, getPreferredTextColor());
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, x, y + 6, getPreferredTextColor());
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.resetButton.x = x + entryWidth - resetButton.getWidth();
             this.textFieldWidget.x = x + entryWidth - 148;
             this.textFieldWidget.x = x + entryWidth - 148;
         }
         }

+ 2 - 2
src/main/java/me/shedaniel/clothconfig2/gui/entries/TextListEntry.java

@@ -42,8 +42,8 @@ public class TextListEntry extends TooltipListEntry<Object> {
     }
     }
     
     
     @Override
     @Override
-    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
+    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         this.savedWidth = entryWidth;
         this.savedWidth = entryWidth;
         int yy = y + 4;
         int yy = y + 4;
         List<StringRenderable> strings = MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(text, savedWidth);
         List<StringRenderable> strings = MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(text, savedWidth);

+ 1 - 4
src/main/java/me/shedaniel/clothconfig2/gui/entries/TooltipListEntry.java

@@ -33,6 +33,7 @@ public abstract class TooltipListEntry<T> extends AbstractConfigListEntry<T> {
     
     
     @Override
     @Override
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isHovered, delta);
         if (isMouseInside(mouseX, mouseY, x, y, entryWidth, entryHeight)) {
         if (isMouseInside(mouseX, mouseY, x, y, entryWidth, entryHeight)) {
             Optional<Text[]> tooltip = getTooltip();
             Optional<Text[]> tooltip = getTooltip();
             if (tooltip.isPresent() && tooltip.get().length > 0)
             if (tooltip.isPresent() && tooltip.get().length > 0)
@@ -40,10 +41,6 @@ public abstract class TooltipListEntry<T> extends AbstractConfigListEntry<T> {
         }
         }
     }
     }
     
     
-    public boolean isMouseInside(int mouseX, int mouseY, int x, int y, int entryWidth, int entryHeight) {
-        return mouseX >= x && mouseY >= y && mouseX <= x + entryWidth && mouseY <= y + entryHeight && getParent().isMouseOver(mouseX, mouseY);
-    }
-    
     public Optional<Text[]> getTooltip() {
     public Optional<Text[]> getTooltip() {
         if (tooltipSupplier != null)
         if (tooltipSupplier != null)
             return tooltipSupplier.get();
             return tooltipSupplier.get();