fix(identity): clear managed presentation on logout
This commit is contained in:
@@ -12,6 +12,7 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
/** Handles player lifecycle events that affect Leaf protection. */
|
||||
public final class LeafListener implements Listener {
|
||||
@@ -38,6 +39,11 @@ public final class LeafListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent event) {
|
||||
runtime.removePresentation(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onDamage(EntityDamageEvent event) {
|
||||
if (event.isCancelled() || event.getFinalDamage() <= 0.0
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package games.dmg.leaf;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import java.time.Clock;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
final class LeafListenerLifecycleTest {
|
||||
@Test
|
||||
void removesSessionOwnedPresentationWhenAPlayerQuits() {
|
||||
LeafRuntime runtime = mock(LeafRuntime.class);
|
||||
Player player = mock(Player.class);
|
||||
PlayerQuitEvent event = mock(PlayerQuitEvent.class);
|
||||
org.mockito.Mockito.when(event.getPlayer()).thenReturn(player);
|
||||
|
||||
new LeafListener(runtime, Clock.systemUTC(), Logger.getAnonymousLogger()).onQuit(event);
|
||||
|
||||
verify(runtime).removePresentation(player);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user