private Object[] grabExternalVoxelData( int x, int y, int z )
    {
        Object[] data = new Object[ 5 ];
        if ( region == null )
        {
            data[ 0 ] = null;
            data[ 1 ] = Math.abs( x ) % LENGTH;
            data[ 2 ] = Math.abs( y ) % LENGTH;
            data[ 3 ] = Math.abs( z ) % LENGTH;
            data[ 4 ] = Material.AIR;
            return data;
        }

        int xOff = ( int ) Math.floor( x / ( double ) LENGTH );
        int yOff = ( int ) Math.floor( y / ( double ) LENGTH );
        int zOff = ( int ) Math.floor( z / ( double ) LENGTH );

        x %= LENGTH;
        y %= LENGTH;
        z %= LENGTH;

        if ( x < 0 )
        {
            x += LENGTH;
        }
        if ( y < 0 )
        {
            y += LENGTH;
        }
        if ( z < 0 )
        {
            z += LENGTH;
        }

        Chunk c = region.getChunkAt( this.x + xOff, this.y + yOff, this.z + zOff );
        data[ 0 ] = c;

        data[ 1 ] = x;
        data[ 2 ] = y;
        data[ 3 ] = z;

        if ( c != null )
        {
            data[ 4 ] = c.getMaterialAt( x, y, z );
        }
        else
        {
            data[ 4 ] = Material.AIR;
        }

        return data;
    }