개인 자료란 (JE)

  서버 커뮤니티

Profile 허두 한마포 커뮤니티 매니저

HURDOO 2b370e4f33334fd5af2d1419cfe356a7

Profile

커뮤니티 소통 잡담하기

(지식인 답변용 글) 스톱워치와 타이머를 명령어로 구현해보자면...

2020.12.16 조회 수 4621 추천 수 4

지식인 활동을 하다가, 커맨드 관련 질문글을 하나 발견하였습니다.

https://kin.naver.com/qna/detail.nhn?d1id=2&dirId=20411&docId=375852192 

스톱워치와 타이머를 만드는 명령어 구문을 원하시더라고요.

답변을 해 드렸지만, 항상 답변 달던 시간이 저녁~새벽대이다 보니

너무 답변의 내용이 이해가 잘 가지 않는 문맥으로 작성되었었나 봅니다.

그래서 이곳에 한번 정리하고 갑니다.



0. 기본 작업


시작하기에 앞서, 먼저 기초적인 설정부터 하고 들어가도록 하겠습니다.


/scoreboard objectives add timer dummy "타이머"

[필수] 타이머 스코어보드를 생성합니다.


/scoreboard objectives setdisplay sidebar timer

[선택] 생성한 타이머 스코어보드를 화면 우측에 보이게 합니다.

화면 우측에서 사라지게 하려면 맨 뒤의 timer를 지우고 입력하시면 됩니다.



1. 스톱워치 만들기


a8af8a7ddea62e299a494204cfecf729.png

명령 블록은 이런식으로 설치해주시면 됩니다.


맨 왼쪽은 레드스톤 전원 공급원으로, 레드스톤 블럭 대신 레드스톤 횃불을 쓰셔도, 복잡한 회로를 만드셔도 됩니다.

레드스톤 신호만 잘 공급되면 됩니다.


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반복형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/scoreboard players add tick timer 1

스톱워치를 흐르게 하는 역할을 합니다.


두번쨰 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score tick timer matches 20.. run scoreboard players add second timer 1

20틱이 지났을 때 1초를 올려주는 역할을 합니다.


세번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score tick timer matches 20.. run scoreboard players set tick timer 0

1초를 올려주었을 때 틱을 다시 0으로 바꿔주는 역할을 합니다.

(조건적으로 바꾸고 execute if 부분을 없애도 되지만... 귀찮았습니다 헿ㅎ)


네번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score second timer matches 60.. run scoreboard players add minute timer 1

60초가 지났을 때 1분을 올려주는 역할을 합니다.


다섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score second timer matches 60.. run scoreboard players set second timer 0

1분을 올려주었을 때 초를 다시 0으로 바꿔주는 역할을 합니다.


여섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score minute timer matches 60.. run scoreboard players add hour timer 1

60분이 지났을 때 1시간을 올려주는 역할을 합니다.


일곱번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score minute timer matches 60.. run scoreboard players set minute timer 0

1시간을 올려주었을 때 분을 다시 0으로 바꿔주는 역할을 합니다.


스톱워치를 멈출 때는 그냥 반복형 명령 블록에 레드스톤이 공급되지 않도록

레드스톤 공급원을 부수던지, 회로를 끊던지 하는 방법으로 신호를 차단해주시면 됩니다.



2. 스톱워치 초기화하기


사실 이번 단계에서 나오는 명령어들은 그냥 하나하나 채팅창에서 실행시키셔도 됩니다.

그치만 매번 채팅창에 복붙하기 귀찮으신 분은


2ad7710c056899359e4f929b0c4f63f2.png

이런 식으로 명령 블록을 설치해주세요.

맨 왼쪽에는 1회 레드스톤 신호가 갈 수 있는 요소를 달아주세요.

버튼, 레버, 발판 정도가 가장 무난하겠죠?


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반응형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/scoreboard players set tick timer 0

틱을 0으로 초기화해줍니다.


두번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players set second timer 0

초를 0으로 초기화해줍니다.


세번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players set minute timer 0

분을 0으로 초기화해줍니다.


네번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players set hour timer 0

시를 0으로 초기화해줍니다.



3. 타이머 만들기


3aa74fca7b51d7f5e604200f6dae0ee3.png

명령 블록은 이런식으로 설치해주시면 됩니다.


맨 왼쪽은 레드스톤 전원 공급원으로, 레드스톤 블럭 대신 레드스톤 횃불을 쓰셔도, 복잡한 회로를 만드셔도 됩니다.

레드스톤 신호만 잘 공급되면 됩니다.


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반복형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/execute if score tick timer matches ..0 run scoreboard players set tick timer 20

틱이 0일 때 20으로 초기화해줍니다.


두번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score tick timer matches 20 run scoreboard players remove second timer 1

틱이 초기화되었을 때 초에서 1을 빼줍니다.


세번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score second timer matches ..-1 run scoreboard players set second timer 60

초가 0보다 작아졌을 때 60으로 초기화해줍니다.


네번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score second timer matches 60 run scoreboard players remove minute timer 1

초가 초기화되었을 때 분에서 1을 빼줍니다.


다섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score second timer matches 60 run scoreboard players remove second timer 1

초의 오차를 없애기 위해 초가 초기화되었을 때 초에서 1을 빼줍니다.


여섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score minute timer matches ..-1 run scoreboard players set minute timer 60

분이 0보다 작아졌을 때 60으로 초기화해줍니다.


일곱번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score minute timer matches 60 run scoreboard players remove hour timer 1

분이 초기화되었을 때 시에서 1을 빼줍니다.


여덟번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score minute timer matches 60 run scoreboard players remove minute timer 60

분의 오차를 없애기 위해 분이 초기화되었을 때 분에서 1을 빼줍니다.


아홉번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score hour timer matches ..-1 run <레드스톤 공급을 끊는 명령어>

타이머가 끝났을 때 레드스톤 공급을 끊어 타이머를 멈춥니다.

<레드스톤 공급을 끊는 명령어> 에는 어떻게든 반복형 명령 블록에 레드스톤 신호를 끊게 하는 명령어를 적으시면 됩니다.

예를 들어, 반복형 명령 블록 위에 레드스톤 블록을 설치하여 레드스톤 신호를 공급하고 있었다면

반복형 명령 블록 위의 위치를 /setblock 명령어로 공기(minecraft:air)로 바꾸시면 됩니다.


열번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players remove tick timer 1

타이머가 흘러가게 해줍니다.


중간에 타이머를 멈추실 때에는 그냥 레드스톤 신호를 차단해주시면 됩니다.



4. 타이머 초기화하기


사실 이번 단계에서 나오는 명령어들은 그냥 하나하나 채팅창에서 실행시키셔도 됩니다.

그치만 매번 채팅창에 복붙하기 귀찮으신 분은


2ad7710c056899359e4f929b0c4f63f2.png

이런 식으로 명령 블록을 설치해주세요.

맨 왼쪽에는 1회 레드스톤 신호가 갈 수 있는 요소를 달아주세요.

버튼, 레버, 발판 정도가 가장 무난하겠죠?


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반응형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/scoreboard players set tick timer 0

틱을 0으로 초기화해줍니다.


두번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players set second timer <초>

초를 <초>로 초기화해줍니다.

<초> 부분에는 타이머에서 초 부분으로 설정할 값을 적어주시면 됩니다.


세번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players set minute timer <분>

분를 <분>으로 초기화해줍니다.

<분> 부분에는 타이머에서 분 부분으로 설정할 값을 적어주시면 됩니다.


네번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/scoreboard players set hour timer <시>

시를 <시> 로 초기화해줍니다.

<시>부분에는 타이머에서 시 부분으로 설정할 값을 적어주시면 됩니다.



5. 타이머가 작동되고 있는 상태에서 남은 시간이 일정 이하이면 시간 표시 후 타이머 종료



acfa1bca5cf0bd2932d9f4ee82d7bdc2.png

이런 식으로 명령 블록을 설치해주세요.

맨 왼쪽에는 1회 레드스톤 신호가 갈 수 있는 요소를 달아주세요.

버튼, 레버, 발판 정도가 가장 무난하겠죠?


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반응형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/execute if score hour timer matches ..<시> if score minute timer matches ..<분> if score second timer matches ..<초> run title @a title "<메세지>"

특정 시간 이하이면 메세지를 출력합니다.

<시> <분> <초> 에는 각각 기준이 되는 시, 분, 초를 넣어주시고, <메세지> 부분에 타이틀에 뜨게 할 메세지를 입력하시면 됩니다. 


두번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if score hour timer matches ..<시> if score minute timer matches ..<분> if score second timer matches ..<초> run <레드스톤 공급을 끊는 명령어>

특정 시간 이하이면 타이머를 멈춥니다.

<시> <분> <초> 에는 각각 기준이 되는 시, 분, 초를 넣어주시고, <레드스톤 공급을 끊는 명령어> 부분에 아까 3단계에서도 썻던 타이머의 레드스톤 공급을 끊는 명령어를 다시 한 번 적어주시면 됩니다.



6. 화면 상단 보스바에 시간 예쁘게 띄우기


우선 다음의 명령어들을 채팅창에 입력해주세요. 기본 설정입니다.

/bossbar add minecraft:timer "타이머"

/bossbar set minecraft:timer visible true



ea13c0ae8d869ce470fa3f0f5d33d9ca.png

명령 블록은 이런식으로 설치해주시면 됩니다.


맨 왼쪽은 레드스톤 전원 공급원으로, 레드스톤 블럭 대신 레드스톤 횃불을 쓰셔도, 복잡한 회로를 만드셔도 됩니다.

레드스톤 신호만 잘 공급되면 됩니다.


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반복형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/bossbar set minecraft:timer name [{"score":{"objective":"timer","name":"hour"}},"시 ",{"score":{"objective":"timer","name":"minute"}},"분 ",{"score":{"objective":"timer","name":"second"}},"초"]

보스바의 이름을 타이머의 상태로 바꿔줍니다.


두번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/bossbar set minecraft:timer players @a

보스바를 모두에게 보이게 합니다.









7개의 댓글

아이스틴
2020.12.16

추천을 누를 수 밖에 없는 글이네요

허두
2020.12.16
@아이스틴

와우 감사합니다ㅎㅎ

허두
2020.12.17

7. 타이머가 작동되고 있는 상태에서 [+ 남은 시간이 일정 이상이면 타이머 초기화 후 모두 순간이동] (기능 추가)


91f624449a2c379ce9960f4f10f6fd3b.png

5단계의 장치를 지우고

이런 식으로 명령 블록을 설치해주세요.

맨 왼쪽에는 1회 레드스톤 신호가 갈 수 있는 요소를 달아주세요.

버튼, 레버, 발판 정도가 가장 무난하겠죠?


명령 블록은 맨 왼쪽에서부터 세기 시작합니다.

첫번째 명령 블록은 반응형 명령 블록 / 무조건적 / 레드스톤 필요 상태입니다.

/execute if score hour timer matches ..<시> if score minute timer matches ..<분> if score second timer matches ..<초> run summon armor_stand ~ ~ ~ {NoGravity:1b,Invulnerable:1b,Invisible:1b,Marker:1b,Tags:["less"]}

특정 시간 이하를 감지합니다.

<시> <분> <초> 에는 각각 기준이 되는 시, 분, 초를 넣어주시면 됩니다.


두번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute if @e[type=armor_stand,tag=less] run title @a title "<메세지>"

특정 시간 이하이면 메세지를 출력합니다.

<메세지> 부분에 타이틀에 뜨게 할 메세지를 입력하시면 됩니다.


세번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute unless @e[type=armor_stand,tag=less] run scoreboard players set tick timer 0

특정 시간 이상이면 타이머의 틱을 초기화합니다.


네번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute unless @e[type=armor_stand,tag=less] run scoreboard players set second timer 0

특정 시간 이상이면 타이머의 초를 초기화합니다.


다섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute unless @e[type=armor_stand,tag=less] run scoreboard players set minute timer 0

특정 시간 이상이면 타이머의 분을 초기화합니다.


여섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute unless @e[type=armor_stand,tag=less] run scoreboard players set hour timer 0

특정 시간 이상이면 타이머의 시를 초기화합니다.


일곱번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

/execute unless @e[type=armor_stand,tag=less] run tp @a <좌표>

특정 시간 이상이면 모두를 <좌표> 로 이동시킵니다.

<좌표> 부분에는 이동될 좌표를 x y z 형식으로 적어주시면 됩니다.


여섯번째 명령 블록은 연쇄형 명령 블록 / 무조건적 / 항상 활성화 상태입니다.

<레드스톤 공급을 끊는 명령어>

특정 시간 이하이면 타이머를 멈춥니다.

<레드스톤 공급을 끊는 명령어> 부분에 아까 3단계에서도 썼던 타이머의 레드스톤 공급을 끊는 명령어를 다시 한 번 적어주시면 됩니다.


Gr_
2022.03.06

이런 분들 볼 때마다 정말 대단하다는 생각밖에 안 드네요.. 마린이 감명깊게 보고 갑니다..

허두
2022.04.30
@Gr_

이런 댓글들 볼 떄마다 힘이 납니다! 감사합니다 :>

탠저린
2022.11.13

스톱워치 커맨드를 액션바에 나타내고싶은데 어떻게하나요

허두
2022.12.15
@탠저린

/title @a actionbar [{"score":{"objective":"timer","name":"hour"}},"시 ",{"score":{"objective":"timer","name":"minute"}},"분 ",{"score":{"objective":"timer","name":"second"}},"초"]

이 명령어를 반복형 명령 블록에 넣어 실행해주세요!