Как можно создать задание в игре?
Задание (квест) - это слушатель действий игрока. Как только игрок совершает определенное действие, меняются текущие условия задания. В Вашем движке должен быть некий middleware, который будет слушать все действия и все активные задания и когда условия задания будут выполнены, он его отметит как завершенное и больше слушать его не будет. Когда игрок будет набирать воду, у вас в коде должно изменяться состояние задания. 

Через этот middleware должны будут проходить все действия пользователя, а ядро уже, по их типу, будет определять "тип" действия (набор воды) и изменять состояние задания. 

Я вижу это так. Остальные могут меня поправить.
Согласен с человеком выше. 

Я бы сделал событийно-ориентированную реализацию данной задачи.

То бишь каждое событие (ну, не прям каждое, а только то, которое в теории может быть заданием) отправляло оповещение о своём совершении во внешний код, а там уже решать, прибавлять прогресс к чему-то или нет.