From bdfd9c95ddc3c30ecb04720b324ac617d1a00f98 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 9 Oct 2017 11:02:00 +0100 Subject: [PATCH] Minor cleanup to attack handler --- src/pocketmine/Player.php | 92 ++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 01682060a..65dbd4bc3 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2389,63 +2389,65 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ case InventoryTransactionPacket::USE_ITEM_ON_ENTITY_ACTION_INTERACT: break; //TODO case InventoryTransactionPacket::USE_ITEM_ON_ENTITY_ACTION_ATTACK: + if(!$target->isAlive()){ + return true; + } + if($target instanceof DroppedItem or $target instanceof Arrow){ + $this->kick("Attempting to attack an invalid entity"); + $this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidEntity", [$this->getName()])); + return false; + } + $cancelled = false; if($target instanceof Player and $this->server->getConfigBoolean("pvp", true) === false){ $cancelled = true; } - if($target->isAlive()){ - if($target instanceof DroppedItem or $target instanceof Arrow){ - $this->kick("Attempting to attack an invalid entity"); - $this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidEntity", [$this->getName()])); - return false; - } + $heldItem = $this->inventory->getItemInHand(); - $heldItem = $this->inventory->getItemInHand(); + $damage = [ + EntityDamageEvent::MODIFIER_BASE => $heldItem->getAttackPoints() + ]; - $damage = [ - EntityDamageEvent::MODIFIER_BASE => $heldItem->getAttackPoints() - ]; - - if(!$this->canInteract($target, 8)){ - $cancelled = true; - }elseif($target instanceof Player){ - if(($target->getGamemode() & 0x01) > 0){ - return true; - }elseif($this->server->getConfigBoolean("pvp") !== true){ - $cancelled = true; - } - - $points = 0; - foreach($target->getInventory()->getArmorContents() as $armorItem){ - $points += $armorItem->getDefensePoints(); - } - - $damage[EntityDamageEvent::MODIFIER_ARMOR] = -($damage[EntityDamageEvent::MODIFIER_BASE] * $points * 0.04); - } - - $ev = new EntityDamageByEntityEvent($this, $target, EntityDamageEvent::CAUSE_ENTITY_ATTACK, $damage); - if($cancelled){ - $ev->setCancelled(); - } - - $target->attack($ev); - - if($ev->isCancelled()){ - if($heldItem->isTool() and $this->isSurvival()){ - $this->inventory->sendContents($this); - } + if(!$this->canInteract($target, 8)){ + $cancelled = true; + }elseif($target instanceof Player){ + if(($target->getGamemode() & 0x01) > 0){ return true; + }elseif($this->server->getConfigBoolean("pvp") !== true){ + $cancelled = true; } - if($this->isSurvival()){ - if($heldItem->useOn($target)){ - $this->inventory->setItemInHand($heldItem); - } - - $this->exhaust(0.3, PlayerExhaustEvent::CAUSE_ATTACK); + $points = 0; + foreach($target->getInventory()->getArmorContents() as $armorItem){ + $points += $armorItem->getDefensePoints(); } + + $damage[EntityDamageEvent::MODIFIER_ARMOR] = -($damage[EntityDamageEvent::MODIFIER_BASE] * $points * 0.04); } + + $ev = new EntityDamageByEntityEvent($this, $target, EntityDamageEvent::CAUSE_ENTITY_ATTACK, $damage); + if($cancelled){ + $ev->setCancelled(); + } + + $target->attack($ev); + + if($ev->isCancelled()){ + if($heldItem->isTool() and $this->isSurvival()){ + $this->inventory->sendContents($this); + } + return true; + } + + if($this->isSurvival()){ + if($heldItem->useOn($target)){ + $this->inventory->setItemInHand($heldItem); + } + + $this->exhaust(0.3, PlayerExhaustEvent::CAUSE_ATTACK); + } + return true; default: break; //unknown