laith98dev/simple-event-handler

dev-master 2024-06-04 06:13 UTC

This package is not auto-updated.

Last update: 2024-09-10 22:53:34 UTC


README

用于处理 PocketMine-MP 事件的简单库

使用方法

  • 创建处理器
$handler = SimpleEventHandler::createHandler(plugin: $this, eventClass: PlayerChatEvent::class, callback: function (PlayerChatEvent $event){
    $player = $event->getPlayer();
    // TODO
}, priority: EventPriority::NORMAL, handleCancelled: false);
  • 一次性
    • 这将使事件只工作一次。
$handler->once();
  • 过滤器
    • 您可以通过特定的事物过滤事件,如玩家名称、方块类型、特定消息和特定物品。
use Laith98Dev\SimpleEventHandler\event\Filter;

// Filter::fromPlayer("Laith98Dev") // this will be for `PlayerEvent`
// Filter::fromMessage("Hello World") // this will be for `PlayerChatEvent`
// Filter::fromBlock(VanillaBlocks::DIRT()) // this will be for `BlockEvent`
// Filter::fromItem(VanillaItems::IRON_SWORD())

$handler->setFilter(Filter::fromPlayer("Laith98Dev"));
  • 绑定
    • 您可以使用 bindWith 函数将多个事件绑定在一起。
$handler->bindWith($eventClass);
  • 终止
    • 此函数将终止处理器。
$handler->kill();

示例

  • 而不是这样做
class Main extends PluginBase implements Listener
{
    public function onEnable(): void
    {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
    }

    public function onChat(PlayerChatEvent $event){
        if($event->getPlayer()->getName() == "Laith98Dev"){
            $this->doIt($event);
        }
    }
    
    public function onBlockBreak(BlockBreakEvent $event){
        if($event->getPlayer()->getName() == "Laith98Dev"){
            $this->doIt($event);
        }
    }

    public function doIt(PlayerChatEvent|BlockBreakEvent $event){
        $player = $event->getPlayer();

        echo "Hey, i'm working - " . $event::class . " - " . $player->getName() . "\n";
    }
}
  • 可以用这种方式完成
class Main extends PluginBase
{
    public function onEnable(): void
    {
        SimpleEventHandler::createHandler($this, PlayerChatEvent::class, function (PlayerChatEvent|BlockBreakEvent $event){
            $player = $event->getPlayer();
            echo "Hey, i'm working - " . $event::class . " - " . $player->getName() . "\n";
        })
        ->setFilter(Filter::fromPlayer("Laith98Dev")->setBlock(VanillaBlocks::DIRT()))
        ->bindWith(BlockBreakEvent::class);
    }
}