마인크래프트로 커맨드를 자유롭게 다루고 싶어하는 분들에게 추천하는 가이드입니다.
1.20.x 버전 기준으로 진행합니다.
0. 서론
우선 마인크래프트에는 활이 있습니다.
활을 쏜다면 어떻게 될까요?
당연하게도 화살이 생기면서 날아갑니다.
그렇다면 여기서 약간의 생각을 할 수 있습니다.
?? : 화살이 생기면 그 자리에 폭발을 일으키면 위력이 강해지지 않을까?
1. 커맨드 블록 가져오기
해당 실험을 위해 커맨드 블록을 가져옵니다.
(명령어는 채팅창에 입력하면 사용할 수 있습니다)
/give @s minecraft:command_block
** 자신에게 커맨드 블록을 가져옴
그에 따른 의문의 실험으로 명령어를 커맨드 블록 안에 입력합니다.
- 이는 화살 개체 대상으로 폭발을 일으킵니다.
/execute as @r at @e[type=arrow] run summon tnt ~ ~ ~
해당 명령어는 화살이라는 해당 엔티티 지점에 폭발을 일으키는 명령어 입니다.
우선 다음 명령어를 입력하기 전 아래 설명을 읽어주세요
1-2. execute 설명
execute as @r at @e[type=arrow] 부분을 추가적으로 설명한다면,
as는 상대적, at는 절대적 좌표로 기억하시면 쉽습니다.
좀 더 풀어서 설명드리면, as는 이 명령어를 실행하는 대상을 의미하고,
at는 이 명령어를 받는 대상으로 생각하면 좋습니다.
@a = 모든 플레이어
@e = 모든 엔티티
@p = 가장 가까운 플레이어
@r = 무작위 대상
@s = 본인
이는 대상을 설정하는 방법인데, 해당 강의를 따라하다 보면 익숙해질 겁니다.
예로 다음과 같은 구문을 커맨드 블록에 작성해보겠습니다.
execute as @r run summon tnt
코드를 해석하면 다음과 같습니다.
실행 > 이 명령을 실행한 대상은 무작위로 > 소환 > TNT 입니다.
그렇다면 결과는 어떻게 될까요?
영상에서 보시면 명령어는 무작위 대상이므로, 서버에 혼자 있는 저로부터 실행되고 있습니다.
하지만 TNT 폭발은 커맨들 블록에서 발생하고 있지요.
즉, as는 상대적인 좌표는 이 명령을 실행시키는 대상을 의미하므로
예로 as에 @r인 무작위로 동작하게 됩니다.
그러면 여기서 @r이 아닌 @e를 실행하면 어떻게 될까요? (모든 엔티티)
예.. 명령을 실행하는 대상이 다수가 되므로, 이는 TNT를 한번에 여러개 소환하게 됩니다.
그렇다면 execute as로 실행하는 대상을 지정했다면,
TNT를 대상에게 실행하려면 어떻게 해야할까요?
네 아까 사용하지 않았던 at를 사용해야합니다.
여기서 as로 실행될 대상을 고르고 at @s를 진행한다면,
해당 상대적 대상으로부터 명령이 실행되며, TNT가 대상에게 폭발하게 됩니다.
그렇다면 위로 돌아가서 폭발하는 화살을 마저 만들어봅시다.
다음과 같이 값을 설정해주세요
execute as @e[type=arrow] at @s run summon tnt
앞에 슬래쉬( / )에 대해 여쩌볼 수 있는데 이는 붙여도 안붙여도 상관없습니다.
하단 옵션은 반복 / 무조건적 / 항상 활성화로 진행해주세요.
설명은 말 그대로 "해당 행위를 계속 반복한다 / 조건 없이 무조건 / 전기적 신호가 없어도 돌아가도록" 입니다.
이제 화살을 날려보겠습니다
네! 예상했던 결과대로 TNT가 신나게 터지고 있습니다.
하지만 이렇게 터진다면 렉이 심해질 거고,
하단에 명령어 뜨는 것도 안떳으면 좋겠지요?
2. 하단 로그 제거 (commandBlockOutput)
다음 명령어는 채팅창에 뜨는 로그를 제거하는 명령어입니다.
/gamerule commandBlockOutput false
소위 게임 룰 설정이지요.
복잡한 시스템 또는 게임을 만드는 과정에서 해당 방식으로 디버깅을 진행하는 경우가 있습니다.
3. 바닥에 닿을 경우 화살 제거
바닥에 닿으면 화살이 제거되었으면 좋겠지요?
날아가는 동안 터지고 바닥에 닿으면 사라지면 얼마나 좋을까요?
저희는 이제 조건을 통해 이 화살을 제거할 겁니다.
그것도 조건 블록! 정식 명칭은 '연쇄형 명령 블록' 입니다.
이 조건 블록은 절대 최상단에서 단독적인 수행이 불가능한 블록입니다.
이는 앞선 행위가 동작되었을 때 다음 동작을 수행할 수 있도록 하는 것이 목표이기 때문이지요.
그러면 이제 바닥에 화살이 닿는다면 사라지도록 해보겠습니다.
execute as @e[type=arrow,nbt={inGround:1b}] at @s run kill @s
전체적인 명령 구조는 아까와 큰 차이가 없습니다.
하지만 여기서 nbt라는 것이 생겼습니다.
마인크래프트/NBT/엔티티
※ JE 의 최신버전인 1.20.4 기준이며, 상하위 버전에 맞지 않는 태그가 있을 수 있습니다. 개요 개체(엔티
namu.wiki
NBT의 경우 여기서 확인할 수 있으니, 제작에 참고하시길 바랍니다.
설명으로 넘어와서,
이는 개체와 관련한 대상에게 붙일 수 있는 태그이며,
보통의 경우, 괄호 {} 안에, 해당되는 조건을 붙여서 사용할 수 있습니다.
{inGround:1b} 의 경우, 바닥에 화살이 닿는다는 조건이지요.
그리고 바닥에 닿으면 스스로 사라지도록 kill @s로 화살 본인을 죽여줍니다.
한번 실험 영상을 확인해보겠습니다.
이제 화살이 폭발하면서 날아가도록 설계되었습니다.
여러분들은 방금 이 폭발 화살을 만들면서 커맨드의 기초적인 구문에 대해 익히셨습니다.
쉬웠다면 다행이지만 어렵다면 갈 길이 멀었다는 겁니다.
4. 최종 코드
execute as @e[type=arrow] at @s run summon tnt
[반복 / 무조건 / 항상 활성화]
execute as @e[type=arrow,nbt={inGround:1b}] at @s run kill @s
[연쇄 / 조건적 / 항상 활성화]
다음 식으로 커맨드를 연결해주시면 영상을 따라 재현할 수 있습니다.
5. 과제
이 과정이 어렵지 않았다면, TNT가 바닥에 닿으면 폭발하고 사라지도록 제작해보세요.
첫 강좌인만큼 어렵지 않은 난이도입니다.
제작되는 목표는 아래 영상과 같습니다
그럼 여기서 강좌를 마치도록 하겠습니다.
해당 강좌에 대한 궁금증이나 어려운 부분이 있다면 댓글로 알려주시면 답변드리겠습니다
'마인크래프트 > 커맨드 강좌' 카테고리의 다른 글
마크 커맨드 강좌 #2 [2단 점프] (0) | 2024.05.13 |
---|