diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java index fdc05403df..2ebf2a4318 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java @@ -36,12 +36,11 @@ import net.runelite.api.SpriteID; import net.runelite.api.VarClientInt; import net.runelite.api.Varbits; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.VarClientIntChanged; import net.runelite.api.events.VarbitChanged; -import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.Widget; -import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetType; @@ -104,46 +103,45 @@ public class QuestListPlugin extends Plugin } @Subscribe - public void onWidgetLoaded(WidgetLoaded widgetLoaded) + public void onScriptCallbackEvent(ScriptCallbackEvent event) { - if (widgetLoaded.getGroupId() == WidgetID.QUESTLIST_GROUP_ID) + if (!event.getEventName().equals("questProgressUpdated")) { - Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX); - if (header != null) - { - questSearchButton = header.createChild(-1, WidgetType.GRAPHIC); - questSearchButton.setSpriteId(SpriteID.GE_SEARCH); - questSearchButton.setOriginalWidth(18); - questSearchButton.setOriginalHeight(17); - questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT); - questSearchButton.setOriginalX(5); - questSearchButton.setOriginalY(0); - questSearchButton.setHasListener(true); - questSearchButton.setAction(1, MENU_OPEN); - questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch()); - questSearchButton.setName(MENU_SEARCH); - questSearchButton.revalidate(); + return; + } - questHideButton = header.createChild(-1, WidgetType.GRAPHIC); - redrawHideButton(); + Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX); + if (header != null) + { + questSearchButton = header.createChild(-1, WidgetType.GRAPHIC); + questSearchButton.setSpriteId(SpriteID.GE_SEARCH); + questSearchButton.setOriginalWidth(18); + questSearchButton.setOriginalHeight(17); + questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT); + questSearchButton.setOriginalX(5); + questSearchButton.setOriginalY(0); + questSearchButton.setHasListener(true); + questSearchButton.setAction(1, MENU_OPEN); + questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch()); + questSearchButton.setName(MENU_SEARCH); + questSearchButton.revalidate(); - questHideButton.setOriginalWidth(13); - questHideButton.setOriginalHeight(13); - questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT); - questHideButton.setOriginalX(24); - questHideButton.setOriginalY(2); - questHideButton.setHasListener(true); - questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden()); - questHideButton.setAction(1, MENU_TOGGLE); - questHideButton.revalidate(); + questHideButton = header.createChild(-1, WidgetType.GRAPHIC); + redrawHideButton(); - questSet = new EnumMap<>(QuestContainer.class); + questHideButton.setOriginalWidth(13); + questHideButton.setOriginalHeight(13); + questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT); + questHideButton.setOriginalX(24); + questHideButton.setOriginalY(2); + questHideButton.setHasListener(true); + questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden()); + questHideButton.setAction(1, MENU_TOGGLE); + questHideButton.revalidate(); - if (!header.isHidden()) - { - updateFilter(); - } - } + questSet = new EnumMap<>(QuestContainer.class); + + updateFilter(); } } @@ -259,21 +257,26 @@ public class QuestListPlugin extends Plugin int y = miniList.getRelativeY() + miniList.getHeight() + 10; - int newHeight = 0; + int newHeight; if (container.getScrollHeight() > 0) { newHeight = (container.getScrollY() * y) / container.getScrollHeight(); } + else + { + newHeight = 0; + } container.setScrollHeight(y); container.revalidateScroll(); - client.runScript( - ScriptID.UPDATE_SCROLLBAR, - WidgetInfo.QUESTLIST_SCROLLBAR.getId(), - WidgetInfo.QUESTLIST_CONTAINER.getId(), - newHeight - ); + clientThread.invokeLater(() -> + client.runScript( + ScriptID.UPDATE_SCROLLBAR, + WidgetInfo.QUESTLIST_SCROLLBAR.getId(), + WidgetInfo.QUESTLIST_CONTAINER.getId(), + newHeight + )); } private void updateList(QuestContainer questContainer, String filter) @@ -309,7 +312,7 @@ public class QuestListPlugin extends Plugin // Find all of the widgets that we care about, sorting by their Y value quests = Arrays.stream(list.getDynamicChildren()) .sorted(Comparator.comparing(Widget::getRelativeY)) - .filter(w -> !w.isSelfHidden() && !QUEST_HEADERS.contains(w.getText())) + .filter(w -> !QUEST_HEADERS.contains(w.getText())) .map(w -> new QuestWidget(w, Text.removeTags(w.getText()).toLowerCase())) .collect(Collectors.toList()); questSet.put(questContainer, quests); diff --git a/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm b/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm index 0f19883b4f..f7f91cd83e 100644 --- a/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm +++ b/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm @@ -193,4 +193,6 @@ LABEL155: istore 5 jump LABEL112 LABEL160: + sconst "questProgressUpdated" + runelite_callback return