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;
}