diff options
author | nea <nea@nea.moe> | 2023-01-22 18:54:49 +0100 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-02-13 12:48:51 +0100 |
commit | da23f837ccb622d76034c476845e008e8a0ba1e9 (patch) | |
tree | 65714d744842e44c63d6c845a94d0ff54658fb1d | |
parent | e87331858675faed39a090cfdd6f6c7ce3b3f0d0 (diff) | |
download | NotEnoughUpdates-da23f837ccb622d76034c476845e008e8a0ba1e9.tar.gz NotEnoughUpdates-da23f837ccb622d76034c476845e008e8a0ba1e9.tar.bz2 NotEnoughUpdates-da23f837ccb622d76034c476845e008e8a0ba1e9.zip |
scrolling
-rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java | 71 | ||||
-rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java | 14 |
2 files changed, 85 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java b/src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java new file mode 100644 index 00000000..7f20a44d --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2023 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. + */ + +package io.github.moulberry.notenoughupdates; + +import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.lwjgl.input.Mouse; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@NEUAutoSubscribe +public class SomeClass { + static List<String> lastRenderedTooltip = null; + static int scrollOffset = 0; + static boolean didRenderTooltip = false; + + public static void handleTextLineRendering(List<String> tooltip) { + didRenderTooltip = true; + if (!Objects.equals(tooltip, lastRenderedTooltip)) { + lastRenderedTooltip = new ArrayList<>(tooltip); + scrollOffset = 0; + return; + } + lastRenderedTooltip = new ArrayList<>(tooltip); + for (int i = 0; i < scrollOffset && tooltip.size() > 1; i++) { + tooltip.remove(0); + } + } + + @SubscribeEvent + public void onMouse(GuiScreenEvent.MouseInputEvent.Pre event) { + if (Mouse.getEventDWheel() < 0) { + scrollOffset = Math.max(0, scrollOffset - 1); + } else if (Mouse.getEventDWheel() > 0) { + scrollOffset = Math.min( + lastRenderedTooltip == null ? 0 : Math.max(lastRenderedTooltip.size() - 1, 0), + scrollOffset + 1 + ); + } + } + + @SubscribeEvent + public void onTick(TickEvent.RenderTickEvent event) { + if (event.phase == TickEvent.Phase.START) { + didRenderTooltip = false; + } else if (!didRenderTooltip) { + lastRenderedTooltip = null; + } + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java index 0ad2a098..74a072b2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java @@ -20,6 +20,7 @@ package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.SomeClass; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -68,4 +69,17 @@ public class MixinGuiUtils { List<String> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, FontRenderer font, CallbackInfo ci) { Utils.resetGuiScale(); } + @Inject(at = @At("HEAD"), method = "drawHoveringText", remap = false) + private static void onDrawHoveringText( + List<String> textLines, + int mouseX, + int mouseY, + int screenWidth, + int screenHeight, + int maxTextWidth, + FontRenderer font, + CallbackInfo ci + ) { + SomeClass.handleTextLineRendering(textLines); + } } |