Programar Minecraft desde Python, para Windows

Hace unas semanas os mostraba en un vídeo el funcionamiento de Minecraft Pi Edition, la edición de Minecraft que viene preinstalada en Raspbian. Esta versión del popular juego tiene como peculiaridad que incorpora un mecanismo que nos permite programar el mundo de Minecraft mediante Python. Entre otras cosas, por ejemplo, podremos crear edificios y teletransportar al personaje. En la entrada que os enlazaba antes podíais ver cómo convertía a Steve, el protagonista del juego, en el Hombre de Hielo de la Patrulla X. Os lo vuelvo a ofrecer aquí:

En este artículo os explico cómo hacer para poder programar Minecraft mediante Python, como en el vídeo de arriba, pero usando Windows y la versión comercial de Minecraft en lugar de la Raspberry Pi y su edición específica. Es decir: sin limitaciones, ya que esto podremos hacerlo tanto si jugamos en modo supervivencia como en modo creativo y, lo mejor, es que se hace a través de un servidor multijugador llamado CraftBukkit que tendremos disponible para invitar a nuestros amigos. No sé vosotros pero a mí me encanta la idea de convertirme en algo parecido al arquitecto de Matrix 😀

Pero empezaré por una historia alrededor de esta cuestión que la hace más complicada de lo que nos gustaría.

CraftBukkit y una historia de licencias

En el libro Aventuras en Minecraft (enlace de afiliado), además de cubrir el segmento de lectores que poseen una Raspberry Pi, proporcionaban un enlace a una descarga que instalaría las herramientas para programar el mundo de Minecraft mediante Python, pero las de Windows y Mac OS X. Además, con dichas herramientas y al ser para Windows y Mac OS X, podrías programar sobre una versión comercial de Minecraft (no la “Pi Edition”).

Aunque hable en pasado, estas herramientas todavía existen y están basadas en un proyecto llamado CraftBukkit que ya he mencionado, desarrollado en Bukkit.org. Una turbia historia de desencuentros entre un programador de CraftBukkit, la propia comunidad, ¿él mismo?, y Mojang, que es la empresa que desarrolla Minecraft, hizo que la distribución de estas herramientas se complicase legalmente. Como consecuencia, esos descargables asociados al libro desaparecieron… ¿temporalmente? La cuestión es que este programador se dio cuenta de que al distribuirlo “listo para usar”, es decir, compilado, estaba infringiendo la licencia de Minecraft al incluir parte de su código de alguna forma que no he encontrado claramente explicada. Así pues, por absurdo que pudiera parecer, él mismo denunció el proyecto a la autoridad competente para tratar de llamar la atención sobre el problema y sentar a todas las partes a resolverlo. En ese mismo momento, las distribuciones compiladas de CraftBukkit desaparecieron de los servidores de descarga y, me imagino que como consecuencia de ello, los kits descargables asociados al libro no se encuentran disponibles en la página de la editorial.

Como consecuencia de todo esto, Mojang es consciente del problema y aunque no han participado en esta retirada de las descargas de CraftBukkit al no haber sido ellos los denunciantes, el comunicado de la compañía es que no se oponen al proyecto y que, al parecer están poniendo de su parte para deshacer el entuerto involuntario. Sin embargo, de esto último no he encontrado fuentes oficiales. Como ya digo, esta es una historia turbia y podría cometer errores si intentase ahondar más.

Pese a todo, existen formas públicas y notorias de obtener un CraftBukkit compilando el proyecto a partir del código fuente, y existe una web llamada GetSpigot.org que, por el momento, permite descargar alguna versión de CraftBukkit. Estos mecanismos no han sido bloqueados por la denuncia y, como tal, siguen disponibles y nadie ha tratado de ocultarlos. Voy a tratar de explicaros paso a paso cómo conseguir hacerlo funcionar compilando el proyecto desde cero: no he probado las descargas de GetSpigot.

Qué necesitamos

  • Un ordenador con Windows, capaz de ejecutar Java 8 y capaz de ejecutar Minecraft.
  • Minecraft, la versión comercial, perfectamente funcional. Cuesta 20 €, es un juegazo que merece la pena para jugadores de cualquier edad, y lo podéis obtener en https://minecraft.net/. Además, comprando esta versión obtendréis acceso gratuito a la beta para Windows 10
  • El Kit de desarrolladores de Java 8 que podemos descargar de esta web de Oracle. Es gratuito. Escogeremos la versión para Windows que corresponda (32 ó 64 bits) del paquete que está etiquetado como “JDK“. La instalación es trivial (siguiente, siguiente,…)
  • Git, que es software libre y además gratuito, que descargaremos de https://git-scm.com/. Lo instalaremos también dejando todos los valores por defecto (siguiente, siguiente,…)
Descargar GIT
Descargar GIT

 

  • Un programa de instalación a través de la construcción de CraftBukkit desde su código fuente, llamado BuildTools.jar, disponible en este enlace. Este enlace pertenece a la web de un derivado de Craftbukkit, llamado Spigot, que aunque es objeto también de investigación por los asuntos que antes os contaba, todavía no se ha visto afectada. Gratuito
  • El plugin, o modificación,  Raspberry Juice (zumo de frambuesa) que podremos descargar de la página web Bukkit.org mediante este enlace, para la versión 1.8.8 de craftbukkit. Gratuito
  • Python 2.7. Este desarrollo no es compatible con Python 3, así que si no tienes Python 2.7 deberás descargarlo e instalarlo como ya hicimos con Python 3

Empecemos entonces.

Construcción de Craftbukkit

Una vez descargado todo, instalado Java 8 y Git, iremos a la carpeta donde hemos descargado BuildTools.jar (por ejemplo, Descargas). Sobre ella misma, en el explorador de Windows, haremos click con el botón derecho para seleccionar la opción Guit Bash Here (“[intérprete de] Bash de Git aquí“).

Guit Bash Here sobre la carpeta de Descargas
Guit Bash Here sobre la carpeta de Descargas

Dentro de la ventana de Terminal que se abre al hacerlo, escribiremos java -jar BuildTools.jar . Con ello, un proceso automático que durará varios minutos comenzará a descargar todo lo necesario para construir nuestro CraftBukkit, y a construirlo. Si funciona bien veréis lo siguiente al final de todo:

Construcción finalizada con éxito
Construcción finalizada con éxito

Esto habrá dejado en la carpeta de trabajo los dos productos que queríamos, en este caso craftbukkit-1.8.8.jar y spigot-1.8.8.jar.

Resultado de la construcción
Resultado de la construcción

Instalación de CraftBukkit

El siguiente paso puede llevar a confusión, así que pon especial cuidado en seguir los pasos escrupulosamente:

  • Copia craftbukkit-1.8.8.jar a una carpeta de tu PC nueva, para alojar y preparar CraftBukkit antes de modificarlo para trabajar con Python. Por ejemplo, c:\juegos\craftbukkit
  • Crea un archivo llamado “craftbukkit.bat” en esa misma carpeta, con el siguiente contenido:
java -Xms512M -Xmx1024M -jar craftbukkit-1.8.8.jar
pause
  • Guárdalo poniendo atención en que la extensión sea “.bat” y no “.bat.txt”, sobre todo si usas el Bloc de Notas.
  • Ejecútalo haciendo doble click sobre él. Verás que el proceso crea una serie de carpetas y ficheros, y termina con este mensaje:
Resultado de ejecutar craftbukkit.bat por primera vez
Resultado de ejecutar craftbukkit.bat por primera vez

 

  • En la carpeta donde lo hemos ejecutado (c:\juegos\craftbukkit en este ejemplo), localizamos el fichero eula.txt y lo abriremos con el Bloc de Notas.
Eula.txt
Eula.txt

 

  • Dentro de este fichero cambiaremos la línea que pone eula=false  por eula=true . Lo guardaremos y cerraremos el Bloc de Notas.
  • Volvemos a ejecutar con doble click el fichero craftbukkit.bat. Lo que veremos ahora será que se crean muchas más carpetas y ficheros, y que la ventana se queda así:
Segunda ejecución de craftbukkit.bat
Segunda ejecución de craftbukkit.bat

 

  • Escribimos stop  e Intro (↵). Cuando leamos “Pulse una tecla para continuar…”, presionamos Intro (↵) de nuevo.

Instalación de Raspberry Juice en CraftBukkit

En este punto veremos que dentro de la carpeta donde estamos ejecutando CraftBukkit (c:\juegos\craftbukkit) se ha generado una carpeta llamada plugins. Deberemos copiar ahí dentro el fichero RaspberryJuice.jar que nos hemos descargado anteriormente. Simplemente lo arrastramos y lo soltamos allí.

Tras hacerlo, sólo nos queda volver a ejecutar craftbukkit.bat. Al hacerlo, veremos en la ventana de comandos que aparece el mensaje “[21:18:15 INFO]: [RaspberryJuice] Loading RaspberryJuice v1.7“. Eso quiere decir que el plugin ha sido instalado con éxito.

Ejecutamos craftbukkit ya ampliado con el plugin Raspberry Juice
Ejecutamos craftbukkit ya ampliado con el plugin Raspberry Juice

Ya tenemos listo CraftBukkit y ejecutándose en nuestro PC con Windows. No lo cerraremos, ya que lo que tendremos que hacer será, una vez preparado el intérprete de Python 2.7, conectarnos a CraftBukkit a través del menú de Minecraft. Como os contaba al principio de todo, CraftBukkit proporciona un servidor multijugador que contiene y proporciona “las reglas de juego” del mundo de Minecraft para una partida en concreto. Tanto solos como acompañados, para poder programar Minecraft en Python jugaremos allí dentro.

Preparar el intérprete de Python 2.7

El siguiente paso exige instalar Python 2.7, ya que es la versión de Python para la que todo esto es compatible. Hazlo con este proceso si no lo tienes.

Necesitamos instalar un módulo en Python que es complementario al plugin de Raspberry Juice que hemos instalado en CraftBukkit. Para ello, vamos a la página de GitHub donde se aloja, https://github.com/zhuowei/RaspberryJuice, y descargaremos todo el contenido usando el botón Download Zip si no lo hemos hecho al principio del proceso.

Descargar el

Una vez descargado, por ejemplo en la carpeta de Descargas:

  • Descomprimimos el archivo
  • Navegamos dentro hasta que veamos la carpeta mcpi del subdirectorio RaspberryJuice-master\src\main\resources\mcpi\api\python\original.
  • La copiamos al portapapeles.
  • La pegaremos dentro del subdirectorio lib de nuestra instalación de Python 2.7 (en mi caso, c:\prog\Python27\lib).

Arrancaremos el intérprete de Python 2.7 (IDLE) para probar el juego en el siguiente paso, ¡por fin!

Probar el interfaz de programación contra Minecraft

Ejecutamos el lanzador de Minecraft como si fuéramos a jugar, pero antes crearemos un nuevo perfil. Este perfil será una copia de nuestro perfil habitual, que modificaremos para que ejecute la versión del juego correspondiente al servidor CraftBukkit que tenemos en ejecución (en este caso es la 1.8.8). La encontraremos en la lista desplegable Release:

Perfil para la versión 1.8.8
Perfil para la versión 1.8.8

Al guardar este perfil tendremos dos: el normal, que seguiremos usando para jugar a la última versión disponible de Minecraft, y el que usaremos para programar Python en Minecraft mediante CraftBukkit.

Una vez seleccionado este nuevo perfil, y no habiendo cerrado la ventana de craftbukkit.bat, lanzamos el juego. Recomiendo poner el juego en una ventana, no a pantalla completa.

Si entramos en Multijugador, veremos que hay un servidor con el nombre por defecto, “A Minecraft Server“. Este servidor multijugador es local a nuestro PC con Windows, y es el propio CraftBukkit que hemos dejado funcionando. Si no te aparece, comprueba que CraftBukkit se está ejecutando y, si lo hubieras cerrado por alguna razón, ejecuta craftbukkit.bat en c:\juegos\craftbukkit para que aparezca al cabo de unos segundos.

A Minecraft Server
A Minecraft Server

Entramos al servidor seleccionándolo y usando el botón Entrar al servidor.

Nuestro “Hola, Mundo”: un arcoiris

Fuera del juego, en Windows, abrimos un nuevo fichero en IDLE para Python 2.7, de forma que podamos escribir un programa. En él copiamos el ejemplo siguiente, tomado de la página de Raspberry Juice, que escribirá un arcoiris en el mundo de Minecraft.

import mcpi.minecraft as minecraft
import mcpi.block as block
from math import *

colors = [14, 1, 4, 5, 3, 11, 10]

mc = minecraft.Minecraft.create()
height = 60

mc.setBlocks(-64,0,0,64,height + len(colors),0,0)
for x in range(0, 128):
        for colourindex in range(0, len(colors)):
                y = sin((x / 128.0) * pi) * height + colourindex
                mc.setBlock(x - 64, y, 0, block.WOOL.id, colors[len(colors) - 1 - colourindex])

Para ejecutarlo lo guardaremos en el disco duro (en nuestra carpeta de experimentos de PItando, por ejemplo) y pulsaremos la tecla F5. Esto lo ejecutará directamente dentro de IDLE.

El arcoiris aparecerá justamente encima de nuestras cabezas, con lo que tendremos que apartarnos unos cuantos metros para poderlo ver.

Un arcoiris generado mediante Python. ¿No te sientes como un personaje de Matrix?
Un arcoiris generado mediante Python. ¿No te sientes como un personaje de Matrix?

Ahora puedes intentar tú mismo algo, como trasladar el ejemplo del Hombre de Hielo, o tratar de crear estructuras a tu alrededor (muros, vallas,…).

¡Disfruta, pocas combinaciones tan creativas hay a tu alcance!


 

Notas acerca de los números de versión de este artículo

En todo el artículo estoy manejando la versión 1.8.8 porque es la versión de CraftBukkit que se construye con BuildTools.jar. Si llegas a este artículo meses después de que haya aparecido, la versión habrá cambiado. Sé consecuente a lo largo de este texto y, donde veas 1.8.8, piensa realmente en la versión de CraftBukkit que hayas obtenido al construirlo.

En cuanto a RaspberryJuice, ten en cuenta que existe una versión para cada versión de CraftBukkit. La 1.7 se corresponde con la versión de CraftBukkit 1.8.1, pero en mi experiencia es compatible con cualquier versión 1.8. La tabla de correspondencias se encuentra en esta web: http://dev.bukkit.org/bukkit-plugins/raspberryjuice/, en donde pone Facts (abajo a la derecha).


Podéis dejarme cualquier comentario en esta misma entrada, o enviándome
cualquier comentario a tavés del formulario de contacto (http://pitando.net/contacto) y la dirección de correo que allí os indico.

Un comentario en “Programar Minecraft desde Python, para Windows

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *