+updatePumpChunk x y valid sim =
+ if elem (0,1) valid && fromEnum (simGetChunkType sim x (y+1)) == fromEnum Air
+ then simSet sim ChunkData { chunkType=Water } x (y+1)
+ else if elem (-1,0) valid && fromEnum (simGetChunkType sim (x-1) y) == fromEnum Air
+ then simSet sim ChunkData { chunkType=Water } (x-1) y
+ else if elem (1,0) valid && fromEnum (simGetChunkType sim (x+1) y) == fromEnum Air
+ then simSet sim ChunkData { chunkType=Water } (x+1) y
+ else sim
+
+updateDrainChunk x y valid sim =
+ if elem (0,1) valid && fromEnum (simGetChunkType sim x (y+1)) == fromEnum Water
+ then simSet sim ChunkData { chunkType=Air } x (y+1)
+ else if elem (0,-1) valid && fromEnum (simGetChunkType sim x (y-1)) == fromEnum Water
+ then simSet sim ChunkData { chunkType=Air } x (y-1)
+ else if elem (1,0) valid && fromEnum (simGetChunkType sim (x+1) y) == fromEnum Water
+ then simSet sim ChunkData { chunkType=Air } (x+1) y
+ else if elem (-1,0) valid && fromEnum (simGetChunkType sim (x-1) y) == fromEnum Water
+ then simSet sim ChunkData { chunkType=Air } (x-1) y
+ else sim
+