protected function checkNearEntities($tickDiff)
{
foreach ($this->level->getNearbyEntities($this->boundingBox->grow(0.5, 0.5, 0.5), $this) as $entity) {
$entity->scheduleUpdate();
if (!$entity->isAlive()) {
continue;
}
if ($entity instanceof Arrow and $entity->hadCollision) {
$item = Item::get(Item::ARROW, $entity->getPotionId(), 1);
$add = false;
if (!$this->server->allowInventoryCheats and !$this->isCreative()) {
if (!$this->getFloatingInventory()->canAddItem($item) or !$this->inventory->canAddItem($item)) {
//The item is added to the floating inventory to allow client to handle the pickup
//We have to also check if it can be added to the real inventory before sending packets.
continue;
}
$add = true;
}
$this->server->getPluginManager()->callEvent($ev = new InventoryPickupArrowEvent($this->inventory, $entity));
if ($ev->isCancelled()) {
continue;
}
$pk = new TakeItemEntityPacket();
$pk->eid = $this->getId();
$pk->target = $entity->getId();
Server::broadcastPacket($entity->getViewers(), $pk);
$pk = new TakeItemEntityPacket();
$pk->eid = 0;
$pk->target = $entity->getId();
$this->dataPacket($pk);
if ($add) {
$this->getFloatingInventory()->addItem(clone $item);
}
$entity->kill();
} elseif ($entity instanceof DroppedItem) {
if ($entity->getPickupDelay() <= 0) {
$item = $entity->getItem();
if ($item instanceof Item) {
$add = false;
if (!$this->server->allowInventoryCheats and !$this->isCreative()) {
if (!$this->getFloatingInventory()->canAddItem($item) or !$this->inventory->canAddItem($item)) {
continue;
}
$add = true;
}
$this->server->getPluginManager()->callEvent($ev = new InventoryPickupItemEvent($this->inventory, $entity));
if ($ev->isCancelled()) {
continue;
}
switch ($item->getId()) {
case Item::WOOD:
$this->awardAchievement("mineWood");
break;
case Item::DIAMOND:
$this->awardAchievement("diamond");
break;
}
$pk = new TakeItemEntityPacket();
$pk->eid = $this->getId();
$pk->target = $entity->getId();
Server::broadcastPacket($entity->getViewers(), $pk);
$pk = new TakeItemEntityPacket();
$pk->eid = 0;
$pk->target = $entity->getId();
$this->dataPacket($pk);
if ($add) {
$this->getFloatingInventory()->addItem(clone $item);
}
$entity->kill();
}
}
}
}
}