A few more experiments with the Minecraft API and Python has brought be to this point… combining figlet with Python to create a minecraft text generator. More information on figlet can be found at www.figlet.org.
First… install figlet on your Raspberry Pi using:
sudo apt-get install figlet
Then test figlet by using:
figlet "hello world"
The basic structure of the program requires:
- A connection to the Minecraft API.
- Input the phrase to be rendered into a string variable.
- Send the string to the operating system to be processed by figlet using the banner font.
- Read the response back into a string variable and then split it into individual lines.
- Work along each line creating a block or air depending on whether figlet added a “#” symbol to represent part of the text.
The screenshots were generated by raspi2png using the instructions from Raspberry Pi Spy.
The Python program is shown below:
from mcpi import minecraft import commands mc = minecraft.Minecraft.create() mc.postToChat('Python is now in control!') wr_str = raw_input('What would you like to write? ') # ask the user what they'd like to write at the current position cmd = 'figlet -f banner '+wr_str # create an operating system command line = commands.getoutput( cmd ) # send cmd as a command to the operating system and receive the result. list_line = line.rstrip().split('\n') # split the result from 'figlet' into separate lines (right strip new line feeds) print 'Your text has been converted to' print line startx,starty,startz = mc.player.getPos() #get the player's position starty=starty+10 #lift the starty so that it's not written under your feet! for row in list_line: # one row at a time from list_line (the result from figlet) starty=starty-1 # work down from the top column=0 for letter in row: # work along each row - check each character. If it's a '#' then print a block else leave it as air column = column+1 if letter == '#': mc.setBlock(startx-column,starty,startz,1) else: mc.setBlock(startx-column,starty,startz,0)
Something that looks rather nice is to replace the “air” blocks (code 0 in the penultimate line) with something like 22 which translates to Lapis Lazuli. Alternatively, use 8 for the block type, which becomes water which flows from the words shown.