How to Run Python Script
- Open Minecraft : ./minecraft-pi
- Open Terminal and Go to ~/Python_Minecraft
- Run Python Script : python <script name>.py
install
- HOME PAGE : http://pi.minecraft.net
- wget https://s3.amazonaws.com/assets.minecraft.net/pi/minecraft-pi-0.1.1.tar.gz
- To decompress it: tar -zxvf minecraft-pi-0.1.1.tar.gz
- To run it: cd mcpi
- Followed by ./minecraft-pi
- https://minecraft.net/
- Create Desktop Icon (Minecraft.desktop on XScreen)
-
[Desktop Entry]
Name=Minecraft Pi Edition
Comment=Launch Minecraft Pi Edition!
Exec=sh -c 'cd ~/mcpi && lxterminal -l -t Minecraft -e ./minecraft-pi'
Icon=/home/pi/mcpi/minecraft.png
Terminal=false
Type=Application
Categories=Application;Games;
StartupNotify=true
-
Using Minecraft : This isn’t the place to give an extensive guide to using Minecraft but I thought I would present some basics to get you moving around the environment.ESC Pause/Menu
W Move forward
A Move left
S Move backwards
D Move right
E Show inventory of blocks
1-8 Select items in the quick-bar
Left mouse Destroy blocks
Right mouse Place blocks
Space Jump (ascend in fly-mode)
Shift Sneak (descend in fly-mode) The mouse can be used to change your point-of-view. The scroll wheel can be used to scroll through the items, the left mouse button being used to select a block. When viewing the inventory you can use the WASD keys to move the selection using the Enter key to select a block. Double-tapping the Space bar will activate and deactivate fly-mode. You can exit Minecraft by clicking the [x] in the top right hand corner of the game window
API Reference
This is a reference of Minecraft: Pi Edition's: Python API Library.
If you want to know more about how to use the API, including tutorials, see my projects and download code, visit my minecraft page.
Structure
- minecraft.py
- Class Minecraft - main class for connecting and interacting with the game
- Class camera - changing camera angle and postion
- Class player - getting and changing the players position and settings
- Class events - retreiving events which have occured in the game
- block.py
- Class Block - definition of a block, specifically its type
- event.py
- Class BlockEvent - definition of a block event, specifically what event, what block and what player
- vec3.py
- Class Vec3 - generic class for managing a 3 dimension vector (i.e. x,y,z)
- connection.py - internal module used by the api
- util.py - internal module used by the api
Minecraft
"Main class for interacting with the Minecraft world, includes functions for creating a connection, modifying players and blocks and capturing events"
.create(address = "localhost", port = 4711)
"Create connection to Minecraft (address, port) => Minecraft object"
#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)
"Get block (x,y,z) => id:int"
#retrieves the block type for the block at 0,0,0
blockType = mc.getBlock(0,0,0)
.getBlocks(x0,y0,z0,x1,y1,z1)
"Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]"
Not implemented in the API
.getBlockWithData(x,y,z)
"Get block with data (x,y,z) => Block"
#retrieves a block object for the block at 0,0,0
blockObj = mc.getBlockWithData(0,0,0)
.setBlock(x,y,z)
"Set block (x,y,z,id,[data])"
#sets a block at an x, y, z co-ordinate to a particular type
mc.setBlock(0,0,0,block.DIRT.id)
#sets a block to a particular type and 'subtype'
mc.setblock(0,0,0,block.WOOD.id, 1)
.setBlocks(x0,y0,z0,x1,y1,z1,blockType, blockData)
"Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])"
#sets many blocks at a time, filling the gap between 2 sets of x, y, z co-ordinates
mc.setBlocks(-1, -1, -1, 1, 1, 1, block.STONE.id)
.getHeight(x,z)
"Get the height of the world (x,z) => int"
#find the y (vertical) of an x, z co-ordinate which represents the 'highest' (non-air) block
y = mc.getHeight(0,0)
.getPlayerEntityIds()
"Get the entity ids of the connected players => [id:int]"
#get the entity id's of the players connected to the game
entityIds = mc.getPlayerEntityIds()
for entityId in entityIds
print entityId
.saveCheckpoint()
"Save a checkpoint that can be used for restoring the world"
mc.saveCheckpoint()
.restoreCheckpoint()
"Restore the world state to the checkpoint"
mc.restoreCheckpoint()
.postToChat(message)
"Post a message to the game chat"
#write 'Hello Minecraft World' to the chat window
mc.postToChat("Hello Minecraft World")
.setting(setting, status)
"Set a world setting (setting, status). keys: world_immutable, nametags_visible"
#change world immutable to True
mc.setting("world_immutable", True)
#change nametags_visible setting to False
mc.setting("nametags_visible", False)
Minecraft.player
.getPos()
"Gets the player's position in the world as a Vec3 of floats (decimal numbers), if the player is in the middle of a block x.5 is returned"
#get players position as floats
playerPos = mc.player.getPos()
.setPos()
"Moves the player to a position in the world by passing co-ordinates ([x,y,z])"
#set the players position as floats
mc.player.setPos(0.0,0.0,0.0)
.getTilePos()
"Gets the position of the 'tile' the player is currently on."
#get the position of the tile the players is on
playerTile = mc.player.getTilePos()
.setTilePos()
"Move the player to a tile position in the world by passing co-ordinates ([x,y,z])"
#set the position of the tile the player is on
mc.player.setTilePos(0,0,0)
Minecraft.camera
.setNormal(entityId)
"Set camera mode to normal Minecraft view ([entityId])"
#set camera mode to normal for a specific player
mc.camera.setNormal(entityId)
.setFixed()
"Set camera mode to fixed view"
#set camera mode to fixed
mc.camera.setFixed()
.setFollow(entityId)
"Set camera mode to follow an entity ([entityId])"
#set camera mode to follow for a specific player
mc.camera.setFollow(entityId)
.setPos(x,y,z)
"Set camera entity position (x,y,z)"
#set camera position to a specific position of x, y, z
mc.camera.setPos(0,0,0)
Minecraft.events
.pollBlockHits()
"Block Hits (Only triggered by sword) => [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
.clearAll()
"Clear all old events"
#clear all events that have happened since the events where last got
mc.events.clearAll()
Block
"The definition of a Block in Minecraft, used to describe a block type and (if applicable) its data; also contains constants for the blocks type id's, e.g. BLOCK.AIR.id"
#create block of a specific type
blockObj = block.Block(id)
#create a block of a specific type and apply a data value
blockObj = block.Block(id, data)
.id
"The id (or type) of block"
Block id constants:
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)
BED = 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)
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)
GLOWING_OBSIDIAN = Block(246)
NETHER_REACTOR_CORE = Block(247)
.data
"The data (or sub-type) of a block"
WOOL data values (colours):
0: White
1: Orange
2: Magenta
3: Light Blue
4: Yellow
5: Lime
6: Pink
7: Grey
8: Light grey
9: Cyan
10: Purple
11: Blue
12: Brown
13: Green
14: Red
15:Black
Wood data values:
0: Oak
1: Spruce
2: Birch
3: ....
[needs completing]
TORCH data values:
1: Pointing east
2: Pointing west
3: Pointing south
4: Pointing north
5: Standing on the floor
6: Standing in ground
LEAVES data values:
0: Oak leaves
1: Spruce leaves
2: Birch leaves
BlockEvent
"The definition of a BlockEvent in minecraft, used to describe an event in minecraft affecting blocks; returned by the Minecraft.events.pollBlockHits() method."
blockEvent = mc.events.pollBlockHits()
.type
"Type of block event; there is only 1 event currently implemented BlockEvent.HIT"
blockEventType = blockEvent.type
BlockEvent types:
0: BlockEvent.HIT
.pos
"The position of the block where the event occured, i.e. the block which was hit. .pos returns a Vec3 object of x,y,z co-ordinates"
blockEventPos = BlockEvent.pos
.face
"The face of the block where the event occured"
blockEventFace = BlockEvent.face
.entityId
"entityId of the player who caused the block event, i.e. the player who hit the block"
blockEventPlayer - BlockEvent.entityId
Vec3
"The definition of a 3 part vector in Minecraft, i.e. a set of x, y, z co-ordinates; x and z are the horizontal positions, y the vertical"
position = vec3.Vec(0,0,0)
.x
"x position"
xPos = position.x
.y
"y position"
yPos = position.y
.z
"z position"
zPos = position.z
Problem and Solution
Control Minecraft by Scratch :
- Open Minecraft
- Open ScratchMCPI
- if open New Scartch File then it have to open the Scratch2MCPL terminal Again
|