laith98dev / simple-event-handler
dev-master
2024-06-04 06:13 UTC
Requires
- pocketmine/pocketmine-mp: ^5.0.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.21
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); } }