idle notifier: prevent double notifications for anim and interact

This commit is contained in:
Alexsuperfly
2020-01-31 12:10:24 -05:00
committed by Adam
parent 61074935ad
commit 3f1120d23a
2 changed files with 47 additions and 0 deletions

View File

@@ -561,6 +561,11 @@ public class IdleNotifierPlugin extends Plugin
{
lastInteract = null;
lastInteracting = null;
// prevent animation notifications from firing too
lastAnimation = IDLE;
lastAnimating = null;
return true;
}
}
@@ -648,6 +653,11 @@ public class IdleNotifierPlugin extends Plugin
{
lastAnimation = IDLE;
lastAnimating = null;
// prevent interaction notifications from firing too
lastInteract = null;
lastInteracting = null;
return true;
}
}

View File

@@ -48,8 +48,10 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import org.mockito.Mock;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -83,6 +85,9 @@ public class IdleNotifierPluginTest
@Mock
private NPC randomEvent;
@Mock
private NPC fishingSpot;
@Mock
private Player player;
@@ -103,6 +108,13 @@ public class IdleNotifierPluginTest
when(randomEventComp.getActions()).thenReturn(randomEventActions);
when(randomEvent.getComposition()).thenReturn(randomEventComp);
// Mock Fishing Spot
final String[] fishingSpotActions = new String[] { "Use-rod", "Examine" };
final NPCComposition fishingSpotComp = mock(NPCComposition.class);
when(fishingSpotComp.getActions()).thenReturn(fishingSpotActions);
when(fishingSpot.getComposition()).thenReturn(fishingSpotComp);
when(fishingSpot.getName()).thenReturn("Fishing spot");
// Mock player
when(player.getName()).thenReturn(PLAYER_NAME);
when(player.getAnimation()).thenReturn(AnimationID.IDLE);
@@ -258,6 +270,31 @@ public class IdleNotifierPluginTest
verify(notifier, times(1)).notify(any());
}
@Test
public void testSendOneNotificationForAnimationAndInteract()
{
when(player.getInteracting()).thenReturn(fishingSpot);
when(player.getAnimation()).thenReturn(AnimationID.FISHING_POLE_CAST);
AnimationChanged animationChanged = new AnimationChanged();
animationChanged.setActor(player);
plugin.onInteractingChanged(new InteractingChanged(player, fishingSpot));
plugin.onAnimationChanged(animationChanged);
plugin.onGameTick(new GameTick());
verify(notifier, never()).notify(anyString());
when(player.getAnimation()).thenReturn(AnimationID.IDLE);
lenient().when(player.getInteracting()).thenReturn(null);
plugin.onAnimationChanged(animationChanged);
plugin.onInteractingChanged(new InteractingChanged(player, null));
plugin.onGameTick(new GameTick());
verify(notifier).notify("[" + PLAYER_NAME + "] is now idle!");
}
@Test
public void testSpecRegen()
{