PHP: public function onDataPacketReceiveEvent(DataPacketReceiveEvent $event) { $player = $event->getPlayer(); $packet = $event->getPacket(); if ($packet::NETWORK_ID === ProtoInfo::ITEM_FRAME_DROP_ITEM_PACKET) { if (!$player->isOp()) { $event->setCancelled(); $player->sendMessage("You can't do that !"); } } }} PS : i'm french
Sorry but there's no reason to rely on DataPacket events for this. DataPacket events should be used in places where there's no suitable event existing to assist you with your issue, or there are events but are too vague for your case. For your case, you can listen to PlayerInteractEvent which gets called everytime a player interacts with a block or clicks an item. PHP: public function onPlayerInteract(PlayerInteractEvent $event){ if($event->getBlock()->getId() === Block::ITEM_FRAME_BLOCK){ //$player = $event->getPlayer(); //$player clicked item frame $event->setCancelled(); }}