diff --git a/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityKilledScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityKilledScriptEvent.java index efa4b81812..6d7e9036e4 100644 --- a/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityKilledScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityKilledScriptEvent.java @@ -15,7 +15,9 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; public class EntityKilledScriptEvent extends ScriptEvent implements Listener { @@ -23,8 +25,12 @@ public class EntityKilledScriptEvent extends ScriptEvent implements Listener { // @Events // entity killed // entity killed by + // entity killed by entity + // entity killed by // killed // killed by + // killed by entity + // killed by // entity kills entity // entity kills // kills entity @@ -65,23 +71,39 @@ public EntityKilledScriptEvent() { @Override public boolean couldMatch(ScriptContainer scriptContainer, String s) { String lower = CoreUtilities.toLowerCase(s); - return lower.contains(" kills") - || lower.contains(" killed"); + String cmd = CoreUtilities.getXthArg(1, lower); + String entOne = CoreUtilities.getXthArg(0, lower); + String entTwo = lower.contains(" by ") ? CoreUtilities.getXthArg(3, lower): CoreUtilities.getXthArg(2, lower); + List types = Arrays.asList("entity", "player", "npc"); + return ((types.contains(entOne) || dEntity.matches(entOne)) + && (cmd.equals("killed") || cmd.equals("kills")) + && ((entTwo.length() == 0) || (types.contains(entTwo) || dEntity.matches(entTwo)))); } @Override public boolean matches(ScriptContainer scriptContainer, String s) { String lower = CoreUtilities.toLowerCase(s); - - boolean by = lower.contains(" by "); - dEntity entOne = by ? entity: damager; - if (!entOne.matchesEntity(CoreUtilities.getXthArg(0, s))) { - return false; + String cmd = CoreUtilities.getXthArg(1, lower); + String attacker = cmd.equals("kills") ? CoreUtilities.getXthArg(0, lower): CoreUtilities.getXthArg(3, lower); + String target = cmd.equals("kills") ? CoreUtilities.getXthArg(2, lower): CoreUtilities.getXthArg(0, lower); + if (attacker.length() > 0) { + if (dEntity.matches(attacker)) { + if (!damager.matchesEntity(attacker)) { + return false; + } + } + else { + if (!cause.asString().equals(attacker)) { + return false; + } + } } - - dEntity entTwo = by ? damager: entity; - if (!(!by && lower.contains("killed") || entTwo.matchesEntity(CoreUtilities.getXthArg(by ? 3: 2, s)))) { - return false; + if (target.length() > 0) { + if (dEntity.matches(target)) { + if (!entity.matchesEntity(target)) { + return false; + } + } } if (entity.isValid() && entity.isLivingEntity()) {