Problème création de bloc simple.



  • Je suis sur Eclipse avec forge-1.8.9-11.15.1.1722-mdk .

    J'ai suivi ce tutoriel: https://www.youtube.com/watch?v=eVHCUF9MFn4&index=6&list=PL6TRstet76dpEAHSTaxP1TETShd5kASUP

    Pour commencer, je n'ai pas eu la même chose que dans la vidéo.
    En effet, la classe (CuivreBloc) du bloc a ce code:

    package fr.vorax.egypte.common;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    
    public class CuivreBloc extends Block
    {
    
        public CuivreBloc(Material material)
        {
            super(material);
    
        }
    
    }
    
    

    Or dans la vidéo, il y a un protect…
    Je me suis dis que je vais continuer quand-même pour voir, alors j'ai mis:

     @SidedProxy(clientSide = "fr.vorax.egypte.proxy.ClientProxy", serverSide = "fr.vorax.egypte.proxy.CommonProxy")
       public static CommonProxy proxy;
    
        public static Item cuivreLingot;
        public static Block cuivreBloc;
    
        @EventHandler
        public void preInit(FMLPreInitializationEvent event)
        {
            cuivreLingot = new CuivreLingot().setUnlocalizedName("cuivreLingot").setCreativeTab(CreativeTabs.tabMaterials);
    
            GameRegistry.registerItem(cuivreLingot, "cuivre_Lingot");
    
            cuivreBloc = new CuivreBloc(Material.iron).setBlockname("cuivrebloc").setCreativeTab(CreativeTabs.tabBlock);
    
            GameRegistry.registerBlock(cuivreBloc, "cuivre_bloc");
        }
    
        @EventHandler
        public void preInit(FMLInitializationEvent event)
        {
            proxy.registerRender();
    
            if(event.getSide().isClient())
                    {
                        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(cuivreLingot, 0, new ModelResourceLocation("modegypte:cuivre_Lingot", "inventory"));
                    }
        }
    
        @EventHandler
        public void init(FMLPostInitializationEvent event)
        {
    
        }
    }
    

    J'ai donc une erreur sur setBlockname qui me demande de créer une méthode pour résoudre le problème et une autre option.
    Le client ne se lance pas.
    Pour l'instant, ce n'est pas la texture qui m'intéresse, je veux que le bloc fonctionne dans un premier temps.

    Il y a sûrement eu des changements depuis 1.8 alors que le tutoriel a été fait pour la 1.7 je pense que ça n'aide pas...

    Enfin bref, j'ai donc une classe CuivreBloc avec du code différent de celui présenté dans le tutoriel vidéo, et une erreur sur setBlockname



  • A la place de setBlockname, tu doit mettre setUnlocalizedName (comme pour les items)
    Pour l'histoire du protected, moi non plus je n'utilise pas protected, je ne sais pas à quoi il sert mais ça fonctionne très bien sans.



  • Ah, bon tant mieux, du coup ça marche comme j'ai juste changé SetUnlocalizedName et le client se lance, merci!
    Et maintenant pour la texture, on continue ici ou j'ouvre un autre sujet?



  • C'est sur le même block donc on peut continuer sur ce sujet.



  • D'accord, donc pour la texture, comment faire? Je suppose que c'est presque comme pour les items?



  • En 1.8, pour chaque block, il te faut
     - un fichier blockState : (le fichier doit s'appeler nomDeTonBlock.json) il faut le mettre dans le dossier "blockstates" que tu met dans le dossier où tu a déjà les dossiers "models" et "textures" ( tu peux copier le fichier blockstate d'un block de fer par exemple en changeant le nom du model par tonModID:nomDeTonModel );
     - un model de block : (le même nom que le fichier blockState) dans le dossier models/block;
    (tu peux aussi copier celui du block de fer en changeant ce qu'il y a prés "all" par "tonModID:blocks/nomDeTaTexture")
     - un model d'item : (même nom) dans le dossier models/item;
    (tu peut voler le model de la même manière, je suppose que tu a compris)
     - ta texture dans le dossier textures/blocks.



  • Non, justement je n'ai pas compris…
    Là où je bloque, c'est au moment de copier le fichier blockstate d'un block de fer. On le trouve où?


  • Administrateurs

    ici :



  • Je le vois bien dans la hiérarchie, mais je ne peux pas l'ouvrir, j'ai une erreur:
    Problems opening an editor:

    Reason:
    Problem opening editor for 'iron_block.json': 'System editor can only open file base resources.'



  • Clic droit -> Open with et essaye les différentes manières de l'ouvrir, si ça marche pas, met le chemin du forgeSrc-laversion.jar dans l'explorateur de windows, ouvre le avec winrar et trouve les blockstates.



  • Evidemment,ça ne marche pas, ça m'aurait étonné, j'ai l'habitude maintenant… Il n'y a pas d'open with, juste open et show in où il ne me propose que: Git Repositories, history, Navigator, Project Explorer, Properties...

    Après j'ai été dans le src, j'ai mis une recherche pour blockstates, et je ne retrouve que ce que moi j'ai créé...



  • Il faut que t'ailles dans le jar de forge : Ton dossier user de windows => .gradlew => caches => minecraft => net => minecraft => minecraft => 1.8.9 => tu ouvres le jar avec winrar (ou autre) => assets => minecraft => blockstates.



  • Je n'ai qu'un dossier .gradle avec dedans un dossier 2.7 …
    Les seuls gradlew que je vois c'est un bat et un fichier gradlew sans extension apparente...



  • Dans ton dossier user (C:\Users\ton nom d'user windows).


  • Administrateurs

    Window -> preference -> déroule le menu general -> editors -> File Association
    Clics sur add en haut à droite -> *.json
    Une fois ajouté sélectionnes-le, clics ensuite sur le second add vers le milieu de la page. Cherches dans la liste text editor (en restant dans internal editor).
    Clics sur ok, tu pourra ouvrir le fichier ensuite.

    Par défaut eclipse veut ouvrir les fichiers avec un éditeur externe, or il ne peut pas ouvrir les fichiers se trouvant dans une archive avec un éditeur externe.



  • Ca s'ouvre maintenant après avoir été dans les préférences.
    Mais ça ne va pas ailleurs…

    J'ai:

    - Dans le dossier blockstates bloc_Cuivre.json avec le contenu suivant:

    {
        "variants": {
            "normal": { "modegypte": "cuivre_bloc" }
        }
    }
    

    - Dossier models->block->bloc_Cuivre.json avec:

    {
        "parent": "block/cube_all",
        "textures": {
            "all": "modegypte/bloc_Cuivre"
        }
    }
    
    

    - Dossier models->item->bloc_Cuivre.json avec:

    %(#cccc66)[```java
    {
    ]
        "parent": "modegypte/cuivre_bloc",
        "display": {
            "thirdperson": {
                "rotation": [ 10, -45, 170 ],
                "translation": [ 0, 1.5, -2.75 ],
                "scale": [ 0.375, 0.375, 0.375 ]
            }
        }
    %(#cccc66)[}

    
    - Dossier textures->blocks->bloc_Cuivre.png
    
    Une fois le client lancé, les 2 dernières lignes du log:
    
    

    [12:25:25] [Client thread/ERROR] [FML]: Model definition for location modegypte:cuivre_bloc#inventory not found
    [12:25:25] [Client thread/ERROR] [FML]: Model definition for location modegypte:cuivre_bloc#normal not found

    
    J'ai fais comme je pouvais pour trouver les models, mais je suis sûr qu'il y en a qui ne sont pas bons.


  • Ca ne marche pas car tu as mélangé tes noms de fichier, tu indique un nom à mc et t'en met un autre aux fichiers.

    "Model definition for location modegypte:cuivre_bloc#normal not found", ton fichier dans les blockstates devrait s'appeler "cuivre_bloc.json".
    Dans ton fichier de blockstates, tu as "normal": { "modegypte": "cuivre_bloc" } donc ton fichier de model devrait d'appeler "cuivre_bloc.json".

    Et il faut aussi changer le nom de ton model pour l'item qui as le même problème.



  • blockstates->cuivre_bloc.json

    {
        "variants": {
            "normal": { "modegypte": "cuivre_bloc.json" }
        }
    }
    
    

    models->block->cuivre_bloc.json

    {
        "parent": "block/cube_all",
        "textures": {
            "all": "modegypte/bloc_Cuivre"
        }
    }
    
    

    models->item->bloc_Cuivre.json

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

    textures->blocks->bloc_Cuivre.png

    Faut dire que je ne m'y retrouve plus et je me mélange avec les noms, je ne sais pas exactement si tout doit forcément avoir le même nom, parce que différencier serait plus simple.


  • Administrateurs

    "normal": { "modegypte": "cuivre_bloc.json" }
    Dans le fichier qui se trouve dans block state.
    Tu dois indiquer ici le nom du fichier qui se trouve dans model/block et non le nom du fichier lui même.



  • Il faut que tu renommes le json dans model/item en cuivre_bloc aussi (comme les autres), et dans ce même fichier :
    "parent": "modegypte/bloc_Cuivre", il faut que tu remplaces ça par ça "parent": "modegypte:block/cuivre_bloc",
    Pour le fichier dans model/block : remplace ça "all": "modegypte/bloc_Cuivre" par ça "all": "modegypte:blocs/bloc_Cuivre"

    Le problème et que tu as mis un "/" au lieu de ":" pour le modid, et également qu'il faut préciser le dossier du model/texture.

    Et finalement, pour le blockstates :
    Remplace ça "normal": { "modegypte": "cuivre_bloc.json" } par ça "normal": { "modegypte:cuivre_bloc.json" } (il y a peut-être block/ entre le ":" et le cuivre_bloc", pas sur mais je crois pas).