From edeacd809cbbce3c5c82932edb0914db4de9d05b Mon Sep 17 00:00:00 2001 From: Space Walker Date: Sat, 23 Dec 2023 14:56:54 +0100 Subject: [PATCH] fix scroll capping --- .../gui/widget/entries/EntryListWidget.java | 18 ++++++++++++++- .../modmenu/mixin/MixinListWidget.java | 23 +++++++++++++++++++ .../modmenu/util/ListWidgetHelper.java | 7 ++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/terraformersmc/modmenu/mixin/MixinListWidget.java create mode 100644 src/main/java/com/terraformersmc/modmenu/util/ListWidgetHelper.java diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/EntryListWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/EntryListWidget.java index 6eede5d5..ee53b2c7 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/EntryListWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/EntryListWidget.java @@ -4,13 +4,15 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.vertex.BufferBuilder; + import com.terraformersmc.modmenu.util.GlUtil; +import com.terraformersmc.modmenu.util.ListWidgetHelper; import com.terraformersmc.modmenu.util.MathUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.widget.ListWidget; -public abstract class EntryListWidget extends ListWidget { +public abstract class EntryListWidget extends ListWidget implements ListWidgetHelper { protected double scrollAmount; private boolean scrolling; @@ -295,6 +297,20 @@ public void setScrollAmount(double amount) { this.scrollAmount = amount; } + @Override + public void doCapScrolling() { + int max = this.getHeight() - (this.maxY - this.minY - 4); + if (max < 0) { + max /= 2; + } + if (this.scrollAmount < 0.0F) { + this.scrollAmount = 0.0F; + } + if (this.scrollAmount > max) { + this.scrollAmount = max; + } + } + protected int getMaxScroll() { return Math.max(0, this.getHeight() - (this.maxY - this.minY - 4)); } diff --git a/src/main/java/com/terraformersmc/modmenu/mixin/MixinListWidget.java b/src/main/java/com/terraformersmc/modmenu/mixin/MixinListWidget.java new file mode 100644 index 00000000..c0a417ba --- /dev/null +++ b/src/main/java/com/terraformersmc/modmenu/mixin/MixinListWidget.java @@ -0,0 +1,23 @@ +package com.terraformersmc.modmenu.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.terraformersmc.modmenu.util.ListWidgetHelper; + +import net.minecraft.client.gui.widget.ListWidget; + +@Mixin(ListWidget.class) +public class MixinListWidget implements ListWidgetHelper { + + @Inject(method = "capScrolling", at = @At("HEAD")) + private void modmenu$capScrolling(CallbackInfo ci) { + this.doCapScrolling(); + } + + @Override + public void doCapScrolling() { + } +} diff --git a/src/main/java/com/terraformersmc/modmenu/util/ListWidgetHelper.java b/src/main/java/com/terraformersmc/modmenu/util/ListWidgetHelper.java new file mode 100644 index 00000000..f3790630 --- /dev/null +++ b/src/main/java/com/terraformersmc/modmenu/util/ListWidgetHelper.java @@ -0,0 +1,7 @@ +package com.terraformersmc.modmenu.util; + +public interface ListWidgetHelper { + + void doCapScrolling(); + +}