test_class.declarator: PLAYER_NAME = "Deathbeam"
test_class.modifier: private static final
test_class.original_string: private static final String PLAYER_NAME = "Deathbeam";
test_class.type: String
test_class.var_name: PLAYER_NAME
test_class.declarator: client
test_class.modifier: @Mock
  	@Bind
  	private
test_class.original_string: @Mock
  	@Bind
  	private Client client;
test_class.type: Client
test_class.var_name: client
test_class.declarator: config
test_class.modifier: @Mock
  	@Bind
  	private
test_class.original_string: @Mock
  	@Bind
  	private IdleNotifierConfig config;
test_class.type: IdleNotifierConfig
test_class.var_name: config
test_class.declarator: notifier
test_class.modifier: @Mock
  	@Bind
  	private
test_class.original_string: @Mock
  	@Bind
  	private Notifier notifier;
test_class.type: Notifier
test_class.var_name: notifier
test_class.declarator: plugin
test_class.modifier: @Inject
  	private
test_class.original_string: @Inject
  	private IdleNotifierPlugin plugin;
test_class.type: IdleNotifierPlugin
test_class.var_name: plugin
test_class.declarator: monster
test_class.modifier: @Mock
  	private
test_class.original_string: @Mock
  	private NPC monster;
test_class.type: NPC
test_class.var_name: monster
test_class.declarator: randomEvent
test_class.modifier: @Mock
  	private
test_class.original_string: @Mock
  	private NPC randomEvent;
test_class.type: NPC
test_class.var_name: randomEvent
test_class.declarator: fishingSpot
test_class.modifier: @Mock
  	private
test_class.original_string: @Mock
  	private NPC fishingSpot;
test_class.type: NPC
test_class.var_name: fishingSpot
test_class.declarator: player
test_class.modifier: @Mock
  	private
test_class.original_string: @Mock
  	private Player player;
test_class.type: Player
test_class.var_name: player
test_class.file: runelite-client/src/test/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPluginTest.java
test_class.identifier: IdleNotifierPluginTest
test_case.body: @Test
  	public void checkAnimationIdle()
  	{
  		when(player.getAnimation()).thenReturn(AnimationID.WOODCUTTING_BRONZE);
  		AnimationChanged animationChanged = new AnimationChanged();
  		animationChanged.setActor(player);
  		plugin.onAnimationChanged(animationChanged);
  		plugin.onGameTick(new GameTick());
  		when(player.getAnimation()).thenReturn(AnimationID.IDLE);
  		plugin.onAnimationChanged(animationChanged);
  		plugin.onGameTick(new GameTick());
  		verify(notifier).notify("[" + PLAYER_NAME + "] is now idle!");
  	}
test_case.class_method_signature: IdleNotifierPluginTest.checkAnimationIdle()
test_case.full_signature: @Test public void checkAnimationIdle()
test_case.identifier: checkAnimationIdle
test_case.invocations: thenReturn when getAnimation setActor onAnimationChanged onGameTick thenReturn when getAnimation onAnimationChanged onGameTick notify verify
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void checkAnimationIdle()
focal_class.declarator: LOGOUT_WARNING_MILLIS = (4 * 60 + 40) * 1000
focal_class.modifier: private static final
focal_class.original_string: private static final int LOGOUT_WARNING_MILLIS = (4 * 60 + 40) * 1000;
focal_class.type: int
focal_class.var_name: LOGOUT_WARNING_MILLIS
focal_class.declarator: COMBAT_WARNING_MILLIS = 19 * 60 * 1000
focal_class.modifier: private static final
focal_class.original_string: private static final int COMBAT_WARNING_MILLIS = 19 * 60 * 1000;
focal_class.type: int
focal_class.var_name: COMBAT_WARNING_MILLIS
focal_class.declarator: LOGOUT_WARNING_CLIENT_TICKS = LOGOUT_WARNING_MILLIS / Constants.CLIENT_TICK_LENGTH
focal_class.modifier: private static final
focal_class.original_string: private static final int LOGOUT_WARNING_CLIENT_TICKS = LOGOUT_WARNING_MILLIS / Constants.CLIENT_TICK_LENGTH;
focal_class.type: int
focal_class.var_name: LOGOUT_WARNING_CLIENT_TICKS
focal_class.declarator: COMBAT_WARNING_CLIENT_TICKS = COMBAT_WARNING_MILLIS / Constants.CLIENT_TICK_LENGTH
focal_class.modifier: private static final
focal_class.original_string: private static final int COMBAT_WARNING_CLIENT_TICKS = COMBAT_WARNING_MILLIS / Constants.CLIENT_TICK_LENGTH;
focal_class.type: int
focal_class.var_name: COMBAT_WARNING_CLIENT_TICKS
focal_class.declarator: HIGHEST_MONSTER_ATTACK_SPEED = 8
focal_class.modifier: private static final
focal_class.original_string: private static final int HIGHEST_MONSTER_ATTACK_SPEED = 8;
focal_class.type: int
focal_class.var_name: HIGHEST_MONSTER_ATTACK_SPEED
focal_class.declarator: SIX_HOUR_LOGOUT_WARNING_AFTER_DURATION = Duration.ofMinutes(340)
focal_class.modifier: private static final
focal_class.original_string: private static final Duration SIX_HOUR_LOGOUT_WARNING_AFTER_DURATION = Duration.ofMinutes(340);
focal_class.type: Duration
focal_class.var_name: SIX_HOUR_LOGOUT_WARNING_AFTER_DURATION
focal_class.declarator: FISHING_SPOT = "Fishing spot"
focal_class.modifier: private static final
focal_class.original_string: private static final String FISHING_SPOT = "Fishing spot";
focal_class.type: String
focal_class.var_name: FISHING_SPOT
focal_class.declarator: notifier
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private Notifier notifier;
focal_class.type: Notifier
focal_class.var_name: notifier
focal_class.declarator: client
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private Client client;
focal_class.type: Client
focal_class.var_name: client
focal_class.declarator: config
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private IdleNotifierConfig config;
focal_class.type: IdleNotifierConfig
focal_class.var_name: config
focal_class.declarator: lastAnimating
focal_class.modifier: private
focal_class.original_string: private Instant lastAnimating;
focal_class.type: Instant
focal_class.var_name: lastAnimating
focal_class.declarator: lastAnimation = AnimationID.IDLE
focal_class.modifier: private
focal_class.original_string: private int lastAnimation = AnimationID.IDLE;
focal_class.type: int
focal_class.var_name: lastAnimation
focal_class.declarator: lastInteracting
focal_class.modifier: private
focal_class.original_string: private Instant lastInteracting;
focal_class.type: Instant
focal_class.var_name: lastInteracting
focal_class.declarator: lastInteract
focal_class.modifier: private
focal_class.original_string: private Actor lastInteract;
focal_class.type: Actor
focal_class.var_name: lastInteract
focal_class.declarator: lastMoving
focal_class.modifier: private
focal_class.original_string: private Instant lastMoving;
focal_class.type: Instant
focal_class.var_name: lastMoving
focal_class.declarator: lastPosition
focal_class.modifier: private
focal_class.original_string: private WorldPoint lastPosition;
focal_class.type: WorldPoint
focal_class.var_name: lastPosition
focal_class.declarator: notifyPosition = false
focal_class.modifier: private
focal_class.original_string: private boolean notifyPosition = false;
focal_class.type: boolean
focal_class.var_name: notifyPosition
focal_class.declarator: notifyHitpoints = true
focal_class.modifier: private
focal_class.original_string: private boolean notifyHitpoints = true;
focal_class.type: boolean
focal_class.var_name: notifyHitpoints
focal_class.declarator: notifyPrayer = true
focal_class.modifier: private
focal_class.original_string: private boolean notifyPrayer = true;
focal_class.type: boolean
focal_class.var_name: notifyPrayer
focal_class.declarator: notifyOxygen = true
focal_class.modifier: private
focal_class.original_string: private boolean notifyOxygen = true;
focal_class.type: boolean
focal_class.var_name: notifyOxygen
focal_class.declarator: notifyIdleLogout = true
focal_class.modifier: private
focal_class.original_string: private boolean notifyIdleLogout = true;
focal_class.type: boolean
focal_class.var_name: notifyIdleLogout
focal_class.declarator: notify6HourLogout = true
focal_class.modifier: private
focal_class.original_string: private boolean notify6HourLogout = true;
focal_class.type: boolean
focal_class.var_name: notify6HourLogout
focal_class.declarator: lastSpecEnergy = 1000
focal_class.modifier: private
focal_class.original_string: private int lastSpecEnergy = 1000;
focal_class.type: int
focal_class.var_name: lastSpecEnergy
focal_class.declarator: lastCombatCountdown = 0
focal_class.modifier: private
focal_class.original_string: private int lastCombatCountdown = 0;
focal_class.type: int
focal_class.var_name: lastCombatCountdown
focal_class.declarator: sixHourWarningTime
focal_class.modifier: private
focal_class.original_string: private Instant sixHourWarningTime;
focal_class.type: Instant
focal_class.var_name: sixHourWarningTime
focal_class.declarator: ready
focal_class.modifier: private
focal_class.original_string: private boolean ready;
focal_class.type: boolean
focal_class.var_name: ready
focal_class.declarator: lastInteractWasCombat
focal_class.modifier: private
focal_class.original_string: private boolean lastInteractWasCombat;
focal_class.type: boolean
focal_class.var_name: lastInteractWasCombat
focal_class.file: runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java
focal_class.identifier: IdleNotifierPlugin
focal_class.class_method_signature: IdleNotifierPlugin.provideConfig(ConfigManager configManager)
focal_class.full_signature: @Provides IdleNotifierConfig provideConfig(ConfigManager configManager)
focal_class.identifier: provideConfig
focal_class.modifiers: @Provides
focal_class.parameters: (ConfigManager configManager)
focal_class.return: IdleNotifierConfig
focal_class.signature: IdleNotifierConfig provideConfig(ConfigManager configManager)
focal_class.class_method_signature: IdleNotifierPlugin.onAnimationChanged(AnimationChanged event)
focal_class.full_signature: @Subscribe public void onAnimationChanged(AnimationChanged event)
focal_class.identifier: onAnimationChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (AnimationChanged event)
focal_class.return: void
focal_class.signature: void onAnimationChanged(AnimationChanged event)
focal_class.class_method_signature: IdleNotifierPlugin.onInteractingChanged(InteractingChanged event)
focal_class.full_signature: @Subscribe public void onInteractingChanged(InteractingChanged event)
focal_class.identifier: onInteractingChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (InteractingChanged event)
focal_class.return: void
focal_class.signature: void onInteractingChanged(InteractingChanged event)
focal_class.class_method_signature: IdleNotifierPlugin.onGameStateChanged(GameStateChanged gameStateChanged)
focal_class.full_signature: @Subscribe public void onGameStateChanged(GameStateChanged gameStateChanged)
focal_class.identifier: onGameStateChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (GameStateChanged gameStateChanged)
focal_class.return: void
focal_class.signature: void onGameStateChanged(GameStateChanged gameStateChanged)
focal_class.class_method_signature: IdleNotifierPlugin.onHitsplatApplied(HitsplatApplied event)
focal_class.full_signature: @Subscribe public void onHitsplatApplied(HitsplatApplied event)
focal_class.identifier: onHitsplatApplied
focal_class.modifiers: @Subscribe public
focal_class.parameters: (HitsplatApplied event)
focal_class.return: void
focal_class.signature: void onHitsplatApplied(HitsplatApplied event)
focal_class.class_method_signature: IdleNotifierPlugin.onGraphicChanged(GraphicChanged event)
focal_class.full_signature: @Subscribe public void onGraphicChanged(GraphicChanged event)
focal_class.identifier: onGraphicChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (GraphicChanged event)
focal_class.return: void
focal_class.signature: void onGraphicChanged(GraphicChanged event)
focal_class.class_method_signature: IdleNotifierPlugin.onGameTick(GameTick event)
focal_class.full_signature: @Subscribe public void onGameTick(GameTick event)
focal_class.identifier: onGameTick
focal_class.modifiers: @Subscribe public
focal_class.parameters: (GameTick event)
focal_class.return: void
focal_class.signature: void onGameTick(GameTick event)
focal_class.class_method_signature: IdleNotifierPlugin.checkFullSpecEnergy()
focal_class.full_signature: private boolean checkFullSpecEnergy()
focal_class.identifier: checkFullSpecEnergy
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean checkFullSpecEnergy()
focal_class.class_method_signature: IdleNotifierPlugin.checkLowOxygen()
focal_class.full_signature: private boolean checkLowOxygen()
focal_class.identifier: checkLowOxygen
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean checkLowOxygen()
focal_class.class_method_signature: IdleNotifierPlugin.checkLowHitpoints()
focal_class.full_signature: private boolean checkLowHitpoints()
focal_class.identifier: checkLowHitpoints
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean checkLowHitpoints()
focal_class.class_method_signature: IdleNotifierPlugin.checkLowPrayer()
focal_class.full_signature: private boolean checkLowPrayer()
focal_class.identifier: checkLowPrayer
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean checkLowPrayer()
focal_class.class_method_signature: IdleNotifierPlugin.checkInteractionIdle(Duration waitDuration, Player local)
focal_class.full_signature: private boolean checkInteractionIdle(Duration waitDuration, Player local)
focal_class.identifier: checkInteractionIdle
focal_class.modifiers: private
focal_class.parameters: (Duration waitDuration, Player local)
focal_class.return: boolean
focal_class.signature: boolean checkInteractionIdle(Duration waitDuration, Player local)
focal_class.class_method_signature: IdleNotifierPlugin.checkIdleLogout()
focal_class.full_signature: private boolean checkIdleLogout()
focal_class.identifier: checkIdleLogout
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean checkIdleLogout()
focal_class.class_method_signature: IdleNotifierPlugin.check6hrLogout()
focal_class.full_signature: private boolean check6hrLogout()
focal_class.identifier: check6hrLogout
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean check6hrLogout()
focal_class.class_method_signature: IdleNotifierPlugin.checkAnimationIdle(Duration waitDuration, Player local)
focal_class.full_signature: private boolean checkAnimationIdle(Duration waitDuration, Player local)
focal_class.identifier: checkAnimationIdle
focal_class.modifiers: private
focal_class.parameters: (Duration waitDuration, Player local)
focal_class.return: boolean
focal_class.signature: boolean checkAnimationIdle(Duration waitDuration, Player local)
focal_class.class_method_signature: IdleNotifierPlugin.checkMovementIdle(Duration waitDuration, Player local)
focal_class.full_signature: private boolean checkMovementIdle(Duration waitDuration, Player local)
focal_class.identifier: checkMovementIdle
focal_class.modifiers: private
focal_class.parameters: (Duration waitDuration, Player local)
focal_class.return: boolean
focal_class.signature: boolean checkMovementIdle(Duration waitDuration, Player local)
focal_class.class_method_signature: IdleNotifierPlugin.resetTimers()
focal_class.full_signature: private void resetTimers()
focal_class.identifier: resetTimers
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void resetTimers()
focal_class.superclass: extends Plugin
focal_method.body: private boolean checkAnimationIdle(Duration waitDuration, Player local)
  	{
  		if (lastAnimation == IDLE)
  		{
  			return false;
  		}
  
  		final int animation = local.getAnimation();
  
  		if (animation == IDLE)
  		{
  			if (lastAnimating != null && Instant.now().compareTo(lastAnimating.plus(waitDuration)) >= 0)
  			{
  				lastAnimation = IDLE;
  				lastAnimating = null;
  
  				// prevent interaction notifications from firing too
  				lastInteract = null;
  				lastInteracting = null;
  
  				return true;
  			}
  		}
  		else
  		{
  			lastAnimating = Instant.now();
  		}
  
  		return false;
  	}
focal_method.class_method_signature: IdleNotifierPlugin.checkAnimationIdle(Duration waitDuration, Player local)
focal_method.full_signature: private boolean checkAnimationIdle(Duration waitDuration, Player local)
focal_method.identifier: checkAnimationIdle
focal_method.invocations: getAnimation compareTo now plus now
focal_method.modifiers: private
focal_method.parameters: (Duration waitDuration, Player local)
focal_method.return: boolean
focal_method.signature: boolean checkAnimationIdle(Duration waitDuration, Player local)