From da23f837ccb622d76034c476845e008e8a0ba1e9 Mon Sep 17 00:00:00 2001 From: nea Date: Sun, 22 Jan 2023 18:54:49 +0100 Subject: scrolling --- .../moulberry/notenoughupdates/SomeClass.java | 71 ++++++++++++++++++++++ .../notenoughupdates/mixins/MixinGuiUtils.java | 14 +++++ 2 files changed, 85 insertions(+) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java 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 . + */ + +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 lastRenderedTooltip = null; + static int scrollOffset = 0; + static boolean didRenderTooltip = false; + + public static void handleTextLineRendering(List 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 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 textLines, + int mouseX, + int mouseY, + int screenWidth, + int screenHeight, + int maxTextWidth, + FontRenderer font, + CallbackInfo ci + ) { + SomeClass.handleTextLineRendering(textLines); + } } -- cgit