Raspberry Pi, Minecraft et Python

Aujourd’hui je vous parle de quelque chose qui existe depuis un bon moment et dont plusieurs sites ont déjà parlé : l’édition Minecraft sur le Raspberry Pi. A mon tour de (enfin) découvrir ce jeu autrement que sur iOS !

raspberry pi - minecraft

Pour découvrir les possibilités de l’API (car c’est surtout ça que je voulais tester), je suis donc parti d’une distribution allégée au maximum (voir ici comment l’installer très simplement) sur laquelle j’ai ajouté un serveur X. J’obtiens donc le strict minimum. Mais si chez vous vous avez déjà un Raspberry Pi qui fonctionne, vous pouvez passer directement à l’étape d’installation de Minecraft.

  1. Mise à jour du système
    apt-get update && apt-get upgrade -y
  2. Installation des paquets pour un serveur X minimal
    apt-get install -y xserver-xorg xinit xserver-xorg-video-fbdev lxde lxde-common libsdl1.2debian
  3. Télécharger et installer Minecraft
    wget https://s3.amazonaws.com/assets.minecraft.net/pi/minecraft-pi-0.1.1.tar.gz
    tar -zxvf minecraft-pi-0.1.1.tar.gz
    cd mcpi
  4. Lancer Minecraft
    ./minecraft-pi

    Si vous avez une erreur Failed to Add Service – Already in Use , assurez vous d’avoir défini au moins 64Mb de mémoire vidéo.

  5. Les fichiers nécessaires pour utiliser l’API sont dans le répertoire api/python (si vous préférez du java, c’est api/java).
    Copier les fichiers dans un répertoire particulier

    mkdir apiTest
    cp -R api/python/mcpi/* apiTest/
  6. Aller dans le répertoire créé
    cd apiTest
  7. Créer un fichier, par exemple test.py avec le contenu suivant :
    import minecraft
    
    mc = minecraft.Minecraft.create()
    mc.postToChat("Hello Pi Home Server !")
    

    Le résultat à l’exécution :
    raspberry pi - minecraft - chat message

  8. La position du joueur. Vous pouvez facilement obtenir ou définir la position du joueur dans l’univers via les méthodes player.getPos() et player.setPos(). Vous allez travailler dans 3 dimensions. X et Z sont les axes horizontaux. Y est l’axe vertical.
    Voici un exemple pour changer la position du joueur et le faire tomber de haut !

    # pos will contain x, y and z position of the player
    pos = mc.player.getPos()
    # another way to get player coordinates
    x, y, z = mc.player.getPos()
    
    # set player position. In the air and fall ...
    mc.player.setPos(x, y+100, z)
    
  9. Créer un bloc avec la méthode setBlock
    Un exemple pour créer un bloc de pierre devant le joueur

    mc.setBlock(x+2, y, z, block.STONE)
    
  10. Créer des blocs avec la méthode setBlocks
    Un exemple pour créer un bloc de 3×3 en pierre devant le joueur

    mc.setBlocks(x+1, y+1, z+1, x+4, y+4, z+4, block.STONE)
    

    raspberry pi - minecraft - big block

  11. D’autres blocs que de la pierre. Tous les types sont définis dans le fichier block.py. En voici la liste :
    AIR                 = 0
    STONE               = 1
    GRASS               = 2
    DIRT                = 3
    COBBLESTONE         = 4
    WOOD_PLANKS         = 5
    SAPLING             = 6
    BEDROCK             = 7
    WATER_FLOWING       = 8
    WATER               = WATER_FLOWING
    WATER_STATIONARY    = 9
    LAVA_FLOWING        = 10
    LAVA                = LAVA_FLOWING
    LAVA_STATIONARY     = 11
    SAND                = 12
    GRAVEL              = 13
    GOLD_ORE            = 14
    IRON_ORE            = 15
    COAL_ORE            = 16
    WOOD                = 17
    LEAVES              = 18
    GLASS               = 20
    LAPIS_LAZULI_ORE    = 21
    LAPIS_LAZULI_BLOCK  = 22
    SANDSTONE           = 24
    BED                 = 26
    COBWEB              = 30
    GRASS_TALL          = 31
    WOOL                = 35
    FLOWER_YELLOW       = 37
    FLOWER_CYAN         = 38
    MUSHROOM_BROWN      = 39
    MUSHROOM_RED        = 40
    GOLD_BLOCK          = 41
    IRON_BLOCK          = 42
    STONE_SLAB_DOUBLE   = 43
    STONE_SLAB          = 44
    BRICK_BLOCK         = 45
    TNT                 = 46
    BOOKSHELF           = 47
    MOSS_STONE          = 48
    OBSIDIAN            = 49
    TORCH               = 50
    FIRE                = 51
    STAIRS_WOOD         = 53
    CHEST               = 54
    DIAMOND_ORE         = 56
    DIAMOND_BLOCK       = 57
    CRAFTING_TABLE      = 58
    FARMLAND            = 60
    FURNACE_INACTIVE    = 61
    FURNACE_ACTIVE      = 62
    DOOR_WOOD           = 64
    LADDER              = 65
    STAIRS_COBBLESTONE  = 67
    DOOR_IRON           = 71
    REDSTONE_ORE        = 73
    SNOW                = 78
    ICE                 = 79
    SNOW_BLOCK          = 80
    CACTUS              = 81
    CLAY                = 82
    SUGAR_CANE          = 83
    FENCE               = 85
    GLOWSTONE_BLOCK     = 89
    BEDROCK_INVISIBLE   = 95
    STONE_BRICK         = 98
    GLASS_PANE          = 102
    MELON               = 103
    FENCE_GATE          = 107
    GLOWING_OBSIDIAN    = 246
    NETHER_REACTOR_CORE = 247
    

    Voici un petit exemple qui va créer un bloc et changer son type (sauf eau et lave pour éviter les débordements ;-)) toutes les secondes (je ne gère pas les types qui n’existent pas) :

    # loop on all block types (except water and lava)
    for blockType in range(0, 300):
    	if blockType < 8 or blockType > 11:
    		mc.setBlock(x+2, y, z, blockType)
    	sleep(1)
    
  12. Exemples plus aboutis ! Vous pouvez utiliser la puissance de la programmation pour animer les blocs du monde. Vous pouvez créer une horloge analogique ou digitale (bravo SleepyOz):

raspberry pi - minecraft - analog clock

raspberry pi - minecraft - digital clock

 

 

 

Grâce à ce trio vous pouvez vous divertir (ou vos enfants) et apprendre la programmation de manière générale avec Python qui est un langage relativement accessible. D’autres langages sont possibles : Java, Javascript avec NodeJS, Ruby ou encore SmallTalk.

Comme dans le jeu, seule votre imagination sera une limite.

Si vous avez des images ou vidéos originales ou bluffantes de ce qui se fait avec l’édition Minecraft Pi, n’hésitez pas à nous en faire profiter !

Sources

Vous aimerez aussi...

  • Scandiva_0

    Super article ! Un des premiers du genre que l’on trouve en français !