From 8dc0e752c8ee883266ed9a23a8330787a862c80e Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Fri, 4 Oct 2019 08:10:24 -0700 Subject: [PATCH 1/3] woodcutting: Reduce visibilities, mark Nullables --- .../client/plugins/woodcutting/WoodcuttingPlugin.java | 5 ++++- .../client/plugins/woodcutting/WoodcuttingSession.java | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index a8a38d852e..82d0a730ce 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -32,6 +32,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Pattern; +import javax.annotation.Nullable; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; @@ -90,9 +91,11 @@ public class WoodcuttingPlugin extends Plugin private WoodcuttingConfig config; @Getter + @Nullable private WoodcuttingSession session; @Getter + @Nullable private Axe axe; @Getter @@ -258,4 +261,4 @@ public class WoodcuttingPlugin extends Plugin this.axe = axe; } } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java index ac5d66130e..aaf2919c01 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java @@ -26,16 +26,16 @@ package net.runelite.client.plugins.woodcutting; import java.time.Instant; -public class WoodcuttingSession +class WoodcuttingSession { private Instant lastLogCut; - public void setLastLogCut() + void setLastLogCut() { lastLogCut = Instant.now(); } - public Instant getLastLogCut() + Instant getLastLogCut() { return lastLogCut; } From 8a206e8c92f39970176f6f92690de5cc5b410765 Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Fri, 4 Oct 2019 08:12:23 -0700 Subject: [PATCH 2/3] woodcutting: Add axe animation matching helper method --- .../java/net/runelite/client/plugins/woodcutting/Axe.java | 6 ++++++ .../client/plugins/woodcutting/WoodcuttingOverlay.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java index 4ad6d6e90f..24d7249a4d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java @@ -50,6 +50,7 @@ import static net.runelite.api.ItemID.MITHRIL_AXE; import static net.runelite.api.ItemID.RUNE_AXE; import static net.runelite.api.ItemID.STEEL_AXE; import static net.runelite.api.ItemID._3RD_AGE_AXE; +import net.runelite.api.Player; @AllArgsConstructor @Getter @@ -84,6 +85,11 @@ enum Axe AXE_ANIM_IDS = builder.build(); } + boolean matchesChoppingAnimation(final Player player) + { + return player != null && animId == player.getAnimation(); + } + static Axe findAxeByAnimId(int animId) { return AXE_ANIM_IDS.get(animId); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java index 5aa6f0cde2..6f863cdda7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java @@ -81,7 +81,7 @@ class WoodcuttingOverlay extends Overlay panelComponent.getChildren().clear(); Axe axe = plugin.getAxe(); - if (axe != null && axe.getAnimId() == client.getLocalPlayer().getAnimation()) + if (axe != null && axe.matchesChoppingAnimation(client.getLocalPlayer())) { panelComponent.getChildren().add(TitleComponent.builder() .text("Woodcutting") From dd771eaab752b877cd9dc7ea714caf0ac46c2df3 Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Fri, 4 Oct 2019 08:12:55 -0700 Subject: [PATCH 3/3] woodcutting: Fix overlay hiding during long chop delays This fixes a bug where the overlay would become hidden when chopping at a tree without successfully chopping a log for longer than the configured timeout, and would display "NOT woodcutting" if a log was successfully chopped thereafter. Fixes runelite/runelite#7506 --- .../plugins/woodcutting/WoodcuttingPlugin.java | 12 +++++++++--- .../plugins/woodcutting/WoodcuttingSession.java | 10 +++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index 82d0a730ce..750e887365 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -148,13 +148,19 @@ public class WoodcuttingPlugin extends Plugin respawns.removeIf(TreeRespawn::isExpired); - if (session == null || session.getLastLogCut() == null) + if (session == null || session.getLastChopping() == null) { return; } + if (axe != null && axe.matchesChoppingAnimation(client.getLocalPlayer())) + { + session.setLastChopping(); + return; + } + Duration statTimeout = Duration.ofMinutes(config.statTimeout()); - Duration sinceCut = Duration.between(session.getLastLogCut(), Instant.now()); + Duration sinceCut = Duration.between(session.getLastChopping(), Instant.now()); if (sinceCut.compareTo(statTimeout) >= 0) { @@ -175,7 +181,7 @@ public class WoodcuttingPlugin extends Plugin session = new WoodcuttingSession(); } - session.setLastLogCut(); + session.setLastChopping(); } if (event.getMessage().contains("A bird's nest falls out of the tree") && config.showNestNotification()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java index aaf2919c01..39d3bafe29 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSession.java @@ -28,15 +28,15 @@ import java.time.Instant; class WoodcuttingSession { - private Instant lastLogCut; + private Instant lastChopping; - void setLastLogCut() + void setLastChopping() { - lastLogCut = Instant.now(); + lastChopping = Instant.now(); } - Instant getLastLogCut() + Instant getLastChopping() { - return lastLogCut; + return lastChopping; } }