diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java index 8a6ef9d..ac556dd 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java @@ -58,42 +58,40 @@ public class DeathListeners implements Listener { @EventHandler public void onEntityDeath(EntityDeathEvent event) { - boolean custom = Settings.CUSTOM_DROPS.getBoolean(); - - if (!custom) return; //Compatibility with other plugins - LivingEntity entity = event.getEntity(); - - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) - && !entity.getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT)) { - return; - } - if (event.getEntityType() == EntityType.PLAYER || event.getEntityType() == EntityType.ARMOR_STAND) return; //Respect MythicMobs if (plugin.getCustomEntityManager().isCustomEntity(entity)) return; + boolean custom = Settings.CUSTOM_DROPS.getBoolean(); + List drops = custom ? plugin.getLootablesManager().getDrops(event.getEntity()) + : event.getDrops().stream().map(Drop::new).collect(Collectors.toList()); - List drops = plugin.getLootablesManager().getDrops(event.getEntity()); - - for (ItemStack item : new ArrayList<>(event.getDrops())) { - if (shouldDrop(event.getEntity(), item.getType())) - drops.add(new Drop(item)); + if (custom) { + for (ItemStack item : new ArrayList<>(event.getDrops())) { + if (shouldDrop(event.getEntity(), item.getType())) + drops.add(new Drop(item)); + } } + if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) + && !entity.getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT)) + drops.clear(); + if (plugin.getCustomEntityManager().getCustomEntity(entity) == null) { //replace %player% in drop commands with the last player to damage the entity //Run commands here, or it will be buggy runCommands(entity, drops); if (plugin.getEntityStackManager().isStackedEntity(event.getEntity())) { - plugin.getEntityStackManager().getStack(event.getEntity()).onDeath(entity, drops, true, event.getDroppedExp(), event); + plugin.getEntityStackManager().getStack(event.getEntity()).onDeath(entity, drops, custom, event.getDroppedExp(), event); } else { DropUtils.processStackedDrop(event.getEntity(), drops, event); } } + finalItems.remove(entity.getUniqueId()); }