I noticed a bug while I was coding this. Currently (without this diff) a BlockFromToEvent is sent for all four cardinal directions regardless if the water actually flows or not (that is decided in the flow() method). So, I moved the events into the flow() method, where the event is only sent if the water actually flows.