瀏覽代碼

Fix: player is no longer immune to projectiles shot by themselves (#4856)

nopeless 2 年之前
父節點
當前提交
08b08b1285
共有 1 個文件被更改,包括 17 次插入27 次删除
  1. 17 27
      src/main/java/com/gmail/nossr50/listeners/EntityListener.java

+ 17 - 27
src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -362,40 +362,30 @@ public class EntityListener implements Listener {
 
         //Friendly fire checks
         if (defender instanceof Player defendingPlayer) {
-            Player attackingPlayer;
-
             //If the attacker is a Player or a projectile belonging to a player
-            if(attacker instanceof Projectile || attacker instanceof Player) {
-                if(attacker instanceof Projectile projectile) {
-                    if(((Projectile) attacker).getShooter() instanceof Player) {
-                        attackingPlayer = (Player) projectile.getShooter();
-
-                        //Check for party friendly fire and cancel the event
-                        if (checkParties(event, defendingPlayer, attackingPlayer))
-                        {
-                            return;
-                        }
-
+            if(attacker instanceof Projectile projectile) {
+                if(projectile.getShooter() instanceof Player attackingPlayer && !attackingPlayer.equals(defendingPlayer)) {
+                    //Check for party friendly fire and cancel the event
+                    if (checkParties(event, defendingPlayer, attackingPlayer)) {
+                        return;
                     }
+                }
 
-                    //Deflect checks
-                    final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(defendingPlayer);
-                    if (mcMMOPlayer != null) {
-                        UnarmedManager unarmedManager = mcMMOPlayer.getUnarmedManager();
+                //Deflect checks
+                final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(defendingPlayer);
+                if (mcMMOPlayer != null) {
+                    UnarmedManager unarmedManager = mcMMOPlayer.getUnarmedManager();
 
-                        if (unarmedManager.canDeflect()) {
-                            if (projectile instanceof Arrow && unarmedManager.deflectCheck()) {
-                                event.setCancelled(true);
-                                return;
-                            }
+                    if (unarmedManager.canDeflect()) {
+                        if (projectile instanceof Arrow && unarmedManager.deflectCheck()) {
+                            event.setCancelled(true);
+                            return;
                         }
                     }
-                } else {
-                    attackingPlayer = (Player) attacker;
-                    //Check for party friendly fire and cancel the event
-                    if (checkParties(event, defendingPlayer, attackingPlayer))
-                        return;
                 }
+            } else if (attacker instanceof Player attackingPlayer){
+                if (checkParties(event, defendingPlayer, attackingPlayer))
+                    return;
             }
         }