Posted January 22, 201510 yr The armor itself is colored and can be dyed but when the armor is worn the colors don't transfer. I believe I need to make a custom armor renderer. I just don't know how to do that.
January 23, 201510 yr Try this in your custom armor class. @Override public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(this.armorType==2) { return "ARMOR LAYER 1 LOCATION"; } return "ARMOR LAYER 2 LOCATION"; }
January 23, 201510 yr Author I can get the texture to render. I just can't get it to change colors with the item. Here is my Armor class package haloCraft.armor; import haloCraft.HaloCraft; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class MjolnirMarkV extends ItemArmor { private static final String[] OVERLAYS = new String[] {"halo craft:MarkV_Helmet_Overlay", "halo craft:MarkV_Chestplate_Overlay", "halo craft:MarkV_Leggings_Overlay", "halo craft:MarkV_Boots_Overlay"}; @SideOnly(Side.CLIENT) private IIcon overlayIcon; public MjolnirMarkV(ArmorMaterial material, int armorType, String name) { super(material, 0, armorType); this.setCreativeTab(HaloCraft.tabArmor); this.setUnlocalizedName(name); this.setTextureName(HaloCraft.NAME + ":" + name); } @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack itemStack, int i) { if (i > 0) { return 16777215; }else{ int j = this.getColor(itemStack); if (j < 0) { j = 16777215; } return j; } } @Override @SideOnly(Side.CLIENT) public boolean requiresMultipleRenderPasses() { return this.getArmorMaterial() == HaloCraft.Mjolnir_MarkV; } @Override public boolean hasColor(ItemStack itemStack) { return this.getArmorMaterial() != HaloCraft.Mjolnir_MarkV ? false : (!itemStack.hasTagCompound() ? false : (!itemStack.getTagCompound().hasKey("display", 10) ? false : itemStack.getTagCompound().getCompoundTag("display").hasKey("color", 3))); } @Override public int getColor(ItemStack itemStack) { if (this.getArmorMaterial() != HaloCraft.Mjolnir_MarkV) { return -1; }else{ NBTTagCompound nbttagcompound = itemStack.getTagCompound(); if (nbttagcompound == null) { return 16777215; }else{ NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); return nbttagcompound1 == null ? 16777215 : (nbttagcompound1.hasKey("color", 3) ? nbttagcompound1.getInteger("color") : 16777215); } } } @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamageForRenderPass(int i, int j) { return j == 1 ? this.overlayIcon : super.getIconFromDamageForRenderPass(i, j); } @Override public void removeColor(ItemStack itemStack) { if (this.getArmorMaterial() == HaloCraft.Mjolnir_MarkV) { NBTTagCompound nbttagcompound = itemStack.getTagCompound(); if (nbttagcompound != null) { NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); if (nbttagcompound1.hasKey("color")) { nbttagcompound1.removeTag("color"); } } } } @Override public void func_82813_b(ItemStack itemStack, int i) { if (this.getArmorMaterial() != HaloCraft.Mjolnir_MarkV) { throw new UnsupportedOperationException("Can\'t paint not MarkV!"); }else{ NBTTagCompound nbttagcompound = itemStack.getTagCompound(); if (nbttagcompound == null) { nbttagcompound = new NBTTagCompound(); itemStack.setTagCompound(nbttagcompound); } NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); if (!nbttagcompound.hasKey("display", 10)) { nbttagcompound.setTag("display", nbttagcompound1); } nbttagcompound1.setInteger("color", i); } } @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister IIconRegister) { super.registerIcons(IIconRegister); if (this.getArmorMaterial() == HaloCraft.Mjolnir_MarkV) { this.overlayIcon = IIconRegister.registerIcon(OVERLAYS[this.armorType]); } } public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(stack.getItem() == HaloCraft.MjolnirV_Helm || stack.getItem() == HaloCraft.MjolnirV_Chest || stack.getItem() == HaloCraft.MjolnirV_Boots) { return HaloCraft.NAME + ":textures/models/armor/MarkV_Layer_1.png"; }else if(stack.getItem() == HaloCraft.MjolnirV_Legs) { return HaloCraft.NAME + ":textures/models/armor/MarkV_Layer_2.png"; } return null; } }
January 24, 201510 yr I don't think you can have spaces in ResourceLocation names. Power, even in the Darkness, Courage shall prevail
January 26, 201510 yr Author No you can its the name of the file. If the file has a space it needs it. The armor gets textured but it can't be dyed like leather. When I dye it the item you hold gets dyed but not the armor texture that gets worn.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.