Minecraft¶
Use Python to communicate and interact with the Minecraft world.
Recipes¶
##
# Minecraft quick start
#
# API reference: https://www.stuffaboutcode.com/p/minecraft-api-reference.html
# Block type examples
# WOOD, has types
# WOOL, has colours
# WATER_STATIONARY
# WATER
# GOLD_ORE
# GOLD_BLOCK
# DIMOND_BLOCK
# NETHER_REACTOR_CORE
# TNT (1 to set active)
# LAVA
# WOOL colours for reference:
wool_colour = {
'white' : 0,
'orange' : 1,
'magenta' : 2,
'light_blue' : 3,
'yellow' : 4,
'lime' : 5,
'pink' : 6,
'grey' : 7,
'light_grey' : 8,
'cyan' : 9,
'purple' : 10,
'blue' : 11,
'brwon' : 12,
'green' : 13,
'red' : 14,
'black' : 15,
}
# Import packages
from mcpi.minecraft import Minecraft
from mcpi import block
from time import sleep
# Create a connection between Python and Minecraft
mc = Minecraft.create()
# Post to chat
mc.postToChat("Hello world")
# Get position of Steve
# x -> forward/backward, z -> left/right, y -> up/down
# Using a Vec3 of floats (vector with float values)
position = mc.player.getPos()
print(f'position.x is:{position.x}, position.y is: {position.y}, position.z is: {position.z}')
# Using individual variables
x, y, z = mc.player.getPos()
print(f'x is:{x}, y is: {y}, z is: {z}')
# Move Steve to a location in the world (up in the air)
x, y, z = mc.player.getPos()
mc.player.setPos(x, y+100, z)
# Set block below Steve (y-1)
x, y, z = mc.player.getPos()
mc.setBlock(x, y-1, z, block.STONE.id)
# Set block below Steve to wool with a colour (5, Lime)
x, y, z = mc.player.getPos()
mc.setBlock(x, y-1, z, block.WOOL.id, 5)
# Create a flower trail as Steve walks
while True:
x, y, z = mc.player.getPos()
mc.setBlock(x, y, z, block.FLOWER_YELLOW.id)
sleep(0.1)
# Create a TNT trail (5th parameter (1) indicates TNT can be ignited)
while True:
pos = mc.player.getTilePos()
mc.setBlock(pos.x, pos.y-1, pos.z, block.TNT.id, 1)
sleep(0.1)
# Set multiple blocks (create a wall)
x, y, z = mc.player.getPos()
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, block.STONE.id)
# Get the type of block Steve is standing on
while True:
x, y, z = mc.player.getPos()
block_beneath = mc.getBlock(x, y-1, z)
print(block_beneath)
# Get the block (and additional data (colour/type)) that Steve is standing on
while True:
pos = mc.player.getTilePos()
block = mv.getBlockWithData(pos)
block_type = block.id
block_state = block.data
print(f'id: {block.id}, data: {block.data}')
# If standing on grass, place a flower, otherwise turn block to grass
while True:
x, y, z = mc.player.getPos()
block_beneath = mc.getBlock(x, y-1, z)
if block_beneath == block.GRASS.id:
mc.setBlock(x, y, z, block.FLOWER_CYAN.id)
else:
mc.setBlock(x, y-1, z, block.GRASS.id)
# Flatten entire world, from sea level, with sandstone
mc.setBlocks(-128, 0, -128, 128, 64, 128, block.AIR.id)
mc.setBlocks(-128, 0, -128, 128, -64, 128, block.SANDSTONE.id)
# Block hits (with sword)
hitList = []
while True:
for hit in mc.events.pollBlockHits():
hit_block_position = hit.pos
sleep(0.1)
# Create four coloured areas (wool) and detect which Steve is walking over
pad_position = 5
pad_size = 2
colour1 = wool_colour['orange']
colour2 = wool_colour['magenta']
colour3 = wool_colour['blue']
colour4 = wool_colour['lime']
# Create the pads
mc.setBlocks(-pad_position, 0, -pad_position, -pad_position + pad_size, 0, -pad_position + pad_size, block.WOOL.id, colour1)
mc.setBlocks(pad_position, 0, -pad_position, pad_position + pad_size, 0, -pad_position + pad_size, block.WOOL.id, colour2)
mc.setBlocks(-pad_position, 0, pad_position, -pad_position + pad_size, 0, pad_position + pad_size, block.WOOL.id, colour3)
mc.setBlocks(pad_position, 0, pad_position, pad_position + pad_size, 0, pad_position + pad_size, block.WOOL.id, colour4)
# Place Steve in the centre of the pads
mc.player.setTilePos(0, 0, 0)
# Detect which coloured pad Steve is walking over
while True:
pos = mc.player.getPos()
on_pad = mc.getBlockWithData(pos.x, pos.y-1, pos.z)
# print(tile)
if on_pad.id == block.WOOL.id:
# print('Steve is standing on a pad')
if on_pad.data == colour1:
print('standing on orange pad')
elif on_pad.data == colour2:
print('standing on magenta pad')
elif on_pad.data == colour3:
print('standing on blue pad')
elif on_pad.data == colour4:
print('standing on lime pad')
else:
print('not standing on a pad')
sleep(0.1)