From 1edd41733613273ea01432a1bb39a33bbef7cb54 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Apr 2022 19:32:10 -0400 Subject: [PATCH 1/8] api: remove Nullable on getLocalPlayer While this can be null, in the vast majority of events and also in every overlay it cannot be, and just triggers unncessary warnings from IDE inspections --- runelite-api/src/main/java/net/runelite/api/Client.java | 1 - 1 file changed, 1 deletion(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 33eeb78415..fb547e0284 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -374,7 +374,6 @@ public interface Client extends OAuthApi, GameEngine * * @return the logged in player */ - @Nullable Player getLocalPlayer(); /** From 6a4544ed2efd68904015df632be81f4fc66f6578 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 24 Apr 2022 11:32:31 -0400 Subject: [PATCH 2/8] cl: set pmd cache location --- .github/workflows/CI.yml | 2 +- ci/settings.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 144e4b27be..50a1a643bf 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,7 +16,7 @@ jobs: path: | ~/.m2/repository ~/.cache/runelite - key: ${{ runner.os }}-cache-${{ hashFiles('**/pom.xml', '**/build.sh') }} + key: ${{ runner.os }}-cache-${{ hashFiles('**/pom.xml', '**/build.sh', '**/pmd-ruleset.xml') }} restore-keys: | ${{ runner.os }}-cache- diff --git a/ci/settings.xml b/ci/settings.xml index d6caa8f543..9e0b198657 100644 --- a/ci/settings.xml +++ b/ci/settings.xml @@ -260,6 +260,7 @@ under the License. false false false + ${user.home}/.cache/runelite/pmd.cache From 36730dccbcf472f681914a0fbfa3f3d5afdc2d4f Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 24 Apr 2022 11:49:53 -0400 Subject: [PATCH 3/8] client: update pmd --- runelite-client/pmd-ruleset.xml | 11 ++++++---- runelite-client/pom.xml | 6 +++--- .../client/chat/ChatMessageBuilder.java | 2 +- .../plugins/devtools/WidgetInspector.java | 4 ++-- .../client/plugins/fishing/FishingPlugin.java | 2 +- .../client/plugins/gpu/OpenCLManager.java | 21 +++++++++---------- .../grandexchange/GrandExchangePlugin.java | 2 +- .../grounditems/GroundItemsOverlay.java | 2 +- .../grounditems/GroundItemsPlugin.java | 2 +- .../plugins/itemstats/ItemStatOverlay.java | 8 +++---- .../plugins/kourendlibrary/Bookcase.java | 4 ++-- .../plugins/kourendlibrary/Library.java | 2 +- .../runelite/client/plugins/raids/Raid.java | 2 +- .../plugins/runenergy/RunEnergyOverlay.java | 2 +- .../plugins/runepouch/RunepouchOverlay.java | 2 +- .../client/plugins/slayer/SlayerPlugin.java | 2 +- .../plugins/timetracking/TabContentPanel.java | 2 +- .../timetracking/TimeTrackingPlugin.java | 4 ++-- .../timetracking/farming/FarmingTracker.java | 10 ++++----- .../plugins/twitch/irc/TwitchIRCClient.java | 2 +- .../client/ui/overlay/OverlayUtil.java | 4 ++-- .../ui/overlay/components/LineComponent.java | 4 ++-- .../net/runelite/client/util/WorldUtil.java | 4 ++-- 23 files changed, 53 insertions(+), 51 deletions(-) diff --git a/runelite-client/pmd-ruleset.xml b/runelite-client/pmd-ruleset.xml index ebab6e2dcf..cfbbdec60e 100644 --- a/runelite-client/pmd-ruleset.xml +++ b/runelite-client/pmd-ruleset.xml @@ -53,13 +53,14 @@ - + + @@ -84,18 +85,20 @@ - - - + + + + + diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index 3228ee1b05..a415fbdd61 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -462,17 +462,17 @@ org.apache.maven.plugins maven-pmd-plugin - 3.13.0 + 3.16.0 net.sourceforge.pmd pmd-core - 6.29.0 + 6.44.0 net.sourceforge.pmd pmd-java - 6.29.0 + 6.44.0 diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java index 1b8afd0924..e6b3722cd8 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java @@ -34,7 +34,7 @@ public class ChatMessageBuilder public ChatMessageBuilder append(final ChatColorType type) { - builder.append(""); + builder.append("'); return this; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java index 3ae75019d2..42ca35240c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java @@ -447,7 +447,7 @@ class WidgetInspector extends DevToolsFrame picker = parent.createChild(-1, WidgetType.GRAPHIC); - log.info("Picker is {}.{} [{}]", WidgetInfo.TO_GROUP(picker.getId()), WidgetInfo.TO_CHILD(picker.getId()), picker.getIndex()); + log.info("Picker is {}.{} [{}]", TO_GROUP(picker.getId()), TO_CHILD(picker.getId()), picker.getIndex()); picker.setSpriteId(SpriteID.MOBILE_FINGER_ON_INTERFACE); picker.setOriginalWidth(15); @@ -521,7 +521,7 @@ class WidgetInspector extends DevToolsFrame { continue; } - String name = WidgetInfo.TO_GROUP(entry.getParam1()) + "." + WidgetInfo.TO_CHILD(entry.getParam1()); + String name = TO_GROUP(entry.getParam1()) + "." + TO_CHILD(entry.getParam1()); if (entry.getParam0() != -1) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java index 7582517cfe..63e134ce70 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java @@ -445,7 +445,7 @@ public class FishingPlugin extends Plugin if (seconds < 10) { - trawlerText.append("0"); + trawlerText.append('0'); } trawlerText.append(seconds); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/OpenCLManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/OpenCLManager.java index 634b4cb473..14e6945019 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/OpenCLManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/OpenCLManager.java @@ -41,7 +41,6 @@ import jogamp.opengl.x11.glx.X11GLXContext; import lombok.extern.slf4j.Slf4j; import net.runelite.client.plugins.gpu.template.Template; import net.runelite.client.util.OSType; -import org.jocl.CL; import static org.jocl.CL.*; import org.jocl.CLException; import org.jocl.Pointer; @@ -96,7 +95,7 @@ class OpenCLManager void init(GL4 gl) { - CL.setExceptionsEnabled(true); + setExceptionsEnabled(true); switch (OSType.getOSType()) { @@ -121,55 +120,55 @@ class OpenCLManager { if (programUnordered != null) { - CL.clReleaseProgram(programUnordered); + clReleaseProgram(programUnordered); programUnordered = null; } if (programSmall != null) { - CL.clReleaseProgram(programSmall); + clReleaseProgram(programSmall); programSmall = null; } if (programLarge != null) { - CL.clReleaseProgram(programLarge); + clReleaseProgram(programLarge); programLarge = null; } if (kernelUnordered != null) { - CL.clReleaseKernel(kernelUnordered); + clReleaseKernel(kernelUnordered); kernelUnordered = null; } if (kernelSmall != null) { - CL.clReleaseKernel(kernelSmall); + clReleaseKernel(kernelSmall); kernelSmall = null; } if (kernelLarge != null) { - CL.clReleaseKernel(kernelLarge); + clReleaseKernel(kernelLarge); kernelLarge = null; } if (commandQueue != null) { - CL.clReleaseCommandQueue(commandQueue); + clReleaseCommandQueue(commandQueue); commandQueue = null; } if (context != null) { - CL.clReleaseContext(context); + clReleaseContext(context); context = null; } if (device != null) { - CL.clReleaseDevice(device); + clReleaseDevice(device); device = null; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index e5cb354169..3d97b3d5bc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -829,7 +829,7 @@ public class GrandExchangePlugin extends Plugin if (resetTime != null) { Duration remaining = Duration.between(Instant.now(), resetTime); - sb.append(" (").append(DurationFormatUtils.formatDuration(remaining.toMillis(), "H:mm")).append(")"); + sb.append(" (").append(DurationFormatUtils.formatDuration(remaining.toMillis(), "H:mm")).append(')'); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 221094b01f..b54cb58bd8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -246,7 +246,7 @@ public class GroundItemsOverlay extends Overlay { itemStringBuilder.append(" (") .append(QuantityFormatter.quantityToStackSize(item.getQuantity())) - .append(")"); + .append(')'); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index f0dd02dd71..f200998f59 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -663,7 +663,7 @@ public class GroundItemsPlugin extends Plugin { notificationStringBuilder.append(" (") .append(QuantityFormatter.quantityToStackSize(item.getQuantity())) - .append(")"); + .append(')'); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java index bdc0f8d8c1..9be50e16ea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java @@ -173,7 +173,7 @@ public class ItemStatOverlay extends Overlay Duration highestDuration = durationRange.getHighestDuration(); if (lowestDuration != highestDuration) { - sb.append("~"); + sb.append('~'); sb.append(DurationFormatUtils.formatDuration(highestDuration.toMillis(), "m:ss")); } } @@ -381,7 +381,7 @@ public class ItemStatOverlay extends Overlay { if (config.relative()) { - b.append("/"); + b.append('/'); } b.append(c.getFormattedTheoretical()); } @@ -397,9 +397,9 @@ public class ItemStatOverlay extends Overlay if (config.absolute() && (config.relative() || config.theoretical())) { - b.append(")"); + b.append(')'); } - b.append(" ").append(c.getStat().getName()); + b.append(' ').append(c.getStat().getName()); b.append("
"); return b.toString(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Bookcase.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Bookcase.java index ee7d7d295d..d383037070 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Bookcase.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Bookcase.java @@ -106,7 +106,7 @@ class Bookcase b.append("Center"); } - b.append(" "); + b.append(' '); switch (location.getPlane()) { @@ -123,7 +123,7 @@ class Bookcase if (KourendLibraryPlugin.debug) { - b.append(" ").append(index.stream().map(Object::toString).collect(Collectors.joining(", "))); + b.append(' ').append(index.stream().map(Object::toString).collect(Collectors.joining(", "))); } return b.toString(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java index a77473853b..282c02ab6a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java @@ -79,7 +79,7 @@ class Library Library() { populateBooks(); - step = byIndex.size() / Book.values().length; + step = byIndex.size() / values().length; reset(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java index 662aac5981..24b89a6b0f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java @@ -144,7 +144,7 @@ public class Raid } else { - builder.append(" "); + builder.append(' '); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyOverlay.java index 9ca4c40d6b..e897bd8698 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyOverlay.java @@ -83,7 +83,7 @@ class RunEnergyOverlay extends Overlay if (config.replaceOrbText()) { - sb.append("Run Energy: ").append(client.getEnergy()).append("%"); + sb.append("Run Energy: ").append(client.getEnergy()).append('%'); } else { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java index 65aef7813b..bf78790b1f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java @@ -106,7 +106,7 @@ public class RunepouchOverlay extends WidgetItemOverlay tooltipBuilder .append(amount) - .append(" ") + .append(' ') .append(ColorUtil.wrapWithColorTag(rune.getName(), Color.YELLOW)) .append("
"); 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 9e15b87626..f47c9b9483 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 @@ -855,7 +855,7 @@ public class SlayerPlugin extends Plugin sb.append(task.getTask()); if (!Strings.isNullOrEmpty(task.getLocation())) { - sb.append(" (").append(task.getLocation()).append(")"); + sb.append(" (").append(task.getLocation()).append(')'); } sb.append(": "); if (killed < 0) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java index b24f108182..101e589cd5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java @@ -82,7 +82,7 @@ public abstract class TabContentPanel extends JPanel LocalDateTime currentTime = LocalDateTime.now(); if (endTime.getDayOfWeek() != currentTime.getDayOfWeek()) { - sb.append(endTime.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.getDefault())).append(" "); + sb.append(endTime.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.getDefault())).append(' '); } sb.append("at "); sb.append(formatter.format(endTime)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java index 7eee98df8c..ca6df40a4d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java @@ -187,8 +187,8 @@ public class TimeTrackingPlugin extends Plugin { if (commandExecuted.getCommand().equals("resetfarmtick")) { - configManager.unsetRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, TimeTrackingConfig.FARM_TICK_OFFSET_PRECISION); - configManager.unsetRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, TimeTrackingConfig.FARM_TICK_OFFSET); + configManager.unsetRSProfileConfiguration(CONFIG_GROUP, TimeTrackingConfig.FARM_TICK_OFFSET_PRECISION); + configManager.unsetRSProfileConfiguration(CONFIG_GROUP, TimeTrackingConfig.FARM_TICK_OFFSET); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java index d3f2222b04..fe314c46fa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java @@ -550,7 +550,7 @@ public class FarmingTracker // Same RS account but different profile type if (profileType != RuneScapeProfileType.getCurrent(client)) { - stringBuilder.append("(") + stringBuilder.append('(') .append(Text.titleCase(profile.getType())) .append(") "); } @@ -564,13 +564,13 @@ public class FarmingTracker //Don't print profile type when logged out if is STANDARD if (client.getGameState() == GameState.LOGIN_SCREEN && profileType == RuneScapeProfileType.STANDARD) { - stringBuilder.append("(") + stringBuilder.append('(') .append(profile.getDisplayName()) .append(") "); } else { - stringBuilder.append("(") + stringBuilder.append('(') .append(profile.getDisplayName()) .append(" - ") .append(Text.titleCase(profile.getType())) @@ -580,7 +580,7 @@ public class FarmingTracker // Different RS account but same profile type else { - stringBuilder.append("(") + stringBuilder.append('(') .append(profile.getDisplayName()) .append(") "); } @@ -616,7 +616,7 @@ public class FarmingTracker stringBuilder.append(patch.getRegion().isDefinite() ? "the " : "") .append(patch.getRegion().getName()) - .append("."); + .append('.'); notifier.notify(stringBuilder.toString()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/twitch/irc/TwitchIRCClient.java b/runelite-client/src/main/java/net/runelite/client/plugins/twitch/irc/TwitchIRCClient.java index 53f8d461e4..022c05f8d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/twitch/irc/TwitchIRCClient.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/twitch/irc/TwitchIRCClient.java @@ -100,7 +100,7 @@ public class TwitchIRCClient extends Thread implements AutoCloseable return; } - try + try // NOPMD: UseTryWithResources { register(username, password); join(channel); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java index 324b94259a..89d9e3c803 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java @@ -105,7 +105,7 @@ public class OverlayUtil public static void renderImageLocation(Client client, Graphics2D graphics, LocalPoint localPoint, BufferedImage image, int zOffset) { - net.runelite.api.Point imageLocation = Perspective.getCanvasImageLocation(client, localPoint, image, zOffset); + Point imageLocation = Perspective.getCanvasImageLocation(client, localPoint, image, zOffset); if (imageLocation != null) { renderImageLocation(graphics, imageLocation, image); @@ -182,7 +182,7 @@ public class OverlayUtil renderImageLocation(client, graphics, localLocation, image, 0); } - public static void renderHoverableArea(Graphics2D graphics, Shape area, net.runelite.api.Point mousePosition, Color fillColor, Color borderColor, Color borderHoverColor) + public static void renderHoverableArea(Graphics2D graphics, Shape area, Point mousePosition, Color fillColor, Color borderColor, Color borderHoverColor) { if (area != null) { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java index 83c67c09e0..02ff566f4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java @@ -182,12 +182,12 @@ public class LineComponent implements LayoutableRenderableEntity if (wordLen + spaceWidth > spaceLeft) { - wrapped.append("\n").append(word); + wrapped.append('\n').append(word); spaceLeft = maxWidth - wordLen; } else { - wrapped.append(" ").append(word); + wrapped.append(' ').append(word); spaceLeft -= spaceWidth + wordLen; } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/WorldUtil.java b/runelite-client/src/main/java/net/runelite/client/util/WorldUtil.java index 9f508676a5..39e5ce8f99 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/WorldUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/WorldUtil.java @@ -40,11 +40,11 @@ public class WorldUtil */ public static EnumSet toWorldTypes(final EnumSet apiTypes) { - final EnumSet types = EnumSet.noneOf(net.runelite.api.WorldType.class); + final EnumSet types = EnumSet.noneOf(WorldType.class); for (net.runelite.http.api.worlds.WorldType apiType : apiTypes) { - types.add(net.runelite.api.WorldType.valueOf(apiType.name())); + types.add(WorldType.valueOf(apiType.name())); } return types; From c4055e765a3e9ee947e3cac4d3e641640a9644d7 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 24 Apr 2022 16:44:18 -0400 Subject: [PATCH 4/8] ci: disable maven-shade-plugin --- ci/settings.xml | 1 + runelite-client/pom.xml | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ci/settings.xml b/ci/settings.xml index 9e0b198657..44c9340831 100644 --- a/ci/settings.xml +++ b/ci/settings.xml @@ -261,6 +261,7 @@ under the License. false false ${user.home}/.cache/runelite/pmd.cache + true diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index a415fbdd61..5bdcc0f0a3 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -40,6 +40,7 @@ true nogit false + false @@ -381,7 +382,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.3 + 3.3.0 package @@ -389,6 +390,7 @@ shade + ${shade.skip} true shaded From 1d0a0315d4e5a7854428e8ac671d0c8b5132685e Mon Sep 17 00:00:00 2001 From: Vandager <66982484+Vandager@users.noreply.github.com> Date: Wed, 20 Apr 2022 23:07:40 -0400 Subject: [PATCH 5/8] player indicators: decorate player name in trade window Co-authored-by: Vandager <66982484+Vandager@users.noreply.github.com> --- .../main/java/net/runelite/api/ScriptID.java | 6 +++ .../net/runelite/api/widgets/WidgetID.java | 6 +++ .../net/runelite/api/widgets/WidgetInfo.java | 2 + .../PlayerIndicatorsPlugin.java | 50 ++++++++++++++++++- 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index fc0e708290..76af58afeb 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -408,4 +408,10 @@ public final class ScriptID @ScriptArguments(integer = 6) public static final int INVENTORY_DRAWITEM = 6011; + + /** + * Initializes the trade interface + */ + @ScriptArguments(integer = 6) + public static final int TRADE_MAIN_INIT = 755; } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index b6d999c89f..3f1261d1d3 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -174,6 +174,7 @@ public final class WidgetID public static final int GROUP_STORAGE_INVENTORY_GROUP_ID = 725; public static final int GROUP_STORAGE_GROUP_ID = 724; public static final int WILDERNESS_LOOT_CHEST = 742; + public static final int TRADE_WINDOW_GROUP_ID = 335; static class WorldMap { @@ -936,4 +937,9 @@ public final class WidgetID static final int HEADER = 1; static final int MEMBERS = 6; } + + static class Trade + { + static final int HEADER = 31; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 7f3ea8591d..c85a5341c9 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -561,6 +561,8 @@ public enum WidgetInfo CLAN_GUEST_MEMBER_LIST(WidgetID.CLAN_GUEST_GROUP_ID, WidgetID.ClanGuest.MEMBERS), POH_TREASURE_CHEST_INVENTORY_CONTAINER(WidgetID.POH_TREASURE_CHEST_INVENTORY_GROUP_ID, 0), + + TRADE_WINDOW_HEADER(WidgetID.TRADE_WINDOW_GROUP_ID, WidgetID.Trade.HEADER), ; private final int groupId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index 495e37283d..dd2c0821b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -42,12 +42,17 @@ import static net.runelite.api.MenuAction.PLAYER_SEVENTH_OPTION; import static net.runelite.api.MenuAction.PLAYER_SIXTH_OPTION; import static net.runelite.api.MenuAction.PLAYER_THIRD_OPTION; import static net.runelite.api.MenuAction.RUNELITE_PLAYER; -import static net.runelite.api.MenuAction.WIDGET_TARGET_ON_PLAYER; import static net.runelite.api.MenuAction.WALK; +import static net.runelite.api.MenuAction.WIDGET_TARGET_ON_PLAYER; import net.runelite.api.MenuEntry; import net.runelite.api.Player; +import net.runelite.api.ScriptID; import net.runelite.api.clan.ClanTitle; import net.runelite.api.events.ClientTick; +import net.runelite.api.events.ScriptPostFired; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ChatIconManager; @@ -63,6 +68,8 @@ import net.runelite.client.util.ColorUtil; ) public class PlayerIndicatorsPlugin extends Plugin { + private static final String TRADING_WITH_TEXT = "Trading with: "; + @Inject private OverlayManager overlayManager; @@ -87,6 +94,9 @@ public class PlayerIndicatorsPlugin extends Plugin @Inject private ChatIconManager chatIconManager; + @Inject + private ClientThread clientThread; + @Provides PlayerIndicatorsConfig provideConfig(ConfigManager configManager) { @@ -249,6 +259,44 @@ public class PlayerIndicatorsPlugin extends Plugin return newTarget; } + @Subscribe + public void onScriptPostFired(ScriptPostFired event) + { + if (event.getScriptId() == ScriptID.TRADE_MAIN_INIT) + { + clientThread.invokeLater(() -> + { + Widget tradeTitle = client.getWidget(WidgetInfo.TRADE_WINDOW_HEADER); + String header = tradeTitle.getText(); + String playerName = header.substring(TRADING_WITH_TEXT.length()); + + Player targetPlayer = findPlayer(playerName); + if (targetPlayer == null) + { + return; + } + + Decorations playerColor = getDecorations(targetPlayer); + if (playerColor != null) + { + tradeTitle.setText(TRADING_WITH_TEXT + ColorUtil.wrapWithColorTag(playerName, playerColor.color)); + } + }); + } + } + + private Player findPlayer(String name) + { + for (Player player : client.getPlayers()) + { + if (player.getName().equals(name)) + { + return player; + } + } + return null; + } + @Value private static class Decorations { From fc1c12c0e390059bb435d78d6edb879cb774c0d9 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 24 Apr 2022 19:14:45 -0400 Subject: [PATCH 6/8] infobox: consistently require non-negative timer durations --- .../main/java/net/runelite/client/ui/overlay/infobox/Timer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java index c9a3664222..4f3c7be775 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java @@ -96,6 +96,7 @@ public class Timer extends InfoBox public void setDuration(Duration duration) { + Preconditions.checkArgument(!duration.isNegative(), "negative duration"); this.duration = duration; endTime = startTime.plus(duration); } From d7f1681e6ae5989d1e3ef39217dc325a930449e5 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 24 Apr 2022 19:14:54 -0400 Subject: [PATCH 7/8] util: use error log level for exception loggers --- .../java/net/runelite/client/util/CallableExceptionLogger.java | 2 +- .../java/net/runelite/client/util/RunnableExceptionLogger.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/util/CallableExceptionLogger.java b/runelite-client/src/main/java/net/runelite/client/util/CallableExceptionLogger.java index bb1aad4cf3..cb785a14fc 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/CallableExceptionLogger.java +++ b/runelite-client/src/main/java/net/runelite/client/util/CallableExceptionLogger.java @@ -43,7 +43,7 @@ public class CallableExceptionLogger implements Callable } catch (Throwable ex) { - log.warn("Uncaught exception in callable {}", callable, ex); + log.error("Uncaught exception in callable {}", callable, ex); throw ex; } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java b/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java index 58c7247cdd..cc47e7ce28 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java +++ b/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java @@ -42,7 +42,7 @@ public class RunnableExceptionLogger implements Runnable } catch (Throwable ex) { - log.warn("Uncaught exception in runnable {}", runnable, ex); + log.error("Uncaught exception in runnable {}", runnable, ex); throw ex; } } From e73ccc30691be9ffe9a85e7a89900194698447ed Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Mon, 4 Apr 2022 19:36:58 +0100 Subject: [PATCH 8/8] npcaggro: fix unintended loss of calibration After using 8ad5977ad5ef61ea84cb89a89956402e951b013f for a while, I noticed that the plugin would lose calibration seemingly at random. Given I was sitting at Redwoods, this didn't make sense. I want to give some context as to what was happening and why, baked permanently into the commit history: The plugin requires that a few things exist when it saves data, or else it assumes that something went wrong and it resets the config. One of these things is that the infobox object exists. Usually, this is fine, as one is created on login with the stored duration, as long as said duration is not negative. However, if the user stood in the same area for 10 minutes and then logged out somehow (either manually or through AFK), upon logging back in the config would not create a new infobox as the stored duration is negative. Either toggling the plugin or restarting the client at this point would clear the reference to the old Infobox, and a new one would not be created on login due to the aforementioned negative duration. If the plugin was toggled, the calibration is instantly lost, and the user now sees the tutorial overlay. If the client was restarted, it would appear as if the plugin is working fine, and it would fix itself if the player moved far enough. If they just logged out, however, it would clear its config. Either way, in most situations, the user is now forced to recalibrate the plugin when they've done nothing wrong, only commited the heinous crime of XP wasting. Most of this was due to how the plugin tracked the aggro time, which was through its infobox. This really shouldn't be how it does it, and so now it keeps track of the time separately, and doesn't rely on the creation of the infobox to block the saving of data. --- .../npcunaggroarea/AggressionTimer.java | 13 ++--- .../npcunaggroarea/NpcAggroAreaOverlay.java | 3 +- .../npcunaggroarea/NpcAggroAreaPlugin.java | 56 +++++++++---------- 3 files changed, 31 insertions(+), 41 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/AggressionTimer.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/AggressionTimer.java index 7194d2ddd6..2d5f4df4f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/AggressionTimer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/AggressionTimer.java @@ -29,22 +29,17 @@ import java.awt.image.BufferedImage; import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; -import lombok.Getter; -import lombok.Setter; -import net.runelite.client.plugins.Plugin; import net.runelite.client.ui.overlay.infobox.Timer; class AggressionTimer extends Timer { - @Getter - @Setter - private boolean visible; + private final NpcAggroAreaPlugin plugin; - AggressionTimer(Duration duration, BufferedImage image, Plugin plugin, boolean visible) + AggressionTimer(Duration duration, BufferedImage image, NpcAggroAreaPlugin plugin) { super(duration.toMillis(), ChronoUnit.MILLIS, image, plugin); setTooltip("Time until NPCs become unaggressive"); - this.visible = visible; + this.plugin = plugin; } @Override @@ -63,6 +58,6 @@ class AggressionTimer extends Timer @Override public boolean render() { - return visible && super.render(); + return plugin.shouldDisplayTimer() && super.render(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java index 5aad9ce8c6..72691c4dac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java @@ -84,8 +84,7 @@ class NpcAggroAreaOverlay extends Overlay } Color outlineColor = config.unaggroAreaColor(); - AggressionTimer timer = plugin.getCurrentTimer(); - if (outlineColor == null || timer == null || Instant.now().compareTo(timer.getEndTime()) < 0) + if (outlineColor == null || (plugin.getEndTime() != null && Instant.now().isBefore(plugin.getEndTime()))) { outlineColor = config.aggroAreaColor(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java index 148876e631..359d306e7b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java @@ -82,7 +82,7 @@ public class NpcAggroAreaPlugin extends Plugin private static final int SAFE_AREA_RADIUS = 10; private static final int UNKNOWN_AREA_RADIUS = SAFE_AREA_RADIUS * 2; - private static final int AGGRESSIVE_TIME_SECONDS = 600; + private static final Duration AGGRESSIVE_TIME_DURATION = Duration.ofSeconds(600); private static final Splitter NAME_SPLITTER = Splitter.on(',').omitEmptyStrings().trimResults(); private static final WorldArea WILDERNESS_ABOVE_GROUND = new WorldArea(2944, 3523, 448, 448, 0); private static final WorldArea WILDERNESS_UNDERGROUND = new WorldArea(2944, 9918, 320, 442, 0); @@ -124,7 +124,7 @@ public class NpcAggroAreaPlugin extends Plugin private boolean active; @Getter - private AggressionTimer currentTimer; + private Instant endTime; private WorldPoint lastPlayerLocation; private WorldPoint previousUnknownCenter; @@ -156,7 +156,7 @@ public class NpcAggroAreaPlugin extends Plugin overlayManager.remove(notWorkingOverlay); Arrays.fill(safeCenters, null); lastPlayerLocation = null; - currentTimer = null; + endTime = null; loggingIn = false; npcNamePatterns = null; active = false; @@ -193,16 +193,6 @@ public class NpcAggroAreaPlugin extends Plugin coords[1] = lp.getY() - Perspective.LOCAL_TILE_SIZE / 2f; } - private void reevaluateActive() - { - if (currentTimer != null) - { - currentTimer.setVisible(active && config.showTimer()); - } - - calculateLinesToDisplay(); - } - private void calculateLinesToDisplay() { if (!active || !config.showAreaLines()) @@ -227,23 +217,29 @@ public class NpcAggroAreaPlugin extends Plugin private void removeTimer() { - infoBoxManager.removeInfoBox(currentTimer); - currentTimer = null; + infoBoxManager.removeIf(t -> t instanceof AggressionTimer); + endTime = null; notifyOnce = false; } private void createTimer(Duration duration) { removeTimer(); - BufferedImage image = itemManager.getImage(ItemID.ENSOULED_DEMON_HEAD); - currentTimer = new AggressionTimer(duration, image, this, active && config.showTimer()); - infoBoxManager.addInfoBox(currentTimer); + endTime = Instant.now().plus(duration); notifyOnce = true; + + if (duration.isNegative()) + { + return; + } + + BufferedImage image = itemManager.getImage(ItemID.ENSOULED_DEMON_HEAD); + infoBoxManager.addInfoBox(new AggressionTimer(duration, image, this)); } private void resetTimer() { - createTimer(Duration.ofSeconds(AGGRESSIVE_TIME_SECONDS)); + createTimer(AGGRESSIVE_TIME_DURATION); } private static boolean isInWilderness(WorldPoint location) @@ -301,7 +297,7 @@ public class NpcAggroAreaPlugin extends Plugin } } - reevaluateActive(); + calculateLinesToDisplay(); } private void recheckActive() @@ -326,7 +322,7 @@ public class NpcAggroAreaPlugin extends Plugin { WorldPoint newLocation = client.getLocalPlayer().getWorldLocation(); - if (active && currentTimer != null && currentTimer.cull() && notifyOnce) + if (active && notifyOnce && Instant.now().isAfter(endTime)) { if (config.notifyExpire()) { @@ -387,12 +383,6 @@ public class NpcAggroAreaPlugin extends Plugin case "npcUnaggroAlwaysActive": recheckActive(); break; - case "npcUnaggroShowTimer": - if (currentTimer != null) - { - currentTimer.setVisible(active && config.showTimer()); - } - break; case "npcUnaggroCollisionDetection": case "npcUnaggroShowAreaLines": calculateLinesToDisplay(); @@ -404,6 +394,11 @@ public class NpcAggroAreaPlugin extends Plugin } } + boolean shouldDisplayTimer() + { + return active && config.showTimer(); + } + private void loadConfig() { safeCenters[0] = configManager.getConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_CENTER1, WorldPoint.class); @@ -411,7 +406,7 @@ public class NpcAggroAreaPlugin extends Plugin lastPlayerLocation = configManager.getConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_LOCATION, WorldPoint.class); Duration timeLeft = configManager.getConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_DURATION, Duration.class); - if (timeLeft != null && !timeLeft.isNegative()) + if (timeLeft != null) { createTimer(timeLeft); } @@ -427,7 +422,7 @@ public class NpcAggroAreaPlugin extends Plugin private void saveConfig() { - if (safeCenters[0] == null || safeCenters[1] == null || lastPlayerLocation == null || currentTimer == null) + if (safeCenters[0] == null || safeCenters[1] == null || lastPlayerLocation == null || endTime == null) { resetConfig(); } @@ -436,7 +431,7 @@ public class NpcAggroAreaPlugin extends Plugin configManager.setConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_CENTER1, safeCenters[0]); configManager.setConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_CENTER2, safeCenters[1]); configManager.setConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_LOCATION, lastPlayerLocation); - configManager.setConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_DURATION, Duration.between(Instant.now(), currentTimer.getEndTime())); + configManager.setConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_DURATION, Duration.between(Instant.now(), endTime)); } } @@ -486,6 +481,7 @@ public class NpcAggroAreaPlugin extends Plugin safeCenters[0] = null; safeCenters[1] = null; lastPlayerLocation = null; + endTime = null; break; } }