J’ai une erreur dans la classe de l’armure sur
public String “getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)”
ici, return “modtutoriel:models/armor/tutorial_layer_1.png”; c’est return “modtutoriel:textures/models/armor/tutorial_layer_1.png”;
que tu dois mettre.
Ça faisait partie des nombreux tests que j’ai fait, et que je n’ai pas remis.
Le premier devrait néanmoins fonctionner
Essaye avec public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) et met un @Override au dessus de la fonction pour voir si ça change quelque chose. (garde le même return)
Il bloque sur la signature si je mets @Override et que je mets cette signature. Il ne détecte pas d’implémentation dans la classe Item ou ItemArmor, alors que j’ai vérifié, j’ai bien cette fonction dans Item.
Rajouter @Override au dessus de la signature de la fonction que j’ai actuellement donne exactement le même problème
J’ai l’impression que je vais réinstaller forge demain….
Non, inutile de réinstaller Forge, je viens de trouver le problème. Le @Override ne marche pas, car
getArmorTexture(net.minecraft.item.ItemStack stack, javax.swing.text.html.parser.Entity entity, int slot, int layer) != getArmorTexture(net.minecraft.item.ItemStack stack, net.minecraft.entity.Entity entity, int slot, int layer)
Faite attention à vos importation !
import javax.swing.text.html.parser.Entity; -> import net.minecraft.entity.Entity;
Effectivement, je venais de le trouver au même moment… Désormais, cela fonctionne
Je ferais plus attention désormais.
Merci pour vos tutos
Bonjour,
J’ai suivi ton tuto, mais quand je mets mon armure, le layer est celui de base (un truc tout moche noir et rose ;))
En regardant dans le code d’erreur j’ai remarqué qu’il ne trouve pas la texture :
2013-11-23 15:47:48 [Avertissement] [Minecraft-Client] Failed to load texture: newores:rubis_layer_1 java.io.FileNotFoundException: newores:rubis_layer_1 at net.minecraft.client.resources.FallbackResourceManager.getResource(FallbackResourceManager.java:64) at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:63) at net.minecraft.client.renderer.texture.SimpleTexture.loadTexture(SimpleTexture.java:31) at net.minecraft.client.renderer.texture.TextureManager.loadTexture(TextureManager.java:84) at net.minecraft.client.renderer.texture.TextureManager.bindTexture(TextureManager.java:41) at net.minecraft.client.renderer.entity.Render.bindTexture(Render.java:53) at net.minecraft.client.renderer.entity.RenderPlayer.setArmorModel(RenderPlayer.java:72) at net.minecraft.client.renderer.entity.RenderPlayer.shouldRenderPass(RenderPlayer.java:514) at net.minecraft.client.renderer.entity.RendererLivingEntity.doRenderLiving(RendererLivingEntity.java:164) at net.minecraft.client.renderer.entity.RenderPlayer.func_130009_a(RenderPlayer.java:166) at net.minecraft.client.renderer.entity.RenderPlayer.doRender(RenderPlayer.java:556) at net.minecraft.client.renderer.entity.RenderManager.renderEntityWithPosYaw(RenderManager.java:312) at net.minecraft.client.gui.inventory.GuiInventory.func_110423_a(GuiInventory.java:121) at net.minecraft.client.gui.inventory.GuiContainerCreative.drawGuiContainerBackgroundLayer(GuiContainerCreative.java:849) at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:111) at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:43) at net.minecraft.client.gui.inventory.GuiContainerCreative.drawScreen(GuiContainerCreative.java:683) at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1036) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:946) at net.minecraft.client.Minecraft.run(Minecraft.java:838) at net.minecraft.client.main.Main.main(Main.java:93) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:131) at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
Mais j’ai beau vérifier et revérifier, le chemin d’accès est le bon.
Pouvez-vous m’aider ?
Classe Principale :
package fr.MrBlockTNT.NewOres; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumArmorMaterial; import net.minecraft.item.Item; import net.minecraftforge.common.EnumHelper; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; import fr.MrBlockTNT.proxy.CommonProxy; @Mod(modid = "NewOres", name = "New Ores", version = "1.0.0") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class NewOres { @SidedProxy(clientSide = "fr.MrBlockTNT.proxy.ClientProxy", serverSide = "fr.MrBlockTNT.proxy.CommonProxy") public static CommonProxy proxy; @Instance("NewOres") public static NewOres instance; public static Block rubisOre, saphirOre, onyxOre, enchantiteOre, rubisBlock, saphirBlock, onyxBlock, enchantiteBlock; public static Item enchantiteDust, rubis, saphir, onyx; public static Item rubyBar, saphirBar, onyxBar, enchantiteBar; public static Item rubyHelmet, rubyPlate, rubyLegs, rubyBoots; static EnumArmorMaterial rubyMaterial = EnumHelper.addArmorMaterial("Ruby", 20, new int[]{2, 4, 3, 1}, 10); public static CreativeTabs NewOresTab = new NewOresTab("NewOres"); @EventHandler public void PreInit(FMLPreInitializationEvent event) { // Blocks rubisOre = new BlockNewOre(2000).setHardness(3.0F).setResistance(5.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Rubis Ore").setTextureName("newores:rubis_ore"); saphirOre = new BlockNewOre(2001).setHardness(3.0F).setResistance(5.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Saphirre Ore").setTextureName("newores:saphir_ore"); onyxOre = new BlockNewOre(2002).setHardness(3.0F).setResistance(5.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Onyx Ore").setTextureName("newores:onyx_ore"); enchantiteOre = new BlockNewOre(2003).setHardness(3.0F).setResistance(5.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Enchantite Ore").setTextureName("newores:enchantite_ore_end"); //onyxNether = new BlockNewOre(2004).setHardness(3.0F).setResistance(5.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Onyx Ore Nether").setTextureName("newores:onyx_ore_nether"); //enchantiteEnd = new BlockNewOre(2005).setHardness(3.0F).setResistance(5.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Enchantite Ore End").setTextureName("newores:enchantite_ore"); rubisBlock = new BlockNewOre(2006).setHardness(3.0F).setResistance(10.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("Rubis Block").setTextureName("newores:rubis_block"); saphirBlock = new BlockNewOre(2007).setHardness(3.0F).setResistance(10.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("Saphirre Block").setTextureName("newores:saphir_block"); onyxBlock = new BlockNewOre(2008).setHardness(3.0F).setResistance(10.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("Onyx Block").setTextureName("newores:onyx_block"); enchantiteBlock = new BlockNewOre(2009).setHardness(3.0F).setResistance(10.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("Enchantite Block").setTextureName("newores:enchantite_block"); GameRegistry.registerBlock(rubisOre, "Minerai de Rubis"); GameRegistry.registerBlock(saphirOre, "Minerai de Saphir"); GameRegistry.registerBlock(onyxOre, "Minerai d'Onyx"); GameRegistry.registerBlock(enchantiteOre, "Minerai d'Enchantite"); //GameRegistry.registerBlock(onyxNether, "Minerai d'Onyx Nether"); //GameRegistry.registerBlock(enchantiteEnd, "Minerai d'Enchantite End"); GameRegistry.registerBlock(rubisBlock, "Bloc de Rubis"); GameRegistry.registerBlock(saphirBlock, "Bloc de Saphir"); GameRegistry.registerBlock(onyxBlock, "Bloc d'Onyx"); GameRegistry.registerBlock(enchantiteBlock, "Bloc d'Enchantite"); //Items enchantiteDust = new ItemNewOres(12000).setUnlocalizedName("Enchantite Dust").setTextureName("newores:enchantite_dust"); rubis = new ItemNewOres(12001).setUnlocalizedName("Rubis Gem").setTextureName("newores:rubis"); saphir = new ItemNewOres(12002).setUnlocalizedName("Saphir Gem").setTextureName("newores:saphir"); onyx = new ItemNewOres(12003).setUnlocalizedName("Onyx Gem").setTextureName("newores:onyx"); enchantiteBar = new ItemNewOres(12004).setUnlocalizedName("Enchantite Bar").setTextureName("newores:enchantite_dust"); rubyBar = new ItemNewOres(12005).setUnlocalizedName("Rubis Bar").setTextureName("newores:rubis"); saphirBar = new ItemNewOres(12006).setUnlocalizedName("Saphir Bar").setTextureName("newores:saphir"); onyxBar = new ItemNewOres(12007).setUnlocalizedName("Onyx Bar").setTextureName("newores:onyx"); GameRegistry.registerItem(enchantiteDust, "EnchantiteDust", "NewOres"); GameRegistry.registerItem(rubis, "Rubis", "NewOres"); GameRegistry.registerItem(saphir, "Saphir", "NewOres"); GameRegistry.registerItem(onyx, "Onyx", "NewOres"); GameRegistry.registerItem(enchantiteBar, "Enchantite Bar", "NewOres"); GameRegistry.registerItem(rubyBar, "Rubis Bar", "NewOres"); GameRegistry.registerItem(saphirBar, "Saphir Bar", "NewOres"); GameRegistry.registerItem(onyxBar, "Onyx Bar", "NewOres"); // Armures & Outils rubyHelmet = new RubyArmor(12100, rubyMaterial, 0,0).setUnlocalizedName("RubyHelmet").setTextureName("newores:rubis_helmet"); rubyPlate = new RubyArmor(12101, rubyMaterial, 0, 1).setUnlocalizedName("RubyPlate").setTextureName("newores:rubis_chestplate"); rubyLegs = new RubyArmor(12102, rubyMaterial, 0, 2).setUnlocalizedName("RubyLegs").setTextureName("newores:rubis_leggings"); rubyBoots = new RubyArmor(12103, rubyMaterial, 0, 3).setUnlocalizedName("RubyBoots").setTextureName("newores:rubis_boots"); GameRegistry.registerItem(rubyHelmet, "RubyHelmet", "NewOres"); GameRegistry.registerItem(rubyPlate, "RubyPlate", "NewOres"); GameRegistry.registerItem(rubyLegs, "RubyLegs", "NewOres"); GameRegistry.registerItem(rubyBoots, "RubyBoots", "NewOres"); //Generation GameRegistry.registerWorldGenerator(new NewOresGenerator()); } @EventHandler public void Init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void PostInit(FMLPostInitializationEvent event) { } }
RubyArmor :
package fr.MrBlockTNT.NewOres; import net.minecraft.entity.Entity; import net.minecraft.item.EnumArmorMaterial; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; public class RubyArmor extends ItemArmor { public RubyArmor(int id, EnumArmorMaterial armorMaterial, int type, int layer) { super(id, armorMaterial, type, layer); } public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer) { if(stack.itemID == NewOres.rubyLegs.itemID) { return "newores:rubis_layer_2"; } else { return "newores:rubis_layer_1"; } } public boolean getIsRepairable(ItemStack stack, ItemStack repairItem) { if(stack.getItem().equals(this) && repairItem.getItem().itemID == NewOres.rubyBar.itemID) return true; return false; } }
C’est le chemin qui pose problème.
Imaginons que ta texture se trouve dans “assets/newores/textures/armure/rubis_layer_1.png”.
Alors ton chemin dans ton code est :
return "newores:textures/armure/rubis_layer_1.png";
Merci, j’essaie ça tout de suite
EDIT : ça marche toujours pas
Il faut mettre le .png à la fin
Je viens de m’en rendre compte, et j’allais faire un édit
Y a t-il moyen de rendre l’armure incassable s’il vous plait ? Comme la bedrock par exemple.
Essaye de mettre la résistance sur -1 ?
Je pense que cela doit être possible, les armures quantums d’IC² ont cette fonctionnalité.
Bonjour, merci pour ce tutoriel.
Cependant, je pense qu’il manque une chose: Comment définit-on le matériel avec lequel l’armure se craft ? Il suffit d’utiliser GameRegistry.addRecipe ?
Merci d’avance
Oui, il faut faire des recettes comme les autres.
Merci beaucoup (Je pense qu’il faudrait le mentionner dans le tutoriel, après, c’est toi qui vois ^^")
J’ai une erreur dans la classe de l’armure sur
public String “getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)”
Quoi comme erreur ?
quand je clique sur l’erreur
sa me met
add return statement
change return type to ‘void’