static void PasteOpHandler([NotNull] Player player, [NotNull] CommandReader cmd, int expectedMarks,
[NotNull] DrawOpWithBrush op) {
if (player == null) throw new ArgumentNullException("player");
if (cmd == null) throw new ArgumentNullException("cmd");
if (op == null) throw new ArgumentNullException("op");
if (!op.ReadParams(cmd)) return;
player.SelectionStart(expectedMarks, DrawOperationCallback, op, Permission.Draw, Permission.CopyAndPaste);
CopyState copyInfo = player.GetCopyState();
if (copyInfo != null) {
player.MessageNow("{0}: Click or &H/Mark&S the {1} corner.", op.Description, copyInfo.OriginCorner);
} else {
player.MessageNow("{0}: Click or &H/Mark&S a block.", op.Description);
}
}