
<?php
echo "PocketMine-MP plugin DirectlyInventoryWithDropItem v1.0.0
This file has been generated using DevTools v1.15.0 at Wed, 02 Feb 2022 18:47:22 +0800
----------------
Name: DirectlyInventoryWithDropItem
Version: 1.0.0
Main: tatchan\\DirectlyInventoryWithDropItem\\Main
Api: 4.0.0
Depend: 
Description: 
Authors: 
Website: 
CreationDate: 1643798842
";
__HALT_COMPILER(); ?>
­               a:9:{s:4:"name";s:29:"DirectlyInventoryWithDropItem";s:7:"version";s:5:"1.0.0";s:4:"main";s:42:"tatchan\DirectlyInventoryWithDropItem\Main";s:3:"api";s:5:"4.0.0";s:6:"depend";s:0:"";s:11:"description";s:0:"";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1643798842;}
   plugin.yml«   :aúa«   4C%)¶         src/EventListener.phpê  :aúaê  1~>e¶         src/Main.php)  :aúa)  ‰H©¶      name: DirectlyInventoryWithDropItem
version: 1.0.0
main: tatchan\DirectlyInventoryWithDropItem\Main
api: 4.0.0
src-namespace-prefix: tatchan\DirectlyInventoryWithDropItem
<?php

declare(strict_types=1);

namespace tatchan\DirectlyInventoryWithDropItem;

use pocketmine\entity\Entity;
use pocketmine\entity\object\ItemEntity;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\Listener;
use pocketmine\scheduler\ClosureTask;
use pocketmine\world\World;

class EventListener implements Listener
{
    public function __construct(private Main $main) {
    }

    public function sendDropsToInventory(BlockBreakEvent $event): void {
        $player = $event->getPlayer();
        $world = $event->getBlock()->getPosition()->getWorld();
        $beforeDrops = $this->getFilteredEntities($world, ItemEntity::class);

        $this->main->getScheduler()->scheduleDelayedTask(new ClosureTask(function () use ($player, $world, $beforeDrops): void {
            $afterDrops = $this->getFilteredEntities($world, ItemEntity::class);
            $realDrops = array_diff($afterDrops, $beforeDrops);
            foreach ($realDrops as $realDrop) {
                $inventory = $player->getInventory();
                $realDropItem = $realDrop->getItem();
                if ($inventory->canAddItem($realDropItem)) {
                    $inventory->addItem($realDropItem);
                    $realDrop->kill();
                }
            }
        }), 2);
    }

    /**
     * @return Entity[]
     */
    private function getFilteredEntities(World $world, string $entityType = Entity::class): array {
        assert(is_a($entityType, Entity::class, true));

        $entities = [];
        foreach ($world->getEntities() as $entity) {
            if ($entity instanceof $entityType) {
                $entities[] = $entity;
            }
        }

        return $entities;
    }
}
<?php

declare(strict_types=1);

namespace tatchan\DirectlyInventoryWithDropItem;

use pocketmine\plugin\PluginBase;

class Main extends PluginBase
{
    protected function onEnable(): void {
        $this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this);
    }
}
Jòx³……µÞÊúd ÇêŠ9Á›   GBMB