diff --git a/Changelog.txt b/Changelog.txt index f5d8a4a8c..fdcbc9c9a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -35,6 +35,7 @@ Version 1.3.09 = Fixed possible NPE when falling with no item in hand ! API methods can now only be used in a static way ! Arrows shot from a bow having the Infitity enchantment can no longer be retrieved + ! Arrows that aren't shot by an entity are now dodgeable (currently only from dispensers) ! Changed Spout settings to be in their own config file (spout.yml) ! Changed file format for parties (parties.yml), previous files are no longer used ! Changed mcMMO to inform on corrupt Chunklets and make new ones diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 0d6d7e03b..35a163ff0 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -62,25 +62,19 @@ public class EntityListener implements Listener { } Entity attacker = event.getDamager(); + Entity defender = event.getEntity(); if (attacker instanceof Projectile) { attacker = ((Projectile) attacker).getShooter(); - - //There is no shooter when a projectile is thrown by a dispenser - if (attacker == null) { - return; - } } else if (attacker instanceof Tameable) { AnimalTamer animalTamer = ((Tameable) attacker).getOwner(); - if (animalTamer instanceof Player) { - attacker = (Player) animalTamer; + if (animalTamer instanceof Entity) { + attacker = (Entity) animalTamer; } } - Entity defender = event.getEntity(); - if (attacker instanceof Player && defender instanceof Player) { if (PartyManager.getInstance().inSameParty((Player) defender, (Player) attacker)) { event.setCancelled(true); diff --git a/src/main/java/com/gmail/nossr50/util/Combat.java b/src/main/java/com/gmail/nossr50/util/Combat.java index 5bfcd615a..973bd1f03 100644 --- a/src/main/java/com/gmail/nossr50/util/Combat.java +++ b/src/main/java/com/gmail/nossr50/util/Combat.java @@ -173,8 +173,8 @@ public class Combat { case ARROW: LivingEntity shooter = ((Arrow) damager).getShooter(); - if (shooter.getType() != EntityType.PLAYER) { - return; + if (shooter == null || shooter.getType() != EntityType.PLAYER) { + break; } if (targetIsPlayer || targetIsTamedPet) { @@ -191,7 +191,7 @@ public class Combat { break; } - if (targetIsPlayer && damager instanceof LivingEntity) { + if (targetIsPlayer) { Player player = (Player) target; AcrobaticsManager acroManager = new AcrobaticsManager(player); @@ -207,7 +207,7 @@ public class Combat { } } else { - if (configInstance.getSwordsPVE()) { + if (configInstance.getSwordsPVE() && damager instanceof LivingEntity) { swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage()); }