마인크래프트 자바에디션 25w07a를 기준으로 작성되었습니다.
관련 정보가 매우 부족합니다. 틀린 내용이 있을 수 있습니다.
마인크래프트 자바에디션 25w03a에 테스트 기능이 추가되었습니다.
이 테스트 기능은 유저가 개발한 기능이 의도한대로 작동하는 지 반복적으로 테스트를 수행하고 오류가 있는지 검증할 때 사용할 수 있습니다.
테스트 인스턴스 블록과 테스트 블록
테스트 기능에 사용되는 블록입니다.
관리자 도구를 통해 가져올 수 있으며 (탭이 없으면 조작에 가서 활성화해주세요)
맨 왼쪽은 테스트 인스턴스 블록, 나머지는 테스트 블록입니다.
테스트 인스턴스 블록
테스트를 실행시키는 핵심 블록입니다.
구조물 블록처럼 빈 구조물을 생성하고 구조물을 저장하는 기능을 가지고 있으며 테스트를 불러오고 실행시킬 수 있습니다.
또한 테스트의 결과를 신호기처럼 출력해줍니다.
테스트 블록
테스트 블록은 구조물 블록처럼 모드를 변경할 수 있으며 모드에 따라 블록의 텍스쳐가 변경되게 됩니다.
이 블록은 후술할 block_based 테스트에서 사용하게 되며 총 4개의 모드가 존재합니다.
- 시작 : 테스트가 시작될 때 레드스톤 신호를 방출합니다.
- 로그 : 테스트 중 레드스톤 신호를 받으면 서버 로그에 메세지를 남깁니다.
- 실패 : 테스트 중 레드스톤 신호를 받으면 테스트가 실패합니다.
- 수락 : 테스트 중 레드스톤 신호를 받으면 테스트가 성공합니다.
로그가 남기는 메세지는 이런 느낌입니다.
테스트 인스턴스
테스트 인스턴스는 데이터팩에서 정의해주는 테스트에 대한 정보입니다. 이곳의 정보를 바탕으로 테스트가 정의됩니다.
데이터팩의 test_instance 폴더 내의 json 파일로 정의됩니다.
- environment
- 이 테스트를 실행할 때 적용되는 테스트 환경 (후술)의 네임스페이스 ID입니다.
- structure
- 테스트에서 사용할 구조물의 네임스페이스 ID입니다.
- max_ticks
- 테스트가 실행된 후 시간 초과로 간주되는 틱입니다. (시간 제한)
- setup_ticks (선택사항, 기본값 0)
- 구조물을 배치한 후 테스트를 시작하기 전 기다리는 틱 값입니다.
- required (선택사항, 기본값 true)
- 테스트가 전체 테스트 모음을 통과하기 위해서 통과되어야 하는 지 여부입니다.
- (자세한 정보 확인 불가)
- rotation (선택사항, 기본값 none)
- 테스트 구조물을 회전시킵니다.
- none, clockwise_90, 180, counterclockwise_90 중 1개를 사용합니다.
- manual_only (선택사항, 기본값 false)
- true일 경우 자동화된 test run을 통해 실행되지 않는 테스트로 설정합니다.
- sky_access (선택사항, 기본값 false)
- 테스트의 천장이 비어있어야 하는 지 여부입니다.
- 테스트는 기본적으로 구조물을 방벽이 감싸고 실행되는데 true로 설정될 경우 천장 방벽이 제거됩니다.
- max_attempts (선택사항, 기본값 1)
- 테스트를 실행하기 위해 시도하는 회수입니다.
- required_successes (선택사항, 기본값 1)
- 테스트의 결과가 성공으로 간주되기 위해 테스트가 성공해야 하는 회수입니다.
- type
- 테스트의 유형입니다.
- function - 함수를 통해 테스트합니다. (mcfunction이 아닌 실제 자바 함수를 의미합니다.)
- block_based - 블록을 통해 테스트합니다.
- 이 유형의 테스트는 구조물 내 시작 테스트 블록과 수락 테스트 블록이 무조건 존재해야 합니다.
- function (type이 function 일 때)
- 실행할 테스트 함수의 네임스페이스 ID입니다.
예시 (모든 값을 일부러 채워넣었습니다. 기본값 존재하는 필드는 기본값 쓸거면 안적어도 됩니다.)
{
"environment": "potan:for_test1",
"structure": "potan:test1",
"max_ticks": 60,
"setup_ticks": 1,
"required": false,
"rotation": "none",
"manual_only": false,
"sky_access": false,
"max_attempts": 1,
"required_successes": 1,
"type": "minecraft:block_based"
}
테스트 환경
테스트 환경은 테스트가 실행될 때 월드의 환경을 설정합니다.
데이터팩의 test_environment 폴더에서 정의됩니다.
각 환경은 type에서 설정된 유형과 유형에 따른 추가값들로 구성됩니다. (예시 참조)
- type : all_of
- 여러 환경 유형을 합칩니다.
- definitions
- 합칠 유형 리스트입니다.
- type : function
- 테스트를 설치하고 해체할 때 mcfunction을 실행합니다.
- setup (선택사항): 테스트를 설치할 때 실행되는 mcfunction의 네임스페이스 id입니다.
- teardown (선택사항): 테스트를 해체할 때 실행되는 mcfunction의 네임스페이스 id입니다.
- type : game_rules
- 테스트 과정 동안 적용되는 게임룰입니다. 테스트 종료 후 리셋됩니다.
- bool_rules : false, true로 설정하는 게임룰의 값 리스트입니다.
- 리스트의 각 항목 ( { } 로 감쌈)
- rule : 게임 룰의 이름
- value : 설정할 값
- 리스트의 각 항목 ( { } 로 감쌈)
- int_rules : 정수로 설정하는 게임룰의 값 리스트입니다.
- 리스트의 각 항목 ( {}로 감쌈)
- rule : 게임룰에 대한 이름
- value : 설정할 값
- 리스트의 각 항목 ( {}로 감쌈)
- type : weather
- 테스트 과정동안 적용되는 날씨입니다. 테스트 종료 후 리셋됩니다.
- weather : 설정할 날씨입니다.
- clear, rain, thunder 중 하나를 사용합니다.
- type : time_of_day
- 테스트 시작 때 시간을 변경합니다.
- time : 설정할 시간(틱)입니다.
예시
{
"type": "minecraft:all_of",
"definitions": [
{
"type": "function",
"setup": "potan:test1/setup",
"teardown": "potan:test1/teardown"
},
{
"type": "game_rules",
"bool_rules": [
{
"rule": "doDaylightCycle",
"value": false
},
{
"rule": "doWeatherCycle",
"value": false
}
],
"int_rules": [
{
"rule": "maxCommandChainLength",
"value": 65536
}
]
},
{
"type": "weather",
"weather": "rain"
},
{
"type": "time_of_day",
"time": 10
}
]
}
테스트 실행동안 setup -> 테스트 -> teardown 함수가 호출이 되며
테스트 실행중엔 비가 오고 시간이 10으로 변경됩니다. (테스트 종료 후 비는 다시 없어짐)
또한 doDaylightCycle 같은 게임룰이 원래 false였어도 테스트 종료후엔 기본값인 true가 됩니다.
/test
테스트 명령어는 테스트를 실행하고, 정리하는 기능을 수행할 수 있습니다.
그 외에도 좌표를 알아내는 등의 각종 기능을 가집니다.
- /test clear~
- 테스트 구조물을 지웁니다.
- test clearthat : 바라보고 있는 테스트를 지웁니다.
- test clearall [<범위>] : 플레이어 주변 범위 안 모든 테스트를 지웁니다. (기본값 200)
- test clearthese : 플레이어의 200 범위 안 모든 테스트를 지웁니다.
- /test create <테스트> [<가로>] [<세로> <깊이>]
- <테스트> 네임스페이스 ID를 가진 테스트 구조물을 생성합니다. (파일 저장은 별도)
- 가로 세로 깊이의 기본값은 5 5 5 입니다.
- /test locate <테스트>
- 로드된 청크에서 테스트를 찾습니다.
- /test pos [<변수명>]
- 테스트에서 가리키는 블록의 로컬 좌표를 보여줍니다.
- 출력되는 로컬좌표를 클릭하여 해당 좌표에 대한 자바 코드를 복사할 수 있습니다.
- 만약 변수명이 설정될 경우 복사할 때 변수명인 pos가 변수명으로 변경됩니다.
final BlockPos pos = new BlockPos(2, 0, 2);
- /test reset~
- 테스트 구조물을 초기 상태로 리셋합니다. (테스트 실행 X)
- resetcloset : 가장 가까운 테스트
- resetthat : 바라보고 있는 테스트
- resetthese : 주변 테스트 전부
- /test run <테스트> [<반복회수>] [<실패하면 종료>] [<회전>] [<행길이>]
- 테스트를 설치하고 실행합니다.
- <반복회수> : 설치한 테스트를 몇번 반복할지 설정합니다.
- <실패하면 종료> : true로 설정 시 반복 중 테스트가 실패하면 반복을 중단합니다.
- <회전> : 90 * <회전> 만큼 구조물을 회전시킵니다. (0, 1, 2, 3 중 1개)
- <행길이> : 그리드 레이아웃으로 테스트를 실행시킬 때 한 행당 테스트의 개수입니다. (확인 불가능)
반복 회수를 10으로 설정했을 때 하나의 테스트를 10번 반복한 결과입니다.
- /test runmultiple <테스트> [<개수>]
- 동시에 여러개의 테스트를 진행합니다.
이런 느낌으로 한번에 쭉 배치됩니다.
- /test run~ [<반복 회수>] [<실패하면 종료>]
- 테스트를 재시작합니다.
- runcloset : 가장 가까운 테스트
- runthat : 바라보고 있는 테스트
- runthese : 주변 테스트들
- /test runfailed [<반복 회수>] [<실패하면 종료>] [<회전>] [<행길이>]
- /test runfailed [<오직required테스트만>] [<반복 회수>]
- 실패한 테스트를 재실행합니다.
- /test stop
- 모든 테스트를 중단시킵니다.
- test verify <테스트>
- 테스트를 동시에 여러개 실행하여 검증합니다.
자동으로 위처럼 테스트가 작동합니다.
테스트 만들어보기
test create 명령어 또는 인스턴스를 직접 설치 후 구조물을 크기를 조정해 테스트 공간을 만듭니다.
테스트 블록을 사용하여 테스트 구조물을 제작 후 구조물 저장을 눌러 저장합니다.
저장된 구조물 데이터를 데이터팩에 넣습니다.
test_instance 폴더에 테스트 정보를 정의합니다.
default는 마인크래프트에서 기본으로 정의한 테스트 환경으로 아무 변화가 없습니다.
이제 마크를 재접속 후 /test run 등의 함수를 통해 실행시킵니다.
잘 배치후 실행됩니다.
테스트 인스턴스 블록을 통해 정보를 확인할 수 있고
불러오고 실행 버튼을 통해 테스트를 실행시킬 수 있습니다.
밤에는 실패하는 모습입니다.
'마인크래프트 강좌 > 데이터팩 강좌' 카테고리의 다른 글
마인크래프트 데이터팩 강좌 [3-1] - 매크로 (0) | 2025.02.07 |
---|---|
마인크래프트 데이터팩 강좌 [2-1] - pack.mcmeta (1) | 2025.01.09 |
마인크래프트 데이터팩 강좌 [9-1] - Enchantment Provider (0) | 2024.06.26 |
마인크래프트 데이터팩 강좌 [9] - enchantment (4) | 2024.06.25 |
1.20.5에 추가된 커스텀 아이템 조합 만들기 (6) | 2024.04.14 |