diff --git a/core/src/main/java/com/nisovin/magicspells/MagicSpells.java b/core/src/main/java/com/nisovin/magicspells/MagicSpells.java index d4cb66d3e..8c8f08320 100644 --- a/core/src/main/java/com/nisovin/magicspells/MagicSpells.java +++ b/core/src/main/java/com/nisovin/magicspells/MagicSpells.java @@ -62,7 +62,6 @@ import com.nisovin.magicspells.util.managers.*; import com.nisovin.magicspells.mana.ManaSystem; import com.nisovin.magicspells.mana.ManaHandler; -import com.nisovin.magicspells.spells.BuffSpell; import com.nisovin.magicspells.variables.Variable; import com.nisovin.magicspells.spells.PassiveSpell; import com.nisovin.magicspells.commands.MagicCommand; @@ -2169,7 +2168,6 @@ public void unload() { } } } - if (spell instanceof BuffSpell buffSpell) buffSpell.stopAllEffects(); spell.turnOff(); } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/BowSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/BowSpell.java index 4d61eb2eb..f7c04c78a 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/BowSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/BowSpell.java @@ -173,8 +173,6 @@ public void initialize() { @Override public void turnOff() { - super.turnOff(); - hitListener = null; } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/BuffSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/BuffSpell.java index 4c280c867..984ce2667 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/BuffSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/BuffSpell.java @@ -1,11 +1,11 @@ package com.nisovin.magicspells.spells; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; -import java.util.Iterator; +import java.util.*; import java.util.concurrent.TimeUnit; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.MustBeInvokedByOverriders; + import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; @@ -384,7 +384,7 @@ public void stopEffects(LivingEntity livingEntity) { } } - public void stopAllEffects() { + private void stopAllEffects() { Iterator trackerIterator = getEffectTrackers().iterator(); EffectTracker effectTracker; while (trackerIterator.hasNext()) { @@ -404,8 +404,26 @@ public void stopAllEffects() { protected abstract void turnOffBuff(LivingEntity entity); + /** + * The {@link BuffSpell} implementation of this method handles running {@link BuffSpell#turnOff(LivingEntity)} for entities. + */ @Override - protected abstract void turnOff(); + @MustBeInvokedByOverriders + protected void turnOff() { + stopAllEffects(); + + Collection uuids = getActiveEntities(); + if (!uuids.isEmpty()) { + for (UUID uuid : new ArrayList<>(uuids)) { + if (!(Bukkit.getEntity(uuid) instanceof LivingEntity entity)) continue; + if (!entity.isValid()) continue; + turnOff(entity); + } + } + } + + @NotNull + protected abstract Collection getActiveEntities(); public boolean isTargeted() { return targeted; diff --git a/core/src/main/java/com/nisovin/magicspells/spells/PassiveSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/PassiveSpell.java index 5c4771ae5..4d6d60ef2 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/PassiveSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/PassiveSpell.java @@ -88,8 +88,6 @@ public void initialize() { @Override public void turnOff() { - super.turnOff(); - for (PassiveListener listener : passiveListeners) { listener.turnOff(); HandlerList.unregisterAll(listener); diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ArmorSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ArmorSpell.java index 5e5bdf4c2..24e9bb945 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ArmorSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ArmorSpell.java @@ -1,9 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.List; -import java.util.UUID; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Bukkit; import org.bukkit.event.Event; @@ -137,16 +136,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - for (UUID id : entities) { - Entity entity = Bukkit.getEntity(id); - if (entity == null || !entity.isValid()) continue; - - EntityEquipment eq = ((LivingEntity) entity).getEquipment(); - if (eq != null) removeArmor(eq); - } - - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities; } private void setArmor(EntityEquipment eq) { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/CarpetSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/CarpetSpell.java index 963903a99..4b238bcfb 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/CarpetSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/CarpetSpell.java @@ -1,10 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.Map; -import java.util.UUID; -import java.util.HashSet; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Location; import org.bukkit.Material; @@ -76,17 +74,13 @@ public boolean isActive(LivingEntity entity) { @Override public void turnOffBuff(LivingEntity entity) { - BlockPlatform platform = entities.get(entity.getUniqueId()); - if (platform == null) return; - - platform.destroyPlatform(); - entities.remove(entity.getUniqueId()); + BlockPlatform platform = entities.remove(entity.getUniqueId()); + if (platform != null) platform.destroyPlatform(); } @Override - protected void turnOff() { - entities.values().forEach(BlockPlatform::destroyPlatform); - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } private void handleMove(LivingEntity entity, Location to) { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ClaritySpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ClaritySpell.java index 7160950d3..291aa6614 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ClaritySpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ClaritySpell.java @@ -1,10 +1,10 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; import java.util.function.Supplier; +import org.jetbrains.annotations.NotNull; + import org.bukkit.event.EventHandler; import org.bukkit.entity.LivingEntity; @@ -86,8 +86,8 @@ protected void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler(ignoreCancelled = true) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/DamageEmpowerSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/DamageEmpowerSpell.java index 3c94a447d..03e3bbc04 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/DamageEmpowerSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/DamageEmpowerSpell.java @@ -1,10 +1,10 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; import java.util.function.Supplier; +import org.jetbrains.annotations.NotNull; + import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.entity.LivingEntity; @@ -84,8 +84,8 @@ protected void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/DodgeSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/DodgeSpell.java index 39da8b9fa..a343da70d 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/DodgeSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/DodgeSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Location; import org.bukkit.util.Vector; @@ -90,11 +90,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - for (EffectPosition pos: EffectPosition.values()) { - cancelEffectForAllPlayers(pos); - } - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/DummySpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/DummySpell.java index 8770bd368..ad1b4fa16 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/DummySpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/DummySpell.java @@ -1,15 +1,14 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.UUID; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.entity.LivingEntity; import com.nisovin.magicspells.util.SpellData; import com.nisovin.magicspells.util.MagicConfig; import com.nisovin.magicspells.spells.BuffSpell; -import com.nisovin.magicspells.spelleffects.EffectPosition; public class DummySpell extends BuffSpell { @@ -38,11 +37,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - for (EffectPosition pos: EffectPosition.values()) { - cancelEffectForAllPlayers(pos); - } - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities; } public Set getEntities() { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/EmpowerSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/EmpowerSpell.java index ff341c81c..ad3208b39 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/EmpowerSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/EmpowerSpell.java @@ -1,10 +1,10 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; import java.util.function.Supplier; +import org.jetbrains.annotations.NotNull; + import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.entity.LivingEntity; @@ -85,8 +85,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/FlamewalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/FlamewalkSpell.java index 577d9af0b..261a9f38f 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/FlamewalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/FlamewalkSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; @@ -88,21 +88,26 @@ public boolean isActive(LivingEntity entity) { public void turnOffBuff(LivingEntity entity) { entities.remove(entity.getUniqueId()); if (!entities.isEmpty()) return; - if (burner == null) return; + if (burner == null) return; burner.stop(); burner = null; } @Override protected void turnOff() { - entities.clear(); - if (burner == null) return; + super.turnOff(); + if (burner == null) return; burner.stop(); burner = null; } + @Override + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); + } + private record FlamewalkData(SpellData spellData, boolean checkPlugins, double radius, boolean constantRadius, int fireTicks, boolean constantFireTicks) { } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/FrostwalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/FrostwalkSpell.java index 7746ef887..aa9888a7b 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/FrostwalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/FrostwalkSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Location; import org.bukkit.Material; @@ -68,17 +68,13 @@ public boolean isActive(LivingEntity entity) { @Override public void turnOffBuff(LivingEntity entity) { - BlockPlatform platform = entities.get(entity.getUniqueId()); - if (platform == null) return; - - platform.destroyPlatform(); - entities.remove(entity.getUniqueId()); + BlockPlatform platform = entities.remove(entity.getUniqueId()); + if (platform != null) platform.destroyPlatform(); } @Override - protected void turnOff() { - entities.values().forEach(BlockPlatform::destroyPlatform); - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } private void handleMove(LivingEntity entity, Location to, Location from) { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/GillsSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/GillsSpell.java index 24cb82b21..765626bb8 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/GillsSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/GillsSpell.java @@ -1,11 +1,9 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.event.Event; import org.bukkit.entity.Entity; @@ -117,24 +115,16 @@ public boolean isActive(LivingEntity entity) { @Override public void turnOffBuff(LivingEntity entity) { GillData data = entities.remove(entity.getUniqueId()); - if (data != null && data.headEffect) { - EntityEquipment eq = entity.getEquipment(); - if (eq == null) return; + if (data == null || !data.headEffect) return; + + EntityEquipment eq = entity.getEquipment(); + if (eq != null) eq.setHelmet(data.helmet); - eq.setHelmet(data.helmet); - } } @Override - protected void turnOff() { - for (UUID uuid : entities.keySet()) { - Entity entity = Bukkit.getEntity(uuid); - if (!(entity instanceof LivingEntity livingEntity) || !livingEntity.isValid()) continue; - - turnOffBuff(livingEntity); - } - - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler(ignoreCancelled = true) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/HasteSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/HasteSpell.java index d8f5efb7e..f8c2f2df7 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/HasteSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/HasteSpell.java @@ -1,10 +1,9 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.entity.LivingEntity; @@ -84,16 +83,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - for (UUID id : players.keySet()) { - Player player = Bukkit.getPlayer(id); - if (player == null) continue; - player.removePotionEffect(PotionEffectType.SPEED); - HasteData data = players.get(id); - if (data != null) MagicSpells.cancelTask(data.task); - } - - players.clear(); + protected @NotNull Collection getActiveEntities() { + return players.keySet(); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ImpactRecordSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ImpactRecordSpell.java index 657e8c3c4..3e8887f88 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ImpactRecordSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ImpactRecordSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.UUID; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -70,10 +70,10 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities; } - + @EventHandler(priority = EventPriority.MONITOR) public void onSpellTarget(SpellTargetEvent event) { if (event.isCancelled() && !recordCancelled) return; 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 c5cd93576..0702a2c5b 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 @@ -2,6 +2,8 @@ import java.util.*; +import org.jetbrains.annotations.NotNull; + import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import it.unimi.dsi.fastutil.objects.Object2BooleanArrayMap; @@ -64,10 +66,16 @@ public void turnOffBuff(LivingEntity entity) { @Override protected void turnOff() { - if (manager != null) { - manager.stop(); - manager = null; - } + super.turnOff(); + + if (manager == null) return; + manager.stop(); + manager = null; + } + + @Override + protected @NotNull Collection getActiveEntities() { + return manager.entities.keySet(); } private static class InvisibilityManager implements Listener { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/InvulnerabilitySpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/InvulnerabilitySpell.java index 0a430ab3c..7bc3dd979 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/InvulnerabilitySpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/InvulnerabilitySpell.java @@ -1,9 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.List; -import java.util.UUID; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import net.kyori.adventure.key.Key; @@ -80,8 +79,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities; } @EventHandler diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/LifewalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/LifewalkSpell.java index 4bfebe786..07c2301a5 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/LifewalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/LifewalkSpell.java @@ -1,11 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.Map; -import java.util.UUID; -import java.util.List; -import java.util.HashSet; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -78,21 +75,26 @@ public boolean isActive(LivingEntity entity) { public void turnOffBuff(LivingEntity entity) { entities.remove(entity.getUniqueId()); if (!entities.isEmpty()) return; + if (grower == null) return; - grower.stop(); grower = null; } @Override protected void turnOff() { - entities.clear(); + super.turnOff(); + if (grower == null) return; - grower.stop(); grower = null; } + @Override + protected @NotNull Collection getActiveEntities() { + return entities; + } + public Set getEntities() { return entities; } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/LightwalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/LightwalkSpell.java index 71181bed9..976b6ef1a 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/LightwalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/LightwalkSpell.java @@ -2,7 +2,8 @@ import java.util.*; -import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; + import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -87,16 +88,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - for (UUID id : players.keySet()) { - Player player = Bukkit.getPlayer(id); - if (player == null) continue; - - LightWalkData data = players.get(id); - if (data.current != null) player.sendBlockChange(data.current.getLocation(), data.current.getBlockData()); - } - - players.clear(); + protected @NotNull Collection getActiveEntities() { + return players.keySet(); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/LilywalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/LilywalkSpell.java index fae870aa9..bb63ad779 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/LilywalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/LilywalkSpell.java @@ -1,12 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.Map; -import java.util.UUID; -import java.util.Objects; -import java.util.HashSet; -import java.util.HashMap; -import java.util.Iterator; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Material; import org.bukkit.block.Block; @@ -51,14 +47,12 @@ public boolean isActive(LivingEntity entity) { @Override public void turnOffBuff(LivingEntity entity) { Lilies lilies = entities.remove(entity.getUniqueId()); - if (lilies == null) return; - lilies.remove(); + if (lilies != null) lilies.remove(); } @Override - protected void turnOff() { - entities.values().forEach(Lilies::remove); - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } private void handleMove(LivingEntity entity, Block block) { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ManaRegenSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ManaRegenSpell.java index 16adec17b..6c805ca83 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ManaRegenSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ManaRegenSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -62,8 +62,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - players.clear(); + protected @NotNull Collection getActiveEntities() { + return players.keySet(); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/MinionSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/MinionSpell.java index f5d25a7ba..55aabf8f9 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/MinionSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/MinionSpell.java @@ -3,6 +3,8 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Multimap; import org.bukkit.Bukkit; @@ -341,12 +343,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - minions.values().forEach(Entity::remove); - minions.clear(); - - players.clear(); - targets.clear(); + protected @NotNull Collection getActiveEntities() { + return minions.keySet(); } @EventHandler diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ReachSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ReachSpell.java index c01ee4b1e..7af660855 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ReachSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ReachSpell.java @@ -1,11 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.Set; -import java.util.List; -import java.util.UUID; -import java.util.HashMap; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Effect; import org.bukkit.GameMode; @@ -93,8 +90,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - players.clear(); + protected @NotNull Collection getActiveEntities() { + return players.keySet(); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ReflectSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ReflectSpell.java index 453c5b27b..0ce98afb5 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ReflectSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ReflectSpell.java @@ -1,11 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; -import java.util.HashSet; -import java.util.ArrayList; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.event.EventHandler; import org.bukkit.entity.LivingEntity; @@ -85,8 +82,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - reflectors.clear(); + protected @NotNull Collection getActiveEntities() { + return reflectors.keySet(); } @EventHandler(ignoreCancelled = true) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ResistSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ResistSpell.java index 8f16f3741..abd1ba1d4 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ResistSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ResistSpell.java @@ -1,14 +1,11 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.List; -import java.util.HashMap; -import java.util.HashSet; +import java.util.*; import net.kyori.adventure.key.Key; +import org.jetbrains.annotations.NotNull; + import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.entity.LivingEntity; @@ -137,8 +134,8 @@ protected void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/SeeHealthSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/SeeHealthSpell.java index eb5f902b4..e06918f3e 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/SeeHealthSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/SeeHealthSpell.java @@ -2,6 +2,8 @@ import java.util.*; +import org.jetbrains.annotations.NotNull; + import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.entity.LivingEntity; @@ -81,12 +83,16 @@ public void turnOffBuff(LivingEntity entity) { @Override protected void turnOff() { - players.clear(); + super.turnOff(); - if (updater != null) { - updater.stop(); - updater = null; - } + if (updater == null) return; + updater.stop(); + updater = null; + } + + @Override + protected @NotNull Collection getActiveEntities() { + return players.keySet(); } private void showHealthBar(Player player, SeeHealthData data) { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/SpellHasteSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/SpellHasteSpell.java index ef872f2aa..85ee3ab24 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/SpellHasteSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/SpellHasteSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -89,8 +89,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/StealthSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/StealthSpell.java index ff426e13b..a85bc4e1e 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/StealthSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/StealthSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Set; -import java.util.UUID; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.event.EventHandler; import org.bukkit.entity.LivingEntity; @@ -39,8 +39,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities; } @EventHandler(ignoreCancelled = true) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/StonevisionSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/StonevisionSpell.java index 65f4bc583..f3045eb55 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/StonevisionSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/StonevisionSpell.java @@ -1,12 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.Set; -import java.util.List; -import java.util.UUID; -import java.util.HashSet; -import java.util.HashMap; -import java.util.ArrayList; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Location; import org.bukkit.Material; @@ -84,17 +80,13 @@ public boolean isActive(LivingEntity entity) { @Override public void turnOffBuff(LivingEntity entity) { - TransparentBlockSet t = players.remove(entity.getUniqueId()); - if (t != null) t.removeTransparency(); + TransparentBlockSet set = players.remove(entity.getUniqueId()); + if (set != null) set.removeTransparency(); } @Override - protected void turnOff() { - for (TransparentBlockSet tbs : players.values()) { - tbs.removeTransparency(); - } - - players.clear(); + protected @NotNull Collection getActiveEntities() { + return players.keySet(); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/WalkwaySpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/WalkwaySpell.java index e6bff1d52..1972ab9f7 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/WalkwaySpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/WalkwaySpell.java @@ -2,6 +2,8 @@ import java.util.*; +import org.jetbrains.annotations.NotNull; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -76,11 +78,16 @@ public void turnOffBuff(LivingEntity entity) { @Override protected void turnOff() { - entities.values().forEach(Platform::remove); - entities.clear(); + super.turnOff(); + unregisterListener(); } + @Override + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); + } + private void registerListener() { if (listener != null) return; listener = new WalkwayListener(); diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/WaterwalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/WaterwalkSpell.java index 7bf7e404c..3f2b83cc0 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/WaterwalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/WaterwalkSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Fluid; import org.bukkit.Bukkit; @@ -69,19 +69,16 @@ public void turnOffBuff(LivingEntity entity) { @Override protected void turnOff() { - for (UUID id : entities.keySet()) { - Player pl = Bukkit.getPlayer(id); - if (pl == null) continue; - if (!pl.isValid()) continue; - - pl.setFlying(false); - if (pl.getGameMode() != GameMode.CREATIVE) pl.setAllowFlight(false); - } + super.turnOff(); - entities.clear(); stopTicker(); } + @Override + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); + } + private void startTicker() { if (ticker != null) return; ticker = new Ticker(); diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/WindglideSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/WindglideSpell.java index c603d396b..c134b74e2 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/WindglideSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/WindglideSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -120,23 +120,16 @@ public void turnOffBuff(LivingEntity entity) { @Override protected void turnOff() { - for (EffectPosition pos : EffectPosition.values()) { - cancelEffectForAllPlayers(pos); - } - - for (UUID id : entities.keySet()) { - Entity entity = Bukkit.getEntity(id); - if (!(entity instanceof LivingEntity livingEntity)) continue; - if (!entity.isValid()) continue; - - livingEntity.setGliding(false); - turnOff(livingEntity); - } + super.turnOff(); - entities.clear(); monitor.stop(); } + @Override + protected @NotNull Collection getActiveEntities() { + return entities.keySet(); + } + @EventHandler public void onEntityGlide(EntityToggleGlideEvent e) { if (e.getEntity() instanceof LivingEntity entity && isActive(entity) && !e.isGliding()) diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/WindwalkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/WindwalkSpell.java index 9f88c5b1c..f0c2d2dfa 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/WindwalkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/WindwalkSpell.java @@ -1,8 +1,8 @@ package com.nisovin.magicspells.spells.buff; -import java.util.Map; -import java.util.UUID; -import java.util.HashMap; +import java.util.*; + +import org.jetbrains.annotations.NotNull; import io.papermc.paper.entity.TeleportFlag; @@ -147,28 +147,25 @@ public void turnOffBuff(LivingEntity entity) { pl.setFlySpeed(flyData.oldFlySpeed()); pl.setFallDistance(0); - if (heightMonitor != null && players.isEmpty()) { - heightMonitor.stop(); - heightMonitor = null; - } + if (heightMonitor == null || !players.isEmpty()) return; + heightMonitor.stop(); + heightMonitor = null; } @Override protected void turnOff() { - for (UUID id : players.keySet()) { - Player player = Bukkit.getPlayer(id); - if (player == null || !player.isValid()) continue; - - turnOffBuff(player); - } - - players.clear(); + super.turnOff(); if (heightMonitor == null) return; heightMonitor.stop(); heightMonitor = null; } + @Override + protected @NotNull Collection getActiveEntities() { + return players.keySet(); + } + public boolean shouldCancelOnLand() { return cancelOnLand; } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/buff/ext/DisguiseSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/buff/ext/DisguiseSpell.java index 13e9555fb..736a58188 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/buff/ext/DisguiseSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/buff/ext/DisguiseSpell.java @@ -1,12 +1,10 @@ package com.nisovin.magicspells.spells.buff.ext; -import java.util.Set; -import java.util.UUID; -import java.util.HashSet; +import java.util.*; + +import org.jetbrains.annotations.NotNull; -import org.bukkit.Bukkit; import org.bukkit.DyeColor; -import org.bukkit.entity.Entity; import org.bukkit.entity.Villager; import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.ItemStack; @@ -206,13 +204,8 @@ public void turnOffBuff(LivingEntity entity) { } @Override - protected void turnOff() { - for (UUID id : entities) { - Entity entity = Bukkit.getEntity(id); - if (entity == null) continue; - DisguiseAPI.undisguiseToAll(entity); - } - entities.clear(); + protected @NotNull Collection getActiveEntities() { + return entities; } public Set getEntities() { diff --git a/core/src/main/java/com/nisovin/magicspells/spells/instant/CastAtMarkSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/instant/CastAtMarkSpell.java index a68ff9836..a24f700b2 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/instant/CastAtMarkSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/instant/CastAtMarkSpell.java @@ -51,8 +51,6 @@ public void initialize() { @Override public void turnOff() { - super.turnOff(); - markSpell = null; spellToCast = null; initialized = false; diff --git a/core/src/main/java/com/nisovin/magicspells/spells/targeted/BombSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/targeted/BombSpell.java index 759f249c2..7c7cac585 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/targeted/BombSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/targeted/BombSpell.java @@ -52,8 +52,6 @@ public void initialize() { @Override public void turnOff() { - super.turnOff(); - for (Block b : blocks) { b.setType(Material.AIR); } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/targeted/CarpetSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/targeted/CarpetSpell.java index ac4ee2d46..1435bac92 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/targeted/CarpetSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/targeted/CarpetSpell.java @@ -68,8 +68,6 @@ public void initialize() { @Override public void turnOff() { - super.turnOff(); - for (Entry entry : blocks.entrySet()) { entry.getKey().setType(entry.getValue().air()); } diff --git a/core/src/main/java/com/nisovin/magicspells/spells/targeted/EntombSpell.java b/core/src/main/java/com/nisovin/magicspells/spells/targeted/EntombSpell.java index 913652650..fe08d7bc6 100644 --- a/core/src/main/java/com/nisovin/magicspells/spells/targeted/EntombSpell.java +++ b/core/src/main/java/com/nisovin/magicspells/spells/targeted/EntombSpell.java @@ -52,8 +52,6 @@ public EntombSpell(MagicConfig config, String spellName) { @Override public void turnOff() { - super.turnOff(); - for (Block block : blocks) { block.setType(Material.AIR); playSpellEffects(EffectPosition.BLOCK_DESTRUCTION, block.getLocation(), SpellData.NULL); diff --git a/core/src/main/java/com/nisovin/magicspells/util/config/ConfigDataUtil.java b/core/src/main/java/com/nisovin/magicspells/util/config/ConfigDataUtil.java index 21e3e9d65..f976b3968 100644 --- a/core/src/main/java/com/nisovin/magicspells/util/config/ConfigDataUtil.java +++ b/core/src/main/java/com/nisovin/magicspells/util/config/ConfigDataUtil.java @@ -20,7 +20,6 @@ import org.bukkit.configuration.ConfigurationSection; import com.nisovin.magicspells.util.*; -import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.handlers.PotionEffectHandler; public class ConfigDataUtil {