Skip to content

Commit

Permalink
damaged/death event projectile consistency
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jun 13, 2022
1 parent 57d96d9 commit 41a6acd
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 30 deletions.
Expand Up @@ -13,6 +13,7 @@
import com.denizenscript.denizen.utilities.BukkitImplDeprecations;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
Expand Down Expand Up @@ -243,11 +244,13 @@ public void onEntityDamaged(EntityDamageEvent event) {
held = null;
if (event instanceof EntityDamageByEntityEvent) {
damager = new EntityTag(((EntityDamageByEntityEvent) event).getDamager());
if (damager.isProjectile()) {
EntityTag shooter = damager.getShooter();
if (damager instanceof Projectile) {
projectile = damager;
if (damager.hasShooter()) {
damager = damager.getShooter();
}
}
if (shooter != null) {
projectile = damager;
damager = shooter;
}
if (damager != null) {
held = damager.getItemInHand();
Expand Down
Expand Up @@ -10,6 +10,7 @@
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
Expand Down Expand Up @@ -40,6 +41,7 @@ public class EntityDeathScriptEvent extends BukkitScriptEvent implements Listene
// @Context
// <context.entity> returns the EntityTag that died.
// <context.damager> returns the EntityTag damaging the other entity, if any.
// <context.projectile> returns the EntityTag of a projectile used to kill the entity, if one was used.
// <context.message> returns an ElementTag of a player's death message.
// <context.cause> returns an ElementTag of the cause of the death. See <@link language damage cause> for a list of possible damage causes.
// <context.drops> returns a ListTag of all pending item drops.
Expand Down Expand Up @@ -71,6 +73,7 @@ public EntityDeathScriptEvent() {

public EntityTag entity;
public EntityTag damager;
public EntityTag projectile;
public ElementTag cause;
public EntityDeathEvent event;

Expand Down Expand Up @@ -158,27 +161,19 @@ public ScriptEntryData getScriptEntryData() {

@Override
public ObjectTag getContext(String name) {
if (name.equals("entity")) {
return entity.getDenizenObject();
}
else if (name.equals("damager") && damager != null) {
return damager.getDenizenObject();
}
else if (name.equals("message") && event instanceof PlayerDeathEvent) {
return new ElementTag(((PlayerDeathEvent) event).getDeathMessage());
}
else if (name.equals("cause") && cause != null) {
return cause;
}
else if (name.equals("drops")) {
ListTag list = new ListTag();
for (ItemStack stack : event.getDrops()) {
list.addObject(new ItemTag(stack));
}
return list;
}
else if (name.equals("xp")) {
return new ElementTag(event.getDroppedExp());
switch (name) {
case "entity": return entity.getDenizenObject();
case "projectile": return projectile == null ? null : projectile.getDenizenObject();
case "damager": return damager == null ? null : damager.getDenizenObject();
case "message": return event instanceof PlayerDeathEvent ? new ElementTag(((PlayerDeathEvent) event).getDeathMessage()) : null;
case "cause": return cause;
case "xp": return new ElementTag(event.getDroppedExp());
case "drops":
ListTag list = new ListTag();
for (ItemStack stack : event.getDrops()) {
list.addObject(new ItemTag(stack));
}
return list;
}
return super.getContext(name);
}
Expand All @@ -198,18 +193,20 @@ public void onEntityDeath(EntityDeathEvent event) {
entity = new EntityTag(livingEntity);
cause = null;
damager = null;
projectile = null;
EntityDamageEvent lastDamage = entity.getBukkitEntity().getLastDamageCause();
if (lastDamage != null) {
cause = new ElementTag(event.getEntity().getLastDamageCause().getCause().toString());
if (lastDamage instanceof EntityDamageByEntityEvent) {
EntityTag damageEntity = new EntityTag(((EntityDamageByEntityEvent) lastDamage).getDamager());
EntityTag shooter = damageEntity.getShooter();
damager = new EntityTag(((EntityDamageByEntityEvent) lastDamage).getDamager());
EntityTag shooter = damager.getShooter();
if (damager instanceof Projectile) {
projectile = damager;
}
if (shooter != null) {
projectile = damager;
damager = shooter;
}
else {
damager = damageEntity;
}
}
else if (livingEntity.getKiller() != null) {
damager = new EntityTag(livingEntity.getKiller());
Expand Down

0 comments on commit 41a6acd

Please sign in to comment.