public void Trigger(int x, int y, int z) { int dropZ = z; while (dropZ > 0) { if (!LetsSandThrough(map.GetBlock(x, y, dropZ - 1))) { break; } dropZ--; } if (dropZ == z) { return; } Block oldBlock = map.GetBlock(x, y, dropZ); if (oldBlock != Block.Air) { map.SetBlockNoUpdate(x, y, dropZ, Block.Air); } map.Swap(x, y, z, x, y, dropZ); }