소스 검색

Made 'shooterless' arrows dodgeable

bm01 13 년 전
부모
커밋
d51fa92b46
3개의 변경된 파일8개의 추가작업 그리고 13개의 파일을 삭제
  1. 1 0
      Changelog.txt
  2. 3 9
      src/main/java/com/gmail/nossr50/listeners/EntityListener.java
  3. 4 4
      src/main/java/com/gmail/nossr50/util/Combat.java

+ 1 - 0
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

+ 3 - 9
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);

+ 4 - 4
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());
                 }