From bec54d93ac8628689561d1976e949044a89d2f9c Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 1 Jan 2021 22:15:44 -0800 Subject: [PATCH] Fix dupe bug --- Changelog.txt | 8 ++++++-- .../com/gmail/nossr50/listeners/EntityListener.java | 5 ++++- .../com/gmail/nossr50/util/TransientEntityTracker.java | 10 ++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 9724aac43..03b0c066b 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,10 @@ Version 2.1.167 - Add McMMOPlayerPreXpGainEvent event for plugins to modify given exp - Add SkillActivationPerkEvent + Fixed a serious dupe bug + Add McMMOPlayerPreXpGainEvent event for plugins to modify given exp (thanks electronicboy) + Add SkillActivationPerkEvent (thanks electronicboy) + + NOTE: + This bug was introduced in 2.1.165, update immediately if you are on 2.1.165 or 2.1.166 Version 2.1.166 diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 24dd48031..13c65f3ec 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -645,7 +645,10 @@ public class EntityListener implements Listener { @EventHandler(ignoreCancelled = true) public void onEntityDeath(EntityDeathEvent event) { LivingEntity entity = event.getEntity(); - mcMMO.getTransientEntityTracker().removeSummon(entity, null, false); + + if(mcMMO.getTransientEntityTracker().isTransientSummon(entity)) { + mcMMO.getTransientEntityTracker().removeSummon(entity, null, false); + } /* WORLD BLACKLIST CHECK */ if(WorldBlacklist.isWorldBlacklisted(event.getEntity().getWorld())) { diff --git a/src/main/java/com/gmail/nossr50/util/TransientEntityTracker.java b/src/main/java/com/gmail/nossr50/util/TransientEntityTracker.java index 9ee1807b4..6e1b44938 100644 --- a/src/main/java/com/gmail/nossr50/util/TransientEntityTracker.java +++ b/src/main/java/com/gmail/nossr50/util/TransientEntityTracker.java @@ -124,6 +124,16 @@ public class TransientEntityTracker { addToChunkLookupCache(trackedTamingEntity); } + /** + * Checks if a living entity is a summon + * + * @param livingEntity target livinig entity + * @return true if target living entity is a summon + */ + public synchronized boolean isTransientSummon(@NotNull LivingEntity livingEntity) { + return getChunkLookupCache().contains(livingEntity); + } + /** * Get the tracked taming entities for a player * If the player isn't registered this will return null