GGWiki
새 문서

마인크래프트 / 지역·장소 / Jigsaw structure

공식 자료를 바탕으로 AI가 작성한 초안 · 출처 보기

편집 이의 제기 토론 수정 이력 역링크 토론에서 언급

개요편집이의 제기

마인크래프트Jigsaw structure는 퍼즐 블록을 사용하여 생성되는 구조물 시스템이다. 이 시스템은 마인크래프트약탈자 전초기지, 마인크래프트마을, 마인크래프트보루 잔해, 마인크래프트고대 도시, 마인크래프트Trail Ruins, 마인크래프트시련의 회당, 마인크래프트버려진 야영지 등의 구조물을 생성하는 데 사용된다. 자바 에디션에서는 데이터 팩, 베드락 에디션에서는 애드온을 통해 Jigsaw 구조물 생성을 사용자 지정할 수 있다.[1]

생성은 여러 단계로 이루어진다. 먼저 시작 피스를 배치하고, 이어서 퍼즐 블록을 통해 연결 피스를 순차적으로 추가한다. 각 피스는 템플릿 풀에서 무작위로 선택되며, 가중치와 폴백 풀이 적용된다. 배치는 외곽 경계 상자를 초과하지 않아야 하고, 다른 피스와 교차하지 않아야 하며, 부모 피스가 조부모 피스 내부에 있는 경우 조부모 피스 바깥으로 나갈 수 없다. 마지막으로 각 피스는 프로세서 리스트에 따라 블록을 변경하거나 제거하고, 퍼즐 블록은 지정된 "Turns into" 최종 상태로 대체된다. 지형 일치로 설정된 피스는 각 열의 블록 높이가 지형에 맞게 조정된다.[1]

이름편집이의 제기

  • 다른 언어 공식 이름: Jigsaw structure (English) · Estrutura de bloco-quebra-cabeça (Português) · Structure en puzzle (Français) [2]

특징편집이의 제기

생성 방식

지그소 구조물은 지그소 블록을 사용하여 생성되는 구조물이다. 이들은 마인크래프트약탈자 전초기지, 마인크래프트마을, 마인크래프트보루 잔해, 마인크래프트고대 도시, 마인크래프트시련의 회당, 마인크래프트버려진 야영지 등을 생성하는 데 사용된다. 지그소 구조물 생성은 자바 에디션에서 데이터 팩, 베드락 에디션에서 애드온을 통해 사용자 정의할 수 있다.[1]

#### 1단계: 시작 조각

지그소 구조물은 start_pool 문자열을 정의한다. 이 풀에서 조각 하나가 선택되어 시작 위치에 배치된다. 회전과 시작 템플릿은 청크 좌표와 월드 시드를 기반으로 무작위로 선택된다. 선택된 조각이 minecraft:empty_pool_element인 경우 구조물 생성이 실패한다(자바 에디션 전용). 시작 위치는 시작 청크의 0, 0 청크 좌표이다. project_start_to_heightmap(자바 에디션 전용) 또는 heightmap_projection(베드락 에디션 전용)이 설정된 경우, 시작 높이는 지정된 하이트맵을 기준으로 하며 start_height 값만큼 오프셋된다. 그렇지 않으면 start_height 정수 값이 시작 높이를 결정한다.

구조물이 start_jigsaw_name 문자열을 정의하면, 해당 이름을 가진 지그소 블록이 무작위로 선택되어 시작 위치에 배치된다. 일치하는 지그소 블록이 없으면 구조물 생성이 실패한다. start_jigsaw_name이 설정되지 않은 경우, (회전하지 않은) 조각의 북서쪽 모서리가 시작 위치에 배치된다.

최종 시작 조각 위치가 하단 빌드 제한으로부터 최소 dimension_padding.bottom 블록, 상단 빌드 제한으로부터 최소 dimension_padding.top 블록 떨어져 있지 않으면 구조물 생성이 실패한다. 마지막으로 시작 조각이 생성 대기열에 들어간다.[1]

#### 2단계: 조각 연결

생성 대기열이 순차적으로 처리된다. 조각이 처리되면 대기열에서 제거된다. 처리된(부모) 조각의 모든 지그소 블록이 연결 조각을 생성하는 데 사용된다. 지그소 블록은 각 블록에 설정된 선택 우선순위가 높은 것부터 낮은 순으로, 우선순위가 같으면 무작위 순서로 처리된다.[1]

##### 연결 조각 선택

지그소 블록은 "대상 풀"을 참조한다. 이 "대상 풀"은 pool_aliases에 참조된 풀 별칭에 의해 어떤 템플릿 풀을 사용할지 결정하는 별칭으로 쓰인다. 풀 별칭이 사용되지 않으면 "대상 풀"이 직접 사용할 템플릿 풀을 참조한다.

연결 조각은 해당 템플릿 풀을 사용하여 다음 순서로 결정된다:

  1. 템플릿 풀의 모든 조각 — 가중치에 따라 무작위 순서.
  2. 템플릿 풀에 지정된 대체 풀의 모든 조각 — 가중치에 따라 무작위 순서.
  3. 최대 깊이(size[자바 에디션 전용] / max_depth[베드락 에디션 전용])에 도달한 경우 1번 과정을 건너뛴다.[1]

##### 연결 조각 시도

시도할 조각에서 무작위 지그소 블록 하나가 선택되며, 조건은 다음과 같다:

  • 연결 조각의 경계 바깥을 향하고 있을 것
  • 부모 지그소 블록의 "대상 이름"과 일치하는 "이름"을 가질 것
  • 부모 지그소 블록의 방향과 호환되는 방향을 가질 것 (조각은 수평으로만 회전 가능)

조각은 두 지그소 블록이 서로 연결되도록 월드에 배치된다. 현재 처리 중인 조각이나 새로 선택된 조각이 지형 일치로 설정된 경우, 조각이 수직으로 이동하여 지형에 맞춰진다.[1]

##### 조각 배치 조건

배치가 유효한지 검사한다. 조각은 다음을 만족해야 한다:

  • 외부 경계 상자를 초과하지 않을 것. 다른 조각 내부에 배치되는 경우 그 조각의 경계 상자가 외부 경계 상자가 되고, 그렇지 않으면 외부 경계 상자는 다음과 같이 결정된다:
    • 수평 변 길이: 2 * a + 1 (a = max_distance_from_center 또는 max_distance_from_center.horizontal)
    • 수직 변 길이: 2 * a + 1 (a = max_distance_from_center 또는 max_distance_from_center.vertical)
    • 첫 번째 조각의 최하단 Y 블록과 XZ 중심에 중심이 맞춰짐
    • 상단 또는 하단이 잘려서 하단 빌드 제한으로부터 최소 dimension_padding 또는 dimension_padding.bottom(자바 에디션 전용) 블록, 상단 빌드 제한으로부터 최소 dimension_padding 또는 dimension_padding.top(자바 에디션 전용) 블록 떨어져 있도록 함
  • 다른 조각과 교차하지 않을 것 (자신 내부에 배치되는 조각 제외)
  • 부모가 조부모 내부에 있는 경우, 조부모 바깥으로 나가지 않을 것

배치할 수 없으면 다음 조각으로 재시도한다(연결 조각 선택 참조). 모든 조각을 배치할 수 없으면 해당 지그소 블록에 대해 조각이 배치되지 않는다.

배치에 성공하면 새로 배치된 조각이 부모 지그소 블록에 지정된 배치 우선순위에 따라 생성 대기열에 추가되지만, 이미 대기열에 있는 동일 우선순위 요소들 뒤에 위치한다. 생성이 부모 조각의 다음 지그소 블록으로 계속된다.[1]

#### 3단계: 처리

마지막으로 각 조각이 처리되어 템플릿에서 블록을 변경하거나 제거한다. 처리는 템플릿 풀에서 각 조각에 지정된 프로세서 목록을 사용하여 수행된다. 또한 지그소 블록은 지정된 "변환 결과" 최종 상태로 대체된다(자바 에디션에서는 minecraft:jigsaw_replacement 프로세서 사용). 지형 일치로 설정된 조각의 경우 각 블록 열의 높이가 지형에 맞게 조정된다(자바 에디션에서는 minecraft:gravity 프로세서 사용).[1]

풀 별칭

풀 별칭은 지그소 블록에서 참조되는 "대상 풀" 별칭을 (다른) 템플릿 풀로 리디렉션하는 데 사용된다. 리디렉션은 생성이 시작되기 전에 결정되므로, 단일 구조물 내에서 특정 별칭 템플릿 풀에 대한 모든 참조는 동일한 대상 템플릿 풀로 재배선된다. 풀 별칭으로 리디렉션되지 않은 별칭은 직접 템플릿 풀 참조로 사용된다.[1]

#### direct

alias에 대한 모든 참조가 target으로 재배선된다.[1]

#### random

구조물당 targets 목록에서 대상이 하나 선택된다. alias에 대한 모든 참조가 해당 대상으로 재배선된다.[1]

#### random_group

구조물당 groups 목록에서 별칭 그룹 하나가 선택된다. 해당 그룹의 모든 풀 별칭이 사용된다.[1]

등장 요소편집이의 제기

배경·설정편집이의 제기

생성 구조의 개념

지그소 구조물은 지그소 블록을 사용하여 생성되는 구조물이다.[1] 이 시스템은 약탈자 전초기지, 마을, 보루 잔해, 고대 도시, 시련의 회당, 버려진 야영지 등의 생성에 사용된다.[1] 자바 에디션에서는 데이터 팩, 베드락 에디션에서는 애드온을 통해 지그소 구조물 생성을 사용자 지정할 수 있다.[1]

생성 절차

#### 1단계: 시작 조각

지그소 구조물은 start_pool 문자열로 시작 템플릿 풀을 정의한다.[1] 이 풀에서 조각 하나가 무작위로 선택되어 시작 위치에 배치된다.[1] 회전과 시작 템플릿은 청크 좌표와 월드 시드를 기반으로 무작위로 결정된다.[1] 선택된 조각이 minecraft:empty_pool_element인 경우 구조물 생성이 실패한다(자바 에디션 전용).[1] 시작 위치는 시작 청크의 0, 0 청크 좌표이다.[1] project_start_to_heightmap(자바 에디션 전용) 또는 heightmap_projection(베드락 에디션 전용)이 설정되어 있으면 지정된 하이트맵을 기준으로 시작 높이가 결정되며, start_height 값만큼 오프셋된다.[1] 그렇지 않으면 start_height 값이 직접 시작 높이를 결정한다.[1]

구조물이 start_jigsaw_name 문자열을 정의하면 해당 이름을 가진 지그소 블록이 무작위로 선택되어 시작 위치에 배치된다.[1] 일치하는 지그소 블록이 없으면 생성이 실패한다.[1] start_jigsaw_name이 설정되지 않은 경우, 회전하지 않은 조각의 북서쪽 모서리가 시작 위치에 배치된다.[1]

최종 시작 조각 위치가 하단 빌드 한계로부터 dimension_padding.bottom 블록 이상, 상단 빌드 한계로부터 dimension_padding.top 블록 이상 떨어져 있지 않으면 생성이 실패한다.[1] 마지막으로 시작 조각이 생성 대기열에 들어간다.[1]

#### 2단계: 조각 연결

생성 대기열이 순차적으로 처리된다.[1] 처리된(부모) 조각의 모든 지그소 블록을 사용하여 연결 조각을 생성한다.[1] 지그소 블록은 각 블록에 설정된 선택 우선순위가 높은 것부터 낮은 순서로, 우선순위가 같으면 무작위 순서로 처리된다.[1]

##### 연결 조각 선택

지그소 블록은 "대상 풀"을 참조한다.[1] 이 "대상 풀"은 pool_aliases에 참조된 풀 별칭을 통해 어떤 템플릿 풀을 사용할지 결정하는 별칭으로 쓰인다.[1] 풀 별칭이 사용되지 않으면 "대상 풀"이 직접 템플릿 풀을 참조한다.[1]

연결 조각은 다음 순서로 해당 템플릿 풀을 사용하여 결정된다:[1]

  1. 템플릿 풀의 모든 조각 — 가중치에 따라 무작위 순서로.[1]
  2. 템플릿 풀에 지정된 대체 풀의 모든 조각 — 가중치에 따라 무작위 순서로.[1]

최대 깊이(size[자바 에디션 전용] / max_depth[베드락 에디션 전용])에 도달한 경우 1번 단계는 건너뛴다.[1]

##### 연결 조각 시도

시도할 조각에서 무작위 지그소 블록 하나가 선택되는데, 다음 조건을 만족해야 한다:[1]

  • 연결 조각의 경계 바깥쪽을 향하고 있을 것[1]
  • 부모 지그소 블록의 "대상 이름"과 일치하는 "이름"을 가질 것[1]
  • 부모 지그소 방향과 호환되는 방향을 가질 것 (조각은 수평 회전만 가능)[1]

조각은 두 지그소 블록이 서로 연결되도록 월드에 배치된다.[1] 현재 처리 중인 조각이나 새로 선택된 조각이 지형 일치로 설정된 경우, 조각이 수직으로 이동하여 지형에 맞춰진다.[1]

##### 조각 배치 조건

배치가 유효한지 검사한다.[1] 조각은 다음을 만족해야 한다:[1]

  • 외부 경계 상자를 초과하지 않을 것.[1] 다른 조각 내부에 배치되는 경우 그 조각의 경계 상자가 외부 경계 상자가 되고, 그렇지 않으면 외부 경계 상자는 다음과 같이 결정된다:[1]
    • 수평 변 길이: 2 × a + 1, 여기서 a = max_distance_from_center 또는 max_distance_from_center.horizontal[1]
    • 수직 변 길이: 2 × a + 1, 여기서 a = max_distance_from_center 또는 max_distance_from_center.vertical[1]
    • 첫 번째 조각의 중심 XZ 및 최하단 Y 블록을 중심으로 함[1]
    • 상단 또는 하단이 잘려서 하단 빌드 한계로부터 dimension_padding 또는 dimension_padding.bottom(자바 에디션 전용) 블록 이상, 상단 빌드 한계로부터 dimension_padding 또는 dimension_padding.top(자바 에디션 전용) 블록 이상 떨어지도록 함[1]
  • (자신 안에 배치된 조각들을 제외하고) 다른 조각과 교차하지 않을 것[1]
  • 부모가 조부모 안에 있는 경우, 조부모 바깥으로 나가지 않을 것[1]

조각을 배치할 수 없으면 다음 조각으로 시도를 반복한다(연결 조각 선택 참조).[1] 모든 조각을 배치할 수 없으면 해당 지그소 블록에 대해서는 조각이 배치되지 않는다.[1]

배치에 성공하면 새로 배치된 조각이 부모 지그소 블록에 지정된 배치 우선순위에 따라 생성 대기열에 추가되지만, 동일한 배치 우선순위를 가진 기존 대기열 요소들 뒤에 위치한다.[1] 이어서 부모 조각의 다음 지그소 블록으로 생성이 계속된다.[1]

#### 3단계: 후처리

마지막으로 각 조각이 처리되어 템플릿의 블록이 변경되거나 제거된다.[1] 처리는 템플릿 풀에서 각 조각에 지정된 처리기 목록을 사용하여 수행된다.[1] 또한 지그소 블록은 지정된 "전환 결과" 최종 상태로 교체된다(자바 에디션에서는 minecraft:jigsaw_replacement 처리기 사용).[1] 지형 일치로 설정된 조각의 경우 각 열의 블록 높이가 지형에 맞게 조정된다(자바 에디션에서는 minecraft:gravity 처리기 사용).[1]

풀 별칭

풀 별칭은 지그소 블록에서 참조되는 "대상 풀" 별칭을 (다른) 템플릿 풀로 리디렉션하는 데 사용된다.[1] 리디렉션은 생성이 시작되기 전에 결정되므로, 단일 구조물 내에서 특정 별칭 템플릿 풀에 대한 모든 참조는 동일한 대상 템플릿 풀로 재배선된다.[1] 풀 별칭으로 리디렉션되지 않은 별칭은 직접 템플릿 풀 참조로 사용된다.[1]

#### direct

alias에 대한 모든 참조가 target으로 재배선된다.[1]

#### random

구조물당 targets 목록에서 대상이 하나 선택된다.[1] alias에 대한 모든 참조가 해당 대상으로 재배선된다.[1]

#### random_group

구조물당 groups 목록에서 별칭 그룹이 하나 선택된다.[1] 해당 그룹의 모든 풀 별칭이 사용된다.[1]

수치·정보편집이의 제기

  • 시작 구조물 풀(start_pool): 문자열(String) [1]
  • 시작 높이(start_height): 정수(Int) 또는 NBT 복합체/JSON 객체 [1]
  • 높이맵 투영(project_start_to_heightmap / heightmap_projection): 문자열(String) [1]
  • 시작 지그소 이름(start_jigsaw_name): 문자열(String) [1]
  • 차원 여백(dimension_padding): 정수(Int) 또는 NBT 복합체/JSON 객체 [1]
    • 하단 여백(dimension_padding.bottom): 정수(Int) [1]
    • 상단 여백(dimension_padding.top): 정수(Int) [1]
  • 최대 깊이(size / max_depth): 정수(Int) [1]
  • 중심 최대 거리(max_distance_from_center): 정수(Int) 또는 NBT 복합체/JSON 객체 [1]
    • 수평(max_distance_from_center.horizontal): 정수(Int) [1]
    • 수직(max_distance_from_center.vertical): 정수(Int) [1]
  • 풀 별칭(pool_aliases): NBT 리스트/JSON 배열 [1]
    • 직접(direct): 별칭(alias) 문자열 → 대상(target) 문자열 [1]
    • 무작위(random): 대상(targets) NBT 리스트/JSON 배열에서 구조물당 하나 선택 [1]
    • 무작위 그룹(random_group): 그룹(groups) NBT 리스트/JSON 배열에서 구조물당 하나 선택 [1]
  • 외곽 경계 상자 가로 변 길이: 2 × a + 1 (a = max_distance_from_center 또는 max_distance_from_center.horizontal) [1]
  • 외곽 경계 상자 세로 변 길이: 2 × a + 1 (a = max_distance_from_center 또는 max_distance_from_center.vertical) [1]
  • 생성에 사용되는 구조물: 마인크래프트약탈자 전초기지, 마인크래프트마을, 마인크래프트보루 잔해, 마인크래프트고대 도시, 마인크래프트시련의 회당, 마인크래프트버려진 야영지 [1]

공략편집이의 제기

Jigsaw 구조물은 데이터 팩(자바 에디션) 또는 애드온(베드락 에디션)을 통해 생성 과정을 사용자 정의할 수 있다.[1]

#### 시작 조각 배치 이해하기

구조물은 start_pool에서 무작위로 선택된 조각을 시작 청크의 (0, 0) 좌표에 배치하며, 이때 청크 좌표와 월드 시드에 따라 회전과 템플릿이 결정된다.[1] 선택된 조각이 minecraft:empty_pool_element이면 생성이 실패한다(자바 에디션).[1] project_start_to_heightmap(자바) 또는 heightmap_projection(베드락)이 설정되어 있으면 지정된 하이트맵을 기준으로 start_height만큼 오프셋하여 시작 높이를 정하고, 그렇지 않으면 start_height 값만으로 높이를 정한다.[1] start_jigsaw_name이 정의되어 있으면 해당 이름의 지그소 블록을 무작위로 골라 시작 위치에 놓고, 일치하는 블록이 없으면 생성이 실패한다.[1] start_jigsaw_name이 없으면 (회전하지 않은) 조각의 북서 모서리를 시작 위치에 맞춘다.[1] 최종 시작 조각 위치가 하단 빌드 한계로부터 dimension_padding.bottom 블록, 상단 빌드 한계로부터 dimension_padding.top 블록 이상 떨어져 있지 않으면 생성이 실패한다.[1]

#### 조각 연결 순서 제어하기

생성 큐는 순차적으로 처리되며, 부모 조각의 모든 지그소 블록이 선택 우선순위 높은 것부터 낮은 순서로, 동일 우선순위면 무작위 순서로 처리된다.[1]

#### 연결 조각 선택 전략

지그소 블록이 참조하는 "대상 풀"은 pool_aliases에 정의된 풀 별칭을 통해 실제 템플릿 풀로 치환된다.[1] 별칭이 없으면 대상 풀이 직접 템플릿 풀을 가리킨다.[1] 연결 조각은 다음 순서로 시도된다.[1]

  1. 템플릿 풀의 모든 조각을 가중치에 따른 무작위 순서로 시도한다.[1]
  2. 템플릿 풀에 지정된 대체 풀(fallback pool)의 모든 조각을 가중치에 따른 무작위 순서로 시도한다.[1]
  3. 최대 깊이(size[자바] / max_depth[베드락])에 도달하면 1번 단계를 건너뛴다.[1]

#### 연결 조각 배치 조건 확인하기

후보 조각에서 무작위 지그소 블록을 골라 부모 지그소 블록과 연결하려 시도한다. 조건은 다음과 같다.[1]

  • 조각 경계 바깥을 향하는 지그소 블록일 것[1]
  • "이름"이 부모 지그소 블록의 "대상 이름"과 일치할 것[1]
  • 수평 회전만으로 부모 지그소 블록의 방향과 호환될 것[1]

조각 중 하나라도 지형 맞춤(terrain matching)으로 설정되어 있으면 수직으로 이동해 지형에 맞춘다.[1]

배치 유효성 검사는 다음을 모두 만족해야 한다.[1]

  • 외부 경계 상자를 벗어나지 않을 것. 다른 조각 안에 배치되는 경우 그 조각의 경계 상자가 외부 경계 상자가 되고, 그렇지 않으면 첫 조각의 최하단 Y 블록을 중심으로 XZ 평면에서 가로 2 * a + 1(여기서 a = max_distance_from_center 또는 max_distance_from_center.horizontal), 세로 2 * a + 1(a = max_distance_from_center 또는 max_distance_from_center.vertical) 크기의 상자가 외부 경계 상자가 된다.[1]
  • 상단 또는 하단이 잘려서 하단 빌드 한계로부터 dimension_padding 또는 dimension_padding.bottom(자바), 상단 빌드 한계로부터 dimension_padding 또는 dimension_padding.top(자바) 블록 이상 떨어지도록 조정된다.[1]
  • 자신을 포함하는 조각을 제외하고 다른 조각과 교차하지 않을 것[1]
  • 부모가 조부모 안에 있으면 조부모 밖으로 나가지 않을 것[1]

조건을 만족하지 못하면 다음 후보 조각으로 재시도하며, 모든 후보가 실패하면 해당 지그소 블록에는 조각을 배치하지 않는다.[1] 배치가 성공하면 새 조각은 부모 지그소 블록에 지정된 배치 우선순위에 따라 생성 큐에 추가되며, 동일 우선순위 항목 뒤쪽에 들어간다.[1]

#### 후처리 및 지형 맞춤 활용하기

모든 조각 배치가 끝난 뒤 각 조각은 템플릿 풀에 지정된 프로세서 리스트로 후처리된다.[1] 지그소 블록은 minecraft:jigsaw_replacement 프로세서(자바)로 "전환 대상" 최종 상태로 교체된다.[1] 지형 맞춤이 설정된 조각은 minecraft:gravity 프로세서(자바)를 사용해 각 열의 블록 높이를 지형에 맞춰 조정한다.[1]

#### 풀 별칭으로 구조물 다양화하기

풀 별칭은 생성 시작 전에 결정되므로, 한 구조물 내에서 같은 별칭 참조는 모두 동일한 대상 템플릿 풀로 고정된다.[1] 별칭 유형별 활용법은 다음과 같다.[1]

  • direct: 특정 별칭을 지정된 대상 풀로 고정한다.[1]
  • random: 구조물마다 targets 목록에서 무작위로 대상을 골라 해당 별칭을 그 풀로 연결한다.[1]
  • random_group: 구조물마다 groups 목록에서 별칭 그룹을 무작위로 선택하고, 해당 그룹 안의 모든 풀 별칭을 사용한다.[1]

이 메커니즘을 데이터 팩이나 애드온으로 수정하면 약탈자 전초기지, 마을, 보루 잔해, 고대 도시, 트레일 유적, 시련의 회당, 버려진 야영지 등 기존 Jigsaw 구조물의 배치를 변경하거나 새로운 구조물을 만들 수 있다.[1]

기타편집이의 제기

이 문서는 공식 공개 자료 2개를 AI가 문단별로 새로 정리하고, 문단마다 별도의 AI 검수를 거친 초안입니다. 자료에 확인되지 않는 내용은 적지 않았습니다. 패치 내역과 관련 문서는 아래에 따로 모아 보여 줍니다. 세부 설정과 최신 수치는 출처를 확인하세요. 일부 내용은 CC BY-NC-SA 3.0 라이선스 자료를 바탕으로 새로 썼으며, 같은 조건이 이 문서의 해당 부분에 적용됩니다. [1]

출처

2개
2Minecraft Wiki 언어별 판 제목 ↗https://minecraft.wiki/w/Jigsaw_structure#languages