Utiliser le FFMTAPI
-
Présentation
Je vous invite à vous référer à ce sujet!
Prérequis
Il vous faut connaître les bases en modding, pour cela consultez les autres tutoriels du forum!
Installation
Pour cela il vous suffit de télécharger l’api ici
Il vous faut un fichier nommé FFMT-API-src-x.x.x.x-mcx.x.x.zip.Ensuite vous devez extraire le contenu de l’archive dans le dossier forge/mcp/src/minecraft/
Et voilà l’api est installé!Utilisation
Pour utiliser une fonction de l’api, vous devrez écrire une ligne de ce style:
NomDeLaClass.nomDeLaFonction(argument1, argument2, …)FFMTRegistry
Dans cette class nous trouvons une fonction pour les blocs, vous permet de lui faire spawn des particules, elle est à placer dans une autre fonction comme onBlockActivated().
spawnParticles(int speed, String particles, World world, int posX, int posY, int posZ, Random random, double velX, double velY, double velZ)
Arguments:
1:Integer, il définit la vitesse d’apparition des particules
2:String, c’est le nom de votre particule (exemple: “smoke”, “largeSmoke”, etc)
3:World, c’est le monde où est le bloc, il faut utiliser celui qui est dans la fonction ou cette fonction ce trouve
4:Integer, position x du bloc
5:Integer, position y du bloc
6:Integer, position z du bloc
7:Random, un fonction de random à déclarer
8:Double, vélocité x (s’il n’est pas spécifier il est automatiquement mis à 0.0)
9:Double, vélocité y (s’il n’est pas spécifier il est automatiquement mis à 0.0)
10:Double, vélocité z (s’il n’est pas spécifier il est automatiquement mis à 0.0):::
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float f, float g, float t) { Random random = new Random; FFMTRegistry.spawnParticles(10, "smoke", world, x, y, z, Random random, 0.5D, 0.8D, 1.2D); }
Voici une fonction pour ajouter une recette au four avec un metadata:
addSmeltingWithMetadata(int input, int metadata, ItemStack output, float xp)
Arguments:
1:Integer, id du bloc/item
2:Integer, metadata du bloc/item
3:ItemStack, résultat de la cuisson
4:Float, xp donné après opérationFFMTRegistry.addSmeltingWithMetadata(Bloc.blockID, 3, new ItemSpawn(item, 1), 0.5F)
Maintenant je vais vous parler des fonction de craft en masse (elles sont à mettre dans la class principale):
Armures:addArmorCrafting(ItemStack material, int type, ItemStack output)
Arguments:
1:ItemStack, le bloc/item utiliser dans le craft
2:Integer, la pièce d’armure à craft (0:Casque, 1:Plastron, 2:Pantalon, 3:Bottes)
3:ItemStack, la pièce d’armure terminéeFFMTRegistry.addArmorCrafting(new ItemStack(Block.dirt, 1), 1, new ItemStack(Item.plastron, 1));
Et pour toutes les armures en un coup:
addAllArmorCrafting(ItemStack material, ItemStack outputHelmet, ItemStack outputChestPlate, ItemStack outputLeggings, ItemStack outputBoots)
Arguments:
1.ItemStack, le bloc/item utiliser dans le craft
2.ItemStack, le casque
3.ItemStack, le plastron
4.ItemStack, le pantalon
5.ItemStack, les bottesFFMTRegistry.addAllArmorCrafting(new ItemStack(Block.dirt, 1), new ItemStack(Item.casque, 1), new ItemStack(Item.plastron, 1), new ItemStack(Item.pantalon, 1), new ItemStack(Item.bottes, 1))
Outils:
addToolsCrafting(ItemStack material, int type, ItemStack output, ItemStack stick)
Arguments:
1:ItemStack, le bloc/item utiliser dans le craft
2:Integer, l’outil à craft (0:Hache, 1:Pelle, 2:Bèche, 3:Pioche, 4:épée)
3:ItemStack, l’outil terminé
4:ItemStack, le bâton utiliserFFMTRegistry.addToolsCrafting(new ItemStack(Block.dirt, 1), 1, new ItemStack(Item.Pelle, 1), new ItemStack(Item.stick, 1));
Et pour tout les outils:
addAllToolsCrafting(ItemStack material, ItemStack outputAxe, ItemStack outputShovel, ItemStack outputHoe, ItemStack outputPickaxe, ItemStack outputSword, ItemStack stick)
Arguments:
1.ItemStack, le bloc/item utiliser dans le craft
2.ItemStack, la hache
3.ItemStack, la pelle
4.ItemStack, la bèche
5.ItemStack, la pioche
6.ItemStack, l’épée
7.ItemStack, le bâtonFFMTRegistry.addAllToolsCrafting(new ItemStack(NanotechItem.ItemBase, 1, 14), new ItemStack(NanotechItem.Nanomiteaxe, 1), new ItemStack(NanotechItem.Nanomiteshovel, 1), new ItemStack(NanotechItem.Nanomitehoe, 1), new ItemStack(NanotechItem.Nanomitepickaxe, 1), new ItemStack(NanotechItem.Nanomitesword, 1), new ItemStack(Item.stick, 1));
Source: Nanotech_mod
Et voici une fonction pour faire un check MAJ:
registerVersionCheck(FMLPreInitializationEvent event, String versionUrl, String downloadurl, String modname, String actuallyversion)
Arguments:
1:FMLPreInitializationEvent, vous avez juste à mettre la fonction dans le PreInit et à mettre “event”
2:String, lien vers le fichier.txt avec la version dedans. Dans ce fichier txt vous devez mettre la dernière version du mod
3:String, lien vers la page de téléchargement du mod
4:String, le nom du mod
5:String, la version actuelle du modFFMTRegistry.registerVersionCheck(event, "http://dl.mcnanotech.fr/FFMT/API/download/version.txt", "http://dl.mcnanotech.fr/FFMT/API/download/", "FFMT API", "1.0.2");
Nous en avons finit pour la class FFMTRegistry.
FFMTEntityHelper
On commence avec un fonction pour faire spawn de la fumée à une entité, même fonctionement que pour le bloc:
spawnSmokeParticles(int speed, EntityLiving entity, double xVel, double yVel, double zVel, double xPosition, double yPosition, double zPosition)
Arguments:
1.Integer, la vitesse de spawn
2.EntityLiving, l’entité en question
3.Double, vélocité x
4.Double, vélocité y
4.Double, vélocité z
5.Double, position x (Non obligatoire)
6.Double, position y (Non obligatoire)
7.Double, position z (Non obligatoire)public void onLivingUpdate() { FFMTEntityHelper.spawnSmokeParticles10, (EntityLiving)this, 0.5D, 0.5D, 0.5D) }
Une fontion pour enregistrer une entité mais autre qu’un mob:
addOtherEntity(Class entityClass, String entityName, int id, Object mod, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates)
Arguments:
1.Class, une class extends Entity
2.String, le nom de l’entité
3.Integer, l’id
4.Object, l’instance du mod
5.Integer, la distance sur laquelle l’entité vous traque
6.Integer, la fréquence d’update de l’entité
6.Boolean, si l’entité met à jour ça vélocitéJe ne l'est jamais utilisée, je laisse à son créateur nous montrer comment faire
Et voilà la dernière fonction de cette classe, celle qui vous permet d’enregistrer un mob en une seule ligne.
addMob(Class entityClass, String entityName, int id, Object mod, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates, int backGroundEggColour, int foreGroundEggColour, int weightedProb, int minSpawn, int maxSpawn, EnumCreatureType creatureType, BiomeGenBase… biome)
Arguments
1.Class, une class extends Entity
2.String, le nom du mob
3.Integer, l’id du mob dans le mod
4.Object, l’instance du mod
5.Integer, distance de traque du mob
6.Integer, fréquence de mise à jour du mob
7.Boolean, si le mob met à jour ça vélocité
8.Integer, couleur arrière de l’oeuf
9.Integer, couleur avant de l’oeuf
10.Integer, probabilité de spawn
11.Integer, spawn minimum par chunk
12.Integer, spawn maximum par chunk
13.EnumCreatureType, le type de créature
14.BiomeGenBase… , les biomes où spawn le mod (Non obligatoire)(vous pouvez mettre le nombre de biomes que vous souhaitez)FFMTEntityHelper.addMob(ClassDuMob.class, "Mob", 0, Mod.instance, 100, 1, true, FFMTColor.blackInt, FFMTColor.blueInt, 5, 2, 7, EnumCreatureType.UNDEAD, BiomeGenBase.desert, BiomeGenBase.plain)
Explication des “FFMTColor.blackInt” “FFMTColor.blueInt” juste en dessous.
! FFMTColor
! Cette classe sera vite abordée, en effet le système est toujours le même, dans l’exemple de la méthode addMob() j’ai écrit FFMTColor.blackInt au niveau de la couleur arrière de l’oeuf de spawn, et bien c’est tout le fonctionnement de cette classe, s’il vous faut une couleur en int , il vous suffit d’écrire FFMTColor.nomDeLaCouleurInt, et là vous aller me dire “mais pourquoi y a-t-il Int à la fin?”. Et bien c’est car il existe aussi FFMTColor.black (par exemple) mais cette fois-ci c’est pour les String, dans le tchat, les guis, etc.
! >! Pour les int, voir méthode addMob(), et pour les String:player.addChatMessage(FFMTColor.darkBlue + "écrit en bleu foncé");
! FFMTEntityMobCustomized
! Je laisse elias54 rédiger cette partie car c’est lui qui a créé cette class et je ne l’est pas utilisée.
! Vérificateur de mise à jour
! Voici un vérificateur de mise à jour (ou Version checker), l’idée est de elias54 et robin4002 l’a amélioré.
Pour l’utiliser, dans le PreInit de la class principale vous ajoutez:
!Compilation
! Pour cela il vous suffit de compiler votre mod normalement, mais vous ne devez pas ajouter de dossier “fr” qui se trouve dans votre dossier reobf, après cela, pour l’utiliser, vous glisser votre mod et l’archive de l’API universal dans le dossier .minecraft/mods/, avec, bien sûr, Forge installé.
-
Tutoriel finit pour moi, j’ai mis tout ce que je pouvais, après je laisse elias compléter la partie vide qui le concerne.
-
Super ! Je pense que je l’utiliserais
Un petit problème, le tuto pour le vérificateur de mise à jour est expliqué 2 fois ^^ -
Le post pourrai être mis à jour please
-
Un nouveau est en cours de préparation depuis un moment, il sera disponible dès la 1.7.
-
Où doit-on extraire l’archive si on utilise Gradle au lieu de MCP ?
-
Elle se trouve ici
-
Suffit juste de passer par le build.gradle maintenant comme montré dans le readme.
https://github.com/FFMT/FFMT-libs/blob/master/README.md -
J’ai installé l’api mais quand j’ouvre eclipse ca me dis ca:
Description Resource Path Location Type Project 'Minecraft' is missing required library: 'C:\Users\Hugo\Desktop\Mod Harry Potter\forge-1.7.10-10.13.2.1230-src\unresolved dependency - fr.minecraftforgefrance FFMT-libs ${version}-mc${mcversion}' Minecraft Build path Build Path Problem
-
Il faut remplacer version et mcversion par les bonnes valeurs …
-
Mdrr je me disais, c’est cool ça détecte auto ta version! Mais en fait je suis juste con