diff --git a/src/Player.php b/src/Player.php index c8c19b930..ae4f87d79 100644 --- a/src/Player.php +++ b/src/Player.php @@ -1253,6 +1253,11 @@ class Player{ if($this->connected === false){ return; } + + if(EventHandler::callEvent(new DataPacketReceiveEvent($this, $packet)) === BaseEvent::DENY){ + return; + } + switch($packet->pid()){ case 0x01: break; @@ -2315,7 +2320,7 @@ class Player{ $this->nextBuffer = microtime(true) + 0.1; } - public function directBigRawPacket(RakNetDataPacket $packet){ + private function directBigRawPacket(RakNetDataPacket $packet){ if($this->connected === false){ return false; } @@ -2355,6 +2360,11 @@ class Player{ if($this->connected === false){ return false; } + + if(EventHandler::callEvent(new DataPacketSendEvent($this, $packet)) === BaseEvent::DENY){ + return array(); + } + $packet->encode(); $pk = new RakNetPacket(RakNetInfo::DATA_PACKET_0); $pk->data[] = $packet; @@ -2378,6 +2388,11 @@ class Player{ if($this->connected === false){ return false; } + + if(EventHandler::callEvent(new DataPacketSendEvent($this, $packet)) === BaseEvent::DENY){ + return; + } + $packet->encode(); $len = strlen($packet->buffer) + 1; $MTU = $this->MTU - 24; diff --git a/src/event/server/RakNetPacketSendEvent.php b/src/event/server/DataPacketReceiveEvent.php similarity index 79% rename from src/event/server/RakNetPacketSendEvent.php rename to src/event/server/DataPacketReceiveEvent.php index ae3048087..1a3a0b67a 100644 --- a/src/event/server/RakNetPacketSendEvent.php +++ b/src/event/server/DataPacketReceiveEvent.php @@ -19,18 +19,22 @@ * */ -class RakNetPacketSendEvent extends ServerEvent implements CancellableEvent{ +class DataPacketReceiveEvent extends ServerEvent implements CancellableEvent{ public static $handlers; public static $handlerPriority; private $packet; + private $player; - - public function __construct(RakNetPacket $packet){ + public function __construct(Player $player, RakNetDataPacket $packet){ $this->packet = $packet; } public function getPacket(){ return $this->packet; } + + public function getPlayer(){ + return $this->player; + } } \ No newline at end of file diff --git a/src/event/server/RakNetPacketReceiveEvent.php b/src/event/server/DataPacketSendEvent.php similarity index 79% rename from src/event/server/RakNetPacketReceiveEvent.php rename to src/event/server/DataPacketSendEvent.php index 372821fda..a1935430d 100644 --- a/src/event/server/RakNetPacketReceiveEvent.php +++ b/src/event/server/DataPacketSendEvent.php @@ -19,18 +19,22 @@ * */ -class RakNetPacketReceiveEvent extends ServerEvent implements CancellableEvent{ +class DataPacketSendEvent extends ServerEvent implements CancellableEvent{ public static $handlers; public static $handlerPriority; private $packet; + private $player; - - public function __construct(RakNetPacket $packet){ + public function __construct(Player $player, RakNetDataPacket $packet){ $this->packet = $packet; } public function getPacket(){ return $this->packet; } + + public function getPlayer(){ + return $this->player; + } } \ No newline at end of file diff --git a/src/event/server/UnknownPacketSendEvent.php b/src/event/server/PacketReceiveEvent.php similarity index 92% rename from src/event/server/UnknownPacketSendEvent.php rename to src/event/server/PacketReceiveEvent.php index 31820d881..cb26cbf05 100644 --- a/src/event/server/UnknownPacketSendEvent.php +++ b/src/event/server/PacketReceiveEvent.php @@ -19,7 +19,7 @@ * */ -class UnknownPacketSendEvent extends ServerEvent implements CancellableEvent{ +class PacketReceiveEvent extends ServerEvent implements CancellableEvent{ public static $handlers; public static $handlerPriority; diff --git a/src/event/server/UnknownPacketReceiveEvent.php b/src/event/server/PacketSendEvent.php similarity index 91% rename from src/event/server/UnknownPacketReceiveEvent.php rename to src/event/server/PacketSendEvent.php index 322c6807f..becb15e48 100644 --- a/src/event/server/UnknownPacketReceiveEvent.php +++ b/src/event/server/PacketSendEvent.php @@ -19,7 +19,7 @@ * */ -class UnknownPacketReceiveEvent extends ServerEvent implements CancellableEvent{ +class PacketSendEvent extends ServerEvent implements CancellableEvent{ public static $handlers; public static $handlerPriority; diff --git a/src/network/MinecraftInterface.php b/src/network/MinecraftInterface.php index 1cd0cea6b..f7e149c04 100644 --- a/src/network/MinecraftInterface.php +++ b/src/network/MinecraftInterface.php @@ -55,14 +55,16 @@ class MinecraftInterface{ private function parsePacket($buffer, $source, $port){ $pid = ord($buffer{0}); + if(RakNetInfo::isValid($pid)){ $parser = new RakNetParser($buffer); if($parser->packet !== false){ $parser->packet->ip = $source; $parser->packet->port = $port; - if(EventHandler::callEvent(new RakNetPacketReceiveEvent($parser->packet)) !== BaseEvent::DENY){ - return $parser->packet; + if(EventHandler::callEvent(new PacketReceiveEvent($parser->packet)) === BaseEvent::DENY){ + return false; } + return $parser->packet; } return false; }elseif($pid === 0xfe and $buffer{1} === "\xfd" and ServerAPI::request()->api->query instanceof QueryHandler){ @@ -70,29 +72,25 @@ class MinecraftInterface{ $packet->ip = $source; $packet->port = $port; $packet->buffer = $buffer; + if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === BaseEvent::DENY){ + return false; + } ServerAPI::request()->api->query->handle($packet); }else{ $packet = new Packet(); $packet->ip = $source; $packet->port = $port; $packet->buffer = $buffer; - EventHandler::callEvent(new UnknownPacketReceiveEvent($packet)); + EventHandler::callEvent(new PacketReceiveEvent($packet)); return false; } } public function writePacket(Packet $packet){ - if($packet instanceof RakNetPacket){ - if(EventHandler::callEvent(new RakNetPacketSendEvent($packet)) === BaseEvent::DENY){ - return 0; - } + if(EventHandler::callEvent(new PacketSendEvent($packet)) === BaseEvent::DENY){ + return 0; + }elseif($packet instanceof RakNetPacket){ $codec = new RakNetCodec($packet); - }elseif($packet instanceof QueryPacket){ - - }else{ - if(EventHandler::callEvent(new UnknownPacketSendEvent($packet)) === BaseEvent::DENY){ - return 0; - } } $write = $this->socket->write($packet->buffer, $packet->ip, $packet->port); $this->bandwidth[1] += $write;