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. 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