承接 muqsit/simple-packet-handler 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

muqsit/simple-packet-handler

最新稳定版本:0.1.5

Composer 安装命令:

composer require muqsit/simple-packet-handler

包简介

Handle specific data packets (virion for PMMP API 4.0.0)

README 文档

README

Put an end to the if-elseif instanceof hell.

API Documentation

Packet Monitor

Monitor data packets - use this if you aren't modifying the outcome of the event.
Packet monitor registers DataPacket(Receive/Send)Event(s) at MONITOR priority.

Use case:

  • Dumping extra data from packets
  • Debugging whether a packet was sent / received
/** @var Plugin $plugin */ $packet_monitor = SimplePacketHandler::createMonitor($plugin); $packet_monitor->monitorIncoming(function(LoginPacket $packet, NetworkSession $origin) : void{ $this->getLogger()->debug("Received LoginPacket from #" . spl_object_id($origin)); }); $packet_monitor->monitorIncoming(function(ServerSettingsResponsePacket $packet, NetworkSession $origin) : void{ $this->getLogger()->debug("Received server settings response from {$origin->getPlayer()->getName()}"); }); $packet_monitor->monitorOutgoing(function(SetActorDataPacket $packet, NetworkSession $target) : void{ $this->getLogger()->debug("Sent SetActorDataPacket to #" . spl_object_id($target)); });

The LoginPacket example above is the equivalent of:

/**  * @param DataPacketReceiveEvent $event  * @priority MONITOR  */ public function onDataPacketReceive(DataPacketReceiveEvent $event) : void{ $packet = $event->getPacket(); if($packet instanceof LoginPacket){ $origin = $event->getOrigin(); $this->getLogger()->debug("Received LoginPacket from #" . spl_object_id($origin)); } }

The SetActorDataPacket example above is the equivalent of:

/**  * @param DataPacketSendEvent $event  * @priority MONITOR  */ public function onDataPacketSend(DataPacketSendEvent $event) : void{ foreach($event->getPackets() as $packet){ if($packet instanceof SetActorDataPacket){ foreach($event->getTargets() as $target){ $this->getLogger()->debug("Sent SetActorDataPacket to #" . spl_object_id($target)); } } } }

Packet Interceptor

Handle data packets - DataPacket(Receive/Send)Event(s) are registered at < MONITOR priority.

Use case:

  • Blocking pocketmine from handling specific data packets
  • Modifying data packets before pocketmine handles them
/** @var Plugin $plugin */ $packet_interceptor = SimplePacketHandler::createInterceptor($plugin); $packet_interceptor->interceptIncoming(function(AdventureSettingsPacket $packet, NetworkSession $origin) : bool{ if($packet->getFlag(AdventureSettingsPacket::FLYING)){ return false; // cancels the DataPacketReceiveEvent } return true; // do nothing }); $packet_interceptor->interceptOutgoing(function(SetTimePacket $packet, NetworkSession $target) : bool{ $custom_player = CustomPlayerManager::get($target->getPlayer()); if($custom_player->getPTime() !== $packet->time){ $target->sendDataPacket(SetTimePacket::create($custom_player->getPTime())); return false; } return true; });

The AdventureSettingsPacket example above is the equivalent of:

/**  * @param DataPacketReceiveEvent $event  * @priority NORMAL  */ public function onDataPacketReceive(DataPacketReceiveEvent $event) : void{ $packet = $event->getPacket(); if($packet instanceof AdventureSettingsPacket){ $origin = $event->getOrigin(); if($packet->getFlag(AdventureSettingsPacket::FLYING)){ $event->cancel(); } } }

The SetTimePacket example above is the equivalent of:

/**  * @param DataPacketSendEvent $event  * @priority NORMAL  */ public function onDataPacketSend(DataPacketSendEvent $event) : void{ foreach($event->getPackets() as $packet){ if($packet instanceof SetTimePacket){ $targets = $event->getTargets(); $new_targets = $targets; foreach($new_targets as $index => $target){ $custom_player = CustomPlayerManager::get($target->getPlayer()); if($custom_player->getPTime() !== $packet->time){ $target->sendDataPacket(SetTimePacket::create($custom_player->getPTime())); unset($new_targets[$index]); } } if(count($new_targets) !== count($targets)){ // Cancel the event, try sending the remaining targets the // batch of packets again. $event->cancel(); if(count($new_targets) > 0){ $new_target_players = []; foreach($new_targets as $new_target){ $new_target_players[] = $new_target->getPlayer(); } $this->getServer()->broadcastPackets($new_target_players, $event->getPackets()); } break; } } } }

统计信息

  • 总下载量: 5.11k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 41
  • 点击次数: 1
  • 依赖项目数: 8
  • 推荐数: 0

GitHub 信息

  • Stars: 40
  • Watchers: 2
  • Forks: 13
  • 开发语言: PHP

其他信息

  • 授权协议: GPL-3.0
  • 更新时间: 2026-01-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固