Merge branch 'instant-kill' into 'master'

COMPLETE: Provide players access to choose certain damage causes to kill a whole stack on death

See merge request Songoda/UltimateStacker!3
This commit is contained in:
Brianna O'Keefe 2019-02-23 14:42:43 +00:00
parent c8afea20c6
commit 79a4a6b0e0
3 changed files with 54 additions and 19 deletions

View File

@ -5,7 +5,7 @@ variables:
name: "UltimateStacker"
suffex: "Legacy"
path: "/builds/Songoda/$name"
version: "1.1.10"
version: "1.2.10"
build:
stage: build

View File

@ -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<ItemStack> 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<ItemStack> 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);
}
killed.getWorld().spawn(killed.getLocation(), ExperienceOrb.class).setExperience(droppedExp);
}
} else {
Entity newEntity = newEntity(killed);
handleWholeStackDeath(killed.getLocation(), stack, items, droppedExp);
} else if(instance.getConfig().getBoolean("Entity.Kill Whole Stack On Special Death Cause") && stack.getAmount() != 1) {
List<String> reasons = instance.getConfig().getStringList("Entity.Special Death Cause");
EntityDamageEvent lastDamageCause = killed.getLastDamageCause();
if (Bukkit.getPluginManager().isPluginEnabled("EpicSpawners"))
if (killed.hasMetadata("ES")) newEntity.setMetadata("ES",
new FixedMetadataValue(com.songoda.epicspawners.EpicSpawnersPlugin.getInstance(), "ES"));
if(lastDamageCause != null) {
EntityDamageEvent.DamageCause cause = lastDamageCause.getCause();
boolean killWholeStack = false;
stack = stackManager.updateStack(killed, newEntity);
stack.addAmount(-1);
if (stack.getAmount() <= 1) {
stackManager.removeStack(newEntity);
newEntity.setCustomNameVisible(false);
newEntity.setCustomName(null);
for(String s : reasons) {
if(cause.name().equalsIgnoreCase(s)) {
killWholeStack = true;
break;
}
}
if(killWholeStack) {
handleWholeStackDeath(killed.getLocation(), stack, items, droppedExp);
return;
}
}
}
handleSingleStackDeath(killed);
}
private static LivingEntity newEntity(LivingEntity killed) {

View File

@ -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"),