개인 자료란 (JE)

  서버 커뮤니티

Profile castle 대표칭호 없음

castleCT 6fed4fe18f5c429a90efcf59fdde7799

Profile

강좌 자바 에디션(JE) 커맨드 응용

마인크래프트에 총을 만들자! (난이도: 높음!)

2020.04.23 조회 수 8157 추천 수 1
게임버전 모든버전 

(저번처럼 자세하게는 안쓸겁니다 빼액!!!)


마인크래프트로 총을 만들어 볼려고 합니다.

활이나 석궁보다 총알(화살)의 속도가 빠르며, 발사할 때 걸리는 시간도 낮게 만들 것입니다!


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


으로 스코어를 만들어 주세요!


5871c77280195a75dfd33746ff75cf68.png

먼저 커맨드를... 이렇게... 설치....하.... (총 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를 누르면!!!

화살이 날라갑니다!!


완성~




8개의 댓글

아이스틴
2020.04.23

허...이렇게 자세히 설명해주시면.....감사합니다! (한 글자 한 글자 모두 정독했습니다. ^^7)

castle
2020.04.23
@아이스틴

(이미 커맨드 잘하시는 분 아니셨나요ㅋㅋ) 감사합니다!

허두
2020.04.23

오오 이런 방법이...!

castle
2020.04.24
@허두

'엔티티 위치 - 플레이어 위치' 로 방향을 알아내는 방법은 정말 상상치 못했던 것!

허두
2020.04.24
@castle

그러니까요!

서재형
2020.07.17

와... 전 화살을 facing이랑 tp로 이동시킬것만 생각했는데... 이런 방법이있었군요...

핑크마스크
2021.04.07

이 방법이 화살을 여러번 쏘다가 엔티티한테 튕겨 나가거나 핑 안 좋은 서버 같은곳에서 Motion 을 쓰면 랙이 오지게 나기 때문에 조금 안좋아요.. ㅠㅠ

f키 말고 우클릭으로 하려면 어떻게하나요,

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3

/files/thumbnails/839/895/003/262x150.crop.jpg?20241006021227

SRV레코드는 보안도메인이 아닙니다. [서버오픈시 필독]

물귀신

2024-10-05

4