I want to make a unbreaking effect, so when player attack/break something, the item durability (damage) won't change: this is my code: I not sure this code is working or not, I think it still have bugs, PHP: public function onDamage(EntityDamageEvent $event) { if($event->getDamager() instanceof Player && !$event->isCancelled()){ $item = $event->getDamager()->getInventory()->getIteminHand(); switch($item->getId()){ case 267: case 268: case 272: case 276: // $item->setDamage($item->getDamage() + 1); $item->setDamage($item->getDamage() - 1 ); break; default: } } }
Try doing $player->getInventory()->sendSlot($player->getInventory()->getHeldItemSlot(), $player); after setDamage
Like: ? PHP: public function onHurt(EntityDamageByEntityEvent $event) { if($event->getDamager() instanceof Player && !$event->isCancelled()){ $item = $event->getDamager()->getInventory()->getIteminHand(); switch($item->getId()){ case 267: case 268: case 272: case 276: $item->setDamage($item->getDamage() - 1); $event->getDamager()->getInventory()->sendSlot($event->getDamager()->getInventory()->getHeldItemSlot(), $event->getDamager()); } } }
And I try: PHP: public function BreakEvent(BlockBreakEvent $event){ if($event->getPlayer() instanceof Player && !$event->isCancelled()){ $item = $event->getItem(); $player = $event->getPlayer(); switch($id){ case 267: case 268: case 272: case 276: $item->setDamage($item->getDamage() - 1); $player->getInventory()->sendSlot($player->getInventory()->getHeldItemSlot(), $player); } } }
But I can't get Damager in EntityDamageEvent : public function onHurt(EntityDamageEvent $event) { if ($event instanceof EntityDamageByEntityEvent) {
There you go, you can use getDamager after you have confirmed it is an instance of EntityDamageByEntityEvent.