fix(identity): clear managed presentation on logout

This commit is contained in:
dmg
2026-08-10 18:32:10 -04:00
parent ab858df733
commit 3b8393cca4
2 changed files with 30 additions and 0 deletions
@@ -12,6 +12,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
/** Handles player lifecycle events that affect Leaf protection. */ /** Handles player lifecycle events that affect Leaf protection. */
public final class LeafListener implements Listener { 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) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onDamage(EntityDamageEvent event) { public void onDamage(EntityDamageEvent event) {
if (event.isCancelled() || event.getFinalDamage() <= 0.0 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);
}
}