TUTO: Programmer en Python avec Minecraft

On m'a demandé un tutoriel plus complet pour apprendre à programmer en python avec Minecraft. En particulier sous Linux. Cela intéresse beaucoup de gens, et les possibilités sont infini. Regardez sur Instructables, des exemples, des gens ont créé un Tétris, des rubans de mobius, mais aussi des horloges.

Généralement pour les enfants, c'est très amusant pour apprendre la programmation. Tous les PC peuvent faire tourner Minecraft, c'est l'avantage, il est très peu gourmand en ressource. Allons-y!

1. Apprendre Python

Il faut bien sur commencer par apprendre python. Je conseil de démarrer simplement en installant sous Linux un IDE comme VScode et lire le livre de Gérard Swinnen, gratuit sur internet. Vous pouvez vous le procurez à cette addresse: Apprendre Python 3 (PDF)

Pour installer VScode et Python sous Arch Linux:

$ sudo pacman -S python code

Une fois VScode installer, télécharger le plugins "Python" sur le logiciel. Pour lancer un script en ligne de commande:

$ python mon_script.py

2. Installer Minecraft

PREREQUIS: Installer Java JDK openjdk package.

Vous allez devoir achetez le jeu, 29€ en "java edition" chez Mojang sur le site web et créer un compte utilisateur via Microsoft. C'est pénible il faut un compte Microsoft et en créer un. La trial version ne permet pas d'utiliser les mods et plugins, on est limité.

Pour installer Minecraft sous Arch Linux il faut utiliser le repo AUR et utiliser un AUR-Helper tel que Yay. Installer Yay. Puis lancer l'installation de Minecraft:

$ yay -S minecraft-launcher

3. Configurer un serveur Spigot avec Raspberryjuice

Télécharger et installer Spigot "BuildTools.jar" dans un dossier buildtools: https://hub.spigotmc.org/jenkins/job/BuildTools/.

Puis installer le serveur Minecraft Spigot en lançant la commande:

$ mkdir buildtools && cd buildtools
$ java -jar BuildTools.jar --rev latest

Puis on créer un dossier pour le fichier spigot.jar que l'on vient de générer que l'on va bouger à l'intérieur.

$ mkdir ~/spigot_server && cd ~/spigot_server

Dans mon cas le fichier générer s'appel: spigot-1.21.1.jar dans mon dossier "buildtools".

On va lancer spigot.jar pour générer les fichiers et dossiers du serveur. Pour lancer pour la première fois avec la commande:

$ java -Xmx1024M -Xms1024M -jar spigot.jar nogui

Le serveur Spigot va générer plusieurs fichiers et dossiers nécessaires pour son fonctionnement, y compris un dossier plugins.

Accepter l'EULA (Contrat de Licence Utilisateur Final)

Lors du premier démarrage, le serveur va s'arrêter automatiquement et te demander d'accepter l'EULA. Ouvre le fichier eula.txt qui se trouve dans le même dossier que spigot.jar et modifie la ligne suivante :

eula=true

Quittez et sauvegarder, et relancer le serveur spigot. Après avoir accepté l'EULA et relancé le serveur, un dossier plugins devrait apparaître dans le répertoire où tu as placé le fichier spigot.jar

Installer le mods depuis Forge RaspberryJuice à cette page: https://www.curseforge.com/minecraft/bukkit-plugins/raspberryjuice

Déplacer le mods "RaspberryJuice.jar" dans le dossier "plugins" de votre serveur spigot.

RELANCE le serveur Minecraft Spigot pour mettre à jour le plugins.

NOTA: Quel est la meilleure commande pour lancer mon serveur Spigot?

java -Xms1G -Xmx4G -XX:+UseG1GC -jar spigot.jar nogui

Explication des paramètres :

  • Xms1G : Définit la mémoire minimum (RAM) allouée au serveur à 1 Go. Cela signifie que le serveur démarrera avec 1 Go de mémoire.
  • Xmx4G : Définit la mémoire maximum allouée au serveur à 4 Go. Ajuste cette valeur en fonction de la RAM disponible sur ton système. Assure-toi de laisser suffisamment de mémoire pour ton système d'exploitation et d'autres processus. Par exemple, si tu as 8 Go de RAM, tu pourrais allouer 4 à 6 Go au serveur Minecraft.
  • XX:+UseG1GC : Utilise le Garbage Collector G1, qui est un ramasse-miettes optimisé pour les applications avec beaucoup d'allocations mémoire, comme un serveur Minecraft. Cela améliore les performances en réduisant les pauses liées à la gestion de la mémoire.
  • jar spigot.jar : C’est l'option qui exécute ton fichier spigot.jar. nogui : Empêche le serveur de lancer une interface graphique inutile, ce qui permet de réduire l'utilisation des ressources.

4. Ecrire le script Python pour intéragir avec Minecraft

Utilise l'API de RaspberryJuice pour interagir avec le serveur Minecraft. Voici un exemple simple d'un script qui envoie un message dans le chat du jeu :

from mcpi.minecraft import Minecraft

# Connexion au serveur Minecraft sur le port de RaspberryJuice
mc = Minecraft.create("localhost", 4711)

# Envoyer un message dans le chat de Minecraft
mc.postToChat("Hello from Python!")

Comment ça fonctionne :

  • Le script Python utilise la bibliothèque mcpi (qui est l'API RaspberryJuice compatible avec Minecraft Pi Edition) pour se connecter à ton serveur Spigot qui tourne sur localhost (si le serveur tourne sur la même machine).
  • Une fois connecté, tu peux interagir avec le monde Minecraft via des commandes Python, comme envoyer des messages dans le chat, manipuler des blocs, ou téléporter des joueurs.
  • Lancer le serveur Spigot : Assure-toi que ton serveur Spigot avec le plugin RaspberryJuice est bien lancé et que tu es connecté à celui-ci via Minecraft. Le serveur doit être en cours d'exécution pour que tes scripts Python puissent interagir avec lui.

5. La documentation de Minecraft-PI

Vous trouverez de la documentation pour intéragir avec l'API sur internet et des exemples:

6. Exemple un ruban de mobius vert dans le ciel

Voici le code:

import math
from mcpi.minecraft import Minecraft

# Connexion au serveur Minecraft
mc = Minecraft.create()

# Définir le point de départ pour le ruban de Möbius dans le ciel
center_x = 0  # Coordonnée X du centre
center_y = 100  # Hauteur dans le ciel
center_z = 0  # Coordonnée Z du centre

# Paramètres du ruban de Möbius
radius = 20  # Rayon de la bande
width = 3  # Largeur de la bande
twists = 1  # Nombre de torsions (un twist pour un ruban de Möbius)
segments = 100  # Nombre de segments pour un rendu lisse
block_id = 5  # ID du bloc vert (Block ID 5 = Bois mais tu peux remplacer par vert)

# Générer le ruban de Möbius
for i in range(segments + 1):
    # Angle autour de la bande
    theta = (2 * math.pi * i) / segments

    # Calcul de la position 3D avec torsion
    x = radius * math.cos(theta)
    z = radius * math.sin(theta)
    y_offset = (width / 2) * math.sin(twists * theta)

    # Position des points dans l'espace
    for j in range(-width // 2, width // 2):
        # Rotation pour ajouter la torsion
        x_offset = j * math.cos(twists * theta)
        z_offset = j * math.sin(twists * theta)

        # Calculer les positions finales
        final_x = center_x + x + x_offset
        final_y = center_y + y_offset + j
        final_z = center_z + z + z_offset

        # Placer les blocs verts pour former le ruban
        mc.setBlock(final_x, final_y, final_z, block_id)

# Message de confirmation
mc.postToChat("Ruban de Möbius vert créé dans le ciel !")