MFF

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

    Créer une plante cultivable

    Planifier Épinglé Verrouillé Déplacé Les blocs
    1.8
    20 Messages 11 Publieurs 7.4k Vues 4 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.
    • BrokenSwingB Hors-ligne
      BrokenSwing Moddeurs confirmés Rédacteurs
      dernière édition par robin4002

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • La classe principale
        • La classe du bloc
        • Le client proxy
        • Les fichiers JSON
      • Résultat

      Introduction

      Dans ce tutoriel nous allons voir comment créer une culture simple.

      Pré-requis

      • Créer un bloc basique
      • Créer un item basique

      Code

      La classe principale :

      Dans la classe principale nous allons déclarer notre culture, c’est un bloc :

      public static Block triticaleCrop;
      

      Et sa graine :

      public static Item triticaleSeed;
      

      Le triticale c’est un peu comme du blé et du saigle : https://fr.wikipedia.org/wiki/Triticale
      Ensuite on instancie notre bloc :

      triticaleCrop = new BlockTriticale();
      

      Et la graine :

      triticaleSeed = new ItemSeeds(ModBlocks.triticaleCrop, Blocks.farmland).setUnlocalizedName("triticaleSeed");
      

      La premier argument du constructeur de la classe ItemSeeds est la culture à laquelle la graine est associée et le second argument
      est le bloc sur lequelle la graine doit être plantée.

      Et on enregistre notre bloc dans le jeu :

      GameRegistry.registerBlock(triticaleCrop, "triticaleCrop");
      

      Et on enregistre aussi la graine :

      GameRegistry.registerItem(triticaleSeed, "triticaleSeed");
      

      La classe du bloc :

      Créez la classe BlockTriticale et étendez-la à la classe BlockCrops

      public class BlockTriticale extends BlockCrops
      

      Il n’y a pas besoin de constructeur à cette classe il suffit juste d’override 2 fonctions :

          @Override
          protected Item getSeed() {
              return ModItems.triticaleSeed;
          }
      
          @Override
          protected Item getCrop() {
              return ModItems.triticale;
          }
      

      La première retourne la graine qu’il faudra planter pour avoir la culture et la seconde fonction retourne l’item qui est droppé lorsque la culture
      est arrivée à maturité.
      Ici triticaleSeed est la graine créée au début du tutoriel.
      Voilà un shéma, pas très claire que j’ai fait pour bien comprendre qui correspond à quoi :

      Le client proxy :

      Dans la fonction d’enregistrement des rendus, nous allons enregistrer le rendu du bloc et de l’item :

      public class ClientProxy extends CommonProxy {
      
          @Override
          public void registerRender()
          {
              this.registerBlockTexture(ModBlocks.triticaleCrop, "triticaleCrop");
      
              this.registerItemTexture(ModItems.triticaleSeed, "triticaleSeed");
          }
      
          @Override
          public void registerItemTexture(Item item, int metadata, String name)
          {
              ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
              mesher.register(item, metadata, new ModelResourceLocation(CustomizeMe.MODID + ":" + name, "inventory"));
          }
      
          @Override
          public void registerItemTexture(Item item, String name)
          {
              registerItemTexture(item, 0, name);
          }
      
          @Override
          public void registerBlockTexture(Block block, int metadata, String name)
          {
              registerItemTexture(Item.getItemFromBlock(block), metadata, name);
          }
      
          @Override
          public void registerBlockTexture(Block block, String name)
          {
              registerBlockTexture(block, 0, name);
          }
      
      }
      

      Les fichiers JSON

      Dans le package assets/modid/blockstates, créez un fichier triticaleCrop.json dans lequel vous mettrez ce code :

      {
          "variants": {
              "age=0": { "model": "modid:triticale_stage0" },
              "age=1": { "model": "modid:triticale_stage0" },
              "age=2": { "model": "modid:triticale_stage1" },
              "age=3": { "model": "modid:triticale_stage1" },
              "age=4": { "model": "modid:triticale_stage2" },
              "age=5": { "model": "modid:triticale_stage2" },
              "age=6": { "model": "modid:triticale_stage3" },
              "age=7": { "model": "modid:triticale_stage3" }
          }
      }
      

      Replacez modid par votre ModID, age est une propriété de la classe BlockCrops, qui va de 0 à 7, ce qui correspond à la croissance de la culture;
      Ici on ne change le model de notre culture qu’une fois sur deux comme on peut le voir.
      Chaque model est situé dans le package assets/modid/models/block
      Je ne vais pas vous donner tout les json parce que c’est répétitif
      Voici le fichier triticale_stage0.json

      {
          "parent": "block/crop",
          "textures": {
              "crop": "modid:blocks/triticale_stage_0"
          }
      }
      

      On voit que le model parent est le model crop et que la texture est triticale_stage_0 se trouvant dans le package assets/modid/textures/blocks
      Il suffit de faire copier le fichier pour chaque model de la culture en changeant la texture pour chacun.

      Je donne un second exemple pour bin comprendre, le fichier triticale_stage1.json

      {
          "parent": "block/crop",
          "textures": {
              "crop": "modid:blocks/triticale_stage_1"
          }
      }
      

      Pour les fichiers JSON de la graine cela fonctionne comme un item basique.

      Résultat

      0_1529310866661_culture.png

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

        Bonsoir,

        Merci pour ce tuto bien fait et très rapide à comprendre !

        Je rencontre actuellement un léger problème, tout marche bien mais il me sort un missing model file :

        
        Model definition for location questsystem:block_barley_crop#inventory not found
        
        

        Pourtant, les différents “stages” du plant sont bien registered et bien rendus visuellement in-game, la graîne du plant ainsi que l’orge droppé au moment de récolter la culture sont eux aussi bien enregistrés et rendus visuellement. Là, il me dit que le model du block du plant n’est pas trouvé, alors qu’il n’a aucune raison d’être dans l’inventaire…

        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, dans le proxy client retire cette ligne :
          this.registerBlockTexture(ModBlocks.triticaleCrop, “triticaleCrop”);
          Elle est inutile car en effet la texture de l’item associer à la plantation n’a pas de raison d’exister comme ce bloc ne sera jamais présent sous forme d’item.

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

            Et bien, en fait, je ne le register pas :

            • Je register le bloc
            • Je register la graîne puis la culture
            • Je register le model de la graîne et le model de la culture

            C’est vraiment, mais vraiment bizarre. La seule différence avec le tutoriel est que je register la graîne et que j’ai un ModelManager plus tordu (pris de Choonster, un brave homme du forum anglophone) :

            BlockHandler.java
            ModelManager.java

            Et pourtant tu peux voir dans le ModelManager que je n’appelle nullement un quelconque register sur le BlockHandler.blockBarleyCrop

            Si vous voulez plus de précision sur les assets (l’unlocalizedName du block étant block_barley_crop) :

            • Il y a un block_barley_crop.json dans les blockstates qui contient les variants du plant (de l’âge 0 à l’âge 7)
            • Il y a sept models block_barley_crop_stageX.json dans models/block
            • Il n’y a pas de block_barley_crop.json dans models/item, mais il y a celui de la graîne (item_barley_seed.json) et celui de la culture (item_barley_crop.json)
            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

              Peut-être le code qui cherche par défaut la texture dans l’inventaire alors.
              Le système de json est assez obscure, en général quand un bloc de minecraft n’a pas de json c’est hardcodé et il n’est pas possible de reproduire se comportement dans un mod (enfin il me semble pas).

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

                J’ai fait quelques blocks qui sont dans le même cas et j’ai juste mis ça :

                @SideOnly(Side.CLIENT)
                private static void addInexistantItemRender(Item item)
                {
                ModelBakery.addVariantName(item, new String[0]);
                }
                
                

                Et ça marche très bien (aucun message d’erreur).

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                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

                  Ah, bon à savoir. Je prends note, ça pourra aussi m’être utile, merci 😄

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

                    @‘AymericRed’:

                    J’ai fait quelques blocks qui sont dans le même cas et j’ai juste mis ça :

                    @SideOnly(Side.CLIENT)
                    private static void addInexistantItemRender(Item item)
                    {
                    ModelBakery.addVariantName(item, new String[0]);
                    }
                    
                    

                    Et ça marche très bien (aucun message d’erreur).

                    ModelBakery.addVariantName est deprecated (du moins sur la version avec laquelle je travaille, à savoir 1.8.9 build 1722). Du coup, avec registerItemVariants ce serait quoi selon vous ? Un ModelResourceLocation, mais initialisée de quelle façon ?

                    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

                      ça a été remplacé par registerItemVariants :
                      ModelBakery.addVariantName(item, new ResourceLocation[0]);

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

                        Ah je savais pas que ça avais changé en 1.8.9…

                        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

                          @‘robin4002’:

                          ça a été remplacé par registerItemVariants :
                          ModelBakery.addVariantName(item, new ResourceLocation[0]);

                          Tu veux dire ModelBakery.registerItemVariants(item, new ResourceLocation[0]) 😄

                          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

                            Heu oui x)

                            1 réponse Dernière réponse Répondre Citer 0
                            • kevin_68K Hors-ligne
                              kevin_68 Moddeurs confirmés
                              dernière édition par

                              Validé


                              Mettez à jours vers la dernière version stable (1.8.9 voir même…

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

                                Bonjour je suis en 1.11 étant donné que la classe corncrop ne contient pas de constructeur comment peut-on faire pour enregistrer la texture de ce bloc ? (Qui s’enregistrer grâce au constructeur dans la classe de notre bloc via la fonction setBlockName)

                                **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

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

                                  Bonsoir, il faudrait probablement gérer cela dans les fichiers json (blockstates) de ton block.

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

                                    Bonjour j’ai un bug concernant le sol de ma culture j’ai mis Blocks.GRASS pour que je puisse planter ma graine sur l’herbe mais cela ne fonctionne pas (la graine refuse de se planter sur l’herbe et ce plante sur la terre labourée)

                                    **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

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

                                      salut,
                                      j’aimerai savoir comment faire pour ne pas caser la plant pour récupérer l’item mais plus tôt que quand je fais click droit sur la plant celle si drop les items

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

                                        Ce sujet est-il fera le en 1.12.2?

                                        Je travail actuellement sur le Feurimod, un mod à l'origine pour un serveur entre potes en 1.12.2, mais le projet de serveur aillant été abandonné, je le termine pour mon propre plaisir.
                                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 3 points de réputation.

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

                                          C’est peu probable qu’il soit mis à jour en 1.12, en revanche, il est possible qu’il soit fait pour la 1.15.

                                          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
                                          • P Hors-ligne
                                            Prutix
                                            dernière édition par

                                            Comment peut t’on faire pour que le temps de de “poussé” sois plus long et que il y ai un pourcentage de chance que la plante drop un autre item?

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1 / 1
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB