private void HandleBedrockMessage(IMcpeMessageHandler handler, Packet message) { if (handler is Player player) { Packet result = _pluginManager.PluginPacketHandler(message, true, player); if (result != message) { message.PutPool(); } message = result; } if (message == null) { return; } switch (message) { case McpeClientToServerHandshake msg: // Start encryption handler.HandleMcpeClientToServerHandshake(msg); break; case McpeResourcePackClientResponse msg: handler.HandleMcpeResourcePackClientResponse(msg); break; case McpeResourcePackChunkRequest msg: handler.HandleMcpeResourcePackChunkRequest(msg); break; case McpeSetLocalPlayerAsInitialized msg: handler.HandleMcpeSetLocalPlayerAsInitialized(msg); break; case McpeScriptCustomEvent msg: handler.HandleMcpeScriptCustomEvent(msg); break; case McpeUpdateBlock _: // DO NOT USE. Will dissapear from MCPE any release. // It is a bug that it leaks these messages. break; case McpeLevelSoundEvent msg: handler.HandleMcpeLevelSoundEvent(msg); break; case McpeClientCacheStatus msg: handler.HandleMcpeClientCacheStatus(msg); break; case McpeAnimate msg: handler.HandleMcpeAnimate(msg); break; case McpeEntityEvent msg: handler.HandleMcpeEntityEvent(msg); break; case McpeText msg: handler.HandleMcpeText(msg); break; case McpeRemoveEntity _: // Do nothing right now, but should clear out the entities and stuff // from this players internal structure. break; case McpeLogin msg: handler.HandleMcpeLogin(msg); break; case McpeMovePlayer msg: handler.HandleMcpeMovePlayer(msg); break; case McpeInteract msg: handler.HandleMcpeInteract(msg); break; case McpeRespawn msg: handler.HandleMcpeRespawn(msg); break; case McpeBlockEntityData msg: handler.HandleMcpeBlockEntityData(msg); break; case McpeAdventureSettings msg: handler.HandleMcpeAdventureSettings(msg); break; case McpePlayerAction msg: handler.HandleMcpePlayerAction(msg); break; case McpeContainerClose msg: handler.HandleMcpeContainerClose(msg); break; case McpeMobEquipment msg: handler.HandleMcpeMobEquipment(msg); break; case McpeMobArmorEquipment msg: handler.HandleMcpeMobArmorEquipment(msg); break; case McpeCraftingEvent msg: handler.HandleMcpeCraftingEvent(msg); break; case McpeInventoryTransaction msg: handler.HandleMcpeInventoryTransaction(msg); break; case McpeServerSettingsRequest msg: handler.HandleMcpeServerSettingsRequest(msg); break; case McpeSetPlayerGameType msg: handler.HandleMcpeSetPlayerGameType(msg); break; case McpePlayerHotbar msg: handler.HandleMcpePlayerHotbar(msg); break; case McpeInventoryContent msg: handler.HandleMcpeInventoryContent(msg); break; case McpeRequestChunkRadius msg: handler.HandleMcpeRequestChunkRadius(msg); break; case McpeMapInfoRequest msg: handler.HandleMcpeMapInfoRequest(msg); break; case McpeItemFrameDropItem msg: handler.HandleMcpeItemFrameDropItem(msg); break; case McpeItemStackRequest nms: handler.HandleMcpeItemStackRequest(nms); break; case McpePlayerInput msg: handler.HandleMcpePlayerInput(msg); break; case McpeRiderJump msg: handler.HandleMcpeRiderJump(msg); break; case McpeCommandRequest msg: handler.HandleMcpeCommandRequest(msg); break; case McpeBlockPickRequest msg: handler.HandleMcpeBlockPickRequest(msg); break; case McpeEntityPickRequest msg: handler.HandleMcpeEntityPickRequest(msg); break; case McpeModalFormResponse msg: handler.HandleMcpeModalFormResponse(msg); break; case McpeCommandBlockUpdate msg: handler.HandleMcpeCommandBlockUpdate(msg); break; case McpeMoveEntity msg: handler.HandleMcpeMoveEntity(msg); break; case McpeSetEntityMotion msg: handler.HandleMcpeSetEntityMotion(msg); break; case McpePhotoTransfer msg: handler.HandleMcpePhotoTransfer(msg); break; case McpeSetEntityData msg: handler.HandleMcpeSetEntityData(msg); break; case McpeTickSync msg: handler.HandleMcpeTickSync(msg); break; case McpeNpcRequest msg: handler.HandleMcpeNpcRequest(msg); break; case McpePacketViolationWarning msg: handler.HandleMcpePacketViolationWarning(msg); break; case McpeNetworkStackLatency msg: handler.HandleMcpeNetworkStackLatency(msg); break; case McpePlayerSkin msg: handler.HandleMcpePlayerSkin(msg); break; default: { Log.Error($"Unhandled packet: {message.GetType().Name} 0x{message.Id:X2} for user: {_session.Username}, IP {_session.EndPoint.Address}"); if (Log.IsDebugEnabled) { Log.Warn($"Unknown packet 0x{message.Id:X2}\n{Packet.HexDump(message.Bytes)}"); } break; } } }