From d5a6007944be0d6c51028c32bad5f460bb7b6aca Mon Sep 17 00:00:00 2001 From: David Date: Mon, 2 Sep 2019 14:16:56 +0100 Subject: [PATCH 1/5] timersconfig: fix typo in antipoison description (#9781) --- .../java/net/runelite/client/plugins/timers/TimersConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java index 14fb587019..c059587ed7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java @@ -44,7 +44,7 @@ public interface TimersConfig extends Config @ConfigItem( keyName = "showAntipoison", name = "Antipoison/Venom timers", - description = "Configures whether timers for Antipoision, Antidoe, Antivenom are is displayed" + description = "Configures whether timers for Antipoison, Antidote and Antivenom are displayed" ) default boolean showAntiPoison() { From 17634bb2a131ae8c1299bbec4cdb8f939e3eb63a Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 2 Sep 2019 22:41:26 -0400 Subject: [PATCH 2/5] plugin manager: fix two log format strings --- .../main/java/net/runelite/client/plugins/PluginManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index b820f2d6b3..25d379c998 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -141,7 +141,7 @@ public class PluginManager } catch (PluginInstantiationException e) { - log.warn("Error during starting/stopping plugin {}. {}", plugin.getClass().getSimpleName(), e); + log.warn("Error during starting/stopping plugin {}", plugin.getClass().getSimpleName(), e); } })); } @@ -210,7 +210,7 @@ public class PluginManager } catch (PluginInstantiationException ex) { - log.warn("Unable to start plugin {}. {}", plugin.getClass().getSimpleName(), ex); + log.warn("Unable to start plugin {}", plugin.getClass().getSimpleName(), ex); plugins.remove(plugin); } From ef7ad04ef9eca9744521d7848790c6e0b4fb0ef5 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Sep 2019 17:00:15 -0400 Subject: [PATCH 3/5] menu entry swapper: optimize menu searching for strict matching Currently with many menu entries (~256) the searching is very slow and measurably causes FPS drops --- .../MenuEntrySwapperPlugin.java | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 8f2464dd4d..8c0e99df93 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -25,8 +25,10 @@ */ package net.runelite.client.plugins.menuentryswapper; +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; +import java.util.List; import java.util.Set; import javax.inject.Inject; import lombok.Getter; @@ -130,6 +132,8 @@ public class MenuEntrySwapperPlugin extends Plugin @Setter private boolean shiftModifier = false; + private final ArrayListMultimap optionIndexes = ArrayListMultimap.create(); + @Provides MenuEntrySwapperConfig provideConfig(ConfigManager configManager) { @@ -354,13 +358,22 @@ public class MenuEntrySwapperPlugin extends Plugin @Subscribe public void onMenuEntryAdded(MenuEntryAdded event) { + final String option = Text.removeTags(event.getOption()).toLowerCase(); + + if (event.getType() == MenuAction.CANCEL.getId()) + { + optionIndexes.clear(); + } + + int size = optionIndexes.size(); + optionIndexes.put(option, size); + if (client.getGameState() != GameState.LOGGED_IN) { return; } final int eventId = event.getIdentifier(); - final String option = Text.removeTags(event.getOption()).toLowerCase(); final String target = Text.removeTags(event.getTarget()).toLowerCase(); final NPC hintArrowNpc = client.getHintArrowNpc(); @@ -624,21 +637,33 @@ public class MenuEntrySwapperPlugin extends Plugin private int searchIndex(MenuEntry[] entries, String option, String target, boolean strict) { - for (int i = entries.length - 1; i >= 0; i--) + if (strict) { - MenuEntry entry = entries[i]; - String entryOption = Text.removeTags(entry.getOption()).toLowerCase(); - String entryTarget = Text.removeTags(entry.getTarget()).toLowerCase(); + List indexes = optionIndexes.get(option); - if (strict) + // We want the last index which matches the target, as that is what is top-most + // on the menu + for (int i = indexes.size() - 1; i >= 0; --i) { - if (entryOption.equals(option) && entryTarget.equals(target)) + int idx = indexes.get(i); + MenuEntry entry = entries[idx]; + String entryTarget = Text.removeTags(entry.getTarget()).toLowerCase(); + + if (entryTarget.equals(target)) { - return i; + return idx; } } - else + } + else + { + // Without strict matching we have to iterate all entries... + for (int i = entries.length - 1; i >= 0; i--) { + MenuEntry entry = entries[i]; + String entryOption = Text.removeTags(entry.getOption()).toLowerCase(); + String entryTarget = Text.removeTags(entry.getTarget()).toLowerCase(); + if (entryOption.contains(option.toLowerCase()) && entryTarget.equals(target)) { return i; From 1c2dbf019ea856b188d3ccfb2c4326b61b1c0773 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Tue, 3 Sep 2019 06:24:16 -0600 Subject: [PATCH 4/5] gpu: wait for canvas to get it's native peer before starting OpenGL --- .../net/runelite/client/plugins/gpu/GpuPlugin.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index a53fa913be..66e0977b32 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -235,6 +235,15 @@ public class GpuPlugin extends Plugin implements DrawCallbacks bufferId = uvBufferId = uniformBufferId = -1; unorderedModels = smallModels = largeModels = 0; + canvas = client.getCanvas(); + + if (!canvas.isDisplayable()) + { + return false; + } + + canvas.setIgnoreRepaint(true); + vertexBuffer = new GpuIntBuffer(); uvBuffer = new GpuFloatBuffer(); @@ -242,9 +251,6 @@ public class GpuPlugin extends Plugin implements DrawCallbacks modelBufferSmall = new GpuIntBuffer(); modelBuffer = new GpuIntBuffer(); - canvas = client.getCanvas(); - canvas.setIgnoreRepaint(true); - if (log.isDebugEnabled()) { System.setProperty("jogl.debug", "true"); @@ -340,7 +346,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks shutDown(); } - + return true; }); } From f6eac304c3354d1ed6d0b667fd6d7379325897e9 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Sep 2019 23:06:56 -0400 Subject: [PATCH 5/5] slayer plugin: do not show task infobox on login Co-authored-by: Jasper Ketelaar Co-authored-by: Jordan Atwood --- .../client/plugins/slayer/SlayerPlugin.java | 19 ++++++++++++++----- .../plugins/slayer/SlayerPluginTest.java | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 228a0c6101..e446973a85 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -228,7 +228,7 @@ public class SlayerPlugin extends Plugin streak = config.streak(); setExpeditiousChargeCount(config.expeditious()); setSlaughterChargeCount(config.slaughter()); - clientThread.invoke(() -> setTask(config.taskName(), config.amount(), config.initialAmount(), config.taskLocation())); + clientThread.invoke(() -> setTask(config.taskName(), config.amount(), config.initialAmount(), config.taskLocation(), false)); } } @@ -277,7 +277,7 @@ public class SlayerPlugin extends Plugin streak = config.streak(); setExpeditiousChargeCount(config.expeditious()); setSlaughterChargeCount(config.slaughter()); - setTask(config.taskName(), config.amount(), config.initialAmount(), config.taskLocation()); + setTask(config.taskName(), config.amount(), config.initialAmount(), config.taskLocation(), false); loginFlag = false; } break; @@ -559,7 +559,7 @@ public class SlayerPlugin extends Plugin @Subscribe private void onConfigChanged(ConfigChanged event) { - if (!event.getGroup().equals("slayer")) + if (!event.getGroup().equals("slayer") || !event.getKey().equals("infobox")) { return; } @@ -674,6 +674,11 @@ public class SlayerPlugin extends Plugin } private void setTask(String name, int amt, int initAmt, String location) + { + setTask(name, amt, initAmt, location, true); + } + + private void setTask(String name, int amt, int initAmt, String location, boolean addCounter) { taskName = name; amount = amt; @@ -681,8 +686,12 @@ public class SlayerPlugin extends Plugin taskLocation = location; save(); removeCounter(); - addCounter(); - infoTimer = Instant.now(); + + if (addCounter) + { + infoTimer = Instant.now(); + addCounter(); + } Task task = Task.getTask(name); rebuildTargetNames(task); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index 4eed41d277..2781ddbb16 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -33,12 +33,14 @@ import javax.inject.Inject; import net.runelite.api.ChatMessageType; import static net.runelite.api.ChatMessageType.GAMEMESSAGE; import net.runelite.api.Client; +import net.runelite.api.GameState; import net.runelite.api.MessageNode; import net.runelite.api.Player; import net.runelite.api.Skill; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ExperienceChanged; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; @@ -703,4 +705,21 @@ public class SlayerPluginTest assertEquals(34, slayerPlugin.getAmount()); } + + @Test + public void infoboxNotAddedOnLogin() + { + when(slayerConfig.taskName()).thenReturn(Task.BLOODVELD.getName()); + when(slayerConfig.showInfobox()).thenReturn(true); + + GameStateChanged loggingIn = new GameStateChanged(); + loggingIn.setGameState(GameState.LOGGING_IN); + slayerPlugin.onGameStateChanged(loggingIn); + + GameStateChanged loggedIn = new GameStateChanged(); + loggedIn.setGameState(GameState.LOGGED_IN); + slayerPlugin.onGameStateChanged(loggedIn); + + verify(infoBoxManager, never()).addInfoBox(any()); + } }