/**
* Close inventory event
*
* @param InventoryCloseEvent $ev
*/
public function onClose(InventoryCloseEvent $ev)
{
$pl = $ev->getPlayer();
$xx = $this->getState(self::tag, $pl, null);
if ($xx == null) {
return;
}
// Compute shopping basket
$basket = [];
$total = 0;
foreach ($pl->getInventory()->getContents() as $slot => $item) {
if ($item->getId() == Item::AIR) {
continue;
}
$idmeta = implode(":", [$item->getId(), $item->getDamage()]);
if (!isset($xx["shop"][$idmeta])) {
continue;
}
list($i, $price) = $xx["shop"][$idmeta];
$total += round($item->getCount() / $i->getCount()) * $price;
$basket[] = [$item->getId(), $item->getDamage(), $item->getCount()];
}
// Restore original inventory...
$this->restoreInv($pl);
// Check-out
if (count($basket) == 0) {
$pl->sendMessage(mc::_("No items purchased"));
return;
}
if ($total < $this->owner->getMoney($pl)) {
$this->owner->grantMoney($pl, -$total);
$pl->sendMessage(mc::n(mc::_("Bought one item for %1%G", $total), mc::_("Bought %1% items for %2%G", count($basket), $total), count($basket)));
foreach ($basket as $ck) {
list($id, $meta, $cnt) = $ck;
$pl->getInventory()->addItem(Item::get($id, $meta, $cnt));
}
} else {
$pl->sendMessage(mc::_("Not enough money."));
$pl->sendMessage(mc::_("You need %1%G", $total));
}
}