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 !
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.
- Mise à jour du système
apt-get update && apt-get upgrade -y
- Installation des paquets pour un serveur X minimal
apt-get install -y xserver-xorg xinit xserver-xorg-video-fbdev lxde lxde-common libsdl1.2debian
- 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
- 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.
- 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 particuliermkdir apiTest
cp -R api/python/mcpi/* apiTest/
- Aller dans le répertoire créé
cd apiTest
- Créer un fichier, par exemple test.py avec le contenu suivant :
import minecraft mc = minecraft.Minecraft.create() mc.postToChat("Hello Pi Home Server !")
- 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)
- Créer un bloc avec la méthode setBlock
Un exemple pour créer un bloc de pierre devant le joueurmc.setBlock(x+2, y, z, block.STONE)
- Créer des blocs avec la méthode setBlocks
Un exemple pour créer un bloc de 3×3 en pierre devant le joueurmc.setBlocks(x+1, y+1, z+1, x+4, y+4, z+4, block.STONE)
- 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)
- 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):
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
- https://www.raspberrypi.org/forums/viewtopic.php?t=33427
- https://www.raspberrypi.org/learning/getting-started-with-minecraft-pi/worksheet/
- http://www.stuffaboutcode.com/p/minecraft-api-reference.html