마인크래프트 강좌/명령어 강좌

마인크래프트 질문 - 보고있는 대상에게 명령어가 발동되게 해보자

Potan 2021. 3. 26. 15:39
반응형

 

우선 마인크래프트에서는 바라보고 있는 대상을 감지할 수 있는 요소가 존재하지 않습니다.

즉, 우회하는 방법을 사용해야합니다.

 

여기에는 데이터팩의 함수가 꼭 필요합니다. 우선 데이터팩을 만들어주세요. 모른다면 여기로

potangaming.tistory.com/275

 

마인크래프트 데이터팩 강좌 [2] - 데이터 팩 만들기

안녕하세요 Potan입니다. 이번 시간에는 데이터팩을 제작해보겠습니다. 마인크래프트 자바에디션 1.16.4를 바탕으로 제작되었습니다. 마인크래프트 세이브파일의 위치 찾기와 같은 기본적인 요소

potangaming.tistory.com

 

 

우선 함수가 하나 필요합니다.

#제대로 작동하는지 확인하기 위한 파티클입니다. (1)
particle crit ~ ~ ~ 0 0 0 0 1
#함수를 이용하는 이유입니다. (2)
execute if block ~ ~ ~ air positioned ^ ^ ^0.5 run function potan:raycast #이 함수를 다시 실행시켜주세요

(1) 함수가 제대로 작동하는지 확인하기 위한 파티클입니다. 작성이 끝난뒤 지울 예정입니다.

(2) 함수의 작동위치로부터 0.5블럭 이동후 함수를 다시 실행합니다. 이를 통해 계속해서 0.5블럭씩 이동하면서 함수가 실행됩니다.

이제 실행시켜봅시다. 이때 꼭 execute에서 at 과 anchored eyes를 통해 커맨드의 실행위치를 눈으로 조정해주셔야 정확하게 감지할 수 있습니다.

execute as @e[type=minecraft:armor_stand] at @s anchored eyes run function potan:raycast (함수이름은 직접 바꿔주세요)
(보여드리기 위해 아머스탠드를 대상으로 했습니다.)

보시다시피 아머스탠드의 시야로 파티클이 쭉 나가는 모습입니다.

만약 위의 as 부분을 바꾸면 그 사람의 시야에 맞추어 날아갑니다.

또한 if block ~ ~ ~ air 로 인해 벽에 막히면 더 이상 이어지지 않습니다.

 

그러면 이제 엔티티를 맞추면 명령어가 실행되게 해봅시다. 이때 함수가 하나 더 필요합니다.

#감지함수

#제대로 작동하는지 확인하기 위한 파티클입니다.
particle crit ~ ~ ~ 0 0 0 0 1

#해당 함수의 위치에 엔티티가 있다면 그 엔티티에게 공중부양 버프를 부여합니다. #tag=!start로 시전자는 부여되지 않게 바꿉니다.
execute as @e[dx=0,tag=!start] positioned ~-0.99 ~-0.99 ~-0.99 if entity @s[dx=0] run effect give @s levitation 1 1 true

#함수를 이용하는 이유입니다.
execute if block ~ ~ ~ air positioned ^ ^ ^0.5 run function potan:raycast
#시작함수
tag @s add start
function potan:raycast
tag @s remove start

이제는 위의 시작 명령어에서 감지함수를 바로 실행시키는 것이 아닌 시작함수를 통해 시작시키면 됩니다.

우선 시작함수를 통해 대상에게 태그가 부여됩니다. 그후 감지함수가 실행된뒤 태그가 다시 삭제되는데 그때는 이미 감지함수가 플레이어를 떠난 이후이므로 괜찮습니다.

감지함수는 계속 앞으로 이동하며 앞을 체크하는데 그 위치에 엔티티가 있다면 그 엔티티에게 공중부양 버프를 부여합니다.

만약 플레이어만 대상으로 한다면 두번째 명령어의 @e를 @a로 변경해주세요.

만약 엔티티에 닿으면 더이상 진행되지 않게 하고싶다면 unless entity @e[dx=0,tag=!start]를 붙여주세요. (플레이어 대상이면 @a)

 

이제 실행시켜 봅시다. 저의 경우 인벤토리 감지를 통해 ON/OFF가 가능하게 해보았습니다.

execute as @a[nbt={Inventory:[{id:"minecraft:diamond_sword", Slot:-106b}]}] at @s anchored eyes run function potan:start (함수이름은 직접 바꿔주세요)

해당 명령어를 반복 실행시키며 테스트 해보시면 잘됩니다.

 

※ 해당 게시글은 Cloud Wolf님의 유튜브 영상을 바탕으로 제작되었습니다.

www.youtube.com/watch?v=fGlJpli5cYc&ab_channel=CloudWolf

 

반응형