MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Créer un item simple

    Planifier Épinglé Verrouillé Déplacé Les items
    1.12.x1.11.x
    95 Messages 21 Publieurs 24.0k Vues 10 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Z Hors-ligne
      Zacharie
      dernière édition par

      J’ai trois erreur (en 1.12.2) quelqu’un peut m’aider ?

      • Dans MODIDClient a la ligne
      MODIDItems.registerItemModels();
      

      il me dit

      The method registerItemModels(ModelRegistryEvent) in the type rfplusItems is not applicable for the arguments ()
      

      il me propose de mettre null est-ce un bonne solution ?

      • Dans la classe principale a la ligne  
        MinecraftForge.EVENT_BUS.register(new RegisteringHandler());

      il me dit deux chose : la première au point entre EVENT_BUS et register

      Syntax error on token ".", @ expected after this token
      

      et juste avant le point virgule

      Syntax error, insert ")" to complete MethodDeclaration
      
      • Dans RegisteringHandler a la ligne
      event.getRegistry().registerAll(ItemCopperOre.NAME);
      

      il dit

      The method registerAll(Item…) in the type IForgeRegistry is not applicable for the arguments (String)
      
      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        Salut,
        Il faudrait ton code (la classe principale + MODIDItems).

        1 réponse Dernière réponse Répondre Citer 0
        • Z Hors-ligne
          Zacharie
          dernière édition par

          Voici ma classe principale

          import org.apache.logging.log4j.Logger;
          import net.minecraftforge.fml.common.Mod;
          import net.minecraftforge.fml.common.Mod.EventHandler;
          import net.minecraftforge.fml.common.Mod.Instance;
          import net.minecraftforge.fml.common.SidedProxy;
          import net.minecraftforge.fml.common.event.FMLInitializationEvent;
          import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
          
          @Mod(modid = "rfplus", name = "RF+", version = "beta", acceptedMinecraftVersions = "[1.12.2]")
          public class RFPlus {
              public static final String MODID = "rfplus";
          
              MinecraftForge.EVENT_BUS.register(new RegisteringHandler());
          
              @Instance(RFPlus.MODID)
              public static RFPlus instance;
              @SidedProxy(clientSide = "com.zacharie.rfPlus.rfPlusClient", serverSide = "com.zacharie.rfPlus.rfPlusServer")
              public static rfPlusCommon proxy;
          
              public static Logger logger;
          
              @EventHandler
              public void preInit(FMLPreInitializationEvent event) {
                  logger = event.getModLog();
                  proxy.preInit(event.getSuggestedConfigurationFile());
              }
          
              @EventHandler
              public void init(FMLInitializationEvent event) {
                  proxy.init();
              }
          }
          
          

          et MODIDItems

          import com.zacharie.rfPlus.RFPlus;
          import net.minecraft.client.renderer.block.model.ModelResourceLocation;
          import net.minecraft.item.Item;
          import net.minecraftforge.client.event.ModelRegistryEvent;
          import net.minecraftforge.client.model.ModelLoader;
          import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
          import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
          import net.minecraftforge.fml.relauncher.Side;
          import net.minecraftforge.fml.relauncher.SideOnly;
          
          @EventBusSubscriber(value = Side.CLIENT, modid = RFPlus.MODID)
          
          public class rfplusItems {
          
          public static final Item COPPERORE = new ItemCopperOre();
          
          public static void setItemName(Item item, String name) {
          item.setRegistryName(RFPlus.MODID, name).setUnlocalizedName(RFPlus.MODID + "." + name);
          }
          
          @SideOnly(Side.CLIENT)
          @SubscribeEvent
          public static void registerItemModels(ModelRegistryEvent event) {
          registerModel(COPPERORE, 0);
          }
          
          @SideOnly(Side.CLIENT)
          public static void registerModel(Item item, int metadata) {
          if (metadata < 0)
          metadata = 0;
          String resourceName = item.getUnlocalizedName().substring(5).replace('.', ':');
          if (metadata > 0)
          resourceName += "_m" + String.valueOf(metadata);
          
          ModelLoader.setCustomModelResourceLocation(item, metadata,
          new ModelResourceLocation(resourceName, "inventory"));
          }
          }
          
          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            Retires la ligne MODIDItems.registerItemModels(); tu n’en as pas besoin.

            MinecraftForge.EVENT_BUS.register(new RegisteringHandler());
            Doit être dans la fonction preinit de la classe principale, pas là où il est actuellement.

            1 réponse Dernière réponse Répondre Citer 0
            • Z Hors-ligne
              Zacharie
              dernière édition par

              Merci mais il me reste un erreur dans RegisteringHandler à la ligne

              event.getRegistry().registerAll(ItemCopperOre.NAME);
              

              il dit :

              The method registerAll(Item…) in the type IForgeRegistry is not applicable for the arguments (String)
              
              1 réponse Dernière réponse Répondre Citer 0
              • robin4002R Hors-ligne
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                dernière édition par

                Remplaces ItemCopperOre.NAME par rfplusItems.COPPERORE

                1 réponse Dernière réponse Répondre Citer 0
                • Z Hors-ligne
                  Zacharie
                  dernière édition par

                  Merci beaucoup tout marche maintenant 🙂

                  1 réponse Dernière réponse Répondre Citer 0
                  • seb19992S Hors-ligne
                    seb19992
                    dernière édition par

                    Bonjour,
                    Ma première question est plus de l’ordre de la vérification. L’ajout de l’annotation @SubscribeEvent depuis la version 1.12.2, concernant la fonction registerItemModels, si je comprends bien, c’est parce qu’à partir de la 1.12.2, quelque chose (fml, je suppose), attend un événement bien particulier, celui qui signale qu’il est prêt à register, pour faire le register de tous les items du mod, c’est ça ? Et est-ce que du coup cela explique qu’on ait plus besoin à partir de la 1.12.2 d’appeler registerItemsModels dans la pré-initialisation du fichier client ?

                    Ma deuxième question est concernant cette syntaxe :

                    item.setRegistryName(ClassePrincipale.MODID, name).setUnlocalizedName(ClassePrincipale.MODID + "." + name);
                    

                    À la base, je code plutôt en C++, même si j’ai les bases de java. Pour moi, cette syntaxe signifie qu’on set le registryName de l’item et que ce “set” renvoit un objet qui possède une méthode permettant d’initialiser son unlocalized name. Est-ce que c’est bien ça, ou bien est-ce que ça fonctionne autrement sous java ? (D’ailleurs, tandis que je dis ça, je suis en train de regarder les fichiers java correspondant, et ça ne peut pas être ça puisque setRegistryName renvoit un String et que setUnlocalizedName est une méthode de l’objet item, donc rien à voir avec un String… )

                    [Tu feras attention, il manque une parenthèse fermée, sur ce bout de code :

                    ModelLoader.setCustomModelResourceLocation(item, metadata, new ModelResourceLocation(resourceName, "inventory");
                    

                    ]

                    Ma troisième question est peut-être un poil flemmarde dans la mesure où je suppose que je pourrais chercher par moi-même (je comprendrais qu’on me réponde : “Bah va chercher !” ^^') : c’est quoi un fichier .json ?

                    Et puis enfin, ma quatrième question : j’arrive ni à afficher une texture, ni à afficher un nom correct. Le jeu se lance sans problème, mais sans texture pour mon item et avec un nom standardisé de type “item.modid.nom_de_mon_item.name”. Pour le nom d’item, j’ai crée mes fichiers fr_fr.lang et en_us.lang et dans les deux, j’ai essayé le format “item.modid.nom_de_mon_item.name=Nom de l’item” ainsi que “item.nom_de_mon_item.name=Nom de l’item” et même “item.modid.name=Nom de l’item”. Et puis pour la texture, je ne sais pas quoi dire, j’ai suivi le tutoriel à la lettre…

                    Merci par avance pour les réponse et la patience de celui qui me répondra ! 😃

                    1 réponse Dernière réponse Répondre Citer 0
                    • robin4002R Hors-ligne
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                      dernière édition par

                      1. En effet, l’annotation SubscribeEvent indique que ta méthode va écoute un event, forge va donc l’appeler quand cette event sera déclenché. Par contre pour qu’il sache que ta classe contient des event il faut l’indiquer, avec @EventBusSubscriber ou la fonction MinecraftForge.EVENT_BUS.register.

                      2. Tu peux faire un ctrl + clic sur la fonction pour que ton IDE ouvre la classe Block et voir sa définition. En fait la méthode setRegistryName renvoie this (le bloc lui même donc) ce qui te permet de chaîner une autre fonction de la classe directement après, sans le faire sur une nouvelle ligne.

                      3. Le json est un format conçu pour représenter un objet, à la base fait pour le JS, mais désormais largement utilisé dans tout le monde informatique pour représenter des données.

                      4. Toutes les ressources se trouve bien dans le dossier src/main/resources ? puis ensuite dans le bon package ? (assets.tonmodid.lang ) ?

                      1 réponse Dernière réponse Répondre Citer 0
                      • seb19992S Hors-ligne
                        seb19992
                        dernière édition par seb19992

                        Ouah ! Merci ! Je m’attendais pas à une réponse aussi tard !

                        Pour la seconde question, autant pour moi, je viens de vérifier et effectivement, la fonction renvoie “this” et c’est donc beaucoup plus logique ainsi.

                        Et pour la dernière, après vérification avec ce que tu m’as transmis comme nom de package, je me suis rendu compte que j’avais créé un dossier “asset” au lieu de “assets”. Ce qui règle mon problème de .lang, mais pas mon problème de texture.

                        Encore merci pour ton aide, vraiment !

                        P.S. : Après vérification, je ne comprends pas bien pourquoi mais ma fonction registerItemModels n’est jamais appelée. Si j’ai bien compris, elle devrait être appelée automatiquement à l’appel de l’événement auquel elle est liée, non ?

                        P.S. 2 : Après avoir étudié en long en large et en travers la documentation de forge, j’ai finis par mettre dans ma fonction de pré-initialisation un :

                        MinecraftForge.EVENT_BUS.register(<modid>Items.class);
                        

                        Et il semblerait que ça marche. Est-ce que c’est un oubli dans le tutoriel que j’ai réussis à retrouver seul ou bien est-ce que j’ai fais une manipulation imprévue qui fonctionne ? Voire même est-ce que je devrais pas faire ça ?

                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          Salut,
                          Ce n’est pas un oublie du tutoriel, qui lui utilise la ligne suivante :

                          @EventBusSubscriber(value = Side.CLIENT, modid = ModTutorial.MODID) // En 1.12+
                          

                          en haut de la déclaration de la classe qui réalise la même chose (ou presque, si ta ligne de se trouve dans ton client proxy c’est bien la même chose, sinon tu l’as mis dans la classe principale ou en commun, cela risque de causer des problèmes pour si ton mod est installé sur un serveur)

                          1 réponse Dernière réponse Répondre Citer 0
                          • seb19992S Hors-ligne
                            seb19992
                            dernière édition par

                            Super ! Je comprends maintenant, j’avais effectivement loupé cette information. Merci beaucoup !

                            1 réponse Dernière réponse Répondre Citer 0
                            • GrandlovaniaG Hors-ligne
                              Grandlovania
                              dernière édition par

                              Ce message a été supprimé !
                              1 réponse Dernière réponse Répondre Citer 0
                              • N Hors-ligne
                                N0tFound_404
                                dernière édition par N0tFound_404

                                Bonjour j’ai une question cette partie du tutoriel est elle valide en 1.12.2 car j’ai une erreur
                                @Pchom a dit dans Créer un item simple :

                                @SubscribeEvent signifie que la fonction qui suit utilise un événement, ici, l’événement est RegistryEvent. Cet événement est appelé une fois par Registre. Ici, nous voulons enregistrer un Item, alors nous allons utiliser le registre des items, soit Register. Cette fonction sera appelée une fois AVANT le pre-init. J’insiste sur le mot avant. Vos items sont enregistrés AVANT que le pre-init soit appelé. Vous devez le savoir.

                                > event.getRegistry().registerAll(TutorialItems.TUTORIAL);
                                

                                Cette ligne enregistre tous les items passés en argument. Nous ne voulons en enregistrer qu’un : TUTORIAL. Mais si nous en avions plusieurs, nous devrions écrire :

                                > event.getRegistry().registerAll(block1, block2, block3);
                                

                                Merci !

                                1 réponse Dernière réponse Répondre Citer 1
                                • Superloup10S Hors-ligne
                                  Superloup10 Modérateurs
                                  dernière édition par

                                  Oui, cette partie est toujours valide en 1.12.2.
                                  Quelle est ton erreur ?

                                  Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • N Hors-ligne
                                    N0tFound_404
                                    dernière édition par

                                    java.lang.ExceptionInInitializerError
                                    	at notfound.administration.RegisteringHandler.registerItems(RegisteringHandler.java:13)
                                    	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_RegisteringHandler_registerItems_Register.invoke(.dynamic)
                                    	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
                                    	at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144)
                                    	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
                                    	at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:782)
                                    	at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:628)
                                    	at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:252)
                                    	at net.minecraft.client.Minecraft.init(Minecraft.java:513)
                                    	at net.minecraft.client.Minecraft.run(Minecraft.java:421)
                                    	at net.minecraft.client.main.Main.main(Main.java:118)
                                    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                                    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                                    	at java.lang.reflect.Method.invoke(Unknown Source)
                                    	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
                                    	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
                                    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                                    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                                    	at java.lang.reflect.Method.invoke(Unknown Source)
                                    	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
                                    	at GradleStart.main(GradleStart.java:25)
                                    Caused by: java.lang.IllegalStateException: Attempted to set registry name with existing registry name! New: administration:item_carte_identite Old: administration:item_carte_identite
                                    	at net.minecraftforge.registries.IForgeRegistryEntry$Impl.setRegistryName(IForgeRegistryEntry.java:71)
                                    	at net.minecraftforge.registries.IForgeRegistryEntry$Impl.setRegistryName(IForgeRegistryEntry.java:80)
                                    	at notfound.administration.items.AdministrationItems.setItemName(AdministrationItems.java:22)
                                    	at notfound.administration.items.ItemCarteIdentite.<init>(ItemCarteIdentite.java:14)
                                    	at notfound.administration.items.AdministrationItems.<clinit>(AdministrationItems.java:16)
                                    	... 23 more
                                    1 réponse Dernière réponse Répondre Citer 1
                                    • robin4002R Hors-ligne
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                      dernière édition par

                                      Tu peux envoyer ta classe RegisteringHandler ?

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • N Hors-ligne
                                        N0tFound_404
                                        dernière édition par

                                        package notfound.administration;
                                        
                                        import net.minecraft.item.Item;
                                        import net.minecraftforge.event.RegistryEvent;
                                        import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                                        import notfound.administration.items.AdministrationItems;
                                        
                                        public class RegisteringHandler
                                        {
                                            @SubscribeEvent
                                            public void registerItems(RegistryEvent.Register<Item> event)
                                            {   
                                                event.getRegistry().registerAll(AdministrationItems.CARTE_IDENTITE, AdministrationItems.PERMIS_DE_CONDUIRE);
                                            }  
                                        }
                                        
                                        1 réponse Dernière réponse Répondre Citer 1
                                        • robin4002R Hors-ligne
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                          dernière édition par

                                          Hum j’ai du mal à comprendre comment il peut avoir un npe ici.
                                          Tu peux envoyer la classe AdministrationItems ?

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • N Hors-ligne
                                            N0tFound_404
                                            dernière édition par

                                            Voici

                                            package notfound.administration.items;
                                            
                                            import net.minecraft.client.renderer.block.model.ModelResourceLocation;
                                            import net.minecraft.item.Item;
                                            import net.minecraftforge.client.event.ModelRegistryEvent;
                                            import net.minecraftforge.client.model.ModelLoader;
                                            import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
                                            import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                                            import net.minecraftforge.fml.relauncher.Side;
                                            import net.minecraftforge.fml.relauncher.SideOnly;
                                            import notfound.administration.ModAdministration;
                                            
                                            @EventBusSubscriber(value = Side.CLIENT, modid = ModAdministration.MODID)
                                            public class AdministrationItems
                                            {
                                                public static final Item CARTE_IDENTITE = new ItemCarteIdentite();
                                                public static final Item PERMIS_DE_CONDUIRE = new ItemPermisDeConduire();
                                                
                                                public static void setItemName(Item item, String name)
                                                {
                                                    item.setRegistryName(ModAdministration.MODID, name).setTranslationKey(ModAdministration.MODID + "." + name);
                                                    item.setRegistryName(ModAdministration.MODID, name).setTranslationKey(ModAdministration.MODID + "." + name); 
                                                }
                                                
                                                @SideOnly(Side.CLIENT)
                                            @SubscribeEvent   
                                                public static void registerItemModels(ModelRegistryEvent event)
                                                {
                                                    registerModel(CARTE_IDENTITE, 0);
                                                    registerModel(PERMIS_DE_CONDUIRE, 0);
                                                }
                                                
                                                @SideOnly(Side.CLIENT)
                                                public static void registerModel(Item item, int metadata)
                                                {
                                                    if (metadata < 0) metadata = 0;
                                                    String ressourceName = item.getTranslationKey().substring(5).replace('.', ':');
                                                    if (metadata > 0) ressourceName += "_m" + String.valueOf(metadata);
                                                    
                                                    ModelLoader.setCustomModelResourceLocation(item, metadata, new ModelResourceLocation(ressourceName, "inventory"));
                                                }
                                            }
                                            
                                            1 réponse Dernière réponse Répondre Citer 1
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 2 / 5
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB