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 doubleNotifyOnMouseReset()
  	{
  		// Player is idle, but in combat so the idle packet is getting set repeatedly
  		// make sure we are not notifying
  
  		when(client.getKeyboardIdleTicks()).thenReturn(80_000);
  		when(client.getMouseIdleTicks()).thenReturn(14_500);
  
  		plugin.onGameTick(new GameTick());
  		plugin.onGameTick(new GameTick());
  		verify(notifier, times(1)).notify(any());
  	}
test_case.class_method_signature: IdleNotifierPluginTest.doubleNotifyOnMouseReset()
test_case.full_signature: @Test public void doubleNotifyOnMouseReset()
test_case.identifier: doubleNotifyOnMouseReset
test_case.invocations: thenReturn when getKeyboardIdleTicks thenReturn when getMouseIdleTicks onGameTick onGameTick notify verify times any
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void doubleNotifyOnMouseReset()
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: @Subscribe
  	public void onGameTick(GameTick event)
  	{
  		final Player local = client.getLocalPlayer();
  		final Duration waitDuration = Duration.ofMillis(config.getIdleNotificationDelay());
  		lastCombatCountdown = Math.max(lastCombatCountdown - 1, 0);
  
  		if (client.getGameState() != GameState.LOGGED_IN
  			|| local == null
  			// If user has clicked in the last second then they're not idle so don't send idle notification
  			|| System.currentTimeMillis() - client.getMouseLastPressedMillis() < 1000
  			|| client.getKeyboardIdleTicks() < 10)
  		{
  			resetTimers();
  			return;
  		}
  
  		if (config.logoutIdle() && checkIdleLogout())
  		{
  			notifier.notify("[" + local.getName() + "] is about to log out from idling too long!");
  		}
  
  		if (check6hrLogout())
  		{
  			notifier.notify("[" + local.getName() + "] is about to log out from being online for 6 hours!");
  		}
  
  		if (config.animationIdle() && checkAnimationIdle(waitDuration, local))
  		{
  			notifier.notify("[" + local.getName() + "] is now idle!");
  		}
  
  		if (config.movementIdle() && checkMovementIdle(waitDuration, local))
  		{
  			notifier.notify("[" + local.getName() + "] has stopped moving!");
  		}
  
  		if (config.interactionIdle() && checkInteractionIdle(waitDuration, local))
  		{
  			if (lastInteractWasCombat)
  			{
  				notifier.notify("[" + local.getName() + "] is now out of combat!");
  			}
  			else
  			{
  				notifier.notify("[" + local.getName() + "] is now idle!");
  			}
  		}
  
  		if (checkLowHitpoints())
  		{
  			notifier.notify("[" + local.getName() + "] has low hitpoints!");
  		}
  
  		if (checkLowPrayer())
  		{
  			notifier.notify("[" + local.getName() + "] has low prayer!");
  		}
  
  		if (checkLowOxygen())
  		{
  			notifier.notify("[" + local.getName() + "] has low oxygen!");
  		}
  
  		if (checkFullSpecEnergy())
  		{
  			notifier.notify("[" + local.getName() + "] has restored spec energy!");
  		}
  	}
focal_method.class_method_signature: IdleNotifierPlugin.onGameTick(GameTick event)
focal_method.full_signature: @Subscribe public void onGameTick(GameTick event)
focal_method.identifier: onGameTick
focal_method.invocations: getLocalPlayer ofMillis getIdleNotificationDelay max getGameState currentTimeMillis getMouseLastPressedMillis getKeyboardIdleTicks resetTimers logoutIdle checkIdleLogout notify getName check6hrLogout notify getName animationIdle checkAnimationIdle notify getName movementIdle checkMovementIdle notify getName interactionIdle checkInteractionIdle notify getName notify getName checkLowHitpoints notify getName checkLowPrayer notify getName checkLowOxygen notify getName checkFullSpecEnergy notify getName
focal_method.modifiers: @Subscribe public
focal_method.parameters: (GameTick event)
focal_method.return: void
focal_method.signature: void onGameTick(GameTick event)