woodcutting plugin: timeout woodcutting sessions
Also keep and store current axe type being used
This commit is contained in:
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Mantautas Jurksa <https://github.com/Juzzed>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.woodcutting;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_3A_AXE;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_ADAMANT;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_BLACK;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_BRONZE;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_DRAGON;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_INFERNAL;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_IRON;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_MITHRIL;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_RUNE;
|
||||||
|
import static net.runelite.api.AnimationID.WOODCUTTING_STEEL;
|
||||||
|
import static net.runelite.api.ItemID.ADAMANT_AXE;
|
||||||
|
import static net.runelite.api.ItemID.BLACK_AXE;
|
||||||
|
import static net.runelite.api.ItemID.BRONZE_AXE;
|
||||||
|
import static net.runelite.api.ItemID.DRAGON_AXE;
|
||||||
|
import static net.runelite.api.ItemID.INFERNAL_AXE;
|
||||||
|
import static net.runelite.api.ItemID.IRON_AXE;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
enum Axe
|
||||||
|
{
|
||||||
|
BRONZE(WOODCUTTING_BRONZE, BRONZE_AXE),
|
||||||
|
IRON(WOODCUTTING_IRON, IRON_AXE),
|
||||||
|
STEEL(WOODCUTTING_STEEL, STEEL_AXE),
|
||||||
|
BLACK(WOODCUTTING_BLACK, BLACK_AXE),
|
||||||
|
MITHRIL(WOODCUTTING_MITHRIL, MITHRIL_AXE),
|
||||||
|
ADAMANT(WOODCUTTING_ADAMANT, ADAMANT_AXE),
|
||||||
|
RUNE(WOODCUTTING_RUNE, RUNE_AXE),
|
||||||
|
DRAGON(WOODCUTTING_DRAGON, DRAGON_AXE),
|
||||||
|
INFERNAL(WOODCUTTING_INFERNAL, INFERNAL_AXE),
|
||||||
|
THIRDAGE(WOODCUTTING_3A_AXE, _3RD_AGE_AXE);
|
||||||
|
|
||||||
|
private final Integer animId;
|
||||||
|
private final Integer itemId;
|
||||||
|
|
||||||
|
private static final Map<Integer, Axe> AXE_ANIM_IDS = new HashMap<>();
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
for (Axe axe : values())
|
||||||
|
{
|
||||||
|
AXE_ANIM_IDS.put(axe.animId, axe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Axe findAxeByAnimId(int animId)
|
||||||
|
{
|
||||||
|
return AXE_ANIM_IDS.get(animId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,9 +36,10 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
public interface WoodcuttingConfig extends Config
|
public interface WoodcuttingConfig extends Config
|
||||||
{
|
{
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
position = 1,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats (minutes)",
|
||||||
description = "Configures the time until statistic is reset"
|
description = "Configures the time until statistic is reset. Also configures when tree indicator is hidden"
|
||||||
)
|
)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
@@ -46,6 +47,7 @@ public interface WoodcuttingConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
position = 2,
|
||||||
keyName = "showNestNotification",
|
keyName = "showNestNotification",
|
||||||
name = "Bird nest notification",
|
name = "Bird nest notification",
|
||||||
description = "Configures whether to notify you of a bird nest spawn"
|
description = "Configures whether to notify you of a bird nest spawn"
|
||||||
@@ -56,8 +58,9 @@ public interface WoodcuttingConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
position = 3,
|
||||||
keyName = "showWoodcuttingStats",
|
keyName = "showWoodcuttingStats",
|
||||||
name = "Show Woodcutting session stats",
|
name = "Show session stats",
|
||||||
description = "Configures whether to display woodcutting session stats"
|
description = "Configures whether to display woodcutting session stats"
|
||||||
)
|
)
|
||||||
default boolean showWoodcuttingStats()
|
default boolean showWoodcuttingStats()
|
||||||
|
|||||||
@@ -27,19 +27,7 @@ package net.runelite.client.plugins.woodcutting;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.time.Duration;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.stream.IntStream;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_ADAMANT;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_BLACK;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_BRONZE;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_DRAGON;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_INFERNAL;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_IRON;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_MITHRIL;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_RUNE;
|
|
||||||
import static net.runelite.api.AnimationID.WOODCUTTING_STEEL;
|
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.Skill;
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.client.plugins.xptracker.XpTrackerService;
|
import net.runelite.client.plugins.xptracker.XpTrackerService;
|
||||||
@@ -51,13 +39,6 @@ import net.runelite.client.ui.overlay.components.TitleComponent;
|
|||||||
|
|
||||||
class WoodcuttingOverlay extends Overlay
|
class WoodcuttingOverlay extends Overlay
|
||||||
{
|
{
|
||||||
private static final int[] animationIds =
|
|
||||||
{
|
|
||||||
WOODCUTTING_BRONZE, WOODCUTTING_IRON, WOODCUTTING_STEEL, WOODCUTTING_BLACK,
|
|
||||||
WOODCUTTING_MITHRIL, WOODCUTTING_ADAMANT, WOODCUTTING_RUNE, WOODCUTTING_DRAGON,
|
|
||||||
WOODCUTTING_INFERNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
private final Client client;
|
private final Client client;
|
||||||
private final WoodcuttingPlugin plugin;
|
private final WoodcuttingPlugin plugin;
|
||||||
private final WoodcuttingConfig config;
|
private final WoodcuttingConfig config;
|
||||||
@@ -65,7 +46,7 @@ class WoodcuttingOverlay extends Overlay
|
|||||||
private final PanelComponent panelComponent = new PanelComponent();
|
private final PanelComponent panelComponent = new PanelComponent();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public WoodcuttingOverlay(Client client, WoodcuttingPlugin plugin, WoodcuttingConfig config, XpTrackerService xpTrackerService)
|
private WoodcuttingOverlay(Client client, WoodcuttingPlugin plugin, WoodcuttingConfig config, XpTrackerService xpTrackerService)
|
||||||
{
|
{
|
||||||
setPosition(OverlayPosition.TOP_LEFT);
|
setPosition(OverlayPosition.TOP_LEFT);
|
||||||
this.client = client;
|
this.client = client;
|
||||||
@@ -83,23 +64,15 @@ class WoodcuttingOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
|
|
||||||
WoodcuttingSession session = plugin.getSession();
|
WoodcuttingSession session = plugin.getSession();
|
||||||
|
if (session == null)
|
||||||
if (session.getLastLogCut() == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration statTimeout = Duration.ofMinutes(config.statTimeout());
|
|
||||||
Duration sinceCut = Duration.between(session.getLastLogCut(), Instant.now());
|
|
||||||
|
|
||||||
if (sinceCut.compareTo(statTimeout) >= 0)
|
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
panelComponent.getChildren().clear();
|
panelComponent.getChildren().clear();
|
||||||
|
|
||||||
if (IntStream.of(animationIds).anyMatch(x -> x == client.getLocalPlayer().getAnimation()))
|
Axe axe = plugin.getAxe();
|
||||||
|
if (axe != null && axe.getAnimId() == client.getLocalPlayer().getAnimation())
|
||||||
{
|
{
|
||||||
panelComponent.getChildren().add(TitleComponent.builder()
|
panelComponent.getChildren().add(TitleComponent.builder()
|
||||||
.text("Woodcutting")
|
.text("Woodcutting")
|
||||||
@@ -133,4 +106,5 @@ class WoodcuttingOverlay extends Overlay
|
|||||||
|
|
||||||
return panelComponent.render(graphics);
|
return panelComponent.render(graphics);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -26,9 +26,16 @@ package net.runelite.client.plugins.woodcutting;
|
|||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.Instant;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import lombok.Getter;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Player;
|
||||||
|
import net.runelite.api.events.AnimationChanged;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
|
import net.runelite.api.events.GameTick;
|
||||||
import net.runelite.client.Notifier;
|
import net.runelite.client.Notifier;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
@@ -46,13 +53,20 @@ public class WoodcuttingPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private Notifier notifier;
|
private Notifier notifier;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Client client;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private WoodcuttingOverlay overlay;
|
private WoodcuttingOverlay overlay;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private WoodcuttingConfig config;
|
private WoodcuttingConfig config;
|
||||||
|
|
||||||
private final WoodcuttingSession session = new WoodcuttingSession();
|
@Getter
|
||||||
|
private WoodcuttingSession session;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private Axe axe;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
WoodcuttingConfig getConfig(ConfigManager configManager)
|
WoodcuttingConfig getConfig(ConfigManager configManager)
|
||||||
@@ -66,9 +80,29 @@ public class WoodcuttingPlugin extends Plugin
|
|||||||
return overlay;
|
return overlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WoodcuttingSession getSession()
|
@Override
|
||||||
|
protected void shutDown() throws Exception
|
||||||
{
|
{
|
||||||
return session;
|
session = null;
|
||||||
|
axe = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onGameTick(GameTick gameTick)
|
||||||
|
{
|
||||||
|
if (session == null || session.getLastLogCut() == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Duration statTimeout = Duration.ofMinutes(config.statTimeout());
|
||||||
|
Duration sinceCut = Duration.between(session.getLastLogCut(), Instant.now());
|
||||||
|
|
||||||
|
if (sinceCut.compareTo(statTimeout) >= 0)
|
||||||
|
{
|
||||||
|
session = null;
|
||||||
|
axe = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -78,6 +112,11 @@ public class WoodcuttingPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
if (event.getMessage().startsWith("You get some") && event.getMessage().endsWith("logs."))
|
if (event.getMessage().startsWith("You get some") && event.getMessage().endsWith("logs."))
|
||||||
{
|
{
|
||||||
|
if (session == null)
|
||||||
|
{
|
||||||
|
session = new WoodcuttingSession();
|
||||||
|
}
|
||||||
|
|
||||||
session.setLastLogCut();
|
session.setLastLogCut();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,4 +126,22 @@ public class WoodcuttingPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onAnimationChanged(final AnimationChanged event)
|
||||||
|
{
|
||||||
|
Player local = client.getLocalPlayer();
|
||||||
|
|
||||||
|
if (event.getActor() != local)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int animId = local.getAnimation();
|
||||||
|
Axe axe = Axe.findAxeByAnimId(animId);
|
||||||
|
if (axe != null)
|
||||||
|
{
|
||||||
|
this.axe = axe;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user