마인크래프트에서 파이썬을 이용해 특정 공간을 블럭으로 채우는 법을 설명한다.


마인크래프트에서 파이썬이 실행되기 위한 환경을 구축하는 방법은 이 블로그의 다음 페이지에 있다.



http://softwares.tistory.com/entry/%EB%A7%88%EC%9D%B8%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8%EC%97%90%EC%84%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%A4%ED%96%89%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0?category=665027


오늘은 실제로 간단한 프로그램을 작성한다.


우선, 위 링크에서처럼 설치하고 실행하면 특별한 설정이 없는 한 모든 파이썬 코드는 다음 폴더에서 작성되어야 한다.


%appdata%\.minecraft\mcpipy


윈도우키 + R을 눌러 실행창을 연 다음 위 글자들을 붙여넣고 실행하거나 탐색기 경로창에 복사해 넣으면 해당 폴더로 갈 수 있다.


폴더를 열어보면 이미 파일들이 많이 있다. 통상 코딩을 처음 배울 때 작성하는 파일인 helloworld.py도 있는데, 우리는 여기에다가 비슷한 이름의 파일을 만들어서 연습하자. 나는 hello.py로 만들었다.



꼭 필요한 코드


파이썬으로 작성한 프로그램이 마인크래프트에서 실행되려면 다음 두 줄이 기본적으로 들어있어야 한다.


import mcpi.minecraft as minecraft
mc = minecraft.Minecraft()

이렇게 작성하고 마인크래프트 세계에서 /py hello라 하면 아무 반응도 일어나지 않지만 정상적으로 파이썬 코드가 실행된 것이다. 만약 에러가 뜬다면 타이핑 된 내용을 다시 확인해보기 바란다.



메시지 띄우기

위 코드는 단지 파이썬 설정을 테스트하는 것에 지나지 않는다. 아무 일도 일어나지 않는다면 잘 된 것이다. 이제는 채팅창에 메시지를 띄우는 프로그램을 작성하자.

import mcpi.minecraft as minecraft
mc = minecraft.Minecraft()
mc.postToChat("Hello!!")

위와 같이 소스를 변경하고 py hello라고 하면 다음과 같이 화면 왼쪽에 hello라는 글자가 뜨는 것을 알 수 있다. 위 코드에서 hello 대신에 다른 것을 써도 되나, 한글을 쓰면 출력이 망가진다. 따라서, 영어만 사용하기 바란다.





블록 생성하기

채팅창에 글자나 띄우려고 마인크래프트를 하는 것은 아니니까 마인크래프트에 관련된 명령을 알아보자. 오늘은 특정 위치의 블록을 원하는 것으로 바꾸는 프로그램을 작성한다. 더이상 mc.postToChat("Hello")는 필요없지만 오늘에 한정해서 프로그램이 반응하는지를 확인하기 위해 남겨두기로 한다.


블록을 설정하려면 추가로 뭔가를 import 해야 하고, 블럭을 설정하는 명령이 필요하다. 다음 소스를 보자.


import mcpi.minecraft as minecraft
import mcpi.block as block
mc = minecraft.Minecraft()
mc.postToChat("Hello!!")
playerPos = mc.player.getPos()
mc.setBlock(playerPos.x, playerPos.y-1, playerPos.z, block.DIAMOND_ORE)

그려면 다음 그림과 같이 플레이어 발밑에 다이아몬드 원석이 생긴다.



위 소스코드에서 보이듯, 블록을 다루려면 2번줄이 반드시 필요하고, 5번줄은 플레이어의 현재 위치의 x, y, z좌표를 읽어들이는 것이다. 마지막으로, 6번줄에서는 현재 플레이어의 발밑에 다이아몬드 원석을 만든다. 




직육면체 영역을 원하는 블록으로 채우기

넓은 영역을 원하는 블록으로 채우려면 setBlocks 명령을 사용한다. 다음 소스를 보자.

import mcpi.minecraft as minecraft
import mcpi.block as block
mc = minecraft.Minecraft()
mc.postToChat("Hello!!")
playerPos = mc.player.getPos()
length = 10
mc.setBlocks(playerPos.x, playerPos.y, playerPos.z, playerPos.x+length-1, playerPos.y+length-1, playerPos.z+length-1,block.AIR)

이 코드를 실행하면 다음과 같이 일정지역이 공기로 채워진다. 즉, 블럭이 없어진다.



length로 블럭 종류를 지정할 공간을 제어하는데, setBlocks(a,b,c,d,e,f,kkk)(a,b,c)(d,e,f)를 직사각형의 양끝으로 하는 영역을 kkk란 블록으로 바꿔주는 역할을 한다.



사용가능한 블록의 종류

사용가능한 블록의 종류는 현재 작업폴더에서 mcpi폴더로 가서 block.py를 살펴보면 된다. 굉장히 많은데, 다음은 그 중 일부를 복사해 본 것이다.

AIR                 = Block(0)
STONE               = Block(1)
GRASS               = Block(2)
DIRT                = Block(3)
COBBLESTONE         = Block(4)
WOOD_PLANKS         = Block(5)
SAPLING             = Block(6)
BEDROCK             = Block(7)
WATER_FLOWING       = Block(8)
WATER               = WATER_FLOWING
WATER_STATIONARY    = Block(9)
LAVA_FLOWING        = Block(10)
LAVA                = LAVA_FLOWING
LAVA_STATIONARY     = Block(11)
SAND                = Block(12)
GRAVEL              = Block(13)
GOLD_ORE            = Block(14)
IRON_ORE            = Block(15)
COAL_ORE            = Block(16)
WOOD                = Block(17)
LEAVES              = Block(18)
GLASS               = Block(20)
LAPIS_LAZULI_ORE    = Block(21)
LAPIS_LAZULI_BLOCK  = Block(22)
SANDSTONE           = Block(24)
SANDSTONE_SMOOTH    = Block(SANDSTONE.id, 2)
SANDSTONE_CHISELED  = Block(SANDSTONE.id, 1)
BED                 = Block(26)
BED_BLOCK           = Block(26)
COBWEB              = Block(30)
GRASS_TALL          = Block(31)
WOOL                = Block(35)
FLOWER_YELLOW       = Block(37)
FLOWER_CYAN         = Block(38)
MUSHROOM_BROWN      = Block(39)
MUSHROOM_RED        = Block(40)
GOLD_BLOCK          = Block(41)
IRON_BLOCK          = Block(42)
STONE_SLAB_DOUBLE   = Block(43)
STONE_SLAB          = Block(44)
BRICK_BLOCK         = Block(45)
TNT                 = Block(46)
BOOKSHELF           = Block(47)
MOSS_STONE          = Block(48)
OBSIDIAN            = Block(49)
TORCH               = Block(50)
FIRE                = Block(51)
STAIRS_WOOD         = Block(53)
CHEST               = Block(54)
DIAMOND_ORE         = Block(56)
DIAMOND_BLOCK       = Block(57)
CRAFTING_TABLE      = Block(58)
FARMLAND            = Block(60)
FURNACE_INACTIVE    = Block(61)
FURNACE_ACTIVE      = Block(62)
DOOR_WOOD           = Block(64)
LADDER              = Block(65)
STAIRS_COBBLESTONE  = Block(67)
DOOR_IRON           = Block(71)
REDSTONE_ORE        = Block(73)
STONE_BUTTON        = Block(77)
SNOW                = Block(78)
ICE                 = Block(79)
SNOW_BLOCK          = Block(80)
CACTUS              = Block(81)
CLAY                = Block(82)
SUGAR_CANE          = Block(83)
FENCE               = Block(85)
GLOWSTONE_BLOCK     = Block(89)
BEDROCK_INVISIBLE   = Block(95)
STONE_BRICK         = Block(98)
GLASS_PANE          = Block(102)
MELON               = Block(103)
FENCE_GATE          = Block(107)
WOOD_BUTTON         = Block(143)
REDSTONE_BLOCK      = Block(152)
QUARTZ_BLOCK        = Block(155)


+ Recent posts