Revista Tecnología

Cómo instalar Minecraft en una Raspberry Pi

Publicado el 13 mayo 2014 por Albertonavarro

Minecraft en Raspberry Pi

Es bien conocido por todos el gran juego de plataformas y construcción tipo LEGO que es Minecraft, si no lo conoces te recomiendo leer un poco sobre él, merece mucho la pena. En este tutorial te vamos a enseñar a instalar Minecraft para jugarlo en tu Raspberry Pi, que gracias a su compacto tamaño y potencia veremos que no supondrá un gran reto y el resultado está muy logrado.

Cabe mencionar que este es un desarrollo no oficial, pero desarrollado por uno de los trabajadores de Mojang (la empresa detrás de Minecraft), por lo tanto puede tener sus fallos, además se basa en la versión de Minecraft: Pocket Edition (la misma que hay para iOS y Android), por lo que veremos que no es el mismo juego que tenemos para PC y sólo podremos hacer construcciones en modo libre, no jugar una partida estándar.

¿Qué necesitamos?

Antes de empezar tendremos que abastecernos de todo lo necesario para poder instalar Minecraft en tu Raspberry Pi sin complicaciones y sin dar demasiadas vueltas, empezamos:

  • Por supuesto una Raspberry Pi, si es el modelo B mejor que mejor ya que sus 512Mb de memoria harán que sea una experiencia más fluida.
  • Caja, cable HDMI, fuente de alimentación de 1A como mínimo y una tarjeta SD para la instalación de Raspbian, si es de clase 10 también nos irá más rápido todo.
  • De manera opcional y para mejorar aún más su rendimiento, vamos a activar el overclocking, por lo que necesitaremos refrigerar la placa. Os recomiendo nuestro pack de refrigeración todo en uno.
  • Si no tenemos la Raspberry Pi conectada a Internet, necesitaremos descargar la última versión de Minecraft: Pi Edition, si la tenemos conectada, lo haremos en el proceso de instalación.

Manos a la obra

Pinche aquí para ver el vídeo

Presuponemos que tenemos nuestra Raspberry Pi bien configurada de inicio y que ya estamos en el escritorio de nuestro sistema Raspbian. Abrimos un terminal y descargamos Minecraft: Pi Edition:

wget https://s3.amazonaws.com/assets.minecraft.net/pi/minecraft-pi-0.1.1.tar.gz

Una vez haya terminado, lo descomprimimos:

tar -zxvf minecraft-pi-0.1.1.tar.gz

Y lo ejecutamos:

cd mcpi
./minecraft-pi

¡Tachán!, así de sencillo es instalar Minecraft en nuestra Raspberry Pi, pero, ¿queremos seguir investigando?, venid…

Hackeando Minecraft: Pi Edition

Minecraft Pi Edition

Gracias a que esta versión está especialmente pensada para el aprendizaje, viene con acceso a la API para poder programar nuestras propias variaciones. Creamos el directorio de pruebas /minecraft-pruebas/ para hacer un poco el cafre.

mkdir minecraft-pruebas

Y copiamos todo el contenido de las librerías de Python.

cp -r mcpi/api/python/mcpi minecraft-pruebas/minecraft

Creamos un nuevo archivo para no romper nada.

nano minecraft-pruebas/minecraft-pruebas.py

Importamos la librería de Minecraft y creamos un objeto que conecte con el juego. La primera prueba la podemos hacer mandando algo al chat:

import minecraft.minecraft as minecraft

mc = minecraft.Minecraft.create()
mc.postToChat('Hola mundo!')

Guardamos y desde el terminal abrimos nuestro querido archivo que acabamos de crear (muy importante tener una partida abierta de fondo para que se vean los cambios, puedes usar la tecla Tab para pasar de una ventana a otra):

python minecraft-pruebas/minecraft-pruebas.py

Si miramos a la ventana del juego veremos como nuestro pequeño código surte efecto. ¡Magia!

Para ver el potencial que tiene esto vamos con un hack muy divertido, el puente automático: (el código no es mío, así que lleva la correspondiente atribución)

#Creado por www.stuffaboutcode.com
#Adaptado por ComoHacer.eu
#Raspberry Pi, Minecraft - Puente automatico

#importamos el modulo minecraft.py desde el directorio de Minecraft
import minecraft.minecraft as minecraft
#importamos el modulo de bloques de Minecraft
import minecraft.block as block
#importamos time para poder usar los retrasos
import time

#funcion para situar a los jugadores
def roundVec3(vec3):
    return minecraft.Vec3(int(vec3.x), int(vec3.y), int(vec3.z))

if __name__ == "__main__":

    time.sleep(2)

    #Conectar con minecraft creando el objeto minecraft
    # - necesitamos que minecraft este con una partida abierta
    mc = minecraft.Minecraft.create()

    #Mostrar un mensaje en la ventana del chat
    mc.postToChat("Hola Minecraft - Puente automatico activo")
    mc.postToChat("Creado por www.stuffaboutcode.com - Adaptado por ComoHacer.eu")

    #Obtener la posicion de los jugadores
    lastPlayerPos = mc.player.getPos()

    while (True):

        #Obtener la posicion de los jugadores
        playerPos = mc.player.getPos()

        #Encontrar la diferencia entre la posicion de los jugadores y la ultima posicion
        movementX = lastPlayerPos.x - playerPos.x
        movementZ = lastPlayerPos.z - playerPos.z

        #Si el jugador se mueve mas de 0.2 en cualquier direccion en horizontal (x, z)
        if ((movementX < -0.2) or (movementX > 0.2) or (movementZ < -0.2) or (movementZ > 0.2)):

            #Proyecta la direccion de los jugadores hacia la siguiente casilla
            nextPlayerPos = playerPos
            # mantiene el movimiento de los jugadores hacia el siguiente bloque si es encontrado
            while ((int(playerPos.x) == int(nextPlayerPos.x)) and (int(playerPos.z) == int(nextPlayerPos.z))):
                nextPlayerPos = minecraft.Vec3(nextPlayerPos.x - movementX, nextPlayerPos.y, nextPlayerPos.z - movementZ)

            #Si el siguiente bloque es aire, lo sustituye por uno de diamante
            blockBelowPos = roundVec3(nextPlayerPos)
            #resuelve las posiciones si fuesen negativas
            if blockBelowPos.z < 0: blockBelowPos.z = blockBelowPos.z - 1
            if blockBelowPos.x < 0: blockBelowPos.x = blockBelowPos.x - 1
            blockBelowPos.y = blockBelowPos.y - 1
            if mc.getBlock(blockBelowPos) == block.AIR:
                mc.setBlock(blockBelowPos.x, blockBelowPos.y, blockBelowPos.z, block.DIAMOND_BLOCK)

            #Guarda la ultima posicion de los jugadores
            lastPlayerPos = playerPos

        #Retraso
        time.sleep(0.01)

¡A disfrutar!, si programas algo interesante pásame el código para probarlo

:D


Volver a la Portada de Logo Paperblog