OpenMinecraft.InfdevHandler.SpreadLight C# (CSharp) Method

SpreadLight() private method

private SpreadLight ( int x, int y, int z, int skylight, int blocklight, int recurselevel ) : bool
x int
y int
z int
skylight int
blocklight int
recurselevel int
return bool
        bool SpreadLight(int x, int y, int z, int skylight, int blocklight, int recurselevel=0)
        {

            byte block,stopLight,emitLight;
            Block meta;

            // If no light, stop!
            if((skylight < 1) && (blocklight < 1))
                return false;

            for(int i = 0; i < 6; i++)
            {
                // Going too high
                if((y == 127) && (i == 2))
                i++;
                // going negative
                if((y == 0) && (i == 3))
                i++;

                int x_toset = x;
                int y_toset = y;
                int z_toset = z;

                switch(i)
                {
                    case 0: x_toset++; break;
                    case 1: x_toset--; break;
                    case 2: y_toset++; break;
                    case 3: y_toset--; break;
                    case 4: z_toset++; break;
                    case 5: z_toset--; break;
                }

                block = GetBlockAt(x_toset, z_toset, y_toset);
                meta = Blocks.Get(block);
                stopLight = meta.Stop;
                emitLight = meta.Emit;

                if (true)
                {
                    byte skylightCurrent, blocklightCurrent;
                    int skylightNew, blocklightNew;
                    bool spread = false;

                    skylightNew = skylight-stopLight-1;
                    if (skylightNew < 0)
                    skylightNew = 0;

                    blocklightNew = blocklight-stopLight-1;
                    if (blocklightNew < 0)
                    blocklightNew = 0;

                    GetLightAt(x_toset, z_toset, y_toset, out skylightCurrent, out blocklightCurrent);

                    if (skylightNew > skylightCurrent)
                    {
                        skylightCurrent = (byte)skylightNew;
                        spread = true;
                    }

                    if (blocklightNew > blocklightCurrent)
                    {
                        blocklightCurrent = (byte)blocklightNew;
                        spread = true;
                    }

                    if (spread)
                    {
                        SetSkyLightAt(x_toset, z_toset, y_toset, skylightCurrent);
                        SetBlockLightAt(x_toset, z_toset, y_toset, blocklightCurrent);

                        SpreadLight(x_toset, y_toset, z_toset, skylightCurrent, blocklightCurrent, recurselevel+1);
                    }
                }
            }

            return true;
        }