Author: Matheo F.T.

Tutoriels

Comment créer un mod Minecraft facilement ? (MCreator)

Créer un mod Minecraft peut-être très dur car apprendre Java pour faire juste quelque chose de simple peut-être épuisant. Cependant il existe MCreator créer par Pylo qui permet de faire des mods facilement et rapidement ! Ce tuto est orienté vers Minecraft JAVA et les utilisateur Windows.

L’Installation

Premièrement rendez-vous sur https://mcreator.net/
Une fois dessus cliquez sur Download puis descendez jusqu’à trouver le paragraphe nommé Older MCreator downloads pour accéder à toutes les versions disponible.
Ici vous devrez faire un choix, MCreator permet de faire des mods avec Forge de la 1.12.2 à la 1.20.1 et NeoForge de la 1.20.4 à la 1.21.1.
Vous devez donc choisir la version de votre mod :
Voici quel version de MCreator choisir selon la version de votre mod :

1.12.2 : 2020.2
1.14.4 : 2020.5 / 2020.4 / 2020.3 / 2020.2
1.15.2 : 2021.2 / 2021.1 / 2020.5 / 2020.4 / 2020.3
1.16.5 : 2022.2 / 2022.1 / 2021.3 / 2021.2 / 2021.1
1.17.1 : 2021.3
1.18.2 : 2023.1 / 2022.3 / 2022.2 / 2022.1
1.19.2 : 2023.2 / 2023.1 / 2022.3
1.19.4 : 2023.4 / 2023.3 / 2023.2
1.20.1 : 2024.3 / 2024.2 / 2024.1 / 2023.4 / 2023.3
1.20.4 (NeoForge) : 2024.1
1.20.6 (NeoForge) : 2024.2
1.21.1 (NeoForge) : 2024.3

Bien sûr, au plus on utilise des versions récentes au plus on aura de fonctionnalités disponible.
Pour ce tutoriel cependant j’utiliserai la version 2024.3 pour la version 1.20.1

Après avoir téléchargez la version que vous souhaitez sur le site ouvrez le fichier
Après ouverture appuyiez sur Next et I agree

Ensuite choisissez l’emplacement que vous souhaitez pour les fichiers du logiciels et appuyiez sur Install

Bravo vous venez de téléchargez MCreator !

Création du mod (Workspace)

Maintenant nous allons créer notre mod !

Premièrement il faut créer le « Workspace » soit l’emplacement où l’on ajoutera toutes les fonctionnalités que l’on souhaite ! Une fois ouvert vous devriez être sur cette interface (ou une similaire selon la version choisi)

Nous allons donc cliquer sur New workspace

Choisissez entre NeoForge et Forge et remplissez les éléments obligatoires (nom du mod). Voici un exemple de comment cela devrait rendre :

Ensuite appuyiez sur Create new workspace et attendez que tous les éléments obligatoires se créent puis nous pourrons passer à la création de notre premier bloc !

Création d’un bloc

Une fois le workspace créent vous devrez vous trouvez sur une fenêtre comme celle-ci :

Pour créer le premier block vous allez appuyiez sur le + et ensuite bloc

Nommez le comme vous voulez, par exemple je vais le nommer BlocTuto

Pour l’instant nous allons nous intéresser que à la partie encadré en rouge pour mettre les textures du bloc !

Après avoir cliqué sur l’un des carrés une interface proposant des textures de Minecraft devrait s’ouvrir, personnellement je vais créer ma propre texture

Après avoir sélectionné une texture allé directement à la 4ème catégorie en bas

Ici vous avez donc toutes les propriétés de votre bloc

Voici à quoi chacune correspond :

In-game name : Le nom qui apparaitra en jeu
Creative inventory tabs : Dans quel menu créatif il sera répertorié
Hardness : La solidité du bloc (plus élevé = plus long à casser)
Resistance : La résistance du bloc aux explosions
Slipperiness, Jump factor, Speed Factor = Le bloc fait plus ou moins glisser, Sauté plus haut, Allé plus vite
Luminance : Le niveau de lumière émis par le bloc (0 -> 15)
Light opacity : A quel niveau le bloc bloque la lumière (15 = Bloque toute la lumière, 0 = Laisse passer toute la lumière)
Has gravity : Le bloc est soumis à la gravité
Can walk through the block : Passer à travers le bloc
Custom Drop : Si on casse le bloc il donne autre chose que lui même
Drop amout : La quantité d’item qu’il donne quand on le casse
Is unbreakable : Incassable
Vanilla sound set : Utilisé des sons déjà présent dans Minecraft
Custom sound set : Utilisé des sons personnalisés

Ensuite vous pouvez directement appuier sur Save mod element car les autres catégories sont beaucoup plus complexe et donc pas l’intérêt de ce tutoriel

Création d’un item

Nous allons donc maintenant créer notre premier item !
Tout comme le bloc appuyiez sur le + et ensuite Item

Ensuite nommé le comme vous le voulez, personnellement se sera Tuto42
Ensuite tout comme le bloc choisissez une texture et nous irons directement dans l’onglet Properties

Je vais donc expliquer les nouvelles catégories :
Rarity : Rareté de l’objet
Max stack size : Maximum d’objet sur un emplacement
Attack damage : Le nombre de dégâts que l’objet fait sur les entités
Item use count : La durabilité de l’objet
Is item immune to fire : L’objet ne brule pas

Bravo vous venez de créer un objet !

Création d’une recette (craft)

Maintenant nous allons créer une recette, ou un craft. Vous allez donc cliquez sur le plus puis Recipe

Vous allez donc la nommé comme vous voulez puis vous allez avoir cette interface :

Recipe type permet de choisir si c’est une recette avec un four, un table de craft, un fumoir, ect…
Is crafting shapeless signifie qu’il faut juste les objets mais pas l’odre
Ensuite pour créer votre recette appuié sur les carrés du milieu pour les composants et dans le carré de droite pour le résultat, par exemple :

Ensuite enregistrer et puis voilà, vous venez de créer une recette !

Création d’un type de bois

Maintenant créons un type de bois (buche, planches, escaliers, dalle, ect..)
Cela peut paraitre très long mais c’est en réalité très simple !
Cliquez sur Create wood pack :

Une fois que vous avez cliqué dessus mettez le nom puis la couleur :

Ensuite il faudra un peu attendre et puis voilà, vous venez de créer tout un type de bois !

Création d’un minerai

La même chose est possible pour les minerais, il suffit juste de cliquer sur Create ore pack :

Ensuite mettez le nom, la couleur et le type. Qu’est-ce que le type ? C’est simple ! Il y a 3 types :
– Gem = Diamant, Emeraude
– Dust = Redstone
– Ingot = Fer, Or, Cuivre

Ensuite il faudra un peu attendre et puis voilà, vous venez de créer tout un minerai !

Autres fonctionnalités

MCreator permet de faire plein d’autres choses !
Ceci sont vraiment que les bases du logiciel.
Ce logiciel permet de faire des mods très simple, comme des mods très complexe.

Exporter le mod

Maintenant pour exporter le mod cliquez sur le bouton orange en haut à droite

Attendez un peu puis cliquez sur la première proposition

Ensuite vous n’avez plus qu’à choisir l’emplacement et le nom et votre mod est prêt à l’emploi !!!

Bravo, vous avez finit ce tuto !

Projets

Avions de l’armée américaine

Nous avions donc comme premier projet de première de réaliser une image qui se génère grâce à code python que nous devions créer sur une durée de un mois. Nous avons donc choisi de générer un F-16, F-22 et F-35 pour ce projet. Nous devions utiliser le module turtle pour l’image.

Origines de ces avions

Le F-16 est un avion de combat à rôles multiples de l’armée américaine créé dans les années 70.
Le F-22 est un avion de chasse furtif de l’armée américaine créé dans les années 90.
Le F-35 est un avion de combat à rôles multiples de l’armée américaine créé dans les années 2000.

Organisation

Pour réussir à faire le script nous avons dû séparer les différentes parties du code pour s’y repérer. Cela nous a donc permis de faire des appels de fonctions dans le code (rectangle, triangle, étoile, trapèze).
Faire appel à des fonctions permet de réduire la taille du code, cela été utile étant donné la limite de 404 lignes.


Le Script

Nous allons commencer par le début du code

from turtle import *
from random import randint

try:
    from PIL import Image
    pillow_installed = True
except:
    print("Oops! - ModuleNotFoundError: No module named 'PIL' - RTFM :")
    print("https://nsi.xyz/py2png")
    pillow_installed = False

titre = "Avions de l'armée américaine - F16 F22 F35"
title(titre+" | Au lycée, la meilleure spécialité, c'est la spé NSI")

setup(1280, 720)
speed(0)
colormode(255)
hideturtle()

flash = True
if flash:
    wn = Screen()
    wn.tracer(0)

Il permet d’importer les modules nécessaires et initialiser la plupart du code (comme la couleur ou pillow).
« flash » est une nouveauté, il permet de générer instantanément l’image.


LA SAUVEGARDE DES IMAGES

Pour sauvegarder l’image on nous a donné ce code ci-dessous :

image = getcanvas()
nom_du_fichier_sans_extension=titre+"_"+hex(randint(2**30+2**25,2**30+2**25+2**24-1))[2:]

# Génère un fichier .ps
image.postscript(file=nom_du_fichier_sans_extension+".ps", colormode='color')

# Ouvre le fichier .ps et génère le fichier .png


try:
    psimage = Image.open(nom_du_fichier_sans_extension+".ps")
    psimage.load(scale=2)
    psimage_resized = psimage.resize((1280, 720))
    psimage.save(nom_du_fichier_sans_extension+".png")
    print(nom_du_fichier_sans_extension+".png", psimage.size, "sauvegardé dans le dossier")    
        
      except:
    if not pillow_installed:
        print("Oops! - ModuleNotFoundError: No module named 'PIL' - RTFM :")
        print("https://nsi.xyz/py2png")
    else:
        print("Oops! - 'ghostscript' not installed- RTFM :")
        print("https://nsi.xyz/py2png")

Or nous avions besoin d’enregistrer plusieurs images pour montrer les différentes étapes. Nous avons donc transformé ce code en une fonction nommée save() qui permet de sauvegarder l’image à n’importe quel moment dans le code.


LE FOND

La première fonction « drapeau » est le fond de l’image

def drapeau():        
    ligne(-640,640,13)
    rectangle(-640,-24,640,-385,0,(35,45,100))
    pos_y = 325
    for j in range(1,6):
        for i in range(1,7):
            étoile(-700+106*i,pos_y,30)
        pos_y = pos_y-70
    pos_y = 290
    for j in range(1,5):
        for i in range(1,6):
            étoile(-647+106*i,pos_y,30)
        pos_y = pos_y-70

Cette fonction fait elle-même appel à d’autres fonctions. Commençons par la première fonction : « ligne »

def ligne(x,y,repeat):
    for i in range(repeat):
        rectangle(x,y,1280,-720/13,0,(150,20,30))
        y = y-720/13
        rectangle(x,y,1280,-720/13,0,(255,255,255))
        y = y-720/13

La fonction ligne permet de faire toutes les lignes du drapeau soit 13 lignes ou 7 rouges et 6 blanches.
Et à chaque ligne il descend de la résolution de l’image divisée par 13 (car il y a 13 lignes)

Ensuite nous avons la création du rectangle bleu en haut à gauche du drapeau.

rectangle(-640,-24,640,-385,0,(35,45,100))

Ensuite il y a la fonction « étoile »

def étoile(x,y,L):
    setup(x,y,(255,255,255))
    pensize(5)
    for i in range(5):
        forward(L)
        right(144)
    pensize(1)
    end_fill()

La fonction « étoile » utilise « setup » qui est une fonction qui permet de faire le début de toutes les formes et qui est donc utilisée dans la plupart des fonctions.
Cette fonction permet de créer une étoile et avec notre boucle « for » utilisée dans la fonction drapeau on peut créer ainsi les 50 étoiles.


PREMIER AVION : F-16

Le premier avion se situera à gauche de l’image, nous avons donc fait le plus ancien en premier : le F-16

Avant même d’avoir commencé à coder, on a refait les avions avec des formes géométriques pour savoir quelles formes créer et où les mettre.
Voici comment nous avions découpé le F-16 avec plusieurs formes géométriques (des triangles et des rectangles).

# ======================== F-16 ========================

def F16_plane(x,y):
    triangle_iso(-50 + x, -90 + y, 100, 100, (100, 100, 100))
    triangle_iso(-100 + x, -20 + y, 200, 100, (80, 80, 80))
    triangle_iso(-25 + x, 60 + y, 50, 180, (100, 100, 100))
    rectangle(-100 + x, -20 + y, 200, 20, 0, (70, 70, 70))
    rectangle(-10 + x, -110 + y, 20, -250, 0, (100, 100, 100))
    rectangle(-20 + x, -70 + y, 40, -130, 0, (100, 100, 100))

    for i in range(0, 66, 65):
        rectangle(-50 + i + x, -110 + y, 35, -20, 0, (80, 80, 80))

    for i in range(0, 203, 202):
        rectangle(-102 + i + x, -42 + y, 2, -55, 0, (70, 70, 70))

# ======================== COCKPIT F-16 ========================

    rectangle(-10 + x, 130 + y, 20, 50, 0, (10, 10, 10))
    triangle_iso(-10 + x, 80 + y, 20, -15, (10, 10, 10))
    cercle(10, 0 + x, 130 + y, (10, 10, 10))

Nous avons donc utilisé ces formes là pour créer l’avion puis ensuite fait un cockpit en noir. On a joué avec l’obscurité des couleurs pour créer un effet de profondeur.


DEUXIEME AVION : F-22

Le deuxième avion se situera au milieu de l’image, ce sera donc le F-22

Tout comme le F-16 nous avons d’abord refait le F-22 avec des formes géométriques.
Voici comment nous avons refait le F-22 avec les formes géométriques (des triangles et des rectangles).

La forme finale n’est pas exactement la même car nous avons décidé de modifier certaines choses pour que la forme soit plus ressemblante.

# ======================== F-22 ========================

def F22_plane(x,y):

    triangle_iso(-150+x,-20+y,300,150, (155, 155, 155))
    rectangle(-150+x,-40+y,300,-20, 0, (155, 155, 155))
    triangle_iso(-150+x,-40+y,300,-50, (155, 155, 155))
    rectangle(-85+x,-85+y,60,45, 45, (155,155,155))
    rectangle(-85+x,-85+y,30,30, 0, (155,155,155))
    rectangle(85+x,-85+y,-60,45, -45, (155,155,155))
    rectangle(85+x,-85+y,-30,30, 0, (155,155,155))
    rectangle(-30+x,-85+y,60,-220, 0, (160, 160, 160))
    for i in range(0,31,30):
        triangle_iso(-25+i+x,-85+y,20,-10, (50, 50, 50))
    triangle_iso(-30+x,135+y,60,50, (160, 160, 160))
    rectangle(-15+x,140+y,30,-80, 0, (160, 160, 160))
    triangle_iso(-15+x,220+y,30,35, (160, 160, 160))
    
# ======================== COCKPIT F-22 ========================

    triangle_iso(-10+x,160+y,20,-15,(255,190,0))
    rectangle(-10+x,160+y,20,-30,0,(255,190,0))
    trapèze(-10+x,190+y,20,20,10,(255,190,0))
    triangle_iso(-5+x,210+y,10,5,(255,190,0))

Pour éviter de créer une fonction losange nous avons mis l’orientation de base de la fonction rectangle donc en mettant l’orientation à 45° ou -45° cela nous a permis d’avoir des losanges.


TROISIEME AVION : F-35

Le troisième avion se situera à droite de l’image, ce sera donc le plus récent : le F-35

Tout comme les deux autres avions nous avons d’abord refait le F-35 avec des formes géométriques.
Voici le schéma du F-35 fait avec des formes géométriques (triangles, rectangles et trapèzes). Cet avion est celui que nous avons dû le plus modifier

#========================= F-35 ================================
    
def F35_plane(x,y):
    
    triangle_iso(-125+x,-20+y,250,150,(130,130,130))
    rectangle(-125+x,-20+y,250,25,0,(130,130,130))
    triangle_iso(-125+x,-45+y,250,-45,(130,130,130))
    triangle_iso(-30+x,80+y,60,110,(130,130,130))
    trapèze(-50+x,60+y,30,60,20,(130,130,130))
    trapèze(20+x,60+y,30,60,20,(130,130,130))
    trapèze(-20+x,120+y,40,70,20,(130,130,130))
    triangle_iso(-10+x,190+y,20,15,(130,130,130))
    trapèze(-15+x,-85+y,30,-20,20,(50,50,50))
    rectangle(-50+x,-115+y,50,-40,45,(130,130,130))
    rectangle(-80+x,-89+y,40,30,0,(130,130,130))
    rectangle(80+x,-85+y,50,-40,135,(130,130,130))
    rectangle(40+x,-89+y,40,30,0,(130,130,130))
    
#========================== COCKPIT F-35 ========================
    
    trapèze(-9+x,160+y,18,-35,40,(15,15,15))
    trapèze(-9+x,160+y,18,15,5,(15,15,15))
    rectangle(-18+x,125+y,36,10,0,(15,15,15))
    trapèze(-18+x,115+y,36,-20,10,(15,15,15))

Le F-35 fut le plus compliqué à faire étant donné la fonction trapèze très complexe à utiliser mais après un moment nous avons réussit à le finir.

LE NOM DES AVIONS

Maintenant que nous avons les différents avions nous avons décidé de mettre leur nom sous chacun d’eux. Pour cela, il nous fallait générer les caractères : F – 1 2 3 5 6

Donc nous avons créé 7 fonctions pour les 7 caractères différents.

#========================= CARACTERES =====================

def F(x,y):
    rectangle(-50+x,y,10,100,0,(0,0,0))
    rectangle(-50+x,y-30,30,10,0,(0,0,0))
    rectangle(-50+x,y,50,10,0,(0,0,0))

def tiret(x,y):
    rectangle(x,y,30,10,0,(0,0,0))

def un(x,y):
    rectangle(x,y,10,100,0,(0,0,0))
    rectangle(x,y-15,-20,10,0,(0,0,0))

def deux(x,y):
    rectangle(x,y,50,10,0,(0,0,0))
    rectangle(x,y-90,50,10,0,(0,0,0))
    rectangle(x,y-50,50,10,0,(0,0,0))
    rectangle(x,y-90,10,-30,0,(0,0,0))
    rectangle(x+40,y-50,10,-40,0,(0,0,0))

def trois(x,y):
    rectangle(40+x,y,10,100,0,(0,0,0))
    rectangle(x,y,50,10,0,(0,0,0))
    rectangle(x,y-50,50,10,0,(0,0,0))
    rectangle(x,y-90,50,10,0,(0,0,0))

def cinq(x,y):
    rectangle(x,y,50,10,0,(0,0,0))
    rectangle(x,y,10,50,0,(0,0,0))
    rectangle(x,y-90,50,10,0,(0,0,0))
    rectangle(x+40,y-90,10,-30,0,(0,0,0))  
    rectangle(x,y-50,50,10,0,(0,0,0))

def six(x,y):
    rectangle(x,y,50,10,0,(0,0,0))
    rectangle(x,y,10,100,0,(0,0,0))
    rectangle(x,y-90,50,10,0,(0,0,0))
    rectangle(x+40,y-90,10,-30,0,(0,0,0))
    rectangle(x,y-50,50,10,0,(0,0,0))

Maintenant, que nous avons les lettres, il nous suffit d’y faire appel pour créer les noms.

Premièrement le F-16 :

def F_16(x,y):
    F(x,y)
    tiret(x,y-50)
    un(x+50,y)
    six(x+70,y)

Ensuite le F-22 :

def F_22(x,y):
    F(x,y)
    tiret(x,y-50)
    deux(x+40,y)
    deux(x+100,y)

Et dernièrement le F-35 :

def F_35(x,y):
    F(x,y)
    tiret(x,y-50)
    trois(x+40,y)
    cinq(x+100,y)

Les difficultés

La principale difficulté était de trouver les bonnes proportions et coordonnées à mettre pour positionner les formes.

Au début, une autre difficulté que nous avons rencontrée était d’utiliser des fonctions pour créer les avions, mais nous avons rapidement réussi.

L’IMAGE FINALE

Le fichier .py