perromercenary00 Posted December 8, 2014 Posted December 8, 2014 i been harvesting the minecraft classes for hours and just dont ge it. i create a meta item named multitextura using like model items.coal and i have the multitextura showing all the six subitems i set in mi custom but is not loading the textures well if i declare textures using Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(MercenaryModItems.multitextura, 0, new ModelResourceLocation("modmercenario:multitextura" , "inventory")); it load the texture just for the item multitextura0, the tutorial say i must add ModelBakery.addVariantName(MercenaryModItems.multitextura, new String[]{"multitextura1", "multitextura2", "multitextura3"}); notese i have create multitextura1.json multitextura2.json multitextura3.json pointing to the textures to this sub items but is not working and fuckup the texture for multitextura single item scavengin the code i found in net.minecraft.client.resources.model.ModelBakery in the line 354 the coal charcoal declaration and i been using that for example and .minecraft/versions/1.8/1.8/assets/minecraft/models/item/charcoal.json .minecraft/versions/1.8/1.8/assets/minecraft/models/item/coal.json for my json's files soo what im doing wrong can someone point mi in the direction or an example of subitems working ?? here is the code _________________________________________________________________________ package mercenarymod.items.multitextura; import java.util.List; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.init.Items; import net.minecraft.stats.StatList; import net.minecraft.world.World; import mercenarymod.materialesMercenarios; import mercenarymod.Mercenary; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class multitextura extends Item{ public static String name = "multitextura"; public multitextura(){ // setUnlocalizedName(Mercenary.MODID + "_" + name); GameRegistry.registerItem(this, name); setCreativeTab(Mercenary.herramientas); this.setHasSubtypes(true); this.maxStackSize = 1; ;} public String getUnlocalizedName(ItemStack stack) { int m= stack.getMetadata(); if (m == 0){return name+"0" ;} if (m == 1){return name+"1" ;} if (m == 2){return name+"2" ;} if (m == 3){return name+"3" ;} if (m == 4){return name+"4" ;} if (m == 5){return name+"5" ;} return name+"0"; } @SideOnly(Side.CLIENT) public void getSubItems(Item itemIn, CreativeTabs tab, List subItems) { subItems.add(new ItemStack(itemIn, 1, 0)); subItems.add(new ItemStack(itemIn, 1, 1)); subItems.add(new ItemStack(itemIn, 1, 2)); subItems.add(new ItemStack(itemIn, 1, 3)); subItems.add(new ItemStack(itemIn, 1, 4)); subItems.add(new ItemStack(itemIn, 1, 5)); } } Quote
RafaelVN Posted December 8, 2014 Posted December 8, 2014 I think you must implement the method getIcon as you made with getUnlocalizedName type: @Override public String getIcon(int meta) { if (meta == 0){return texture0} if (meta == 1){return texture1} if (meta == 2){return texture2} if (meta == 3){return texture3} if (meta == 4){return texture4} if (meta == 5){return texture5} return texture0; } Quote
RafaelVN Posted December 8, 2014 Posted December 8, 2014 one correction : the true name is getIconFromDamage(int meta) Quote
perromercenary00 Posted December 8, 2014 Author Posted December 8, 2014 but that was the trick in 1.7 now this is 1.8 Quote
perromercenary00 Posted December 8, 2014 Author Posted December 8, 2014 is become two post for the same issue i got the thread for the multiitem / sub item in http://www.minecraftforge.net/forum/index.php/topic,25827.0.html i gto something new there Quote
perromercenary00 Posted December 8, 2014 Author Posted December 8, 2014 i been experiment whit code i found something if i take my multiitem and do registrarTextura.item(MercenaryModItems.multitextura,0,"multitextura"); registrarTextura.item(MercenaryModItems.multitextura,1,"pica_carbon_carbon"); registrarTextura.item(MercenaryModItems.multitextura,2,"pala_carbon_carbon"); but thas mi resgistrar textura class and is equal to doo Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(MercenaryModItems.multitextura, 0, new ModelResourceLocation("modmercenario:multitextura" , "inventory")); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(MercenaryModItems.multitextura, 1, new ModelResourceLocation("modmercenario:pica_carbon_carbon" , "inventory")); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(MercenaryModItems.multitextura, 2, new ModelResourceLocation("modmercenario:pala_carbon_carbon" , "inventory")); whith that i get mi multitexture subitems get multitextura0 whith texture 0 like it must be multitextura1 whith mi pica texture multitextura2 whith mi pala texture if i could make custome files.json whithout declarated and item whit the same it would be great . Quote
perromercenary00 Posted December 8, 2014 Author Posted December 8, 2014 At least realize how to use the ModelBakery is harder when no examples are avaliable firts is true you can create a custome texture linkid to a custom json file no matter names .but you must load this json whith an existing item no matter what but existing and registered here an example: i take a ramdom picture from internet this http://www.mildred.co/issueassets/22/14RSpaperbagdog.jpg download resize convert to png whit gimp and named ramdon.png, store in forge-1.8-11.14.0.1261-1.8-src/src/main/resources/assets/modmercenario/textures/items/ramdom/ramdon.png then a create a json file in forge-1.8-11.14.0.1261-1.8-src/src/main/resources/assets/modmercenario/models/item/namedhowiwant.json and set like this _____________________________________________ { "parent": "builtin/generated", "textures": { "layer0": "modmercenario:items/ramdom/ramdon" }, "display": { "thirdperson": { "rotation": [ 0, 90, -35 ], "translation": [ 0, 1.25, -3.5 ], "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], "translation": [ 0, 4, 2 ], "scale": [ 1.7, 1.7, 1.7 ] } } } ________________________________________________ then in mi register textures file, mi case MercenaryModTexturas i set namedhowiwant to the apple item, whatever item you chose work ModelBakery.addVariantName(Items.apple, new String[]{"modmercenario:namedhowiwant"}); the apple item is not afected in any way just used force minecraft to load namedhowiwant.json and now i can use namedhowiwant.json to set the texture of what ever mi items i whant registrarTextura.item(MercenaryModItems.espada_carbon_carbon,0,"namedhowiwant"); now this sword has the doogy image from internet loaded like texture // i set method registrarTextura.item(item , metadata , jsonName); way to shorten code Quote
Lothrazar Posted March 25, 2015 Posted March 25, 2015 I know this is marked as solved but i just wanted to post my code and how it works for me. My item class [embed=425,349]package com.lothrazar.samscontent.item; import java.util.ArrayList; import java.util.List; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.util.BlockPos; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.google.common.collect.Lists; import com.lothrazar.samscontent.ModLoader; import com.lothrazar.util.*; public class ItemBaseWand extends Item { public ItemBaseWand() { super(); this.setHasSubtypes(true); this.setMaxDamage(0); this.setMaxStackSize(1); this.setCreativeTab(ModLoader.tabSamsContent); /* * * ModelBakery.class * ItemDye.class * * this.variantNames.put(Items.dye, Lists.newArrayList(new String[] {"dye_black", "dye_red", "dye_green", "dye_brown", "dye_blue", "dye_purple", "dye_cyan", "dye_silver", "dye_gray", "dye_pink", "dye_lime", "dye_yellow", "dye_light_blue", "dye_magenta", "dye_orange", "dye_white"})); * */ } @Override public String getUnlocalizedName(ItemStack stack) { int i = stack.getMetadata(); return super.getUnlocalizedName() + "_" + i; } public final static int MAX_META = 19; @Override @SideOnly(Side.CLIENT) public void getSubItems(Item itemIn, CreativeTabs tab, List subItems) { for (int i = 0; i < MAX_META; ++i) { subItems.add(new ItemStack(itemIn, 1, i)); } } public static void addRecipe() { GameRegistry.addRecipe(new ItemStack(ItemRegistry.baseWand) ,"beb" ," b " ," b " , 'e', Items.emerald , 'b', Items.blaze_rod ); if(ModLoader.configSettings.uncraftGeneral) GameRegistry.addSmelting(ItemRegistry.wandBuilding, new ItemStack(Items.emerald,1,0),0); } @SubscribeEvent public void onPlayerInteract(PlayerInteractEvent event) { ItemStack held = event.entityPlayer.getCurrentEquippedItem(); if(held == null) { return; }//empty hand so do nothing if(held.getItem() != ItemRegistry.baseWand ) {return;} if( event.action.LEFT_CLICK_BLOCK == event.action )//TODO: is left click a good strat { int meta = held.getItemDamage(); if(meta >= this.MAX_META) held.setItemDamage(0); else held.setItemDamage(meta + 1);//TODO: shift goes backword System.out.println(held.getItemDamage()); } else { } } } [/embed] Of course i register the item the normal way [embed=425,349] GameRegistry.registerItem(item, name);[/embed] And in my client proxy I have this: [embed=425,349] ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher(); String name; Item item; for(Block b : BlockRegistry.blocks) { item = Item.getItemFromBlock(b); name = Reference.TEXTURE_LOCATION + b.getUnlocalizedName().replaceAll("tile.", ""); mesher.register(item, 0, new ModelResourceLocation( name , "inventory")); } for(Item i : ItemRegistry.items) { name = Reference.TEXTURE_LOCATION + i.getUnlocalizedName().replaceAll("item.", ""); mesher.register(i, 0, new ModelResourceLocation( name , "inventory")); System.out.println("iii :: "+name); } for (int i = 0; i < ItemBaseWand.MAX_META; ++i) { mesher.register(ItemRegistry.baseWand, i, new ModelResourceLocation(Reference.TEXTURE_LOCATION + "base_wand_"+i , "inventory")); } ModelBakery.addVariantName(ItemRegistry.baseWand, Reference.TEXTURE_LOCATION +"base_wand_0",Reference.TEXTURE_LOCATION +"base_wand_1"); [/embed] Feel free to ask questions or if you want github link. I am sure i could have done things better or in a different way, i am not an expert. My item does switch textures when the data value changes from 0,1,2, etc Quote http://www.curse.com/users/Lothrazar/projects
Recommended Posts
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.