MFF

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

    Problème json fence gate

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8
    15 Messages 3 Publieurs 2.8k 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.
    • EmotionFoxE Hors-ligne
      EmotionFox
      dernière édition par

      Justement ce modèle n’est pas sensé être appelé étant donné que le fichier json dans blockstates ne les appelles pas.

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

        Justement ce modèle n’est pas sensé être appelé étant donné que le fichier json dans blockstates ne les appelles pas. Exemple pour la barrière quasi identique qui elle fonctionne très bien :

        • La classe -
        package mods.emotion.blocks.base;
        
        import java.util.List;
        
        import mods.emotion.creativeTabs.EmotionTab;
        import net.minecraft.block.Block;
        import net.minecraft.block.material.Material;
        import net.minecraft.block.properties.IProperty;
        import net.minecraft.block.properties.PropertyBool;
        import net.minecraft.block.state.BlockState;
        import net.minecraft.block.state.IBlockState;
        import net.minecraft.entity.Entity;
        import net.minecraft.entity.player.EntityPlayer;
        import net.minecraft.init.Blocks;
        import net.minecraft.item.ItemLead;
        import net.minecraft.util.AxisAlignedBB;
        import net.minecraft.util.BlockPos;
        import net.minecraft.util.EnumFacing;
        import net.minecraft.world.IBlockAccess;
        import net.minecraft.world.World;
        import net.minecraftforge.fml.relauncher.Side;
        import net.minecraftforge.fml.relauncher.SideOnly;
        
        public class BaseFence extends BaseBlock
        {
           public static final PropertyBool NORTH = PropertyBool.create("north");
           public static final PropertyBool EAST = PropertyBool.create("east");
           public static final PropertyBool SOUTH = PropertyBool.create("south");
           public static final PropertyBool WEST = PropertyBool.create("west");
        
           public BaseFence()
           {
               super(Material.wood);
               this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)));
               this.setHardness(2.0F);
               this.setResistance(5.0F);
               this.setStepSound(soundTypeWood);
               this.setCreativeTab(EmotionTab.EmotionCreativeTab5);
           }
        
           @Override
           public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity)
           {
               boolean flag = this.canConnectTo(world, pos.north());
               boolean flag1 = this.canConnectTo(world, pos.south());
               boolean flag2 = this.canConnectTo(world, pos.west());
               boolean flag3 = this.canConnectTo(world, pos.east());
               float f = 0.375F;
               float f1 = 0.625F;
               float f2 = 0.375F;
               float f3 = 0.625F;
        
               if(flag)
               {
                   f2 = 0.0F;
               }
        
               if(flag1)
               {
                   f3 = 1.0F;
               }
        
               if(flag || flag1)
               {
                   this.setBlockBounds(f, 0.0F, f2, f1, 1.5F, f3);
                   super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity);
               }
        
               f2 = 0.375F;
               f3 = 0.625F;
        
               if(flag2)
               {
                   f = 0.0F;
               }
        
               if(flag3)
               {
                   f1 = 1.0F;
               }
        
               if(flag2 || flag3 || !flag && !flag1)
               {
                   this.setBlockBounds(f, 0.0F, f2, f1, 1.5F, f3);
                   super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity);
               }
        
               if(flag)
               {
                   f2 = 0.0F;
               }
        
               if(flag1)
               {
                   f3 = 1.0F;
               }
        
               this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3);
           }
        
           @Override
           public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos pos)
           {
               boolean flag = this.canConnectTo(world, pos.north());
               boolean flag1 = this.canConnectTo(world, pos.south());
               boolean flag2 = this.canConnectTo(world, pos.west());
               boolean flag3 = this.canConnectTo(world, pos.east());
               float f = 0.375F;
               float f1 = 0.625F;
               float f2 = 0.375F;
               float f3 = 0.625F;
        
               if(flag)
               {
                   f2 = 0.0F;
               }
        
               if(flag1)
               {
                   f3 = 1.0F;
               }
        
               if(flag2)
               {
                   f = 0.0F;
               }
        
               if(flag3)
               {
                   f1 = 1.0F;
               }
        
               this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3);
           }
        
           @Override
           public boolean isOpaqueCube()
           {
               return false;
           }
        
           @Override
           public boolean isFullCube()
           {
               return false;
           }
        
           @Override
           public boolean isPassable(IBlockAccess world, BlockPos pos)
           {
               return false;
           }
        
           public boolean canConnectTo(IBlockAccess world, BlockPos pos)
           {
               Block block = world.getBlockState(pos).getBlock();
               return block == Blocks.barrier ? false : ((!(block instanceof BaseFence) || block.getMaterial() != this.blockMaterial) && !(block instanceof BaseFenceGate) ? (block.getMaterial().isOpaque() && block.isFullCube() ? block.getMaterial() != Material.gourd : false) : true);
           }
        
           @SideOnly(Side.CLIENT)
           @Override
           public boolean shouldSideBeRendered(IBlockAccess world, BlockPos pos, EnumFacing side)
           {
               return true;
           }
        
           @Override
           public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
           {
               return world.isRemote ? true : ItemLead.attachToFence(player, world, pos);
           }
        
           @Override
           public int getMetaFromState(IBlockState state)
           {
               return 0;
           }
        
           @Override
           public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos)
           {
               return state.withProperty(NORTH, Boolean.valueOf(this.canConnectTo(world, pos.north()))).withProperty(EAST, Boolean.valueOf(this.canConnectTo(world, pos.east()))).withProperty(SOUTH, Boolean.valueOf(this.canConnectTo(world, pos.south()))).withProperty(WEST, Boolean.valueOf(this.canConnectTo(world, pos.west())));
           }
        
           @Override
           protected BlockState createBlockState()
           {
               return new BlockState(this, new IProperty[] {NORTH, EAST, WEST, SOUTH});
           }
        }
        
        • blockstates\atlas_fence.json -
        {
           "variants":
           {
               "east=false,north=false,south=false,west=false": { "model": "emomod:atlas_fence_post" },
               "east=false,north=true,south=false,west=false": { "model": "emomod:atlas_fence_n", "uvlock": true },
               "east=true,north=false,south=false,west=false": { "model": "emomod:atlas_fence_n", "y": 90, "uvlock": true },
               "east=false,north=false,south=true,west=false": { "model": "emomod:atlas_fence_n", "y": 180, "uvlock": true },
               "east=false,north=false,south=false,west=true": { "model": "emomod:atlas_fence_n", "y": 270, "uvlock": true },
               "east=true,north=true,south=false,west=false": { "model": "emomod:atlas_fence_ne", "uvlock": true },
               "east=true,north=false,south=true,west=false": { "model": "emomod:atlas_fence_ne", "y": 90, "uvlock": true },
               "east=false,north=false,south=true,west=true": { "model": "emomod:atlas_fence_ne", "y": 180, "uvlock": true },
               "east=false,north=true,south=false,west=true": { "model": "emomod:atlas_fence_ne", "y": 270, "uvlock": true },
               "east=false,north=true,south=true,west=false": { "model": "emomod:atlas_fence_ns", "uvlock": true },
               "east=true,north=false,south=false,west=true": { "model": "emomod:atlas_fence_ns", "y": 90, "uvlock": true },
               "east=true,north=true,south=true,west=false": { "model": "emomod:atlas_fence_nse", "uvlock": true },
               "east=true,north=false,south=true,west=true": { "model": "emomod:atlas_fence_nse", "y": 90, "uvlock": true },
               "east=false,north=true,south=true,west=true": { "model": "emomod:atlas_fence_nse", "y": 180, "uvlock": true },
               "east=true,north=true,south=false,west=true": { "model": "emomod:atlas_fence_nse", "y": 270, "uvlock": true },
               "east=true,north=true,south=true,west=true": { "model": "emomod:atlas_fence_nsew", "uvlock": true }
           }
        }
        
        • models\block\atlas_fence_n.json -
        {
           "parent": "block/fence_n",
           "textures":
           {
               "texture": "emomod:blocks/planks_atlas"
           }
        }
        
        • models\block\atlas_fence_ne.json -
        {
           "parent": "block/fence_ne",
           "textures":
           {
               "texture": "emomod:blocks/planks_atlas"
           }
        }
        
        • models\block\atlas_fence_ns.json -
        {
           "parent": "block/fence_ns",
           "textures":
           {
               "texture": "emomod:blocks/planks_atlas"
           }
        }
        
        • models\block\atlas_fence_nse.json -
        {
           "parent": "block/fence_nse",
           "textures":
           {
               "texture": "emomod:blocks/planks_atlas"
           }
        }
        
        • models\block\atlas_fence_nsew.json -
        {
           "parent": "block/fence_nsew",
           "textures":
           {
               "texture": "emomod:blocks/planks_atlas"
           }
        }
        
        • models\block\atlas_fence_post.json -
        {
           "parent": "block/fence_post",
           "textures":
           {
               "texture": "emomod:blocks/planks_atlas"
           }
        }
        
        • models\item\atlas_fence.json -
        {
           "parent": "emomod:block/atlas_fence_inventory",
           "display":
           {
               "thirdperson":
               {
                   "rotation": [ 0, 0, 180 ],
                   "translation": [ 0, 1.5, -2.75 ],
                   "scale": [ 0.375, 0.375, 0.375 ]
               },
               "gui":
               {
                   "rotation": [ 0, 90, 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

          Il cherche le fichier emomod:models/block/coco_fence_gate.json
          mais il ne le trouve pas.
          Vérifies qu’il existe bien, car dans ce que tu as donné il n’est pas présent.

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

            Justement c’est ça le probléme, tout comme la barrière, le portillon à lui aussi des states qui ont chacun un modèle (Exemple : modèle au nord, modèle au sud etc…). Normalement c’est le but du fichier json à l’intérieur du dossier blockstates de donner le chemin des modèles mais dans le cas du portillon il ne le fait pas et le jeu me demande donc un modèle “normal” avec comme nom celui du json de blockstates.

            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

              Ton bloc s’appelle comment ? (ce que tu as mit dans GameRegistry.registerBlock)

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

                Le bloc ce nome “atlas_fence_gate” comme le fichier json qui ce trouve dans blockstates, le probléme c’est que si je crée un fichier json “atlas_fence_gate” dans les modèles mon bloc auras toujours celui-ci peut-importe ces states (c’est pour ça que normalement il y a pas ce probléme).

                C’est assez difficile à expliquer mais en gros tous mes autres blocs avec des states non pas besoin d’un modèle du même nom étant donné qu’ils ont tous plusieurs modèles (à voir la barrière), sauf que celui-là apparemment me demande un modèle fixe et je pense sérieusement que c’est un probléme au niveau de l’enregistrement des blocs mais j’ai aucune idée pour fixer ce truc…

                Ps: Regardez pour la barrière, elle ne demande en aucun cas un fichier json “atlas_fence” vue qu’il n’existe pas et que j’ai aucune erreur.

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

                  -* Up *-

                  Apparemment j’ai tester sans ma méthode pour enregistrer les blocs et l’erreur survient quand même, je sais vraiment pas quoi faire…
                  Surtout que le probléme est présent aussi pour la porte et demie-dalle.

                  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

                    Sinon envoies-moi un zip / 7z de ton dossier src, je vais faire des tests de mon côté car là je ne vois pas d’où le problème vient.

                    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

                      J’ai trouvé le problème.
                      Dans ton fichier tu as :
                             “facing=south,in_wall=false,open=false”: { “model”: “emomod:atlas_fence_gate_closed” },
                      Or il cherche :
                      [11:18:28] [Client thread/ERROR] [FML]: Model definition for location emomod:atlas_fence_gate#facing=south,in_wall=true,open=true,powered=true not found

                      Avec powered en plus.
                      Dans la classe net.minecraft.client.renderer.BlockModelShapes il y a ça :
                             this.registerBlockWithStateMapper(Blocks.oak_fence_gate, (new StateMap.Builder()).addPropertiesToIgnore(new IProperty[] {BlockFenceGate.POWERED}).build());
                      Donc voila pourquoi dans le json de Minecraft il n’y a pas ce powered.
                      Donc soit tu adapte les lignes pour mettre power=true et power=false en plus à chaque fois (donc le fichier sera deux fois plus long)
                      Soit faut trouver une méthode pour ignorer cette propriété.

                      Édit : trouvé ! Forge ajoute ce qu’il faut :
                                 ModelLoader.setCustomStateMapper(EmotionBlocks.atlasFenceGate, (new StateMap.Builder()).addPropertiesToIgnore(new IProperty[] {BaseFenceGate.POWERED}).build());
                      Par contre, j’ai essayé de le mettre dans ta méthode registerRenderThings de ton client proxy au début et ça n’a pas fonctionné. Donc j’ai supposé que c’était dû au fait que la méthode ModelLoader.onRegisterAllBlocks était appelé avant l’event FMLInitializationEvent et c’est le cas, il faut donc mettre cette méthode dans la fonction preInit, puis ça fonctionne. (J’ai fait comme ça :

                      ​    @Mod.EventHandler
                          public void preInit(FMLPreInitializationEvent event)
                          {
                              // Load All Other Class By Type
                              EmotionTab.mainRegistry();
                              EmotionBlocks.mainRegistry();
                              EmotionItems.mainRegistry();
                              EmotionWorld.mainRegistry();
                              EmotionEntity.mainRegistry();
                              EmotionAchievement.mainRegistry();
                              EnchantManager.mainRegistry();
                              CraftingManager.mainRegistry();
                              BiomeRegistry.mainRegistry();
                      
                              if(event.getSide().isClient())
                              {
                                  ModelLoader.setCustomStateMapper(EmotionBlocks.atlasFenceGate, (new StateMap.Builder()).addPropertiesToIgnore(new IProperty[] {BaseFenceGate.POWERED}).build());
                              }
                          }
                      

                      Mais tu peux aussi faire un méthode dans ton proxy nommé preInitRender et mettre cette fonction dedans puis appeler proxy.preInitRender(); dans la fonction preInit de ta classe principale.
                      Par contre attention à ce que les blocs soient initialisés avant de faire cette fonction, sinon EmotionBlocks.atlasFenceGate va être null et donc ça ne va pas fonctionner.

                      Je sens que ces vacance je vais devoir faire un tutoriel complet sur les états de blocs et les rendus avec les jsons car il y en a des choses à dire …

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

                        Alors déjà merci énormément, ça à due être un gros travaille de recherche cependant pour les imports c’est bien :

                        import net.minecraftforge.client.model.ModelLoader;

                        Si oui il me dit :

                        The method setCustomStateMapper(Block, StateMap) is undefined for the type ModelLoader

                        Une solution ?

                        Ps: Je suppose que ça va être la même méthode pour porte et demie-dalle, si oui comment à tu sue que c’était ça le problème ?

                        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

                          Oula, si cette méthode n’existe pas c’est que tu utilises une très veille version de Forge : https://github.com/MinecraftForge/MinecraftForge/commit/b8add23d9bc1c225ca0e25a3e3419e6ed89b1879
                          cette méthode a été ajouté le 4 février. Faut mettre à jour de temps en temps !

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

                            Alors oui parlons en x) Non j’ai jamais mis à jour depuis le début, j’avais aucun idée qu’il fallait le faire. Je suppose que ça :

                            http://www.minecraftforgefrance.fr/showthread.php?tid=777

                            Va mettre utile, merci encore et j’imagine que ça fonctionne alors je passe le sujet en résolue.

                            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 as juste à modifier la version de Forge dans le build.gradle et refaire un setup.

                              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