server = $server; $this->player = $player; } public function handleDataPacket(DataPacket $packet) : void{ $timings = Timings::getReceiveDataPacketTimings($packet); $timings->startTiming(); $packet->decode(); if(!$packet->feof() and !$packet->mayHaveUnreadBytes()){ $remains = substr($packet->buffer, $packet->offset); $this->server->getLogger()->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": 0x" . bin2hex($remains)); } $this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this->player, $packet)); if(!$ev->isCancelled() and !$packet->handle($this)){ $this->server->getLogger()->debug("Unhandled " . $packet->getName() . " received from " . $this->player->getName() . ": 0x" . bin2hex($packet->buffer)); } $timings->stopTiming(); } public function handleLogin(LoginPacket $packet) : bool{ return $this->player->handleLogin($packet); } public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool{ return false; //TODO } public function handleResourcePackClientResponse(ResourcePackClientResponsePacket $packet) : bool{ return $this->player->handleResourcePackClientResponse($packet); } public function handleText(TextPacket $packet) : bool{ if($packet->type === TextPacket::TYPE_CHAT){ return $this->player->chat($packet->message); } return false; } public function handleMovePlayer(MovePlayerPacket $packet) : bool{ return $this->player->handleMovePlayer($packet); } public function handleLevelSoundEvent(LevelSoundEventPacket $packet) : bool{ return $this->player->handleLevelSoundEvent($packet); } public function handleEntityEvent(EntityEventPacket $packet) : bool{ return $this->player->handleEntityEvent($packet); } public function handleInventoryTransaction(InventoryTransactionPacket $packet) : bool{ return $this->player->handleInventoryTransaction($packet); } public function handleMobEquipment(MobEquipmentPacket $packet) : bool{ return $this->player->handleMobEquipment($packet); } public function handleMobArmorEquipment(MobArmorEquipmentPacket $packet) : bool{ return true; //Not used } public function handleInteract(InteractPacket $packet) : bool{ return $this->player->handleInteract($packet); } public function handleBlockPickRequest(BlockPickRequestPacket $packet) : bool{ return $this->player->handleBlockPickRequest($packet); } public function handleEntityPickRequest(EntityPickRequestPacket $packet) : bool{ return false; //TODO } public function handlePlayerAction(PlayerActionPacket $packet) : bool{ return $this->player->handlePlayerAction($packet); } public function handleEntityFall(EntityFallPacket $packet) : bool{ return true; //Not used } public function handleAnimate(AnimatePacket $packet) : bool{ return $this->player->handleAnimate($packet); } public function handleContainerClose(ContainerClosePacket $packet) : bool{ return $this->player->handleContainerClose($packet); } public function handlePlayerHotbar(PlayerHotbarPacket $packet) : bool{ return true; //this packet is useless } public function handleCraftingEvent(CraftingEventPacket $packet) : bool{ return true; //this is a broken useless packet, so we don't use it } public function handleAdventureSettings(AdventureSettingsPacket $packet) : bool{ return $this->player->handleAdventureSettings($packet); } public function handleBlockEntityData(BlockEntityDataPacket $packet) : bool{ return $this->player->handleBlockEntityData($packet); } public function handlePlayerInput(PlayerInputPacket $packet) : bool{ return false; //TODO } public function handleSetPlayerGameType(SetPlayerGameTypePacket $packet) : bool{ return $this->player->handleSetPlayerGameType($packet); } public function handleSpawnExperienceOrb(SpawnExperienceOrbPacket $packet) : bool{ return false; //TODO } public function handleMapInfoRequest(MapInfoRequestPacket $packet) : bool{ return false; //TODO } public function handleRequestChunkRadius(RequestChunkRadiusPacket $packet) : bool{ $this->player->setViewDistance($packet->radius); return true; } public function handleItemFrameDropItem(ItemFrameDropItemPacket $packet) : bool{ return $this->player->handleItemFrameDropItem($packet); } public function handleBossEvent(BossEventPacket $packet) : bool{ return false; //TODO } public function handleShowCredits(ShowCreditsPacket $packet) : bool{ return false; //TODO: handle resume } public function handleCommandRequest(CommandRequestPacket $packet) : bool{ return $this->player->chat($packet->command); } public function handleCommandBlockUpdate(CommandBlockUpdatePacket $packet) : bool{ return false; //TODO } public function handleResourcePackChunkRequest(ResourcePackChunkRequestPacket $packet) : bool{ return $this->player->handleResourcePackChunkRequest($packet); } public function handlePlayerSkin(PlayerSkinPacket $packet) : bool{ return $this->player->changeSkin($packet->skin, $packet->newSkinName, $packet->oldSkinName); } public function handleBookEdit(BookEditPacket $packet) : bool{ return $this->player->handleBookEdit($packet); } public function handleModalFormResponse(ModalFormResponsePacket $packet) : bool{ return false; //TODO: GUI stuff } public function handleServerSettingsRequest(ServerSettingsRequestPacket $packet) : bool{ return false; //TODO: GUI stuff } }