From 44134dc668158da1244b10f8ab1f04e9950e350b Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 23 May 2021 14:42:23 -0400 Subject: [PATCH] poh: fix burner overlay timers The object spawn event happens after the lighting animation, which was causing it to create a new burner with the default timers applied instead of the one applied via the fm level. Also fix computing upper limit on the random timer which is not inclusive of the fm level --- .../client/plugins/poh/BurnerOverlay.java | 7 +------ .../client/plugins/poh/IncenseBurner.java | 14 ++++++++------ .../runelite/client/plugins/poh/PohPlugin.java | 15 ++++++++++----- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/BurnerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/BurnerOverlay.java index 16c8d4edc3..0594e86dd5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/BurnerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/BurnerOverlay.java @@ -64,12 +64,7 @@ class BurnerOverlay extends Overlay plugin.getIncenseBurners().forEach((tile, burner) -> { - if (tile.getPlane() != client.getPlane()) - { - return; - } - - if (!PohPlugin.BURNER_LIT.contains(burner.getId())) + if (tile.getPlane() != client.getPlane() || !burner.isLit()) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/IncenseBurner.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/IncenseBurner.java index c47f9bfe14..0679dc6474 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/IncenseBurner.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/IncenseBurner.java @@ -25,20 +25,22 @@ package net.runelite.client.plugins.poh; import java.time.Instant; -import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.Setter; @Getter @Setter -@RequiredArgsConstructor -@AllArgsConstructor class IncenseBurner { - private final Instant start = Instant.now(); - private final int id; + private Instant start; + private boolean lit; private double countdownTimer; private double randomTimer; private Instant end; + + void reset() + { + countdownTimer = 0; + randomTimer = 0; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java index d7d7181060..1cb0a21044 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.poh; import com.google.common.collect.Sets; import com.google.inject.Provides; import java.io.IOException; +import java.time.Instant; import java.util.Comparator; import java.util.HashMap; import java.util.Map; @@ -49,7 +50,6 @@ import net.runelite.api.Tile; import net.runelite.api.TileObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.AnimationChanged; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameObjectDespawned; @@ -57,6 +57,7 @@ import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.HiscoreManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -144,9 +145,11 @@ public class PohPlugin extends Plugin return; } - final double countdownTimer = 130.0; // Minimum amount of seconds a burner will light - final double randomTimer = 30.0; // Minimum amount of seconds a burner will light - incenseBurners.put(event.getTile(), new IncenseBurner(gameObject.getId(), countdownTimer, randomTimer, null)); + IncenseBurner incenseBurner = incenseBurners.computeIfAbsent(event.getTile(), k -> new IncenseBurner()); + incenseBurner.setStart(Instant.now()); + incenseBurner.setLit(BURNER_LIT.contains(gameObject.getId())); + incenseBurner.setEnd(null); + // The burner timers are set when observing a player light the burner } @Subscribe @@ -203,6 +206,7 @@ public class PohPlugin extends Plugin .ifPresent(tile -> { final IncenseBurner incenseBurner = incenseBurners.get(tile); + incenseBurner.reset(); if (actor == client.getLocalPlayer()) { @@ -245,6 +249,7 @@ public class PohPlugin extends Plugin { final double tickLengthSeconds = Constants.GAME_TICK_LENGTH / 1000.0; incenseBurner.setCountdownTimer((200 + fmLevel) * tickLengthSeconds); - incenseBurner.setRandomTimer(fmLevel * tickLengthSeconds); + incenseBurner.setRandomTimer((fmLevel - 1) * tickLengthSeconds); + log.debug("Set burner timer for firemaking level {}", fmLevel); } } \ No newline at end of file