Jump to content

Fruitsalid

Members
  • Posts

    99
  • Joined

  • Last visited

Everything posted by Fruitsalid

  1. That's a good point I didn't even think about. You'd probably be better off making a new class just like MineMaarten said.
  2. I don't think you need entity/in resource location of your render class. so it should just be "betterwood:SpruceBoat.png". Just a guess.
  3. You can make it be new BlockGlass instead of new Block.
  4. Well I'm still confused on how to solve the double slab problem if anyone could help me out a bit more.
  5. Okay well this solved half of the problem but now I can't plant them on my custom dirt.
  6. Well I've figured out that I must use this method but I'm not sure how to make it so only saplings are allowed to be planted. public boolean canSustainPlant(World world, int x, int y, int z, ForgeDirection direction, IPlantable plant) { }
  7. I made my own grass and dirt for a custom biome and was playing around to see if they function normally. But I noticed I couldn't plant any type of sapling on either my grass or dirt. So I went looking to see which method allowed this to happen, but I could not find anything in the BlockGrass or BlockDirt classes. Does anyone know the solution to this. Here is all the code pertaining to the two. public static Block customgrass; public static Block customdirt; customgrass= new BlockCustomGrass(237).setHardness(0.6F).setStepSound(Block.soundGrassFootstep).setUnlocalizedName("customgrass"); LanguageRegistry.addName(customgrass, "Magic Grass"); GameRegistry.registerBlock(customgrass, "customgrass"); MinecraftForge.setBlockHarvestLevel(customgrass, "shovel", 1); customdirt= new BlockCustomDirt(238, Material.ground).setHardness(0.5F).setResistance(0.5F).setStepSound(Block.soundGrassFootstep).setUnlocalizedName("customdirt"); LanguageRegistry.addName(customdirt, "Magic Dirt"); GameRegistry.registerBlock(customdirt, "customdirt"); MinecraftForge.setBlockHarvestLevel(customdirt, "shovel", 1); public class BlockCustomGrass extends Block { @SideOnly(Side.CLIENT) private Icon iconGrassTop; @SideOnly(Side.CLIENT) private Icon iconGrassSide; private Icon iconSnowSide; public BlockCustomGrass(int par1) { super(par1, Material.grass); this.setTickRandomly(true); this.setCreativeTab(MagicElementsMod.Misc); } @SideOnly(Side.CLIENT) public Icon getIcon(int par1, int par2) { return par1 == 1 ? this.iconGrassTop : (par1 == 0 ? MagicElementsMod.customgrass.getBlockTextureFromSide(par1) : this.blockIcon); } public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) { if (!par1World.isRemote) { if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2) { par1World.setBlock(par2, par3, par4, MagicElementsMod.customdirt.blockID); } else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9) { for (int l = 0; l < 4; ++l) { int i1 = par2 + par5Random.nextInt(3) - 1; int j1 = par3 + par5Random.nextInt(5) - 3; int k1 = par4 + par5Random.nextInt(3) - 1; int l1 = par1World.getBlockId(i1, j1 + 1, k1); if (par1World.getBlockId(i1, j1, k1) == MagicElementsMod.customdirt.blockID && par1World.getBlockLightValue(i1, j1 + 1, k1) >= 4 && par1World.getBlockLightOpacity(i1, j1 + 1, k1) <= 2) { par1World.setBlock(i1, j1, k1, MagicElementsMod.customgrass.blockID); } } } } } public int idDropped(int par1, Random par2Random, int par3) { return MagicElementsMod.customdirt.idDropped(0, par2Random, par3); } @Override @SideOnly(Side.CLIENT) public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { if (par5 == 1) { return this.iconGrassTop; } else if (par5 == 0) { return MagicElementsMod.customdirt.getBlockTextureFromSide(par5); } else { Material material = par1IBlockAccess.getBlockMaterial(par2, par3 + 1, par4); return material != Material.snow && material != Material.craftedSnow ? this.blockIcon : this.iconSnowSide; } } @Override @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon("magicelements:customgrass_side"); this.iconGrassTop = par1IconRegister.registerIcon("magicelements:customgrass_top"); this.iconGrassSide = par1IconRegister.registerIcon("magicelements:customgrass_side"); } } public class BlockCustomDirt extends Block { public BlockCustomDirt(int par1, Material par2Material) { super(par1, par2Material); this.setCreativeTab(MagicElementsMod.Misc); } @SideOnly(Side.CLIENT) public void registerIcons(IconRegister ir) { this.blockIcon = ir.registerIcon("magicelements" + ":" + getUnlocalizedName().substring(5)); } }
  8. Try @Override public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) { }
  9. DerpenWolf's way does work but only for one effect (From my own experience). If you want the food to give you more than one you'd have to have the onFoodEaten method and add your effects there.
  10. Do you want to give the item a potion effect or do you want to give yourself a potion effect when you eat it?
  11. Well it's the itemID & itemDamage.
  12. It shouldn't mess up the texture. I do it for my armor and it turns out fine. Are you sure you're making it exactly double the size? I think you might be making the entire image 2x the size but leaving the colored area the same size. Just a guess.
  13. didn't fix it sooo. I made that class according to the blockstep class which says exactly protected ItemStack createStackedBlock(int par1) { return new ItemStack(Block.stoneSingleSlab.blockID, 2, par1 & 7); }
  14. I looked in your mod and you didn't capitalize the T in tutorial for all the block textures.
  15. Follow what the error is saying. Minecraft is trying to find an image called (ex. from errors you put up) TutorialBlock0.png in the folder assets/alpharo_tutorial test/textures/blocks/ Make sure it is exactly like that because one missed letter or capitalization could be the issue.
  16. I'm playing around and trying to make half slabs and stairs to go with my planks. I made the stairs without any problem but the slabs are more complex. I've made the slabs placeable because for 20 minutes that wasn't possible, but I can't them on top of each other. Here's what I have so far. public static BlockHalfSlab darkwoodslab1; public static BlockHalfSlab darkwoodslab2; darkwoodslab1 = (BlockHalfSlab) new BlockMagicSlab(725, false).setUnlocalizedName("darkwoodslab1").setHardness(3.0F).setResistance(2.0F).setStepSound(Block.soundWoodFootstep); LanguageRegistry.addName(darkwoodslab1, "Dark Wood Slab"); GameRegistry.registerBlock(darkwoodslab1, "darkwoodslab1"); MinecraftForge.setBlockHarvestLevel(darkwoodslab1, "axe", 1); darkwoodslab2 = (BlockHalfSlab) new BlockMagicSlab(726, true).setUnlocalizedName("darkwoodslab2").setHardness(3.0F).setResistance(2.0F).setStepSound(Block.soundWoodFootstep); LanguageRegistry.addName(darkwoodslab2, "Dark Wood Double Slab"); GameRegistry.registerBlock(darkwoodslab2, "darkwoodslab2"); MinecraftForge.setBlockHarvestLevel(darkwoodslab2, "axe", 1); darkwoodslab2 is the double slab. Slab Class public class BlockMagicSlab extends BlockHalfSlab { @SideOnly(Side.CLIENT) private Icon theIcon; public BlockCustomSlab(int par1, boolean par2) { super(par1, par2); this.setCreativeTab(CreativeTabs.tabBlock); } @Override public Icon getIcon(int par1, int par2) { int k = par2 & 7; if (this.isDoubleSlab && (par2 & != 0) { par1 = 1; } return k == 0 ? (par1 != 1 && par1 != 0 ? this.theIcon : this.blockIcon) : (k == 1 ? MagicElementsMod.darkwoodplanks.getBlockTextureFromSide(par1) : this.blockIcon); } @Override public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon("ModClass.modid:darkwoodslabtop"); this.theIcon = par1IconRegister.registerIcon("ModClass.modid:darkwoodslabside"); } @Override protected ItemStack createStackedBlock(int par1) { return new ItemStack(MagicElementsMod.darkwoodslab1.blockID, 2, par1 & 7); } @Override public int idDropped(int par1, Random par2Random, int par3) { return MagicElementsMod.darkwoodslab1.blockID; } @Override public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) { if (par1 != MagicElementsMod.darkwoodslab2.blockID) { for (int j = 0; j <= 1; ++j) { if (j != 1) { par3List.add(new ItemStack(par1, 1, j)); } } } } } In the getSubBlocks Method I had to change j <= 7; because seven of the same slabs were showing up in the creative tab.
  17. I tried making a furnace in 1.6.2 and in the Block class for the furnace I get an error on the .displayGUIFurnace because there is no method like that for my furnace in the entityplayer class. public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { if (par1World.isRemote) { return true; } else { TileEntityVoidFurnace tileEntityVoidFurnace = (TileEntityVoidFurnace)par1World.getBlockTileEntity(par2, par3, par4); if (tileEntityVoidFurnace != null) { par5EntityPlayer.displayGUIFurnace(tileEntityVoidFurnace); } return true; } } If I change it to TileEntityFurnace and I right click on my furnace in game, the game crashes. The error is in the block furnace exactly on that GUIfurnace line. i can't figure out how to fix that GUI thing.
  18. You can all this from the ItemBow class. public static final String[] bowPullIconNameArray = new String[] {"pulling_0", "pulling_1", "pulling_2"}; @SideOnly(Side.CLIENT) private Icon[] iconArray; and this @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon("YourMainClass.modid" + ":" + getUnlocalizedName().substring(5)); this.iconArray = new Icon[bowPullIconNameArray.length]; for (int i = 0; i < this.iconArray.length; ++i) { this.iconArray[i] = par1IconRegister.registerIcon(YourMainClass.modid + ":" + bowPullIconNameArray[i]); } } Change the YourMainClass to what ever yours is. Also the pulling_0 etc. to whatever your images are called are.
  19. Well I'm using a method from the bow class for the charging effect and all that but I cut a few things out. I just can't figure out what to put in that else statment. I'm probably have a lot of other stuff thats also wrong in that but I guess you'll figure it out: public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4) { int j = this.getMaxItemUseDuration(par1ItemStack) - par4; ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) { return; } j = event.charge; boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0; if (flag || par3EntityPlayer.inventory.hasItem(ModClass.ammo.itemID)) { float f = (float)j / 10.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double)f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityMagicBall entitymagicball = new EntityMagicBall(par2World, par3EntityPlayer, f * 2.0F); if (f == 1.0F) { entitymagicball .setIsCritical(true); } par1ItemStack.damageItem(1, par3EntityPlayer); if (flag) { entitymagicball.canBePickedUp = 2; } else { } if (!par2World.isRemote) { par2World.spawnEntityInWorld(entitymagicball); } } }
  20. This is like the first problem I've ever figured out by myself, lol.
  21. To change the speed at which the arrow will charge you have to change the 20.0f: public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4) { int j = this.getMaxItemUseDuration(par1ItemStack) - par4; ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) { return; } j = event.charge; boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0; if (flag || par3EntityPlayer.inventory.hasItem(Item.arrow.itemID)) { float f = (float)j / 20; f = (f * f + f * 2.0F) / 3.0F; if ((double)f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityArrow entityarrow = new EntityArrow(par2World, par3EntityPlayer, f * 2.0F); if (f == 1.0F) { entityarrow.setIsCritical(true); } int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack); if (k > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack); if (l > 0) { entityarrow.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0) { entityarrow.setFire(100); } par1ItemStack.damageItem(1, par3EntityPlayer); par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { par3EntityPlayer.inventory.consumeInventoryItem(Item.arrow.itemID); } if (!par2World.isRemote) { par2World.spawnEntityInWorld(entityarrow); } } } To make the animation match up with the speed of the charging arrow you have to change the 16, 8, and 0. The animation cycle timing goes from the bottom number to the top one. If you don't have this method replace it with public Icon getItemIconForUseDuration(int par1) method. public Icon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if(player.getItemInUse() == null) return this.itemIcon; int Pulling = stack.getMaxItemUseDuration() - useRemaining; if (Pulling >= 16) { return iconArray[2]; } else if (Pulling > { return iconArray[1]; } else if (Pulling > 0) { return iconArray[0]; } return itemIcon; }
  22. I'm still not sure how I'd make it damage the ammo and not the wand itself. Sorry if I'm being a bit oblivious and the answer is obvious
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.