test_class.declarator: BIRDS_NEST_MESSAGE = "A bird's nest falls out of the tree."
test_class.modifier: private static final
test_class.original_string: private static final String BIRDS_NEST_MESSAGE = "A bird's nest falls out of the tree.";
test_class.type: String
test_class.var_name: BIRDS_NEST_MESSAGE
test_class.declarator: woodcuttingPlugin
test_class.modifier: @Inject
test_class.original_string: @Inject
  	WoodcuttingPlugin woodcuttingPlugin;
test_class.type: WoodcuttingPlugin
test_class.var_name: woodcuttingPlugin
test_class.declarator: woodcuttingConfig
test_class.modifier: @Mock
  	@Bind
test_class.original_string: @Mock
  	@Bind
  	WoodcuttingConfig woodcuttingConfig;
test_class.type: WoodcuttingConfig
test_class.var_name: woodcuttingConfig
test_class.declarator: notifier
test_class.modifier: @Mock
  	@Bind
test_class.original_string: @Mock
  	@Bind
  	Notifier notifier;
test_class.type: Notifier
test_class.var_name: notifier
test_class.declarator: client
test_class.modifier: @Mock
  	@Bind
test_class.original_string: @Mock
  	@Bind
  	Client client;
test_class.type: Client
test_class.var_name: client
test_class.declarator: woodcuttingOverlay
test_class.modifier: @Mock
  	@Bind
test_class.original_string: @Mock
  	@Bind
  	WoodcuttingOverlay woodcuttingOverlay;
test_class.type: WoodcuttingOverlay
test_class.var_name: woodcuttingOverlay
test_class.declarator: woodcuttingTreesOverlay
test_class.modifier: @Mock
  	@Bind
test_class.original_string: @Mock
  	@Bind
  	WoodcuttingTreesOverlay woodcuttingTreesOverlay;
test_class.type: WoodcuttingTreesOverlay
test_class.var_name: woodcuttingTreesOverlay
test_class.declarator: overlayManager
test_class.modifier: @Mock
  	@Bind
test_class.original_string: @Mock
  	@Bind
  	OverlayManager overlayManager;
test_class.type: OverlayManager
test_class.var_name: overlayManager
test_class.file: runelite-client/src/test/java/net/runelite/client/plugins/woodcutting/WoodcuttingPluginTest.java
test_class.identifier: WoodcuttingPluginTest
test_case.body: @Test
  	public void testBirdsNest()
  	{
  		ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", BIRDS_NEST_MESSAGE, "", 0);
  
  		when(woodcuttingConfig.showNestNotification()).thenReturn(true);
  		woodcuttingPlugin.onChatMessage(chatMessage);
  		verify(notifier).notify("A bird nest has spawned!");
  
  		when(woodcuttingConfig.showNestNotification()).thenReturn(false);
  		woodcuttingPlugin.onChatMessage(chatMessage);
  		verifyNoMoreInteractions(notifier);
  	}
test_case.class_method_signature: WoodcuttingPluginTest.testBirdsNest()
test_case.full_signature: @Test public void testBirdsNest()
test_case.identifier: testBirdsNest
test_case.invocations: thenReturn when showNestNotification onChatMessage notify verify thenReturn when showNestNotification onChatMessage verifyNoMoreInteractions
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testBirdsNest()
focal_class.declarator: WOOD_CUT_PATTERN = Pattern.compile("You get (?:some|an)[\\w ]+(?:logs?|mushrooms)\\.")
focal_class.modifier: private static final
focal_class.original_string: private static final Pattern WOOD_CUT_PATTERN = Pattern.compile("You get (?:some|an)[\\w ]+(?:logs?|mushrooms)\\.");
focal_class.type: Pattern
focal_class.var_name: WOOD_CUT_PATTERN
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: overlayManager
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private OverlayManager overlayManager;
focal_class.type: OverlayManager
focal_class.var_name: overlayManager
focal_class.declarator: overlay
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private WoodcuttingOverlay overlay;
focal_class.type: WoodcuttingOverlay
focal_class.var_name: overlay
focal_class.declarator: treesOverlay
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private WoodcuttingTreesOverlay treesOverlay;
focal_class.type: WoodcuttingTreesOverlay
focal_class.var_name: treesOverlay
focal_class.declarator: config
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private WoodcuttingConfig config;
focal_class.type: WoodcuttingConfig
focal_class.var_name: config
focal_class.declarator: session
focal_class.modifier: @Getter
  	@Nullable
  	private
focal_class.original_string: @Getter
  	@Nullable
  	private WoodcuttingSession session;
focal_class.type: WoodcuttingSession
focal_class.var_name: session
focal_class.declarator: axe
focal_class.modifier: @Getter
  	@Nullable
  	private
focal_class.original_string: @Getter
  	@Nullable
  	private Axe axe;
focal_class.type: Axe
focal_class.var_name: axe
focal_class.declarator: treeObjects = new HashSet<>()
focal_class.modifier: @Getter
  	private final
focal_class.original_string: @Getter
  	private final Set<GameObject> treeObjects = new HashSet<>();
focal_class.type: Set<GameObject>
focal_class.var_name: treeObjects
focal_class.declarator: respawns = new ArrayList<>()
focal_class.modifier: @Getter(AccessLevel.PACKAGE)
  	private final
focal_class.original_string: @Getter(AccessLevel.PACKAGE)
  	private final List<TreeRespawn> respawns = new ArrayList<>();
focal_class.type: List<TreeRespawn>
focal_class.var_name: respawns
focal_class.declarator: recentlyLoggedIn
focal_class.modifier: private
focal_class.original_string: private boolean recentlyLoggedIn;
focal_class.type: boolean
focal_class.var_name: recentlyLoggedIn
focal_class.declarator: currentPlane
focal_class.modifier: private
focal_class.original_string: private int currentPlane;
focal_class.type: int
focal_class.var_name: currentPlane
focal_class.file: runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java
focal_class.identifier: WoodcuttingPlugin
focal_class.class_method_signature: WoodcuttingPlugin.getConfig(ConfigManager configManager)
focal_class.full_signature: @Provides WoodcuttingConfig getConfig(ConfigManager configManager)
focal_class.identifier: getConfig
focal_class.modifiers: @Provides
focal_class.parameters: (ConfigManager configManager)
focal_class.return: WoodcuttingConfig
focal_class.signature: WoodcuttingConfig getConfig(ConfigManager configManager)
focal_class.class_method_signature: WoodcuttingPlugin.startUp()
focal_class.full_signature: @Override protected void startUp()
focal_class.identifier: startUp
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void startUp()
focal_class.class_method_signature: WoodcuttingPlugin.shutDown()
focal_class.full_signature: @Override protected void shutDown()
focal_class.identifier: shutDown
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void shutDown()
focal_class.class_method_signature: WoodcuttingPlugin.onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked)
focal_class.full_signature: @Subscribe public void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked)
focal_class.identifier: onOverlayMenuClicked
focal_class.modifiers: @Subscribe public
focal_class.parameters: (OverlayMenuClicked overlayMenuClicked)
focal_class.return: void
focal_class.signature: void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked)
focal_class.class_method_signature: WoodcuttingPlugin.onGameTick(GameTick gameTick)
focal_class.full_signature: @Subscribe public void onGameTick(GameTick gameTick)
focal_class.identifier: onGameTick
focal_class.modifiers: @Subscribe public
focal_class.parameters: (GameTick gameTick)
focal_class.return: void
focal_class.signature: void onGameTick(GameTick gameTick)
focal_class.class_method_signature: WoodcuttingPlugin.onChatMessage(ChatMessage event)
focal_class.full_signature: @Subscribe public void onChatMessage(ChatMessage event)
focal_class.identifier: onChatMessage
focal_class.modifiers: @Subscribe public
focal_class.parameters: (ChatMessage event)
focal_class.return: void
focal_class.signature: void onChatMessage(ChatMessage event)
focal_class.class_method_signature: WoodcuttingPlugin.onGameObjectSpawned(final GameObjectSpawned event)
focal_class.full_signature: @Subscribe public void onGameObjectSpawned(final GameObjectSpawned event)
focal_class.identifier: onGameObjectSpawned
focal_class.modifiers: @Subscribe public
focal_class.parameters: (final GameObjectSpawned event)
focal_class.return: void
focal_class.signature: void onGameObjectSpawned(final GameObjectSpawned event)
focal_class.class_method_signature: WoodcuttingPlugin.onGameObjectDespawned(final GameObjectDespawned event)
focal_class.full_signature: @Subscribe public void onGameObjectDespawned(final GameObjectDespawned event)
focal_class.identifier: onGameObjectDespawned
focal_class.modifiers: @Subscribe public
focal_class.parameters: (final GameObjectDespawned event)
focal_class.return: void
focal_class.signature: void onGameObjectDespawned(final GameObjectDespawned event)
focal_class.class_method_signature: WoodcuttingPlugin.onGameObjectChanged(final GameObjectChanged event)
focal_class.full_signature: @Subscribe public void onGameObjectChanged(final GameObjectChanged event)
focal_class.identifier: onGameObjectChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (final GameObjectChanged event)
focal_class.return: void
focal_class.signature: void onGameObjectChanged(final GameObjectChanged event)
focal_class.class_method_signature: WoodcuttingPlugin.onGameStateChanged(final GameStateChanged event)
focal_class.full_signature: @Subscribe public void onGameStateChanged(final GameStateChanged event)
focal_class.identifier: onGameStateChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (final GameStateChanged event)
focal_class.return: void
focal_class.signature: void onGameStateChanged(final GameStateChanged event)
focal_class.class_method_signature: WoodcuttingPlugin.onAnimationChanged(final AnimationChanged event)
focal_class.full_signature: @Subscribe public void onAnimationChanged(final AnimationChanged event)
focal_class.identifier: onAnimationChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (final AnimationChanged event)
focal_class.return: void
focal_class.signature: void onAnimationChanged(final AnimationChanged event)
focal_class.superclass: extends Plugin
focal_method.body: @Subscribe
  	public void onChatMessage(ChatMessage event)
  	{
  		if (event.getType() == ChatMessageType.SPAM || event.getType() == ChatMessageType.GAMEMESSAGE)
  		{
  			if (WOOD_CUT_PATTERN.matcher(event.getMessage()).matches())
  			{
  				if (session == null)
  				{
  					session = new WoodcuttingSession();
  				}
  
  				session.setLastChopping();
  			}
  
  			if (event.getMessage().contains("A bird's nest falls out of the tree") && config.showNestNotification())
  			{
  				notifier.notify("A bird nest has spawned!");
  			}
  		}
  	}
focal_method.class_method_signature: WoodcuttingPlugin.onChatMessage(ChatMessage event)
focal_method.full_signature: @Subscribe public void onChatMessage(ChatMessage event)
focal_method.identifier: onChatMessage
focal_method.invocations: getType getType matches matcher getMessage setLastChopping contains getMessage showNestNotification notify
focal_method.modifiers: @Subscribe public
focal_method.parameters: (ChatMessage event)
focal_method.return: void
focal_method.signature: void onChatMessage(ChatMessage event)