한눈에 보기
- 무엇: 코드는 ‘이벤트 블록’ 안에 있어야 실행된다 — 채팅명령어·플레이어 행동·사망·시작하면·무한반복, 이벤트 확장(블록·아이템·몹·메시지)
- 누구: 코드작성기를 처음 여는 학생(초등 고학년~중학생), 멀티플레이 코딩 수업을 하는 교사
- 몇 분: 개념·플레이어 이벤트 20분 + 이벤트 확장 예제 20~40분
- 결과물: 채팅명령어·행동으로 실행되는 나만의 코드, 친구의 채팅으로 실행되는 코드
코드는 ‘이벤트’가 있어야 실행된다

1 이벤트 블록 안에 코드 작성 예: 채팅명령어 0 → 에이전트를 내 위치로

2 ▶ 시작 버튼으로 게임에 돌아가기 코드작성기 화면이 열려 있는 동안은 모든 코드가 멈춤

3 채팅창(T)에 명령어 입력 0 입력 → 코드 실행
- 코드를 실행시키는 이벤트의 종류: 시작하면 · 채팅명령어 입력 · 플레이어 행동(걷기·아이템 사용) · 블록 설치·파괴 · 몹이 죽었을 때 · 무한반복
- 이벤트 밖에 놓인 블록은 회색으로 바뀌고 실행되지 않음(영상 화면: 이벤트에 끼우지 않은 에이전트 블록이 회색)
플레이어 이벤트: 채팅명령어·행동·아이템·사망
| 이벤트 블록(플레이어 범주) | 언제 실행 | 영상 예 |
| 다음 채팅명령어를 입력하면: "1" | 채팅창에 1 입력(숫자·한글 모두 가능, 입력이 쉬운 숫자를 많이 씀) | 채팅창에 말하기 "하이" / 다음 좌표로 텔레포트 ~0 ~10 ~0 (머리 위 10칸), ~0 ~-10 ~0 (10칸 아래) |
| 플레이어가 (걷고) 있으면 실행 | 그 동작을 하는 동안 | 나의 위치(~0 ~0 ~0)에 잔디 블록 놓기 → 걸을 때마다 블록(불·꽃도 가능) |
| on item (철제 삽) used | 그 아이템을 들고 우클릭 | 텔레포트(x 쪽 10칸, 자막 기준 · [6:49 장면](https://youtu.be/kRMxvobQ36E?t=409)) / 잔디 블록 놓기 |
| 플레이어가 사망하면 실행 · 화살을 쏘면 실행 | 죽었을 때 · 활을 당겼다 놓을 때 | 메시지 보여 주기 · 나의 위치에 잔디 블록 |

예제: 무술년 개부르기(채팅명령어 + 통통 튀기)
다음 채팅명령어를 입력하면: "개"
블록 채우기: 슬라임 블록 시작 ~-20 ~0 ~-20 끝 ~20 ~0 ~20 교체하기
플레이어가 [통통 튀어 다니고] 있으면 실행
소환 동물 늑대 를 위치 랜덤 위치 선택: ~-10 ~20 ~-10 ~ ~10 ~20 ~10
- 1 채팅명령어 ‘개’: 내 주변 바닥을 슬라임 블록으로 41×41칸 채우기
- 2 슬라임 위에서 튈 때마다: 하늘(20칸 위)에서 늑대가 떨어짐
- 소환 범위(-10
10)를 바닥(-2020)보다 좁게 → 늑대가 슬라임 위에 떨어져 다치지 않음 - 마인크래프트의 개 = 뼈다귀로 길들인 늑대. 서바이벌 모드에서 늑대를 때리면 무리가 공격

이벤트 규칙: 같은 이벤트는 하나만

같은 채팅명령어는 하나만 채팅명령어 1이 두 개면 나중 것이 회색(비활성)으로 바뀜 → 숫자·이름을 다르게

무한반복은 예외 여러 개를 동시에 둘 수 있음(타이머·감지 코드를 따로 작성)

‘시작하면’은 하나만 ▶ 시작 버튼을 누를 때 한 번 실행, 처음 설정을 모아 두기
시작하면 · 무한반복 · 백그라운드로 실행 비교
| 블록(반복 범주) | 언제 실행 | 영상 결과(에이전트를 플레이어에게 텔레포트 → 앞으로 이동) |
| 시작하면 실행 | 코드를 실행하는 순간 한 번 | 20칸 가고 끝 |
| 무한반복 실행 | 조건 없이 계속 반복 | 에이전트가 멈추지 않음 → 코드를 정지해야 멈춤 |
| 백그라운드로 실행 | “이 코드를 현재 코드와 함께 실행합니다” | 시작하면 실행과 비슷. 30칸 가는 동안 채팅명령어 1(블록 놓기)도 잘 실행됨 |


사망 이벤트: 왜 에이전트가 대신 말할까?
다음 채팅명령어를 입력하면: "0" → 사망횟수 에 0 저장
다음 채팅명령어를 입력하면: "1" → 죽이기 대상: 자기 자신 (@s)
다음 채팅명령어를 입력하면: "2" → 채팅창에 말하기: 연결한 문자열 "죽은 횟수:" 사망횟수
플레이어가 사망하면 실행
일시중지 (ms) ← 방법 1에서 맨 앞에 추가
사망횟수 값 1 증가
채팅창에 말하기: 연결한 문자열 "죽은 횟수:" 사망횟수
- 플레이어가 죽어 있는 동안에는 에이전트가 대신 실행 → 채팅에 에이전트 이름으로 “죽은 횟수”가 나옴(횟수는 정상으로 늘어남)
- 방법 1: 맨 앞에 일시중지 2초를 넣고 2초 안에 리스폰(블록 단위가 ms(1/1000초)라 2초는 2000 입력 — 2:06 화면의 ‘일시중지 (ms)’ 블록)
- 방법 2: 설정 → 게임 → 월드 옵션 ‘즉시 리스폰’ 켜기 → 죽자마자 살아나 플레이어가 직접 말함
- 누가 말하든 명령은 모두 실행되므로 게임 진행에는 상관없음


다른 플레이어가 실행하기 ①: /tell 로 보내기
- 블록: 플레이어 범주 ‘다른 플레이어가 "1" 라고 하면 실행’ → 코드작성기를 연결하지 않은 친구도 호스트(교사)의 코드를 실행
- 채팅창에 1만 치면 실행 안 됨(채팅명령어가 아님) → 귓속말 명령 /tell 로 코드작성기를 연 호스트에게 보내야 함
/tell <호스트 이름> 1(영상:/tell ssakspirit 1) 또는/tell @a 1(모든 플레이어에 호스트가 포함되므로 실행)- 보내는 플레이어가 운영자가 아니어도 실행됨(영상: 멤버·방문자 권한에서 시험)
- 공개 채팅만으로 실행하려면 → 아래 ‘메시지 이벤트’(이벤트 확장)


이벤트 확장: 블록·아이템·몹·채팅까지 감지
- 사용법: 확장 → ‘이벤트’ 추가 → 왼쪽 EVENTS 범주에서 이벤트 블록 꺼내기 / 일이 생길 때마다 count 1 → 변수에 더해 누적 / 명령으로 놓은 블록은 감지가 불안정(영상 테스트)
| 범주 | 감지하는 일(블록 이름) | 영상 예제 |
| 블록 | 부수기 on 블록 broken with tool count · 놓기 on 블록 placed with tool count 메서드 | 부순 블록·도구 이름과 개수를 채팅으로 |
| 게임플레이 | 하루가 끝날 때 on end of day | 낮이 끝나면 실행 |
| 아이템 | 사용 used · 획득 acquired · 떨어뜨리기 dropped | 에메랄드를 주우면 개수, 버리면 복사 |
| 몹 | 몹이 죽었을 때 on mob killed with weapon isMonster | 몬스터와 동물에 다른 메시지 |
| 플레이어 | 블록 위에서 튀어 오를 때 on player bounced height on 블록 | 몇 칸 튀었는지 알려 주기 |

이벤트 확장 예제 ①: 블록 부수기·놓기
on [블록] broken with [tool] [count]
부순 갯수 값 count 증가
채팅창에 말하기: 연결 (name of block tool) "으로" (name of block 블록) "을" 부순 갯수 "개 깼다!"
on [블록] placed with [tool] [count] [메서드]
만약 메서드 = block placed method entity 이면
설치 방법 에 "플레이어" 저장
아니면
설치 방법 에 "명령어" 저장
놓은 갯수 값 count 증가
채팅창에 말하기: 연결 (name of block 블록) "을" (name of block tool) "로" 설치 방법 … (뒷부분은 예제 코드에서 확인)
- 맨손으로 부수면 도구가 ‘알 수 없는 블록’, 삽·돌삽·괭이를 들면 도구 이름이 나옴
- 블록 종류 조건이 없어서 다이아몬드 블록에 이어 석영 블록을 놓아도 개수가 이어짐


이벤트 확장 예제 ②: 에메랄드 줍기·복사
on [item] acquired with [count] [메서드]
주운 갯수 값 count 증가
만약 item = 아이템(에메랄드) 이면
만약 메서드 = item acquired method picked up 이면
채팅창에 말하기: 연결 "에메랄드를 " 주운 갯수 "개 주웠다!"
on [item] dropped with [count]
만약 item = 아이템(에메랄드) 이면
채팅창에 말하기: 연결 "에메랄드가 복사되었다!"
블록이나 아이템 주기: 대상: 자기 자신 (@s) 에메랄드 수량 1
- 에메랄드 64개를 주우면 “에메랄드를 64개 주웠다!” / 하나 던지면 하나가 다시 들어오는 ‘복사’ 시스템
- 획득 방법(메서드): picked up · crafted · taken from chest · taken from ender chest · bought · anvil · smelted · brewed …


이벤트 확장 예제 ③: 몹 처치·튕긴 높이
on [mob] killed with [weapon] [isMonster]
만약 isMonster 이면
채팅창에 말하기: 연결 "악의 힘이 " (name of block weapon) "으로 처단!"
아니면
채팅창에 말하기: 연결 "무고한 생명체가 " (name of block weapon) "으로 희생..."
on player bounced [height] on [블록]
채팅창에 말하기: 연결 (name of block 블록) "에서 " height "칸 위로 올라갔다!"
- 돼지와 몬스터를 네더라이트 검으로 처치해 메시지 비교 / 몹 이름을 돌려주는 값도 있음(예제에서는 안 씀)
- 슬라임처럼 튕기는 블록 위에서 뛰면 “여덟 칸, 다섯 칸 …”처럼 높이가 나옴


다른 플레이어가 실행하기 ②: 메시지 이벤트
on [메시지] sent by [sender] to [receiver] with [messageType]
다음 채팅명령어를 실행: 메시지
다음 채팅명령어를 입력하면: "run"
채팅창에 말하기: "run을 실행했습니다."
- 누가 채팅을 보내면 메시지 · 보낸 사람(sender) · 받는 사람(receiver, 공개 채팅이면 없음) · messageType 을 알 수 있음
- 메시지를 ‘다음 채팅명령어를 실행’에 넣으면 → 다른 플레이어가 공개 채팅에 run 만 쳐도 코드작성기를 연 플레이어의 run 이 실행됨
- /tell 이 필요 없음(①과 비교). 단, 내가 직접 run 을 치면 메시지 이벤트와 채팅명령어에서 두 번 실행됨

메시지 이벤트 응용: “도와줘” 하면 달려가기
on [메시지] sent by [sender] to [receiver] with [messageType]
만약 (메시지 "도와줘" 가 포함되었는지 여부) 이면
대상 에 (플레이어 이름 sender) 저장
텔레포트: 타겟 대상: 자기 자신 (@s) 목적타겟 대상
- 친구가 채팅에 ‘도와줘’를 쓰면 → 보낸 사람을 변수 ‘대상’에 저장 → 코드를 실행하는 내가 그 친구에게 순간이동
- 친구는 코드작성기를 열지 않아도 됨 → 멀티플레이 협동 규칙 만들기 활동으로
- 예제 코드: 이벤트 확장 예제 코드

교사용 메모 · 이벤트 확장 더 알기
- 코드작성기 확장 목록에 ‘이벤트’가 추가됨(블록 이름은 아직 영어). 블록·게임플레이·아이템·몹·플레이어 범주로 거의 모든 일을 감지합니다.
- 대부분의 이벤트는 일이 일어날 때마다 count 1을 돌려줍니다 → ‘부순 개수’ 같은 변수를 1씩 늘려 누적하는 방식으로 씁니다.
- 블록 놓기의 방법(method)은 플레이어가 놓기(entity)·명령으로 놓기 두 가지인데, 영상 테스트에서 명령으로 놓은 블록은 감지가 잘 안 됐습니다.
- 아이템 획득 방법: 줍기(picked up)·조합(crafted)·상자에서 꺼내기(taken from chest)·구매(bought) 등. 맨손으로 부수면 도구 이름이 ‘알 수 없는 블록’으로 나옵니다.
- 아이템 사용 방법(item use method): use tool(삽으로 잔디를 우클릭해 길 만들기처럼 아이템 고유 기능) · equip armor · 공격하기 등. 영상에서도 더 테스트가 필요하다고 했습니다.
- 그 밖의 블록: on item equipped to slot with enchantments(착용·인챈트) · on item interacted with count 메서드 · on camera used isSelfie · 몹이 스폰될 때.
- 채팅 메시지 이벤트는 다른 플레이어가 공개 채팅에 쓴 글만으로 코드를 실행할 수 있어 멀티플레이 수업에 특히 유용합니다(기존 ‘다른 플레이어가 …라고 하면’은 /tell 로 보내야 실행됨 → ‘NPC와 AI 확장’ 페이지의 NPC 슬라이드 참고).

활동 가이드: 이럴 땐 이렇게
- 에이전트를 없애고 싶어요:
/kill @c로 없앨 수 있지만, 코드작성기를 열면 다시 나타남 → 플레이어 아래 100칸으로 보내기/tp @c ~0 ~-100 ~0 - 코드작성기가 늦게 열려요: 처음 실행할 때는 오래 걸릴 수 있음 / 강제 닫기 후 다시 열기 / 그래도 안 되면 초기화 또는 편집기 다시 선택
- 코드가 실행되지 않아요: 운영자 권한·치트가 켜져 있나? / ▶ 시작 버튼을 눌러 게임으로 돌아왔나? / 채팅명령어를 정확히 입력했나? 같은 이벤트가 겹치지 않나? / 명령을 연달아 입력하지 말고 천천히
- 평면 맵에서 일부 명령만 안 돼요: 만들 범위가 지면 4칸 아래 기반암에 걸렸는지 확인 → 조금 위로 올라가서 실행

평면 맵 주의: 기반암에 걸리면 실행 안 됨
| 채팅명령어 | 블록(화면 기준) | 기반암 아래·걸칠 때 |
| 1 · 3 | 에이전트를 플레이어에게 텔레포트 · 다음 좌표로 텔레포트 ~0 ~-10 ~0 | 됨(에이전트는 팔다리를 휘젓는 모습) |
| 2 | 블록 채우기 시작 ~0 ~0 ~0 끝 ~10 ~-10 ~10 교체하기 | 범위가 걸리면 아예 안 만들어짐 |
| 4 | 빌더 텔레포트 ~0 ~0 ~0 → 빌더 위치마크 생성 → 빌더 이동 방향 down 거리 10 → 빌더 위치마크부터 이동한 경로에 블록 놓기 | 경로가 걸리면 안 됨 |
| 5 | 원 모양 만들기 중심 ~0 ~0 ~0 반지름 10 방향 x 좌표(동쪽/서쪽) 교체하기 | 기반암 위쪽만 만들어짐 |


교사용 메모 · 예전 버전(코드 커넥션)에서 코드가 안 될 때
- 예전에는 코드 커넥션(Code Connection) 프로그램을 따로 열어 연결했습니다. 지금은 C키로 코드작성기를 엽니다(‘코드작성기 열기’ 페이지).
- 연결: 채팅창에
/code(“코드 커넥션 실행 및 연결을 시도합니다”). 더 예전 베타에서는/connect를 입력하고 MakeCode·Scratch·Tynker 중에서 골랐습니다. - 안 될 때 4가지: ① 메이크코드 창을 닫았다(창을 열어 둔 채 Alt+Tab으로 게임에 가기) ② 실행 버튼이 초록 ▶(정지 상태) — 빨간 ■ 모양일 때가 실행 중 ③ 명령을 한꺼번에 많이 입력했다(기다렸다가 천천히) ④ 월드를 끄면 연결도 끊김 → 새 월드에서 다시 연결.
- 베타 시절 영문 블록 ‘on chat command’는 스크래치의 ‘시작 버튼을 클릭했을 때’와 같은 역할이라고 소개했습니다(예: on chat command "chicken" → 100번 반복 → 머리 위 ~0 ~10 ~0 에 닭 소환).


