MFF

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

    Problèmes de rendus de blocs

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8.9
    20 Messages 3 Publieurs 3.2k Vues 1 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Salut,

      Pour les blocs avec variantes (demi-dalle ici), j’ai ça :

             ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(NHGBlocks.HARDENED_CLAY_1_SIMPLE), new ItemMeshDefinition()
             {
                 @Override
                 public ModelResourceLocation getModelLocation(ItemStack stack)
                 {
                     return new ModelResourceLocation(ModNanotechHungerGames.MODID + ":block_hardened_clay_slab_" + BlockSlabClay1.EnumType.byMetadata(stack.getItemDamage()).toString(), "inventory");
                 }
             });
      

      La fonction byMetadata renvoies l’EnumType en fonction du metadata et toString() le nom de cette enum (et donc le nom de l’item, qui est utilisé du-coup pour le nom du json).

      Et pour ton souci de rendu, je n’ai pas comprit le problème. Un screenshot serait pas mal.

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

        Pour le rendu d’item ça n’a pas fonctionné (code adapté, au cas où j’aurais fait une boulette sans m’en rendre compte) :

        
        ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(Dragons.planks), new ItemMeshDefinition(){
             @Override
             public ModelResourceLocation getModelLocation(ItemStack stack)
             {
                   return new ModelResourceLocation(Dragons.MODID + ":" + BlockPlanks.EnumType.byMetadata(stack.getItemDamage()).toString() + "_planks", "inventory");
             }
        });
        
        

        J’ai toujours l’erreur : “Model definition for location dragons:planks#inventory not found”

        Concernant le bloc avec un rendu de texture bizarre :

        Mes mods:

        • New Ores
        • More Dragons
        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 oui, il faut aussi enregistrer les variantes :

          ResourceLocation[] slab1variant = new ResourceLocation[8];
          for(int i = 0; i < BlockSlabClay1.EnumType.values().length; i++)
          {
          slab1variant* = new ResourceLocation(ModNanotechHungerGames.MODID, "block_hardened_clay_slab_" + BlockSlabClay1.EnumType.values()*);
          }
          ModelBakery.registerItemVariants(Item.getItemFromBlock(NHGBlocks.HARDENED_CLAY_1_SIMPLE), slab1variant);
          

          Il faut que se soit appelé uniquement en client depuis preinit (idem pour l’autre code).

          Pour ton deuxième problème, en gros il utilise la mauvaise texture ?
          Tu as quoi dans le json invoker_receptacle ?

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

            Toujours non-fonctionnel 😕
            Petite évolution cependant :

            
            Model definition for location dragons:frozen_planks#inventory not found
            Model definition for location dragons:planks#variant=yolo not found
            
            
            
                   ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(Dragons.planks), new ItemMeshDefinition()
                   {
                       @Override
                       public ModelResourceLocation getModelLocation(ItemStack stack)
                       {
                           return new ModelResourceLocation(Dragons.MODID + ":" + BlockPlanks.EnumType.byMetadata(stack.getItemDamage()).toString() + "_planks", "inventory");
                       }
                   });
            
            ResourceLocation[] planksVariants = new ResourceLocation[2];
                   for(int i = 0; i < BlockPlanks.EnumType.values().length; i++)
                   {
                       planksVariants* = new ResourceLocation(Dragons.MODID, BlockPlanks.EnumType.values()* + "_planks");
                   }
                   ModelBakery.registerItemVariants(Item.getItemFromBlock(Dragons.planks), planksVariants);
            
            
            
            

            invoker_receptacle.json :

            
            {
               "textures": {
                   "particle": "#material",
                   "material": "#material",
                   "eye": "#eye"
               },
               "elements": [
                   {   "from": [ 0, 0, 0 ],
                       "to": [ 16, 1, 16 ],
                       "faces": {
                           "down":  { "uv": [ 0, 0, 16, 16 ], "texture": "#material" },
                           "up":    { "uv": [ 0, 0, 16, 16 ], "texture": "#material" },
                           "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#material" },
                           "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#material" },
                           "west":  { "uv": [ 0, 0, 16, 1 ], "texture": "#material" },
                           "east":  { "uv": [ 0, 0, 16, 1 ], "texture": "#material" }
                       }
                   },
                   {   "from": [ 4, 5, 4 ],
                       "to": [ 12, 13, 12 ],
                       "faces": {
                           "down":  { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" },
                           "up":    { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" },
                           "north": { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" },
                           "south": { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" },
                           "west":  { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" },
                           "east":  { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" }
                       }
                   }
               ]
            }
            
            

            Mes mods:

            • New Ores
            • More Dragons
            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

              Étrange, je ne vois pas d’où ça peut venir.
              Tu peux m’envoyer un zip de ton dossier src ?

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

                J’airais plutot pençé à

                ModelResourceLocation[] planksVariants = new ModelResourceLocation[2];
                for(int i = 0; i < BlockPlanks.EnumType.values().length; i++)
                {
                    planksVariants* = new ModelResourceLocation(Dragons.MODID + ":" + BlockPlanks.EnumType.values()* + "_planks", "inventory");
                }
                
                

                au lieux de

                ResourceLocation[] planksVariants = new ResourceLocation[2];
                for(int i = 0; i < BlockPlanks.EnumType.values().length; i++)
                {
                    planksVariants* = new ResourceLocation(Dragons.MODID, BlockPlanks.EnumType.values()* + "_planks");
                }
                
                
                1 réponse Dernière réponse Répondre Citer 0
                • bin4r1sB Hors-ligne
                  bin4r1s
                  dernière édition par

                  @LeBossMax2
                  ça n’a rien changé 😕

                  @robin4002
                  Oui par MP

                  Mes mods:

                  • New Ores
                  • More Dragons
                  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

                    Tu utilises des anciennes mapping, ça m’embête bien car ça me fait des erreurs partout.
                    De plus si tu es encore en 1.8.8, tu devrais passer en 1.8.9.

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

                      Ok je vais voir pour passer en 1.8.9 mais en vérité la 1.8.8 n’était qu’une étape pour rendre le passage en 1.9.4 moins lourd… Mais bon je vais mettre à jour vers la 1.8.9, étant donné que la version que j’utilise est une Beta, ça pourrait aussi venir de forge (pour le problème de texture)

                      Mes mods:

                      • New Ores
                      • More Dragons
                      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

                        Oui c’est aussi ce que je pensais, il y a mal de changement entre les versions pour 1.8.8 et la dernière version de forge 1.8.9.
                        Suffit de regarder le changelog pour voir les bugs corrigés. Et les mapping sont aussi plus complète.

                        Rester sur les versions intermédiaire n’est jamais une bonne chose.

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

                          Maintenant ça fonctionne mieux (FML cherche les modèles dragons:frozen_planks#inventory & dragons:yolo_planks#inventory), mais après avoir créé les deux fichiers dans le dossier models/item, ceux-ci sont bien trouvés mais les blocs ne sont toujours pas bien rendus dans l’inventaire, et leur nom non localisé est devenu dragons:frozen_planks.name (sans “tile.” donc), ce qui me laisse à penser que ça ne vient pas des jsons (qui m’ont l’air tout à fait corrects, au passage) mais plutôt encore de l’enregistrement. FML recherche d’ailleurs toujours le modèle dragons:planks#xxxxx

                          Code :

                          ClientProxy.java

                          
                          ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(Dragons.planks), new ItemMeshDefinition()
                          {
                          @Override
                          public ModelResourceLocation getModelLocation(ItemStack stack)
                          {
                          return new ModelResourceLocation(Dragons.MODID + ":" + BlockPlanks.EnumType.byMetadata(stack.getItemDamage()).toString() + "_planks", "inventory");
                          }
                          });
                          
                          ResourceLocation[] planksVariants = new ResourceLocation[2];
                          for(int i = 0; i < BlockPlanks.EnumType.values().length; i++)
                          {
                          planksVariants* = new ResourceLocation(Dragons.MODID, BlockPlanks.EnumType.values()* + "_planks");
                          }
                          ModelBakery.registerItemVariants(Item.getItemFromBlock(Dragons.planks), planksVariants);
                          
                          

                          Les jsons (au cas où) :
                          frozen_planks.json (models/item) :

                          
                          {
                          "parent": "dragons:block/frozen_planks",
                          "display": {
                          "thirdperson": {
                          "rotation": [ 10, -45, 170 ],
                          "translation": [ 0, 1.5, -2.75 ],
                          "scale": [ 0.375, 0.375, 0.375 ]
                          }
                          }
                          }
                          
                          

                          frozen_planks.json (blockstates) :

                          
                          {
                          "variants": {
                          "variant=normal": { "model": "dragons:frozen_planks" }
                          }
                          }
                          
                          

                          Le frozen_planks.json du dossier models/block est ok, puisque le bloc est bien rendu dans le monde.

                          Nouvelle version de Forge : 1.8.9-11.15.1.1722 (recommandée)

                          Mes mods:

                          • New Ores
                          • More Dragons
                          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

                            Tu peux envoyer la classe du bloc ?

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

                              C’est basiquement la même chose que la classe des planches de Minecraft, à savoir :

                              BlockPlanks.java

                              
                              package fr.bin4r1s.dragons.block;
                              
                              import java.util.List;
                              
                              import fr.bin4r1s.dragons.core.Dragons;
                              import net.minecraft.block.Block;
                              import net.minecraft.block.material.MapColor;
                              import net.minecraft.block.material.Material;
                              import net.minecraft.block.properties.IProperty;
                              import net.minecraft.block.properties.PropertyEnum;
                              import net.minecraft.block.state.BlockState;
                              import net.minecraft.block.state.IBlockState;
                              import net.minecraft.creativetab.CreativeTabs;
                              import net.minecraft.item.Item;
                              import net.minecraft.item.ItemStack;
                              import net.minecraft.util.IStringSerializable;
                              import net.minecraftforge.fml.common.registry.GameRegistry;
                              import net.minecraftforge.fml.relauncher.Side;
                              import net.minecraftforge.fml.relauncher.SideOnly;
                              
                              public class BlockPlanks extends Block
                              {
                                 public static final PropertyEnum <blockplanks.enumtype>VARIANT = PropertyEnum.<blockplanks.enumtype>create("variant", BlockPlanks.EnumType.class);
                              
                                 public BlockPlanks()
                                 {
                                     super(Material.wood);
                                     this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.FROZEN));
                                     this.setCreativeTab(Dragons.dragonsTab);
                                 }
                              
                                 public int damageDropped(IBlockState state)
                                 {
                                     return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata();
                                 }
                              
                                 @SideOnly(Side.CLIENT)
                                 public void getSubBlocks(Item itemIn, CreativeTabs tab, List <itemstack>list)
                                 {
                                     for (BlockPlanks.EnumType blockplanks$enumtype : BlockPlanks.EnumType.values())
                                     {
                                         list.add(new ItemStack(itemIn, 1, blockplanks$enumtype.getMetadata()));
                                     }
                                 }
                              
                                 public IBlockState getStateFromMeta(int meta)
                                 {
                                     return this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata(meta));
                                 }
                              
                                 public MapColor getMapColor(IBlockState state)
                                 {
                                     return ((BlockPlanks.EnumType)state.getValue(VARIANT)).func_181070_c();
                                 }
                              
                                 public int getMetaFromState(IBlockState state)
                                 {
                                     return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata();
                                 }
                              
                                 protected BlockState createBlockState()
                                 {
                                     return new BlockState(this, new IProperty[] {VARIANT});
                                 }
                              
                                 public static enum EnumType implements IStringSerializable
                                 {
                                     FROZEN(0, "frozen", MapColor.woodColor),
                                     YOLO(1, "yolo", MapColor.woodColor);
                              
                                     private static final BlockPlanks.EnumType[] META_LOOKUP = new BlockPlanks.EnumType[values().length];
                                     private final int meta;
                                     private final String name;
                                     private final String unlocalizedName;
                                     private final MapColor field_181071_k;
                              
                                     private EnumType(int meta, String name, MapColor color)
                                     {
                                         this(meta, name, name, color);
                                     }
                              
                                     private EnumType(int meta, String name, String unlocalizedName, MapColor color)
                                     {
                                         this.meta = meta;
                                         this.name = name;
                                         this.unlocalizedName = unlocalizedName;
                                         this.field_181071_k = color;
                                     }
                              
                                     public int getMetadata()
                                     {
                                         return this.meta;
                                     }
                              
                                     public MapColor func_181070_c()
                                     {
                                         return this.field_181071_k;
                                     }
                              
                                     public String toString()
                                     {
                                         return this.name;
                                     }
                              
                                     public static BlockPlanks.EnumType byMetadata(int meta)
                                     {
                                         if (meta < 0 || meta >= META_LOOKUP.length)
                                         {
                                             meta = 0;
                                         }
                              
                                         return META_LOOKUP[meta];
                                     }
                              
                                     public String getName()
                                     {
                                         return this.name;
                                     }
                              
                                     public String getUnlocalizedName()
                                     {
                                         return this.unlocalizedName;
                                     }
                              
                                     static
                                     {
                                         for (BlockPlanks.EnumType blockplanks$enumtype : values())
                                         {
                                             META_LOOKUP[blockplanks$enumtype.getMetadata()] = blockplanks$enumtype;
                                         }
                                     }
                                 }
                              }
                              
                              

                              Il y a quand même un ajout, l’ItemBlock :

                              ItemBlockPlanks.java

                              
                              package fr.bin4r1s.dragons.block;
                              
                              import fr.bin4r1s.dragons.core.Dragons;
                              import net.minecraft.block.Block;
                              import net.minecraft.item.ItemBlock;
                              import net.minecraft.item.ItemStack;
                              
                              public class ItemBlockPlanks extends ItemBlock
                              {
                                  public ItemBlockPlanks(Block block)
                                  {
                                      super(block);
                                      this.setMaxDamage(0);
                                      this.setHasSubtypes(true);
                                  }
                              
                                  @Override
                                  public int getMetadata(int meta)
                                  {
                                      return meta;
                                  }
                              
                                  @Override
                                  public String getUnlocalizedName(ItemStack stack)
                                  {
                                      BlockPlanks.EnumType type = BlockPlanks.EnumType.byMetadata(stack.getMetadata());
                                      return Dragons.MODID + ":" + type.getName() + "_planks";
                                  }
                              }
                              
                              ```</itemstack></blockplanks.enumtype></blockplanks.enumtype>

                              Mes mods:

                              • New Ores
                              • More Dragons
                              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

                                Dans le json qui se trouve dans le dossier blockstate tu dois avoir une valeur par variante :

                                {
                                "variants": {
                                "variant=frozen": { "model": "dragons:frozen_planks" },
                                               "variant=yolo": { "model": "dragons:yolo_planks" }
                                }
                                }
                                

                                et le json doit avoir le nom du bloc dans le registre.

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

                                  C’est déjà ce que je fais :

                                  planks.json :

                                  
                                  {
                                  "variants": {
                                  "variant=frozen": { "model": "dragons:frozen_planks" },
                                  "variant=yolo": { "model": "nether_brick" }
                                  }
                                  }
                                  
                                  

                                  Et je doute que ce soit ce fichier qui pose problème puisque le rendu dans le monde fonctionne très bien…

                                  EDIT :

                                  Finalement, après avoir testé plusieurs choses, il se trouve qu’effectivement, en enregistrant chaque metadata avec la fonction registerBlockTexture(block, meta, name), ça fonctionne mieux x)

                                  
                                         this.registerBlockTexture(Dragons.planks, 0, "frozen_planks");
                                         this.registerBlockTexture(Dragons.planks, 1, "yolo_planks");
                                  
                                         ResourceLocation[] planksVariants = new ResourceLocation[2];
                                          for(int i = 0; i < BlockPlanks.EnumType.values().length; i++)
                                          {
                                              planksVariants* = new ResourceLocation(Dragons.MODID, BlockPlanks.EnumType.values()* + "_planks");
                                          }
                                          ModelBakery.registerItemVariants(Item.getItemFromBlock(Dragons.planks), planksVariants);
                                  
                                  

                                  Côté json, les blockstates sont gérés par planks.json, chaque meta a son propre modèle d’item et de bloc.

                                  Voilà 🙂 Sujet résolu

                                  EDIT : Ah oui non, en fait j’ai toujours mon problème de texture (fire_invoker) 😕

                                  Mes mods:

                                  • New Ores
                                  • More Dragons
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • bin4r1sB Hors-ligne
                                    bin4r1s
                                    dernière édition par

                                    Up. Des idées pour l’origine du problème ? 😕

                                    Mes mods:

                                    • New Ores
                                    • More Dragons
                                    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

                                      Non je ne sais pas d’où ça pourrait venir 😕

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

                                        Ok, demain je pars chez mes grands-parents donc j’aurais l’occasion de me pencher dessus (malgré l’absence de connexion Internet)

                                        Mes mods:

                                        • New Ores
                                        • More Dragons
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • bin4r1sB Hors-ligne
                                          bin4r1s
                                          dernière édition par

                                          Ok alors visiblement la solution était toute bête (mais quand même bizarre), il m’a suffit de renommer la version “fire_invoker_receptacle_empty” en “fire_invoker_receptacle” (et tout ce qui y faisait référence) pour que le modèle fonctionne… Étrange 😕

                                          Sujet résolu.

                                          Mes mods:

                                          • New Ores
                                          • More Dragons
                                          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