Posted May 7, 201411 yr Hi guys I'm making two new saplings and i want to make it like the vanilla saplings (Same id with different meta). I have copy the BlockSapling class and change id to returns 2 blocks, but it not returns two different icons but only the icon of the first sapling for both the blocks. It's only the icon because if i place them the texture is correct. Here is the BlockSaplingMod file: package mod.mineworld.blocks.mod_plants; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.List; import java.util.Random; import mod.mineworld.mod_tabs; import net.minecraft.block.Block; import net.minecraft.block.BlockBush; import net.minecraft.block.IGrowable; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenBigTree; import net.minecraft.world.gen.feature.WorldGenCanopyTree; import net.minecraft.world.gen.feature.WorldGenForest; import net.minecraft.world.gen.feature.WorldGenMegaJungle; import net.minecraft.world.gen.feature.WorldGenMegaPineTree; import net.minecraft.world.gen.feature.WorldGenSavannaTree; import net.minecraft.world.gen.feature.WorldGenTaiga2; import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; public class BlockSaplings extends BlockBush implements IGrowable { public static final String[] sapling_names = new String[] {"apple", "palm"}; private static final IIcon[] icon = new IIcon[sapling_names.length]; public BlockSaplings() { float f = 0.4F; this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f); this.setCreativeTab(mod_tabs.tabPlantsDecorations); } /** * Ticks the block if it's been scheduled */ public void updateTick(World par1, int par2, int par3, int par4, Random par5) { if (!par1.isRemote) { super.updateTick(par1, par2, par3, par4, par5); if (par1.getBlockLightValue(par2, par3 + 1, par4) >= 9 && par5.nextInt(7) == 0) { this.markOrGrowMarked(par1, par2, par3, par4, par5); } } } /** * Gets the block's texture. Args: side, meta */ @SideOnly(Side.CLIENT) public IIcon getIcon(int par1, int par2) { par2 &= 7; return icon[MathHelper.clamp_int(par2, 0, 5)]; } /** * Returns an item stack containing a single instance of the current block type. 'i' is the block's subtype/damage * and is ignored for blocks which do not support subtypes. Blocks which cannot be harvested should return null. */ protected ItemStack createStackedBlock(int par1) { return new ItemStack(this, 1, par1 & 3); } public void markOrGrowMarked(World par1, int par2, int par3, int par4, Random par5) { int l = par1.getBlockMetadata(par2, par3, par4); if ((l & == 0) { par1.setBlockMetadataWithNotify(par2, par3, par4, l | 8, 4); } else { this.growTree(par1, par2, par3, par4, par5); } } public void growTree(World par1, int par2, int par3, int par4, Random par5) { if (!net.minecraftforge.event.terraingen.TerrainGen.saplingGrowTree(par1, par5, par2, par3, par4)) return; int l = par1.getBlockMetadata(par2, par3, par4) & 7; Object object = par5.nextInt(10) == 0 ? new WorldGenBigTree(true) : new WorldGenTrees(true); int i1 = 0; int j1 = 0; boolean flag = false; switch (l) { case 0: default: break; case 1: label78: for (i1 = 0; i1 >= -1; --i1) { for (j1 = 0; j1 >= -1; --j1) { if (this.isSameSapling(par1, par2 + i1, par3, par4 + j1, 1) && this.isSameSapling(par1, par2 + i1 + 1, par3, par4 + j1, 1) && this.isSameSapling(par1, par2 + i1, par3, par4 + j1 + 1, 1) && this.isSameSapling(par1, par2 + i1 + 1, par3, par4 + j1 + 1, 1)) { object = new WorldGenMegaPineTree(false, par5.nextBoolean()); flag = true; break label78; } } } if (!flag) { j1 = 0; i1 = 0; object = new WorldGenTaiga2(true); } break; case 2: object = new WorldGenForest(true, false); break; case 3: label93: for (i1 = 0; i1 >= -1; --i1) { for (j1 = 0; j1 >= -1; --j1) { if (this.isSameSapling(par1, par2 + i1, par3, par4 + j1, 3) && this.isSameSapling(par1, par2 + i1 + 1, par3, par4 + j1, 3) && this.isSameSapling(par1, par2 + i1, par3, par4 + j1 + 1, 3) && this.isSameSapling(par1, par2 + i1 + 1, par3, par4 + j1 + 1, 3)) { object = new WorldGenMegaJungle(true, 10, 20, 3, 3); flag = true; break label93; } } } if (!flag) { j1 = 0; i1 = 0; object = new WorldGenTrees(true, 4 + par5.nextInt(7), 3, 3, false); } break; case 4: object = new WorldGenSavannaTree(true); break; case 5: label108: for (i1 = 0; i1 >= -1; --i1) { for (j1 = 0; j1 >= -1; --j1) { if (this.isSameSapling(par1, par2 + i1, par3, par4 + j1, 5) && this.isSameSapling(par1, par2 + i1 + 1, par3, par4 + j1, 5) && this.isSameSapling(par1, par2 + i1, par3, par4 + j1 + 1, 5) && this.isSameSapling(par1, par2 + i1 + 1, par3, par4 + j1 + 1, 5)) { object = new WorldGenCanopyTree(true); flag = true; break label108; } } } if (!flag) { return; } } Block block = Blocks.air; if (flag) { par1.setBlock(par2 + i1, par3, par4 + j1, block, 0, 4); par1.setBlock(par2 + i1 + 1, par3, par4 + j1, block, 0, 4); par1.setBlock(par2 + i1, par3, par4 + j1 + 1, block, 0, 4); par1.setBlock(par2 + i1 + 1, par3, par4 + j1 + 1, block, 0, 4); } else { par1.setBlock(par2, par3, par4, block, 0, 4); } if (!((WorldGenerator)object).generate(par1, par5, par2 + i1, par3, par4 + j1)) { if (flag) { par1.setBlock(par2 + i1, par3, par4 + j1, this, l, 4); par1.setBlock(par2 + i1 + 1, par3, par4 + j1, this, l, 4); par1.setBlock(par2 + i1, par3, par4 + j1 + 1, this, l, 4); par1.setBlock(par2 + i1 + 1, par3, par4 + j1 + 1, this, l, 4); } else { par1.setBlock(par2, par3, par4, this, l, 4); } } } public boolean isSameSapling(World par1, int par2, int par3, int par4, int par5) { return par1.getBlock(par2, par3, par4) == this && (par1.getBlockMetadata(par2, par3, par4) & 7) == par5; } /** * Determines the damage on the item the block drops. Used in cloth and wood. */ public int damageDropped(int par1) { return MathHelper.clamp_int(par1 & 7, 0, 5); } /** * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) */ @SideOnly(Side.CLIENT) public void getSubBlocks(Item par1, CreativeTabs par2, List par3) { par3.add(new ItemStack(par1, 1, 0)); par3.add(new ItemStack(par1, 1, 1)); } @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister par1) { for (int i = 0; i < icon.length; ++i) { icon[i] = par1.registerIcon(this.getTextureName() + "_" + sapling_names[i]); } } public boolean func_149851_a(World p_149851_1_, int p_149851_2_, int p_149851_3_, int p_149851_4_, boolean p_149851_5_) { return true; } public boolean func_149852_a(World par1, Random par2, int par3, int par4, int par5) { return (double)par1.rand.nextFloat() < 0.45D; } public void func_149853_b(World par1, Random par2, int par3, int par4, int par5) { this.markOrGrowMarked(par1, par3, par4, par5, par2); } } And here is a snapshot of the item Icons (wich is wrong): and here a snapshot of the block texture when placed (wich is correct) Thanks in advice for all who will help me Don't blame me if i always ask for your help. I just want to learn to be better
May 7, 201411 yr You need to register your block with a metadata sensitive version of ItemBlock. When you use GameRegistry.registerBlock() for your sapling, use the version with the ItemBlock class parameter and use the ItemBlockWithMetadata class: GameRegistry.registerBlock(myBlockInstance, ItemBlockWithMetadata.class, "myBlockRegisteredName"); Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! | mah twitter This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.
May 7, 201411 yr Author Yes i have the ItemBlock file for the saplings and i already register it with GameRegistry.registerBlock(saplings, ItemSaplings.class, "saplings"); but it doesn't work I'm pretty sure the problem is not the ItemSapling.class beacuse i also have two metadata woods wich hase the same ItemBlock class and it all works fine, so i don't know why it's not working with the saplings This is the ItemSaplings class package mod.mineworld.blocks.mod_plants; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; public class ItemSaplings extends ItemBlock { private final static String[] subNames = { "apple", "palm" }; public ItemSaplings(Block id) { super(id); setHasSubtypes(true); } @Override public int getMetadata (int damageValue) { return damageValue; } @Override public String getUnlocalizedName(ItemStack itemstack) { return getUnlocalizedName() + "." + subNames[itemstack.getItemDamage()]; } } Don't blame me if i always ask for your help. I just want to learn to be better
June 25, 201411 yr [sOLVED] I have the Solution! in your ItemBlock file, change the extension to ItemBlockWithMetadata, and add and extra comma and "block" in super as seen below. Here's my file, ItemEverySapling: package net.davidjholland.everytrees; import net.minecraft.block.Block; import net.minecraft.item.ItemBlockWithMetadata; import net.minecraft.item.ItemStack; public class ItemEverySapling extends ItemBlockWithMetadata { public ItemEverySapling(Block block) { super(block, block); } public String getUnlocalizedName(ItemStack itemStack){ int i = itemStack.getItemDamage(); if (i < 0 || i >= BlockEverySapling.field_149882_a.length){ i = 0; } return super.getUnlocalizedName() + "." + BlockEverySapling.field_149882_a[i]; } public int getMetadata(int meta){ return meta; } } You're Welcome
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.