From 2a8191566edca1597e2ac1550278bae4457986a7 Mon Sep 17 00:00:00 2001 From: TonytheMacaroni Date: Tue, 20 May 2025 21:23:25 -0400 Subject: [PATCH] Fix turning off --- .../spells/buff/InvisibilitySpell.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/InvisibilitySpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/InvisibilitySpell.java index 0702a2c5b..f1451b0a4 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/InvisibilitySpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/InvisibilitySpell.java @@ -68,19 +68,17 @@ public void turnOffBuff(LivingEntity entity) { protected void turnOff() { super.turnOff(); - if (manager == null) return; - manager.stop(); - manager = null; + if (manager != null) manager.stop(); } @Override protected @NotNull Collection getActiveEntities() { - return manager.entities.keySet(); + return manager != null ? manager.getActiveEntities(this) : Collections.emptyList(); } private static class InvisibilityManager implements Listener { - private final Object2ObjectArrayMap entities = new Object2ObjectArrayMap<>(); + private final Map entities = new Object2ObjectArrayMap<>(); public InvisibilityManager() { MagicSpells.registerEvents(this); @@ -111,6 +109,13 @@ public boolean isActive(InvisibilitySpell spell, LivingEntity entity) { return data != null && data.spells.containsKey(spell.internalName); } + public Collection getActiveEntities(InvisibilitySpell spell) { + return entities.entrySet().stream() + .filter(entry -> entry.getValue().spells.containsKey(spell.internalName)) + .map(Map.Entry::getKey) + .toList(); + } + public void turnOffBuff(InvisibilitySpell spell, LivingEntity entity) { UUID uuid = entity.getUniqueId(); InvisibilityData data = entities.get(uuid); @@ -136,7 +141,10 @@ public void turnOffBuff(InvisibilitySpell spell, LivingEntity entity) { } public void stop() { - entities.clear(); + // Only stop if all other InvisibilitySpell instances with active casts have been turned off. + if (!entities.isEmpty()) return; + + InvisibilitySpell.manager = null; HandlerList.unregisterAll(this); }