ENREGISTER un item



  • Bonjour, je ne suis pas un débutant en java mais je suis récemment passer du modding 1.7.10 à 1.12 et je ne trouve plus comment enregistrer, j'aimerais que vous m'aideriez à compléter la fonction GameRegistry (ne fonctionnant pas avec le code présent)

    Merçi d'avance

    package init;
    
    import com.mod.TGOTG.Reference;
    
    import items.ItemVikingAxe;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.renderer.block.model.ModelResourceLocation;
    import net.minecraft.item.Item;
    import net.minecraftforge.fml.common.registry.GameRegistry;
    
    public class ModItems
    {
    public static Item Viking_axe;
    
    public static void init()
    {
    Viking_axe = new ItemVikingAxe();
    }
    
    public static void register()
    {
    GameRegistry.register(Viking_axe);
    }
    
    public static void registerRenders()
    {
    registerRender(Viking_axe);
    }
    
    private static void registerRender(Item item)
    {
    Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
    }
    }
    

  • Administrateurs

    Salut,
    Il faut passer par l'event RegistryEvent.Register https://www.minecraftforgefrance.fr/showthread.php?tid=4367



  • CC, j'ai fait Ce code mais je ne suis pas sur qu'il sois sois juste car  j'ai toujours la même erreur

    public static void register()
    {
    RegistryEvent.Register<itemvikingaxe>;
    }
    
    ```</itemvikingaxe>

  • Administrateurs

    Tu n'as pas regardé le lien que je t'es envoyé.



  • Si mais j'aimerais enregistrer mes items dans la class de base (1er code que je t envoyer) et pas recrée une autre class

    1. RegisteringHandler c'est possible ?


  • Coucou moi j'ai utilisé ses deux fonctions (la première pour le registry et le nom délocalisé et la seconde pour enregistrer mes items)

    public static void setItemName(Item item, String name)
        {
            // ici on va attribuer un nom à nos objets
            item.setRegistryName(Reference.MODID, name).setUnlocalizedName(Reference.MODID + "." + name);
        }
    
    public static void registerItem(Item item){
    ForgeRegistries.ITEMS.register(item);
    ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory"));
    }
    


  • J'ai essayer ton code, il n'y a pue d'erreur mais l'item n'est toujours pas implenter 😢

    package init;
    
    import com.mod.TGOTG.Reference;
    
    import items.ItemVikingAxe;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.renderer.block.model.ModelResourceLocation;
    import net.minecraft.item.Item;
    import net.minecraftforge.client.model.ModelLoader;
    import net.minecraftforge.event.RegistryEvent;
    import net.minecraftforge.fml.common.registry.ForgeRegistries;
    import net.minecraftforge.fml.common.registry.GameRegistry;
    
    public class ModItems
    {
    public static Item Viking_axe;
    
    public static void init()
    {
    Viking_axe = new ItemVikingAxe();
    }
    
    public static void registerRenders()
    {
    registerRender(Viking_axe);
    }
    
    private static void registerRender(Item item)
    {
    Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
    }
    
    public static void register()
    {
    ForgeRegistries.ITEMS.register(Viking_axe);
    ModelLoader.setCustomModelResourceLocation(Viking_axe, 0, new ModelResourceLocation(Viking_axe.getRegistryName(), "inventory"));
    }
    }
    


  • Pourquoi s’embêter avec des methods ???? faites le instruction par instruction c'est tellement plus simple quand l'on débute a modder en 1.10 🙂


  • Rédacteurs

    Suivez les tutoriels



  • Est-ce que tu as bien une classe RegistryHandler avec au moins ça dedans ?

    public class RegisteryHandler {
    
    public static void Client(){
    
    }
    public static void Common()
    {
    NomClasse.init();
    NomClasse.register();}
    }
    

    et j'aimerais voir tes proxy aussi s'il te plaît


  • Administrateurs

    C'est quoi cette convention très mal respectée ? Ensuite, il serait peut être temps d'arrêter de vous servir d'un classe poubelle (RegisteryHandler), il vaut mieux réunir tous les blocs ensemble, etc…



  • Je comprend pas les gens commencer par le modding avant de connaitre le langage à employer ce qui fait que le modder est complètement paumé dans un truc qui se nomme le "Code" et le rend dépendent d'autres personnes pour écrire son code



  • Merci de ta remarque Superloup10 je pense et j'espèreavoir correctement modifié mon poste pour respecter la convention java.Mais personnellment je ne pense pas que ma classe  RegistryHandler soit encore une classe "poubelle" elle sert juste a centralisé mes autres classe (j'ai maintenant une classe BlockInit une ArmorInit etc…) Elle me sert juste à éviter de surcharger ma classe principale  😉



  • Oui, j'ai une classe RegistryHandler qui contient exactement ton code à la ligne près et voila mes proxy

    Le client :
    
    package com.mod.tgotg.client;
    
    import java.io.File;
    
    import com.mod.tgotg.TgotgCommon;
    
    public class TgotgClient extends TgotgCommon
    {
    
    @Override
    public void preInit(File configFile)
    {
    super.preInit(configFile);
    System.out.println("pre init côté Client");
    }
    
    @Override
    public void Init()
    {
    super.Init();
    }
    
    }
    
    

    Le server

    package com.mod.tgotg.server;
    
    import java.io.File;
    
    import com.mod.tgotg.TgotgCommon;
    
    public class TgotgServer extends TgotgCommon
    {
    
    @Override
    public void preInit(File configFile)
    {
    super.preInit(configFile);
    System.out.println("pre init côté serveur");
    }
    
    @Override
    public void Init() {
    
    super.Init();
    }
    
    }
    
    

    Le common

    package com.mod.tgotg;
    
    import java.io.File;
    
    import com.mod.tgotg.Items.TgotgItems;
    
    public class TgotgCommon
    {
    
    public void preInit(File configFile)
    {
    System.out.println("pre init côté commun");
    TgotgItems.register();
    }
    
    public void Init()
    {
    
    }
    
    }
    
    


  • Salut alors à mon avis il faut faire quelque changements dans tes proxys (je te donne ma méthode ce n'est surement pas la plus respectueuse des conventions car je suis encore débutante)
    On va utiliser les events comme l'a dit Robin

    Dans ton common proxy ajoute ça dans ta fonction preinit ```java
    RegisteryHandler.Common();

    
    Dans ton Client proxy il faut que tu obtienne quelquechose comme ceci
    ```java
    
    public class ClientProxy extends CommonProxy
    {
      public void preInit(FMLPreInitializationEvent event)
    {
    super.preInit(event);
    }
    
    public void init(FMLInitializationEvent event)
    {
    super.init(event);
    RegisteryHandler.Client();
    }
    
    public void postInit(FMLPostInitializationEvent event)
    {
    super.postInit(event);
    }
    }
    
    

    et dans ta classe principale vérifie que tu as bien dans toutes fonctions une ligne comme celle-ci

    proxy.nomdetafonction(event); ex proxy.preInit(event);