Résolu Render Models
-
Bonjour tout le monde,
Tout d’abord je précise que je mode avec Forge Gradle en 1.8
Alors voila mon problème jusqu’à maintenant pour rajouter des armures il y avais juste a indiquer la localisation des textures layer mais depuis le 1.8 il ne suffit plus de faire cela. Mois qui est moder en Vanilla je sais qu’il faut indiquer au RenderBiped que notre armure possède cette texture layer mais sous forge je n’est pas trouver comment faire.Merci d’avance
-
Il me semble pas que le système de rendu des armures ai changé en 1.8, mais regardes les classes de Minecraft pour voir comment c’est géré
-
Moi aussi je n’est pas vu de changement dans le code du rendu mais je ne comprend pas pourquoi les layers ne sont pas reconnus.
Voici mon code au cas où j’aurais fait une boulette.package checconio.test.tuto.init; import net.minecraft.entity.Entity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import checconio.test.tuto.Reference; public class ItemTestArmor extends ItemArmor { public ItemTestArmor(ArmorMaterial material, int armorType) { super(material, 0, armorType); } public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(stack.getItem() == ItemMod.test_armor3) { return Reference.MOD_ID + "textures/models/armor/test_layer_2.png"; } else if(stack.getItem() == ItemMod.test_armor2 || stack.getItem() == ItemMod.test_armor || stack.getItem() == ItemMod.test_armor4) return Reference.MOD_ID + "textures/models/armor/test_layer_1.png"; return null; } }
-
Salut,
Je ne me suis pas encore intérressé aux armures en 1.8, tu peux montrer un screen du problème et le détailler ? -
@‘robin4002’:
Salut,
Je ne me suis pas encore intérressé aux armures en 1.8, tu peux montrer un screen du problème et le détailler ?Je pense que la méthode getArmorTexture a changé de nom. Je n’ai jamais codé en 1.8 dont je ne peux pas te l’assurer.
-
Alors voila mon armure est créer correctement:
Mais n’apparais pas sur le joueur:
Voici le code d’erreur de la console.
[23:14:59] [Client thread/ERROR]: Couldn't render entity java.lang.NullPointerException at net.minecraft.client.renderer.entity.layers.LayerArmorBase.getArmorResource(LayerArmorBase.java:179) ~[LayerArmorBase.class:?] at net.minecraft.client.renderer.entity.layers.LayerArmorBase.func_177182_a(LayerArmorBase.java:62) ~[LayerArmorBase.class:?] at net.minecraft.client.renderer.entity.layers.LayerArmorBase.doRenderLayer(LayerArmorBase.java:38) ~[LayerArmorBase.class:?] at net.minecraft.client.renderer.entity.RendererLivingEntity.func_177093_a(RendererLivingEntity.java:480) ~[RendererLivingEntity.class:?] at net.minecraft.client.renderer.entity.RendererLivingEntity.doRender(RendererLivingEntity.java:190) [RendererLivingEntity.class:?] at net.minecraft.client.renderer.entity.RenderPlayer.func_180596_a(RenderPlayer.java:71) [RenderPlayer.class:?] at net.minecraft.client.renderer.entity.RenderPlayer.doRender(RenderPlayer.java:275) [RenderPlayer.class:?] at net.minecraft.client.renderer.entity.RenderManager.doRenderEntity(RenderManager.java:377) [RenderManager.class:?] at net.minecraft.client.renderer.entity.RenderManager.renderEntityWithPosYaw(RenderManager.java:357) [RenderManager.class:?] at net.minecraft.client.gui.inventory.GuiInventory.drawEntityOnScreen(GuiInventory.java:123) [GuiInventory.class:?] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawGuiContainerBackgroundLayer(GuiContainerCreative.java:827) [GuiContainerCreative.class:?] at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:95) [GuiContainer.class:?] at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:53) [InventoryEffectRenderer.class:?] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawScreen(GuiContainerCreative.java:659) [GuiContainerCreative.class:?] at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:460) [ForgeHooksClient.class:?] at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1134) [EntityRenderer.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1114) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:376) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:117) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_45] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_45] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?] at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?] at GradleStart.main(Unknown Source) [start/:?]
-
Tu es sûr que ce n’est pas un problème venant de la texture du layer qui n’est pas adaptée? Sinon elle se pourrait oui que certaine méthodes aient changé de nom.
-
Je peux voir la déclaration de ton ArmorMaterial dans ta classe principale ?
Aussi je viens de voir qu’il manque le : dans le return de ta fonction getArmorTexture -
Rajoute l’annotation @override au-dessus de ta méthode pour vérifier qu’elle existe, ou fait Alt + shift + s puis “override/implement methods” et choisis la méthode, çà évite de faire des erreurs.
-
Pour la déclaration de ton matériel d’armure ça ce passe comme ça (avec la déclaration des items) :
public static ArmorMaterial enumArmorMaterialViridis = EnumHelper.addArmorMaterial("VIRIDIS", "viridis", 17, new int[] {3, 6, 5, 3}, 9);
"
(String name, String textureName, int durability, int[] reductionAmounts, int enchantability)
"
L’armure en diamant ayant ces propriétés :
DIAMOND("diamond", 33, new int[]{3, 8, 6, 3}, 10);
Puis les items :
public static Item viridisHelmet = new ViridisArmor(enumArmorMaterialViridis, 5, 0); public static Item viridisChestplate = new ViridisArmor(enumArmorMaterialViridis, 5, 1); public static Item viridisLeggings = new ViridisArmor(enumArmorMaterialViridis, 5, 2); public static Item viridisBoots = new ViridisArmor(enumArmorMaterialViridis, 5, 3);
Et finalement la classe de l’armure ici “ViridisArmor” :
public class ViridisArmor extends ItemArmor { public ViridisArmor(ArmorMaterial material, int renderIndex, int armorType) { super(material, renderIndex, armorType); } @Override public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(slot == 2) { return Infos.MODID + ":textures/models/armor/viridis_layer_2.png"; } return Infos.MODID + ":textures/models/armor/viridis_layer_1.png"; } @Override public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == Item.getItemFromBlock(EmotionBlocks.viridisCristal)) { return true; } return false; } }
Avec la fonction “getIsRepairable” pour que l’armure puisse être réparée via l’enclume (très utile), voilà je pense que ça devrait fonctionner et que tu comprendra facilement le code.
Ps: Il y auras peut-être des erreurs dans ce cas préviens moi étant donné que j’utilise maintenant un rendue personnalisée pour mon armure.
Ps 2: Je te conseil de reprendre les textures de l’armure en diamant pour designer la tienne.
-
@‘SCAREX’:
Rajoute l’annotation @override au-dessus de ta méthode pour vérifier qu’elle existe, ou fait Alt + shift + s puis “override/implement methods” et choisis la méthode, çà évite de faire des erreurs.
lorsque j’implémente Override il n’y a aucune erreur.
-
Implémente ? C’est une annotation, pas une interface
-
@‘EmotionFox’:
Pour la déclaration de ton matériel d’armure ça ce passe comme ça (avec la déclaration des items) :
public static ArmorMaterial enumArmorMaterialViridis = EnumHelper.addArmorMaterial("VIRIDIS", "viridis", 17, new int[] {3, 6, 5, 3}, 9);
"
(String name, String textureName, int durability, int[] reductionAmounts, int enchantability)
"
L’armure en diamant ayant ces propriétés :
DIAMOND("diamond", 33, new int[]{3, 8, 6, 3}, 10);
Puis les items :
public static Item viridisHelmet = new ViridisArmor(enumArmorMaterialViridis, 5, 0); public static Item viridisChestplate = new ViridisArmor(enumArmorMaterialViridis, 5, 1); public static Item viridisLeggings = new ViridisArmor(enumArmorMaterialViridis, 5, 2); public static Item viridisBoots = new ViridisArmor(enumArmorMaterialViridis, 5, 3);
Et finalement la classe de l’armure ici “ViridisArmor” :
public class ViridisArmor extends ItemArmor { public ViridisArmor(ArmorMaterial material, int renderIndex, int armorType) { super(material, renderIndex, armorType); } @Override public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(slot == 2) { return Infos.MODID + ":textures/models/armor/viridis_layer_2.png"; } return Infos.MODID + ":textures/models/armor/viridis_layer_1.png"; } @Override public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == Item.getItemFromBlock(EmotionBlocks.viridisCristal)) { return true; } return false; } }
Avec la fonction “getIsRepairable” pour que l’armure puisse être réparée via l’enclume (très utile), voilà je pense que ça devrait fonctionner et que tu comprendra facilement le code.
Ps: Il y auras peut-être des erreurs dans ce cas préviens moi étant donné que j’utilise maintenant un rendue personnalisée pour mon armure.
Ps 2: Je te conseil de reprendre les textures de l’armure en diamant pour designer la tienne.
Merci en regardant les codes que tu m’a envoyer j’ai trouver mon erreur, dans la ligne correspondant au material l’emplacement où il fallait maitre le nom de la texture j’y avais mit <<null>> voila pourquoi il ne chercher pas les textures.
Par contre au moment de la fonction “getIsRepairable” il y a “EmotionBlocks.viridisCristal” il s’agit que quel block ?</null>
-
@‘SCAREX’:
Implémente ? C’est une annotation, pas une interface
A ok ^^ mais j’ai trouver mon problème merci quand même
-
Si c’est résolu mets la balise résolu.
-
Merci à tous
-
Il s’agit du bloc qui permet de réparer l’armure, tu peux aussi mettre un item :
@Override public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == Items.apple) { return true; } return false; }
-
@‘EmotionFox’:
Il s’agit du bloc qui permet de réparer l’armure, tu peux aussi mettre un item :
@Override public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == Items.apple) { return true; } return false; }
A ok merci