마인크래프트 게임 안에서 블록을 만든다거나 게임 플레이어의 위치를 변경하는 등과 같은 프로그램을 만들기 위해서는 마인크래프트 파이썬 API를 이용해야합니다. 즉, API에서 제공하는 기능만을 파이썬 프로그램으로 구현할 수 있는 것입니다.
그래서, 이번에는 어떤 API들이 있는지 살펴보도록 하겠습니다.
마인크래프트 파이썬 API 구조
파이썬 파일 |
클래스 |
설명 |
|
minecraft.py |
Minecraft |
camera |
카메라 각도와 위치를 변경 |
player |
플레이어의 위치 가져오기 및 변경하기 |
||
entity |
entity들의 위치를 가져오기 및 변경하기 |
||
events |
게임에서 발생하는 이벤트 가져오기 |
||
block.py |
Block |
블록 정의(특히 블록 타입) |
|
event.py |
BlockEvent |
블록 이벤트 정의 |
|
vec3.py |
Vec3 |
3차원 벡터 관리(x, y, z 좌표) |
|
connection.py |
- |
API에서 사용되는 내부 모듈 |
|
util.py |
- |
API에서 사용되는 내부 모듈 |
호환성
모든 함수와 블록 타입이 모든 버전의 API에서 가능하지 않습니다. 크게 PC버전과 라즈베리파이 버전으로 나뉘는데 다음과 같은 아이콘으로 표기하도록 하겠습니다.
|
Minecraft: Pi 버전에서 사용 가능 |
|
RaspberryJuice(PC 버전)에서 사용 가능 |
Minecraft 클래스
마인크래프트 게임과 상호작용하는 메인 클래스로서 게임과의 연결, 게임 플레이어에 대한 변경, 블록에 대한 변경 그리고 이벤트 감지 등과 같은 함수들을 포함하고 있습니다.
.create(address = "localhost", port = 4711) → Minecraft object |
|
|
▶ Minecraft(address, port)에 연결을 생성 #use default address and port mc = minecraft.Minecraft.create() #specify ip address and port mc = minecraft.Minecraft.create("192.168.1.1", 4711) |
.getBlock(x, y, z) → id:int |
|
|
▶ 주어진 x, y, z 좌표값에 위치한 블록 타입 가져오기 #retrieves the block type for the block at 0,0,0 blockType = mc.getBlock(0,0,0) |
.getBlocks(x0, y0, z0, x1, y1, z1) → [id:int] |
|
▶ 주어진 2개의 좌표 사이에 존재하는 블록들을 리스트로 가져오기 #get the block id's in a cuboid |
|
.getBlockWithData(x, y, z) → Block |
|
|
▶ 주어진 좌표 x, y, z에 위치한 블록 데이터 가져오기 #retrieves a block object for the block at 0,0,0 |
.setBlock(x, y, z, blockType, blockData) |
|
|
▶ 주어진 좌표 x, y, z에 data 타입의 블록 생성하기 #sets a block at an x, y, z co-ordinate to a particular type |
.setBlocks(x0, y0, z0, x1, y1, z1, blockType, blockData) |
|
|
▶ 2개의 좌표 사이 공간을 주어진 블록 타입의 블록들로 가득 채우기 #sets many blocks at a time, filling the gap between 2 sets of x, y, z co-ordinates |
.getHeight(x, z) → int |
|
|
▶ 높이(y 좌표값) 구하기 y = mc.getHeight(0,0) |
.getPlayerEntityIds() → [id:int] |
|
|
▶ 접속한 게임 플레이어들의 entity ID값들 가져오기 #get the entity id's of the players connected to the game |
.getPlayerEntityId(playerName) → [id:int] |
|
▶ 주어진 이름의 플레이어에 대한 entity ID 가져오기 #get the entity id of a name player 'martinohanlon' |
|
.saveCheckpoint() |
|
▶ world를 복구할 수 있는 체크포인트 저장하기 mc.saveCheckpoint() |
|
.restoreCheckpoint() |
|
▶ 체크포인트 상태의 world로 복구하기 |
|
.postToChat(message) |
|
|
▶ 게임 체팅 창에 메세지를 포스팅 mc.postToChat("Hello Minecraft World") |
.setting(setting, status) |
|
▶ keys: world_immutable, nametags_visible #change world immutable to True |
Minecraft.player 클래스
.getPos() |
|
|
▶ 플레이어의 좌표값을 실수값인 Vec3 타입으로 가져오기 #get players position as floats playerPos = mc.player.getPos() |
.setPos(x, y, z) |
|
|
▶ 플레이어의 위치를 좌표값 (x, y, z)로 이동하기 #get players position as floats mc.player.setPos(0.0,0.0,0.0) |
.getTilePos() |
|
|
▶ 플레이어가 현재 서 있는 tile의 위치 가져오기 #get the position of the tile the players is on playerTile = mc.player.getTilePos() |
.setTilePos(x, y, z) |
|
|
▶ 플레이어를 tile의 위치로 이동하기 #set the position of the tile the player is on mc.player.setTilePos(0,0,0) |
.setting(setting, status) |
|
▶ keys: autojump #change the autojump setting to True mc.player.setting("autojump", True) |
|
.getRotation() → [angle:float] |
|
▶ 플레이어의 회전 각도(0 ~ 360) 가져오기 #get the rotation of the player angle = mc.player.getRotation() print angle |
|
.getPitch() → [pitch:float] |
|
▶ 플레이어에 대한 피치 각도(-90 ~ 90) 가져오기 #get the pitch for the player pitch = mc.player.getPitch() print pitch |
|
.getDirection() → [Vec3] |
|
▶ 플레이어의 방향 벡터 가져오기 #get the player's direction direction = mc.player.getDirection() print direction |
Minecraft.entity 클래스
entity 함수들은 게임에서 entity 또는 플레이어들과 상호작용하기 위해서 .getPlayerEntityIds() 함수와 함께 사용합니다. 이 함수들은 멀티플레이어 게임에서 유용합니다.
#get the entity id's of the players connected to the game
entityIds = mc.getPlayerEntityIds()
1stEntityId = entityIds[0]
2ndEntityId = entityIds[1]
...
.getPos(entityId) |
|
|
#get first entity position as floats |
.setPos(entityId, x, y, z) |
|
|
#set the players position as floats |
.getTilePos(entityId) |
|
|
#get the position of the tile the entity is on |
.setTilePos(entityId, x, y, z) |
|
|
#set the position of the tile the entity is on |
.getRotation(entityId) → [angle:float] |
|
#get the rotation of an entity angle = mc.entity.getRotation(entityId) print angle |
|
.getPitch(entityId) → [pitch:float] |
|
#get the pitch for an entity |
|
.getDirection(entityId) → [Vec3] |
|
#get an entities direction direction = mc.entity.getDirection() print direction |
Minecraft.camera 클래스
.setNormal(entityId) |
|
▶ 카메라 모드를 normal 마인크래프트 뷰로 설정하기 #set camera mode to normal for a specific player |
|
.setFixed() |
|
▶ 카메라 모드를 fixed(고정) 뷰로 설정하기 #set camera mode to fixed |
|
.setFollow(entityId) |
|
▶ 카메라 모드를 entity를 따르도록 설정하기 #set camera mode to follow for a specific player |
|
.setPos(x, y, z) |
|
▶ 카메라 entity 위치를 x, y, z 좌표로 설정하기 #set camera position to a specific position of x, y, z |
Minecraft.events 클래스
.pollBlockHits() → [BlockEvent] |
|
|
▶ 블록 깨뜨리기(검에 의해서 발생) #get block event hits that have occured since the last time the function was run blockEvents = mc.events.pollBlockHits() for blockEvent in blockEvents: print blockEvent |
.pollChatPosts() → [ChatEvent] |
|
#get chat post events (messages) since the last time the function was run chatEvents = mc.events.pollChatPosts() for chatEvent in chatEvents: print chatEvents |
|
.clearAll() |
|
|
▶ 모든 과거 이벤트 삭제하기 #clear all events that have happened since the events where last got |
'Python with Minecraft' 카테고리의 다른 글
#6. 미로 만들기 (0) | 2017.11.14 |
---|---|
#5. 가장 심플한 모양의 집짓기 (0) | 2017.11.14 |
#4. 큐브 형태의 조형물 만들기 (0) | 2017.11.13 |
#3. 게임 플레이어 이동시키기(Teleport) (0) | 2017.11.13 |
#1. 설치하기(윈도우 PC) (0) | 2017.11.12 |