diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Necrotic.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Necrotic.java index 1512c0fd..79040fee 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Necrotic.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Necrotic.java @@ -56,7 +56,7 @@ public class Necrotic extends EcoEnchant { return; } - if (WeakMetadata.WEAK_META.containsKey(event.getEntity())) { + if (WeakMetadata.SUMMONED_ENTITY_MEMORY.containsKey(event.getEntity())) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WeakMetadata.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WeakMetadata.java index 6e08eedb..036517ff 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WeakMetadata.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WeakMetadata.java @@ -6,10 +6,20 @@ import java.util.Map; import java.util.WeakHashMap; public class WeakMetadata { + /** - * Weak metadata to prevent memory leaks. + * Summoned entities by the summoning enchantments. *

- * Thanks Akiranya for the change! + * K: summoned entity + * V: the target of the summoned entity */ - public static final Map WEAK_META = new WeakHashMap<>(); + public final static Map SUMMONED_ENTITY_MEMORY = new WeakHashMap<>(); + + /** + * Victim entities which the summoned entities target at. + *

+ * K: entity which the summoned entities target at + * V: nothing (passing null is fine) + */ + public final static Map SUMMONED_ENTITY_TARGET = new WeakHashMap<>(); } diff --git a/eco-extensions/summoning/src/main/java/com/willfp/ecoenchants/summoning/SummoningEnchantment.java b/eco-extensions/summoning/src/main/java/com/willfp/ecoenchants/summoning/SummoningEnchantment.java index f7eb7d6d..901e9b08 100644 --- a/eco-extensions/summoning/src/main/java/com/willfp/ecoenchants/summoning/SummoningEnchantment.java +++ b/eco-extensions/summoning/src/main/java/com/willfp/ecoenchants/summoning/SummoningEnchantment.java @@ -83,7 +83,7 @@ public abstract class SummoningEnchantment extends EcoEnchant { return; } - if (WeakMetadata.WEAK_META.containsKey(victim)) { + if (WeakMetadata.SUMMONED_ENTITY_MEMORY.containsKey(victim) || WeakMetadata.SUMMONED_ENTITY_TARGET.containsKey(victim)) { return; } @@ -103,24 +103,25 @@ public abstract class SummoningEnchantment extends EcoEnchant { health = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } entity.setHealth(health); - WeakMetadata.WEAK_META.put(entity, victim); + WeakMetadata.SUMMONED_ENTITY_MEMORY.put(entity, victim); + WeakMetadata.SUMMONED_ENTITY_TARGET.put(victim, null); this.getPlugin().getScheduler().runLater(entity::remove, ticksToLive); } } @EventHandler public void onSwitchTarget(@NotNull final EntityTargetEvent event) { - if (!WeakMetadata.WEAK_META.containsKey(event.getEntity())) { + if (!WeakMetadata.SUMMONED_ENTITY_MEMORY.containsKey(event.getEntity())) { return; } - LivingEntity target = (LivingEntity) WeakMetadata.WEAK_META.get(event.getEntity()); + LivingEntity target = (LivingEntity) WeakMetadata.SUMMONED_ENTITY_MEMORY.get(event.getEntity()); event.setTarget(target); } @EventHandler(priority = EventPriority.LOW) public void onDropItem(@NotNull final EntityDeathEvent event) { - if (!WeakMetadata.WEAK_META.containsKey(event.getEntity())) { + if (!WeakMetadata.SUMMONED_ENTITY_MEMORY.containsKey(event.getEntity())) { return; }