From f4ce10e394254407b2868b60249c81324ddc338e Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Wed, 4 Sep 2019 10:18:33 +0200 Subject: [PATCH] Agility plugin: generate less garbage objects and use a color range for levels --- .../client/plugins/agility/AgilityPlugin.java | 17 +++--- .../net/runelite/client/util/ColorUtil.java | 61 +++++++++++++++++++ runescape-client/src/main/java/class225.java | 21 ++++--- runescape-client/src/main/java/class51.java | 2 +- runescape-client/src/main/java/class65.java | 2 +- 5 files changed, 82 insertions(+), 21 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index d283864740..54f2108588 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.agility; +import com.google.common.primitives.Ints; import com.google.inject.Provides; import java.awt.Color; import java.util.ArrayList; @@ -507,21 +508,17 @@ public class AgilityPlugin extends Plugin return; } - final int entryId = event.getIdentifier(); - MenuEntry[] menuEntries = client.getMenuEntries(); - for (Obstacle nearbyObstacle : getObstacles().values()) { AgilityShortcut shortcut = nearbyObstacle.getShortcut(); - if (shortcut != null && Arrays.stream(shortcut.getObstacleIds()).anyMatch(i -> i == entryId)) + if (shortcut != null && Ints.contains(shortcut.getObstacleIds(), event.getIdentifier())) { - MenuEntry entry = menuEntries[menuEntries.length - 1]; - int level = shortcut.getLevel(); - Color color = level <= getAgilityLevel() ? Color.GREEN : Color.RED; - String requirementText = " (level-" + level + ")"; + final MenuEntry entry = event.getMenuEntry(); + final int reqLevel = shortcut.getLevel(); + final String requirementText = ColorUtil.getLevelColorString(reqLevel, getAgilityLevel()) + " (level-" + reqLevel + ")"; - entry.setTarget(event.getTarget() + ColorUtil.prependColorTag(requirementText, color)); - client.setMenuEntries(menuEntries); + entry.setTarget(event.getTarget() + requirementText); + event.setWasModified(true); return; } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java index 6012e1ae10..7b881f8f2f 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java @@ -267,4 +267,65 @@ public class ColorUtil } return (color & 0x00ffffff) | (alpha << 24); } + + /** + * Returns the color a ' (level-xxx)' would have, based on + * the difference between your and their level. + * This method is the same as in rs-client. + * + * @param theirLvl The level you're comparing against + * @param yourLvl Your level + */ + public static String getLevelColorString(final int theirLvl, final int yourLvl) + { + final int diff = yourLvl - theirLvl; + + if (diff < -9) + { + return colorStartTag(0xff0000); + } + else if (diff < -6) + { + return colorStartTag(0xff3000); + } + else if (diff < -3) + { + return colorStartTag(0xff7000); + } + else if (diff < 0) + { + return colorStartTag(0xffb000); + } + else if (diff > 9) + { + return colorStartTag(0x00ff00); + } + else if (diff > 6) + { + return colorStartTag(0x40ff00); + } + else if (diff > 3) + { + return colorStartTag(0x80ff00); + } + else if (diff > 0) + { + return colorStartTag(0xc0ff00); + } + else + { + return colorStartTag(0xffff00); + } + } + + /** + * Creates a color start tag from a rgb color as a int value + * + * @param rgb the int value of a rgb color + * @return a color tag which can be put in front of stuff + */ + public static String colorStartTag(final int rgb) + { + return ""; + } } diff --git a/runescape-client/src/main/java/class225.java b/runescape-client/src/main/java/class225.java index 18f202aacb..3d10e85b81 100644 --- a/runescape-client/src/main/java/class225.java +++ b/runescape-client/src/main/java/class225.java @@ -58,24 +58,27 @@ public class class225 { signature = "(III)Ljava/lang/String;", garbageValue = "1269667837" ) - static final String method4037(int var0, int var1) { + @Export("getLevelColorString") + static final String getLevelColorString(int var0, int var1) { int var2 = var1 - var0; if (var2 < -9) { - return class16.colorStartTag(16711680); + return class16.colorStartTag(0xff0000); } else if (var2 < -6) { - return class16.colorStartTag(16723968); + return class16.colorStartTag(0xff3000); } else if (var2 < -3) { - return class16.colorStartTag(16740352); + return class16.colorStartTag(0xff7000); } else if (var2 < 0) { - return class16.colorStartTag(16756736); + return class16.colorStartTag(0xffb000); } else if (var2 > 9) { - return class16.colorStartTag(65280); + return class16.colorStartTag(0x00ff00); } else if (var2 > 6) { - return class16.colorStartTag(4259584); + return class16.colorStartTag(0x40ff00); } else if (var2 > 3) { - return class16.colorStartTag(8453888); + return class16.colorStartTag(0x80ff00); + } else if (var2 > 0) { + return class16.colorStartTag(0xc0ff00); } else { - return var2 > 0 ? class16.colorStartTag(12648192) : class16.colorStartTag(16776960); + return class16.colorStartTag(0xffff00); } } } diff --git a/runescape-client/src/main/java/class51.java b/runescape-client/src/main/java/class51.java index 2079d70dc6..68faa2d364 100644 --- a/runescape-client/src/main/java/class51.java +++ b/runescape-client/src/main/java/class51.java @@ -97,7 +97,7 @@ public class class51 { if (Client.menuOptionsCount < 400) { String var4; if (var0.skillLevel == 0) { - var4 = var0.actions[0] + var0.username + var0.actions[1] + class225.method4037(var0.combatLevel, WorldMapIcon_1.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")" + var0.actions[2]; + var4 = var0.actions[0] + var0.username + var0.actions[1] + class225.getLevelColorString(var0.combatLevel, WorldMapIcon_1.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")" + var0.actions[2]; } else { var4 = var0.actions[0] + var0.username + var0.actions[1] + " " + " (" + "skill-" + var0.skillLevel + ")" + var0.actions[2]; } diff --git a/runescape-client/src/main/java/class65.java b/runescape-client/src/main/java/class65.java index 7ff555561e..cb20b2707e 100644 --- a/runescape-client/src/main/java/class65.java +++ b/runescape-client/src/main/java/class65.java @@ -228,7 +228,7 @@ public class class65 extends RouteStrategy { if (!var0.isFollower || Client.followerIndex == var1) { String var4 = var0.name; if (var0.combatLevel != 0) { - var4 = var4 + class225.method4037(var0.combatLevel, WorldMapIcon_1.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")"; + var4 = var4 + class225.getLevelColorString(var0.combatLevel, WorldMapIcon_1.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")"; } if (var0.isFollower && Client.followerOpsLowPriority) {