diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8a31aa2..33dada1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ variables: name: "UltimateStacker" suffex: "Legacy" path: "/builds/Songoda/$name" - version: "1.1.10" + version: "1.2.10" build: stage: build diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java index 7d00760..afd65e5 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java +++ b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java @@ -7,6 +7,7 @@ import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.entity.*; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.ItemMeta; @@ -19,6 +20,36 @@ import java.util.Map; public class Methods { + private static void handleWholeStackDeath(Location killedLocation, EntityStack stack, List items, int droppedExp) { + for (int i = 1; i < stack.getAmount(); i++) { + for (ItemStack item : items) { + killedLocation.getWorld().dropItemNaturally(killedLocation, item); + } + + killedLocation.getWorld().spawn(killedLocation, ExperienceOrb.class).setExperience(droppedExp); + } + } + + private static void handleSingleStackDeath(LivingEntity killed) { + UltimateStacker instance = UltimateStacker.getInstance(); + EntityStackManager stackManager = instance.getEntityStackManager(); + Entity newEntity = newEntity(killed); + + if (Bukkit.getPluginManager().isPluginEnabled("EpicSpawners")) + if (killed.hasMetadata("ES")) + newEntity.setMetadata("ES", new FixedMetadataValue(com.songoda.epicspawners.EpicSpawnersPlugin.getInstance(), "ES")); + + EntityStack entityStack = stackManager.updateStack(killed, newEntity); + + entityStack.addAmount(-1); + + if (entityStack.getAmount() <= 1) { + stackManager.removeStack(newEntity); + newEntity.setCustomNameVisible(false); + newEntity.setCustomName(null); + } + } + public static void onDeath(LivingEntity killed, List items, int droppedExp) { UltimateStacker instance = UltimateStacker.getInstance(); @@ -32,28 +63,30 @@ public class Methods { EntityStack stack = stackManager.getStack(killed); if (instance.getConfig().getBoolean("Entity.Kill Whole Stack On Death") && stack.getAmount() != 1) { - for (int i = 1; i < stack.getAmount(); i++) { - for (ItemStack item : items) { - killed.getWorld().dropItemNaturally(killed.getLocation(), item); + handleWholeStackDeath(killed.getLocation(), stack, items, droppedExp); + } else if(instance.getConfig().getBoolean("Entity.Kill Whole Stack On Special Death Cause") && stack.getAmount() != 1) { + List reasons = instance.getConfig().getStringList("Entity.Special Death Cause"); + EntityDamageEvent lastDamageCause = killed.getLastDamageCause(); + + if(lastDamageCause != null) { + EntityDamageEvent.DamageCause cause = lastDamageCause.getCause(); + boolean killWholeStack = false; + + for(String s : reasons) { + if(cause.name().equalsIgnoreCase(s)) { + killWholeStack = true; + break; + } } - killed.getWorld().spawn(killed.getLocation(), ExperienceOrb.class).setExperience(droppedExp); - } - } else { - Entity newEntity = newEntity(killed); - if (Bukkit.getPluginManager().isPluginEnabled("EpicSpawners")) - if (killed.hasMetadata("ES")) newEntity.setMetadata("ES", - new FixedMetadataValue(com.songoda.epicspawners.EpicSpawnersPlugin.getInstance(), "ES")); - - stack = stackManager.updateStack(killed, newEntity); - - stack.addAmount(-1); - if (stack.getAmount() <= 1) { - stackManager.removeStack(newEntity); - newEntity.setCustomNameVisible(false); - newEntity.setCustomName(null); + if(killWholeStack) { + handleWholeStackDeath(killed.getLocation(), stack, items, droppedExp); + return; + } } } + + handleSingleStackDeath(killed); } private static LivingEntity newEntity(LivingEntity killed) { diff --git a/src/main/java/com/songoda/ultimatestacker/utils/SettingsManager.java b/src/main/java/com/songoda/ultimatestacker/utils/SettingsManager.java index 9cfca3c..769c941 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/SettingsManager.java +++ b/src/main/java/com/songoda/ultimatestacker/utils/SettingsManager.java @@ -185,6 +185,8 @@ public class SettingsManager implements Listener { o4("Entity.Max Stack Size", 15), oo("Entity.Min Stack Amount", 5), o5("Entity.Kill Whole Stack On Death", false), + o52("Entity.Kill Whole Stack On Special Death Cause", true), + o53("Entity.Special Death Cause", Arrays.asList("FALL", "DROWNING", "LAVA", "VOID")), NAME_FORMAT_ENTITY("Entity.Name Format", "&f{TYPE} &6{AMT}x"), o6("Item.Max Stack Size", 120), NAME_FORMAT_ITEM("Item.Name Format", "&f{TYPE} &6{AMT}x"),