개인 자료란 (JE)

  서버 커뮤니티

Profile castle 대표칭호 없음

castleCT 6fed4fe18f5c429a90efcf59fdde7799

Profile

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

마인크래프트 명령어로 2단점프를 구현하자! (난이도: 중상!)

2020.04.22 조회 수 4808 추천 수 1
게임버전 모든버전 

먼저 어떻게 만들지 계획해 보겠습니다!


공중에서 쉬프트를 누르면 위로 이동한다.


여기서 필요한 것은!

  1. 공중인 것을 감지한다.
  2. 쉬프트를 감지한다.
  3. 1회만 작동한다.
  4. 낙하데미지를 받지 않게 한다.
  5. 이동한다

입니다.



1. 공중인 것을 감지하자!

그러기 위해서는 nbt 데이터인 

OnGround:0b     (공중에 있음을 감지한다.)

OnGround:1b     (바닥에 있음을 감지한다.)

을 사용하겠습니다


2. 쉬프트를 감지한다!

이건 못할 줄 알았습니다.

하지만 마인크래프트는 정말 많은 것이 가능했죠.

scoreboard 에는 쉬프트를 누른 시간을 감지하는 기준이 있었던 것입니다!

(전혀 몰랐던 것..)

minecraft.custom:minecraft.sneak_time

을 이용하여 쉬프트를 감지할 것입니다!


3. 1회만 작동한다.

이것은 태그를 이용하여, 작동시키면 태그를 주어 작동을 이미 했다는 것을 알릴겁니다.


4. 낙하데미지를 받지 않게 한다.

포션효과를 이용할 겁니다.


5. 이동한다.

공중부양을 이용하겠습니다!


대괄호와 중괄호는 대부분 묶어주는 역할입니다. 

(여기부터 여기까지가 xx 다! 라는 의미) 

괄호에 대한 설명은 없습니다.



제작을 시작해 보겠습니다 먼저 쉬프트를 감지하기 위한 스코어를 만듭니다!

/scoreboard objectives add shift minecraft.custom:minecraft.sneak_time

두번째로  (4)를 구현하기 위한 스코어를 만들어 줍니다.

/scoreboard objectives add time dummy


이제 커맨드를 본격적으로 제작합니다!

먼저 커맨드 블럭을 밑과같이 설치합니다.

bac6dada9b0e1f56cffccb0cda543438.png

커맨드 블럭의 설명은 하지 않겠습니다..


반복커맨드 (보라색) 부터 차례로 1~8 입니다.


1번 커맨드 블럭에 사용하는 명령어.

execute as @a[scores={shift=1..},nbt={OnGround:0b},tag=!f] run tag @s add d


공중에서 쉬프트를 누르면 2단점프를 시도한 플레이어라고 표시하기 위해 태그 d를 준다.

execute
실행한다.
as명령어 실행자로 설정한다.
@a[모든 플레이어 중
scores={
스코어
shift=1..}
shift가 1보다 크
,
nbt={
nbt 중
OnGround:0b}]
땅에 있지 않으
,

tag=
태그
!
가 아닌경우   (가지고 있지 않을 경우)
 f]태그 f.
run명령어를 실행한다.
tag태그 관련 명령어
@s명령어를 실행한 플레이어에게 (as로 설정함) (엔티티 전부 가능함, 대체로 플레이어 사용)
add추가한다
d태그 d를.

태그 d는 점프를 해야되는 개체를 말하는 것입니다.

태그 f는 점프후 마무리를 하고 있는 개체를 말하는 것 입니다.

f, d는 무었이든 상관 없습니다.

f를 end

d를 jump

처럼 바꿔도 됩니다. 하지만 밑의 모든 태그 f와 d를 자신이 설정한 태그로 바꿔주셔야 합니다.


밑에서는 tag={}나 scores={}, nbt={} 는 묶어서 한번에 설명하겠습니다!

위의 커맨드 설명만 풀어서 설명되어 있겠습니다.

묵여있는게 이해가 되지 않으면, 위의 명령어 설명을 다시 보면서 이해해 주세요!


2번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=d,scores={time=..1},tag=!f] run scoreboard players add @s time 2


점프를 했을 때 아직 2단 점프 실행이 안된 플레이어는 점프를 했다고 표현한다.

execute실행한다
as명령어 실행자로 설정한다.
@a모든 플레이어 중
[tag=d,
태그 d를 가지고 있으며
scores={time=..1},스코어 time이 1보다 작으며
tag=!f]태그 f를 가지고 있지 않은 플레이어.
run명령어를 실행한다.
scoreboard스코어보드 관련 명령어
players점수 조작
add더한다
@s명령어를 실행한 플레이어의
timetime 스코어에
22점

3번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=d,tag=!f,scores={time=1..}] run effect give @s minecraft:levitation 1 30 true


점프를 시도한 플레이어에게 공중부양 효과를 준다.

execute실행한다
as명령어 실행자로 설정한다.
@a모든 플레이어 중
[tag=d,
태그 d를 가지고 있으며
tag=!f,태그 f를 가지고 있지 않으며
scores={time=1..}]스코어 time이 1보다 큰 플레이어
run
명령어를 실행한다.
effect효과 관련 명령어 (포션효과)
give효과를 준다
@s명령어를 실행한 플레이어에게
minecraft:levitation공중부양
11초간
3030의 세기로
true포션 물방울 효과를 끈다.



4번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=d,tag=!f,scores={time=1..}] run tag @s add f


마무리 단계로 들어간다.

execute실행한다.
as명령어 실행자로 설정한다.
@a모든 플레이어 중
[tag=d,tag=!f,scores={time=1..}]3번 커맨드랑 설명이 같음.
run명령어를 실행한다.
tag태그 관련 명령어
@s명령어를 실행한 플레이어에게
add추가한다
f태그 f 를.

5번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=f] run tag @s remove d


마무리 (태그 f) 중인 플레이어에게서 태그 d 를 제거한다.

execute실행한다.
as명령어 실행자로 설정한다.
@a모든 플레이어 중
[tag=f]태그 f를 가진 플레이어.
run명령어를 실행한다.
tag태그 관련 명령어
@s명령어를 실행한 플레이어에게
remove제거한다
d태그 d를

6번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=f] run scoreboard players set @s time 0


time 스코어를 초기화 합니다.

execute실행한다.
as명령어 실행자로 설정한다.
@a모든 플레이어중
[tag=f]태그 f를 가진 플레이어.
run명령어를 실행한다.
scoreboard스코어보드 관련 명령어
players점수 조작
set설정한다
@s명령어를 실행한 플레이어의
timetime 스코어를
00으로

7번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=f] run scoreboard players set @s shift 0


위의 6번 커맨드블럭 명령어와 같고 단지 shift스코어를 초기화 할 뿐입니다.

execute-
as-
@a-
[tag=f]-
run-
scoreboard-
players-
set-
@s-
shiftshift 스코어를
0-

8번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=f] run effect give @s minecraft:resistance 1 100 true


낙사 대미지를 없애기 위해 저항을 줍니다.

execute실행한다.
as
명령어 실행자로 설정한다.
@a모든 플레이어중
[tag=f]태그 f를 가진 플레이어.
run명령어를 실행한다.
effect효과 관련 명령어
give효과를 준다.
@s명령어를 실행한 플레이어에게
minecraft:resistance저항을
11초간
100100의 세기로 (대충 낙하 대미지를 받지 않을 정도로 높은 값)
true포션 물방울 효과를 끈다.

9번 커맨드 블럭에 사용하는 명령어.

execute as @a[tag=f,nbt={OnGround:1b}] run tag @s remove f


바닥에 내려오면 마무리가 종료되고 초기화 됩니다.

execute실행한다.
as명령어 실행자로 설정한다.
@a모든 플레이어중
[tag=f,태그 f 를 가지며
nbt={OnGround:1b}]바닥에 있는 플레이어.
run명령어를 실행한다.
tag태그 관련 명령어
@s명령어를 실행한 플레이어에게
remove제거한다
f태그 f를

마지막으로

바닥에 있으면서 쉬프트를 눌렀을 때 shift 스코어를 0으로 바꿔주는 커맨드를 만듭니다.

404bb8a61b6821b76ee9c680bd51fa27.png

(이미 밑의 효과 커맨드를 적용하여 오른쪽의 커맨드 블럭이 처음 사진과 조금 다릅니다.)

(매끄러운돌 위에는 레드스톤 블럭을 설치하여 양쪽의 커맨드에 전기 신호를 줄 겁니다.)


맨 왼쪽에 추가된 반복 커맨드 블럭에 밑의 명령어를 적습니다.

execute as @a[scores={shift=1..},nbt={OnGround:1b}] run scoreboard players set @s shift 0

execute실행한다
as명령어 실행자로 설정한다.
@a모든 플레이어중
[scores={shift=1..},shift 스코어가 1보다 크고
nbt={OnGround:1b}]
바닥에 있는 플레이어.
run명령어를 실행한다.
scoreboard스코어보드 관련 명령어
players점수 조작
set설정한다
@s명령어를 실행한 플레이어의
shiftshift 스코어를
00으로

만약 이 커맨드를 전부 이해했다면, 중간에 어떻게 하면 파티클을 추가하고, 소리를 추가할 수 있는지 알 수 있을 겁니다.

밑의 명령어를 추가하면! 소리와 이펙트를 줄 수 있습니다.


밑의 명령어는 점프가 실행 될 때! 그 2단 점프를 실행한 사람의 위치 (execute at) 에서 작동해야 합니다!


particle cloud ~ ~ ~ 0.5 0 0.5 0 100

playsound minecraft:entity.ender_dragon.flap block @a ~ ~ ~ 10 1


명령어를 적용하면! (소리도 나지만 gif 라 소리가 없군요)

bf961060d025aa92f55c1be3682e86a9.gif


이상으로 2단 점프 커맨드로 만들기를 마칩니다!

(어우... 약 4500자를 썻네.. 다시는 이렇게 안써야지..)




11개의 댓글

마크러버
2020.04.22

우와

대단하시네요

castle
2020.04.22
@마크러버

원래는 쉬프트 감지가 되는지 몰라서 그냥 안만들려고 했는데, 되길레 만들어 봤습니다!

ChoMu_
2020.04.22

오오 좋네용

castle
2020.04.22
@ChoMu_

감사합니다!

castle
2020.04.22

음 영어로 검색해보면 발 밑에 베리어를 설치하는 방식으로 많이 하네요, 좋은 방법인 듯!

엄청나게 자세한 설명이군요!

castle
2020.04.22
@아이스틴

그러니까요.. 너무 힘드러...

리오채널
2020.04.23

허허 미치셨읍니까 휴먼

castle
2020.04.23
@리오채널

허허.. 처음에는 제가 커맨드를 할 때 커맨드를 저렇게 번역(?)해서 사용하는데, 처음 커맨드 하는 분들 있으면 쉽게 할 수 있을 거라고 생각해서 시작했다가 죽는줄 알았죠ㅎ

Ryan40ko
2020.06.28

따라 해 봤는데 잘 안돼요ㅠㅠ

castle
2020.07.01
@Ryan40ko

만약 서버라면 커맨드 블럭이 true 인지 확인한 뒤.

버전은 1.13 이상인지 확인해 주세요.

저는 1.14.4 에서 만들었기 때문에 같은 버전이면 가장 좋습니다.

 

/scoreboard objectives add shift minecraft.custom:minecraft.sneak_time

 

/scoreboard objectives add time dummy

 

위 커맨드를 먼저 채팅창으로 실행하고

 

[반복, 연쇄, 조건, 무조건] 설정과 커맨드 블럭의 위치 확인 까지 제대로 한 뒤에

 

execute as @a[scores={shift=1..},nbt={OnGround:0b},tag=!f] run tag @s add d

 

execute as @a[tag=d,scores={time=..1},tag=!f] run scoreboard players add @s time 2

 

execute as @a[tag=d,tag=!f,scores={time=1..}] run effect give @s minecraft:levitation 1 30 true

 

execute as @a[tag=d,tag=!f,scores={time=1..}] run tag @s add f

 

execute as @a[tag=f] run tag @s remove d

 

execute as @a[tag=f] run scoreboard players set @s time 0

 

execute as @a[tag=f] run scoreboard players set @s shift 0

 

execute as @a[tag=f] run effect give @s minecraft:resistance 1 100 true

 

execute as @a[tag=f,nbt={OnGround:1b}] run tag @s remove f

 

 

위 명령어들을 위에 글에 따라서 작성하고 마지막 반복 블럭 또한 설치후

 

execute as @a[scores={shift=1..},nbt={OnGround:1b}] run scoreboard players set @s shift 0

 

로 적혀있는데로 하면 됩니다.

 

 

위 설명글은 커맨드를 조금은 만져본 사람을 기준으로 작성하였습니다.

커맨드 블럭의 사용법과 기초명령어, 명령어를 실행하면 어떻게 실행되는지, 어떻게 활용하는지를 알고있는 것을 기본으로 작성하였습니다.

그렇기 때문에 커맨드를 전혀 사용할 줄 모른다면 만들기 힘들 수 있습니다.

뉴스 및 창작물
/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