Résolu Problème de texture sur item.
-
[font=Ubuntu, sans-serifBonjour à tous, alors je m’explique. Je suis sur le mdk forge 1.8.9 avec eclipse.]
J’ai commencé à suivre les tutoriels sur le site et sur la chaîne Youtube. J’ai déjà eu vraiment beaucoup de mal jusqu’à la création de la base du mod.
J’ai ensuite essayé de mettre le code du .SetTexture ou quelque chose comme ça, mais cela ne fonctionnait pas.
En effet, je m’en suis rendu compte ici: https://www.minecraftforgefrance.fr/showthread.php?tid=1754
J’ai essayé plusieurs solutions en m’aidant d’ici, mais je suis complètement perdu, et mon code est déstructuré à force de changer des choses par ci par là, autant au niveau des dossiers que du code.
Je suis perdu partout!
Tout ça pour une texture de lingot de cuivre…Le jeu se lance bien, j’arrive même à me connecter avec le client sur le serveur, mais je n’ai qu’une texture de bloc, alors que c’est un item, mais en plus elle est noire et violette. Dans l’inventaire, section matériaux, son nom attribué est: item.cuivreLingot.name.
Donc je vais essayer de détailler ce que j’ai:
Dans le dossier src->modegypte->assets
Là, j’ai 3 autres dossiers dans assets:- lang avec dedans “en_US.lang”
- models->item (sans s) avec dedans un fichier cuivre_lingot.png (une magnifique texture de lingot de cuivre…) et un fichier “cuivreLingot.json”
Son contenu:{ "parent": "builtin/generated", "textures": { "layer0": "cuivreLingot:items/cuivreLingot" }, "display": { "thirdperson": { "rotation": [ -90, 0, 0 ], "translation": [ 0, 1, -3 ], "scale": [ 0.55, 0.55, 0.55 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], "translation": [ 0, 4, 2 ], "scale": [ 1.7, 1.7, 1.7 ] } } }
- Un dossier textures->items avec dedans un cuivre_lingot.png (avec là encore, sa magnifique texture…).
Et attention les yeux, voici mon code dans Eclipse!
[font=Ubuntu, sans-serif```java
][font=Ubuntu, sans-serifpackage fr.vorax.egypte.common;]
[font=Ubuntu, sans-serifimport fr.vorax.egypte.proxy.EgypteCommonProxy;]
[font=Ubuntu, sans-serifimport net.minecraft.client.Minecraft;]
[font=Ubuntu, sans-serifimport net.minecraft.client.resources.model.ModelResourceLocation;]
[font=Ubuntu, sans-serifimport net.minecraft.creativetab.CreativeTabs;]
[font=Ubuntu, sans-serifimport net.minecraft.item.Item;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.Mod;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.Mod.EventHandler;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.Mod.Instance;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.SidedProxy;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.event.FMLInitializationEvent;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.event.FMLPostInitializationEvent;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.event.FMLPreInitializationEvent;]
[font=Ubuntu, sans-serifimport net.minecraftforge.fml.common.registry.GameRegistry;][font=Ubuntu, sans-serif@Mod(modid = “modegypte.MODID”, name = “Mod Egypte”, version = “1.0.0”)]
[font=Ubuntu, sans-serifpublic class ModEgypte]
[font=Ubuntu, sans-serif{]
[font=Ubuntu, sans-serif public static final String MODID = “modegypte”;]
[font=Ubuntu, sans-serif@Instance(MODID)]
[font=Ubuntu, sans-serifpublic static ModEgypte instance;][font=Ubuntu, sans-serif@SidedProxy(clientSide = “fr.vorax.egypte.proxy.EgypteClientProxy”, serverSide = “fr.vorax.egypte.proxy.EgypteCommonProxy”)]
[font=Ubuntu, sans-serifpublic static EgypteCommonProxy Proxy;][font=Ubuntu, sans-serifpublic static Item cuivreLingot;]
[font=Ubuntu, sans-serif@EventHandler]
[font=Ubuntu, sans-serifpublic void preInit(FMLPreInitializationEvent event)]
[font=Ubuntu, sans-serif {]
[font=Ubuntu, sans-serif cuivreLingot = new CuivreLingot().setUnlocalizedName(“cuivreLingot”).setCreativeTab(CreativeTabs.tabMaterials);]
[font=Ubuntu, sans-serif GameRegistry.registerItem(cuivreLingot, “cuivreLingot”);]
[font=Ubuntu, sans-serif }][font=Ubuntu, sans-serif@EventHandler]
[font=Ubuntu, sans-serifpublic void init(FMLInitializationEvent event)]
[font=Ubuntu, sans-serif {]
[font=Ubuntu, sans-serif Proxy.registerRender(); ]
[font=Ubuntu, sans-serif ]
[font=Ubuntu, sans-serif if(event.getSide().isClient())]
[font=Ubuntu, sans-serif {]
[font=Ubuntu, sans-serif Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(cuivreLingot, 0, new ModelResourceLocation(“MODID:cuivreLingot”, “inventory”));][font=Ubuntu, sans-serif }]
[font=Ubuntu, sans-serif ]
[font=Ubuntu, sans-serif }][font=Ubuntu, sans-serif@EventHandler]
[font=Ubuntu, sans-serifpublic void postinit(FMLPostInitializationEvent event)]
[font=Ubuntu, sans-serif {]
[font=Ubuntu, sans-serif ]
[font=Ubuntu, sans-serif }]
[font=Ubuntu, sans-serif}]
[font=Ubuntu, sans-serif
[font=Ubuntu, sans-serifBon par contre, je vous le dis d'avance, expliquez moi tout comme si j'étais vraiment débile, parce que j'ai déjà eu vraiment beaucoup de mal avec le post où j'ai cherché et les vidéos.] [font=Ubuntu, sans-serifJ'espère avoir été assez clair, et surtout, que cet objet sera enfin opérationnel avec sa texture que j'ai eu tant de mal à faire!] [font=Ubuntu, sans-serifMerci d'avance!]
-
Il y a pas mal de soucis :
-
Au niveau de tes dossiers, normalement c’est src/main/resources/assets/tonMODID/ <- et ici, tu met tous tes dossiers de ressources. (models, textures, lang …)
-
Dans ton model : “layer0” correspond à l’enlacement où forge vas aller chercher la texture or tu à mis “cuivreLingot:items/cuivreLingot” alors qu’il faut que tu mette ça “tonModID:items/cuivre_lingot” car ce qu’il y a avant les deux points correspond au dossier dans assets dans lequel il vas aller chercher la texture. Ensuite, après le “/” tu met le nom de ta texture donc ici, c’est cuivre_lingot.
-
Dans ta class principale : dans @Mod, pour le [font=Ubuntu,sans-serifmodid, tu doit mettre soit “modegypte]” , soit[font=Ubuntu,sans-serif ModEgypte.MODID mais pas un mélange des deux.
Le reste me semble correcte, je te conseil de mettre tous tes item dans une class faite pour les items plutôt que de tous les mettre dans ta class principale.
EDIT :
Dans ta class principale, dans init tu a mis ```java
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(cuivreLingot, 0, new ModelResourceLocation(“MODID:cuivreLingot”, “inventory”));]mais à la place de MODID, tu doit metre ton modID (%(#333333)[[font=Ubuntu,sans-serif]modegypte]).
-
-
“src>modegypte>assets” ça doit être src>main>ressources>modegypte>assets (si ça ne marche pas inversé les deux derniers, je suis pas sur de l’ordre
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
Merci pour les réponses, mais ça ne marche toujours pas…
J’ai donc maintenant en terme de fichiers:
src->main->ressources avec dedans mcmod.info
Ensuite dans ressources toujours, j’ai:
assets->modegypte avec dedans:-
lang avec dedans lang.json vide.
-
models->item avec dedans cuivre_lingot.png (ah et j’espère que ce n’est pas parcequ’il est en 32x32 que ça ne va pas!) et cuivreLingot.json
Contenu de cuivreLingot.json:
{ "parent": "builtin/generated", "textures": { "layer0": "modegypte:items/cuivre_lingot" }, "display": { "thirdperson": { "rotation": [ -90, 0, 0 ], "translation": [ 0, 1, -3 ], "scale": [ 0.55, 0.55, 0.55 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], "translation": [ 0, 4, 2 ], "scale": [ 1.7, 1.7, 1.7 ] } } }
- textures->items avec dedans cuivre_lingot.png
Code sur Eclipse:
package fr.vorax.egypte.common; import fr.vorax.egypte.proxy.EgypteCommonProxy; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; @Mod(modid = "modegypte", name = "Mod Egypte", version = "1.0.0") public class ModEgypte { @Instance("modegypte") public static ModEgypte instance; @SidedProxy(clientSide = "fr.vorax.egypte.proxy.EgypteClientProxy", serverSide = "fr.vorax.egypte.proxy.EgypteCommonProxy") public static EgypteCommonProxy Proxy; public static Item cuivreLingot; @EventHandler public void preInit(FMLPreInitializationEvent event) { cuivreLingot = new CuivreLingot().setUnlocalizedName("cuivreLingot").setCreativeTab(CreativeTabs.tabMaterials); GameRegistry.registerItem(cuivreLingot, "cuivreLingot"); } @EventHandler public void init(FMLInitializationEvent event) { Proxy.registerRender(); if(event.getSide().isClient()) { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(cuivreLingot, 0, new ModelResourceLocation("modegypte:cuivreLingot", "inventory")); } } @EventHandler public void postinit(FMLPostInitializationEvent event) { } }
Donc j’ai toujours cette texture. J’ai 2 dossiers du coup avec cuivre_lingot.png il y a donc peut-être un problème avec ça, mais je ne sais pas ce que je dois supprimer ou modifier, si il faut que ce fichier en .png doit être au même endroit que le json…
Ensuite, j’aimerais bien que ce soit mieux organisé, plutôt que de tout mettre dans la classe principale.
Sauf que… Je ne sais pas comment faire ma classe pour les items. -
-
Normalement la texture en .png est dans le dossier texture, pas dans model. Si elle est en 32x32, ça ne devrais pas poser de problème.
Quand tu lance minecraft, dans la console, est-ce que tu as quelque chose comme ça ?
[Client thread/ERROR] [FML]: Model definition for location modegypte:cuivreLingot#inventory not found
-
Ah, donc je dois avoir:
-
textures->items avec dedans cuivre_lingot.png
-
models->item avec dedans cuivreLingot.json et je vire cuivre_lingot.png ?
En lançant le client, j’ai bien:
[13:06:10] [Client thread/ERROR] [FML]: Model definition for location modegypte:cuivreLingot#inventory not found
-
-
Oui, c’est bien ça pour la texture.
Apparemment, minecraft cherche le model au bon endroit mais ne le trouve pas.
Tu peut envoyer un screenshot sur eclipse du dosier src/main/resources avec tous les dosiers et sous dosiers ouverts, s’il te plais.
-
Bon, niveau dossier alors, on va dire que c’est réglé.
C’est donc dans Eclipse que ça doit se passer.Screenshot sur Eclipse: http://www.cjoint.com/c/FDxntAnom3k
-
Cliques sur src/main/resources et fais F5
-
J’ai beau rafraîchir, je ne vois pas ce que j’ai mis en + …
-
Le dossier src dont on parle depuis le début, il est où ? Il est bien directement dans ton dossier forge (le dossier avec gradlew dedans)
-
Oui, dans le dossier forge que j’ai renommé “MinecraftEgypte”.
-
Tu peux envoyer un screen du dossier depuis l’explorateur de fichier ?
-
Ca donne ça: http://www.cjoint.com/c/FDxrRxAcrjk
-
Le même en étant dans src/main/resources/assets/….
-
Oui, il est bien dedans: http://www.cjoint.com/c/FDxsuvFkVhk
Remarque: Le dossier Forge est “MinecraftEgypte” et dans src->main->resources->assets-> On trouve “modegypte” . -
Oui je vois.
C’est étrange qu’il ne soit pas visiblement sur eclipse … -
J’ai beau copier le dossier sur le bureau et dire à Eclipse de travailler dessus, mais rien à faire, il n’affiche toujours rien. Il n’y a aucune solution?
-
Refais un setup et copie ton dossier src actuel dans le nouveau setup.
-
Je ne sais pas ce que c’est et comment faire…
Mais sinon, je ne peux pas faire dans le paquet un file->import?J’ai fais file->import et j’ai sélectionné le dossier items (dans textures), j’ai coché cuivre_lingot.png et je l’ai donc dans le paquet assets.modegypte.textures
Mais il faut un paquet assets.modegypte.models ou un truc du genre pour les json aussi?