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.
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 du tutoriel
- Pré-requis
- Créer votre Deferred Registry
- Enregistrer vos Objets
- Faire appel à votre Deferred Registry
- Résultat
- Licence et attribution
Pré-requis
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 exempleAttention
N’oubliez pas de remplacer la valeur
"tutoriel"
par votre ID de mod !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))); }
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()
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.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
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