Créer vos Deferred Registries (ou Registres Différés)
-
Sur le forum et sur le discord, j’ai remarqué que beaucoup de personnes ne comprenaient pas comment utiliser les Deferred Registries qui sont un outil puissant pour l’enregistrement des objets du jeu comme les blocks, les items, les enchantements, etc.
!!! warning [Attention]: Dans le tutoriel, à de multiples reprises, je parle “d’objets” pour désigner les différents types présent dans le jeu comme les blocks, les items ou les enchantements, mais je ne parle pas des items en tant que tels
#sommaire(Sommaire du tutoriel)
- Pré-requis
- Créer votre Deferred Registry
- Enregistrer vos Objets
- Faire appel à votre Deferred Registry
- Résultat
- Licence et attribution
#prerequis(Pré-requis)
#creer-appel(Créer votre Deferred Registry)
Pour créer votre Deferred Registry, vous devez d’abord créer une classe, pour moi ce sera
TutoBlocks
:public class TutoBlocks { }
Ensuite vous devez créer une instance constante de
DeferredRegister<>
comme ci-dessous :public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, "tutoriel");
Ici vous pouvez changer le type d’objet à enregistrer en modifiant les valeurs :
ForgeRegistries.BLOCKS
etDeferredRegister<Block>
,
en :
ForgeRegistries.ITEMS
etDeferredRegister<Item>
par exemple!!! warning [Attention]: N’oubliez pas de remplacer la valeur
"tutoriel"
par votre ID de mod !#enregistrer-objets(Enregistrer vos Objets)
Pour enregistrer vos objets, vous allez devoir créer pour chacuns d’eux une constante qui les représentera, comme ci-dessous :
public static final RegistryObject<Block> BLOCK_TUTORIEL = BLOCKS.register("block_tutoriel", () -> new Block(Block.Properties.create(Material.GOURD)));
Ici, j’ai créer une constante qui a pour nom
BLOCK_TUTORIEL
qui représente mon block. Pour l’enregistrer il faut passer par la méthoderegister
de notre constanteBLOCKS
créée plus haut. Elle prend comme paramètres unString
, le nom de registre (ou Registry Name en anglais), ici “block_tutoriel” qui est un nom unique défini pour votre objet et unSupplier
qui se crée à partir de() ->
.Normalement vous devez avoir quelque chose comme cela :
public class TutoBlocks { public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, "tutoriel"); public static final RegistryObject<Block> BLOCK_TUTORIEL = BLOCKS.register("block_tutoriel", () -> new Block(Block.Properties.create(Material.GOURD))); }
!!! info [Note]: Un Supplier est une opération qui consiste à retourner un résultat uniquement quand il est appelé.
Vous devez donc pour obtenir votre block dans votre code :BLOCK_TUTORIEL.get()
#creer-appel(Faire appel à votre Deferred Registry)
Pour terminer, il suffit simplement d’enregistrer votre constante
BLOCKS
dans la classe principale de votre mod :@Mod("tutoriel") public class TutorielMod { public TutorielMod() { // Il y a d'autre chose ici mais elles ne sont pas représentées TutoBlocks.BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus()); } }
FMLJavaModLoadingContext.get().getModEventBus()
est unIEventBus
c’est-à-dire une classe qui va avoir une instance pour chaque mod et où notre mod va enregistrer tous ses objets.#resultat(Fin)
Normalement votre block devrait être dans le jeu et vous pouvez le placer dans le monde !
Ceci est mon premier tutoriel sur le forum donc dites moi si je pourrais améliorer certaines choses ou certaines explications .
#licence-et-attribution(Licence et attribution)
Ce tutoriel rédigé par Eno_gamer10, corrigé par Eno_gamer10 et publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International