Python programming with minecraft
Our goal is to learn programming while having fun in Minecraft
0 Pre-Request
0.1 Install Minecraft Java edition
Go to minecraft website download the Java Edition
0.2 Setup mincraft server
0.3 Install Python
Go to Python download page, download and install Python 3.8 and up
0.4 Install mcpi Python module
Window
input below script in the command line. (from start, search “cmd”)
-
use
pip3
pip3 install mcpi-e
-
or use
py
orpython -m
py -m pip install mcpi-e
Linux / MacOS
- sudo pip3 install mcpi-e
0.5 Install a Python Editor
- Python IDLE
- PyCharm
- PyCharm Edu is a python editor help you learn Python
- Click to download pyCharm Edu
- VsCode
- VsCode is a editor for many different programming langurage.
- Click to download VsCode
- How to install VsCode for python
1. Get Start Python with Minecraft
1.1 Connect to the Minecraft server and get your position
Create a Python project folder, Download and save the sample1.py file to your python project folder
from mcpi_e.minecraft import Minecraft
serverAddress="127.0.0.1" # change to your minecraft server
pythonApiPort=4711 #default port for RaspberryJuice plugin is 4711, it could be changed in plugins\RaspberryJuice\config.yml
playerName="stoneskin" # change to your username
mc = Minecraft.create(serverAddress,pythonApiPort,playerName)
pos = mc.player.getPos()
print("pos: x:{},y:{},z:{}".format(pos.x,pos.y,pos.z))
Use your faverate python editor to open the sample1.py file. When you install python, it come with a python editor call IDLE.j
1.2. Frequently used mcpi
commands
1.2.1 Find your location
get the tile position
pos = mc.player.getTilePos()
1.2.2 Teleport
move player to north 100 block
x,y,z = pos = mc.player.getTilePos()
mc.player.setTilePos(x,y+100,z)
1.2.3 Set block
set the a stone block beside the player
x,y,z = pos = mc.player.getTilePos()
mc.setBlock(x+1, y, z, 1)
setblock with constants block.STONE.id
#setblock with constants block.STONE.id
from mcpi_e import block
(x,y,z) = pos = mc.player.getTilePos()
mc.setBlock(x+1, y, z+1, block.STONE.id)
set special block which extra properties
# set special block which extra properties
flower = 38
flowerColor = 3
mc.setBlock(x+1, y, z+1, flower, flowerColor)
1.2.4 Get block
get the block type id of the player stepping on
# get the block current player step on
x, y, z = mc.player.getTilePos()
blockId= mc.getBlock(x, y, z)
if(blockId == 0):
print("current block is Air")
##### Check the Minecraft Item ID list
2 Learn Python With Minecraft
To use the code examples in this site, please make sure include the piece of code below before the sample codes
import mcpi_e.minecraft as minecraft
import mcpi_e.block as block
from math import *
address="127.0.0.1" # change to address of your minecraft server
name ="change you your name"
mc = minecraft.Minecraft.create(address,4711,name)
pos=mc.player.getTilePos()
#your other code below
...
2.1 Understand the coordinates of minecraft
Minecraft coordinates are different than what we learn from geomestry. You need keep the picture below in mind when you do the minecraft coding.
For basic python syntax, pleas check Python syntax for details.
The missions/codes below will use print
and command from minecraft api mcpi
Click to view your Mincraft-Python Missions-1
2.2 Use for
Loop to stack blocks
for loops
are traditionally used when you have a block of code which you wnat to repeat number of times.
for x in range(0, 3):
print("We're on time %d" % (x))
For learnning how to use for
loop, please visit Python For Loops
Below mission only need using for ... range
loop.
Click to view your Coding Missions -2
2.3 Value Type: String , Number
In Python any amount of text call a string
, you could use string like this
print("Hello Minecraft")
name ="Steve the Miner"
print(name)
String and Intiger is different DataType, for detail please read Python Data Types. Below is the Data Types we possible will used in our class
example of get type of a variable:
x = 5
print(type(x))
The data you got form input is a string, we need convert to number before using as number. int(str)
could do this job.
blockType=input("Enter a block type:")
blockTypeId=int(blockType)
other way if you want change a int to string, you could use str(number)
value=103
print("Watermelon block id is "+str(value))
Click to view your Coding Missions -3
2.4 Use Condition if ... else
To learn comdition please check Python If…Else
Booleans represent one of two values: True
or False
For learn more and practic Boolean, please check Python Boolean
Click to view your Coding Missions -4
3 More Code Samples
3.1 Dropping the flowers when you move
- code example 1: dropflower.py
- code example 2 : dropflower_Withsize.py
Set a random flower on where the play is standing
flower = 38
while True:
x, y, z = mc.playerEn.getPos()
blockId= mc.getBlock(x, y, z)
print("current block:" + str(mc.getBlock(x, y, z)))
if(blockId==0 or blockId ==78):
mc.setBlock(x, y, z, flower,randrange(8))
sleep(0.2)
3.2 Build a rainbow in the minecraft
code example: rainbow.py build a rainbow with colored wool on the player’s location
import mcpi_e.minecraft as minecraft
import mcpi_e.block as block
from math import *
address="127.0.0.1" # change to your minecraft server
name ="change you your name"
mc = minecraft.Minecraft.create(address,4711,name)
playerPos=mc.player.getTilePos()
colors = [14, 1, 4, 5, 3, 11, 10]
height=50
for x in range(0, 128):
for colourindex in range(0, len(colors)):
y = playerPos.y+sin((x / 128.0) * pi) * height + colourindex
mc.setBlock(playerPos.x+x - 64, int(y), playerPos.z, block.WOOL.id, colors[len(colors) - 1 - colourindex])
print("rainbow created at x:{} y:{} z:{}".format(playerPos.x,playerPos.y,playerPos.z))