castleCT 6fed4fe18f5c429a90efcf59fdde7799
게임버전 | 모든버전 |
---|
(저번처럼 자세하게는 안쓸겁니다 빼액!!!)
마인크래프트로 총을 만들어 볼려고 합니다.
활이나 석궁보다 총알(화살)의 속도가 빠르며, 발사할 때 걸리는 시간도 낮게 만들 것입니다!
https://gaming.stackexchange.com/questions/339637/how-to-use-coordinate-systems-for-motion-nbt
위 사이트에서 플레이어 위치에서 바라보는 방향으로 아이템을 날리는 방법을 알게 되었습니다!
(바라보는 방향에 엔티티를 소환하고 ^^^ [엔티티 좌표 - 플레이어 좌표]로 계산해서 방향 알아내는 아이디어 멋있당..)
만들어 봅시다!
먼저
/scoreboard objectives add x dummy
/scoreboard objectives add y dummy
/scoreboard objectives add z dummy
/scoreboard objectives add time dummy
으로 스코어를 만들어 주세요!
먼저 커맨드를... 이렇게... 설치....하.... (총 24개 입니다)
반복 x1
체인 기본 x1
체인 조건 x 20
체인 기본 x2
하면 됩니다..
쨋든 왼쪽 반복 블럭 부터 차례로 1~24 입니다.
1번 커맨드 블럭
execute as @a[nbt={Inventory:[{id:"minecraft:diamond",Slot:-106b}]}] run tag @s add a
왼손에 다이아몬드를 들고 있는 플레이어에게 태그 a를 줍니다.
2번 커맨드 블럭
replaceitem entity @a[tag=a,nbt={Inventory:[{id:"minecraft:diamond",Slot:-106b}]}] weapon.offhand air 1
태그 a를 가지며 왼손에 다이아몬드를 들고있으면 왼손을 비웁니다.
3번 커맨드 블럭
give @a[tag=a] diamond
태그 a를 가진 플레이어에게 다이아몬드를 줍니다.
4번 커맨드 블럭
execute if entity @a[tag=a] run execute as @a[tag=a] at @s run summon minecraft:arrow ^ ^ ^1 {NoGravity:1b,pickup:2b,damage:1d,Tags:["b"],Color:-1}
만약 모든 플레이어중 태그 a를 가지고 있는 플레이어가 있다면 다음 명령어를 실행합니다.
태그a를 가진 플레이어를 명령어 실행자로 설정하고 명령어를 실행한 사람의 위치에서 다음 명령어를 실행합니다.
중력이 없고 크리에이티브 모드인 플레이어만 주울 수 있으며,
데미지가 1d (조절하면 데미지 바뀝니다. 2d 3d) 이며 태그 b를 가지고 색이 -1 (포션 물방울 효과 제거) 값을 가진 화살을
플레이어가 바라보는 방향 1칸 앞에 소환합니다.
5번 커맨드 블럭
execute as @e[tag=b,tag=!c] store result score @s x run data get entity @s Pos[0] 1000
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한뒤
명령어를 실행해서 나온 값을 명령어 실행자의 스코어 x 에 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 Pos[0] (x좌표) 값에 1000을 곱하여 출력합니다.
6번 커맨드 블럭
execute as @e[tag=b,tag=!c] store result score @s y run data get entity @s Pos[1] 1000
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한뒤
명령어를 실행해서 나온 값을 명령어 실행자의 스코어 y 에 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 Pos[1] (y좌표) 값에 1000을 곱하여 출력합니다.
7번 커맨드 블럭
execute as @e[tag=b,tag=!c] store result score @s z run data get entity @s Pos[2] 1000
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한뒤
명령어를 실행해서 나온 값을 명령어 실행자의 스코어 z 에 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 Pos[2] (z좌표) 값에 1000을 곱하여 출력합니다.
8번 커맨드 블럭
execute as @a[tag=a] store result score @s x run data get entity @s Pos[0] 1000
태그 a를 가진 플레이어를 명령어 실행자로 설정한 뒤
명령어를 실행해서 나온 값을 명령어 실행자의 스코어 x에 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 Pos[0] (x좌표) 값에 1000을 곱하여 출력합니다.
9번 커맨드 블럭
execute as @a[tag=a] store result score @s y run data get entity @s Pos[1] 1000
태그 a를 가진 플레이어를 명령어 실행자로 설정한 뒤
명령어를 실행해서 나온 값을 명령어 실행자의 스코어 y에 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 Pos[1] (y좌표) 값에 1000을 곱하여 출력합니다.
10번 커맨드 블럭
execute as @a[tag=a] store result score @s z run data get entity @s Pos[2] 1000
태그 a를 가진 플레이어를 명령어 실행자로 설정한 뒤
명령어를 실행해서 나온 값을 명령어 실행자의 스코어 z에 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 Pos[2] (z좌표) 값에 1000을 곱하여 출력합니다.
11번 커맨드 블럭
scoreboard players operation @e[tag=b,tag=!c] x -= @a[tag=a] x
스코어보드 계산을 시행합니다.
태그 b를 가지며 태그 c가 없는 엔티티의 x 스코어에서 태그 a를 가진 플레이어의 x 스코어를 뺀 뒤
태그 b를 가지며 태그 c가 없는 엔티티의 x스코어에 그 값을 저장합니다.
12번 커맨드 블럭
scoreboard players operation @e[tag=b,tag=!c] y -= @a[tag=a] y
태그 b를 가지며 태그 c가 없는 엔티티의 y 스코어에서 태그 a를 가진 플레이어의 y 스코어를 뺀 뒤
태그 b를 가지며 태그 c가 없는 엔티티의 y스코어에 그 값을 저장합니다.
13번 커맨드 블럭
scoreboard players operation @e[tag=b,tag=!c] z -= @a[tag=a] z
태그 b를 가지며 태그 c가 없는 엔티티의 z 스코어에서 태그 a를 가진 플레이어의 z 스코어를 뺀 뒤
태그 b를 가지며 태그 c가 없는 엔티티의 z스코어에 그 값을 저장합니다.
14번 커맨드 블럭
execute as @e[tag=b,tag=!c] at @s run tp @s ~ ~1.7 ~
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정하고 명령어 실행자의 위치를 명령어 실행위치로 설정한 뒤 명령어를 실행합니다.
명령어 실행자를 명령어 실행 위치에서 y좌표가 1.7 높은 곳으로 텔레포트 시킵니다.
15번 커맨드 블럭
execute as @e[tag=b,tag=!c] store result entity @s Motion[0] double 0.005 run scoreboard players get @s x
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한 뒤
명령어를 실행해서 나온 값을 명령어 엔티티의 모션[0] 에 더블 수치로 0.005를 곱하여 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 x 스코어를 출력합니다.
16번 커맨드 블럭
execute as @e[tag=b,tag=!c] store result entity @s Motion[1] double 0.005 run scoreboard players get @s y
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한 뒤
명령어를 실행해서 나온 값을 명령어 엔티티의 모션[1] 에 더블 수치로 0.005를 곱하여 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 y 스코어를 출력합니다.
17번 커맨드 블럭
execute as @e[tag=b,tag=!c] store result entity @s Motion[2] double 0.005 run scoreboard players get @s z
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한 뒤
명령어를 실행해서 나온 값을 명령어 엔티티의 모션[2] 에 더블 수치로 0.005를 곱하여 넣습니다. 다음 명령어를 실행합니다.
명령어 실행자의 z 스코어를 출력합니다.
18번 커맨드 블럭
execute as @e[tag=b,tag=!c] run tag @s add c
태그 b를 가지며 태그 c가 없는 엔티티를 명령어 실행자로 설정한 뒤 다음 명령어를 실행하비다.
명령어 실행자에게 태그 c를 줍니다.
19번 커맨드 블럭
scoreboard players reset @e x
모든 엔티티의 x 스코어를 초기화합니다
(혹시 몰라서 넣었습니다.)
20번 커맨드 블럭
scoreboard players reset @e y
모든 엔티티의 y 스코어를 초기화합니다
(혹시 몰라서 넣었습니다.)
21번 커맨드 블럭
scoreboard players reset @e z
모든 엔티티의 z 스코어를 초기화합니다
(혹시 몰라서 넣었습니다.)
22번 커맨드 블럭
tag @a[tag=a] remove a
태그 a를 가진 플레이어에게서 태그 a를 제거합니다.
23번 커맨드 블럭
scoreboard players add @e[type=arrow] time 1
화살 엔티티에게 time 스코어를 1점 올립니다.
24번 커맨드 블럭
kill @e[type=arrow,scores={time=40..}]
화살 엔티티중 time 스코어가 40 이상인 엔티티를 죽입니다.
커맨드 블럭을 작동시킵니다!
이제 다이아몬드를 들고 f를 누르면!!!
화살이 날라갑니다!!
완성~
아이스틴
2020.04.23허...이렇게 자세히 설명해주시면.....감사합니다! (한 글자 한 글자 모두 정독했습니다. ^^7)
castle
2020.04.23(이미 커맨드 잘하시는 분 아니셨나요ㅋㅋ) 감사합니다!
허두
2020.04.23오오 이런 방법이...!
castle
2020.04.24'엔티티 위치 - 플레이어 위치' 로 방향을 알아내는 방법은 정말 상상치 못했던 것!
허두
2020.04.24그러니까요!
서재형
2020.07.17와... 전 화살을 facing이랑 tp로 이동시킬것만 생각했는데... 이런 방법이있었군요...
핑크마스크
2021.04.07이 방법이 화살을 여러번 쏘다가 엔티티한테 튕겨 나가거나 핑 안 좋은 서버 같은곳에서 Motion 을 쓰면 랙이 오지게 나기 때문에 조금 안좋아요.. ㅠㅠ
밤길빵댕이조심해요
2024.02.14f키 말고 우클릭으로 하려면 어떻게하나요,