Jump to content

insane_gravy

Members
  • Posts

    28
  • Joined

  • Last visited

Posts posted by insane_gravy

  1. Hi everyone,

     

    I haven't done any modding work since Minecraft 1.7.10, so I'm more than a little rusty. Needless to say, I've been asked to update a mod that was created for Minecraft 1.5 by someone else. I've set everything up in Eclipse and made sure that the dependencies are all correct. When I open the mod up, I get hit with 2419 errors that all need fixing. I'm a bit over my head here because the modding environment looks so different from what I'm used to and really don't know where to start. Does anyone have any pointers on how to get this updated? I've attached an example of one of the files that needs fixing.

    BiologicalElement.java

  2. I previously had a boolean field which would be set to "true" if the block being placed was the master block (ie: it would only be true if it was the last block in the combination). The same problem was still present even with this field present. Additionally, the GUI can only open if a TileEntity exists at the location, so it's creating TileEntities multiple times for some reason.

     

    Try this version of the boolean check. It has more console statements and should show the method calls occuring more than once.

     

    private boolean isValidCombination(int x, int y, int z, World world) {
    	System.out.println("checking for valid combinations");
    	if (getNextX(x, y, z, world) && getNextZ(x, y, z, world)) {
    		return getTopRightDiag(x, y, z, world);
    	}
    
    	if (getNextX(x, y, z, world) && getPrevZ(x, y, z, world)) {
    		return getTopLeftDiag(x, y, z, world);
    	}
    
    	if (getPrevX(x, y, z, world) && getNextZ(x, y, z, world)) {
    		return getBottomRightDiag(x, y, z, world);
    	}
    
    	if (getPrevX(x, y, z, world) && getPrevZ(x, y, z, world)) {
    		return getBottomLeftDiag(x, y, z, world);
    	}
    
    	System.out.println("no combinations found");
    	return false;
    }
    
    private boolean getNextX(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getPrevX(int x, int y, int z, World world) {
    	return world.getBlockId(x - 1, y, z) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getNextZ(int x, int y, int z, World world) {
    	return world.getBlockId(x, y, z + 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getPrevZ(int x, int y, int z, World world) {
    	return world.getBlockId(x, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getTopLeftDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getTopRightDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z + 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getBottomLeftDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x - 1, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getBottomRightDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x - 1, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }

  3. Interesting. The TileEntity should only be called once, and that's when the last block is placed.

     

    I added a println statement at several points, and it's clear from console feedback that the method calls occur for all blocks when a new one is placed in close proximity to existing ones. The method calls should only happen once. What do I need to change to stop this from happening?

  4. This is the code that checks for valid combinations

     

    private boolean isValidCombination(int x, int y, int z, World world) {
    	if (getNextX(x, y, z, world) && getNextZ(x, y, z, world)) {
    		return getTopRightDiag(x, y, z, world);
    	}
    
    	if (getNextX(x, y, z, world) && getPrevZ(x, y, z, world)) {
    		return getTopLeftDiag(x, y, z, world);
    	}
    
    	if (getPrevX(x, y, z, world) && getNextZ(x, y, z, world)) {
    		return getBottomRightDiag(x, y, z, world);
    	}
    
    	if (getPrevX(x, y, z, world) && getPrevZ(x, y, z, world)) {
    		return getBottomLeftDiag(x, y, z, world);
    	}
    
    	return false;
    }

     

    private boolean getNextX(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getPrevX(int x, int y, int z, World world) {
    	return world.getBlockId(x - 1, y, z) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getNextZ(int x, int y, int z, World world) {
    	return world.getBlockId(x, y, z + 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getPrevZ(int x, int y, int z, World world) {
    	return world.getBlockId(x, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getTopLeftDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getTopRightDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z + 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getBottomLeftDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x - 1, y, z - 1) == modHerbcraft.BlockOvenBrick.blockID;
    }
    
    private boolean getBottomRightDiag(int x, int y, int z, World world) {
    	return world.getBlockId(x + 1, y, z + 1) == modHerbcraft.BlockOvenBrick.blockID;
    }

     

    It's just a boolean check.

  5. Here's some of the code I've been working with

     

    	@Override
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
    	if (isValidCombination(par2, par3, par4, par1World)) {
    		if (par1World.getBlockTileEntity(par2, par3, par4) != null) {
    			System.out.println("This is the master block");
    			TileEntityFurnace tile = (TileEntityFurnace) par1World.getBlockTileEntity(par2, par3, par4);
    			par5EntityPlayer.displayGUIFurnace(tile);
    			return true;
    		}
    	}
    
    	return false;
    }

     

    public void onBlockAdded(World world, int x, int y, int z) {
    	if (isValidCombination(x, y, z, world)) {
    		super.onBlockAdded(world, x, y, z);
    		System.out.println("this is a valid combination");
    	}
    }

     

    For some reason, this code creates three seperate TileEntities when the last block is placed. Can anyone see why this is occuring?

  6. I'm attempting to create a new furnace built like the coke oven furnace in Railcraft. However, I have no idea how to approach this. Thus far, I have the following files present.

     

    package insanegravy.herbcraft.common;
    
    import net.minecraft.src.EntityPlayer;
    import net.minecraft.src.FurnaceRecipes;
    import net.minecraft.src.IInventory;
    import net.minecraft.src.ItemStack;
    import net.minecraft.src.TileEntity;
    import net.minecraft.src.World;
    import net.minecraftforge.common.ForgeDirection;
    import net.minecraftforge.common.ISidedInventory;
    
    public class TileOvenBrick extends TileEntity implements IMatrixEntity, IInventory, ISidedInventory {
    private ItemStack[] furnaceItemStacks = new ItemStack[3];
    
    public TileOvenBrick() {
    
    }
    
    @Override
    public boolean isValidCombination() {
    	TileOvenBrick[] x = (TileOvenBrick[]) getXBound();
    	TileOvenBrick[] y = (TileOvenBrick[]) getYBound();
    	TileOvenBrick[] z = (TileOvenBrick[]) getZBound();
    
    	return (Math.abs(x[0].xCoord - x[1].xCoord) == 1) && (Math.abs(y[0].yCoord - y[1].yCoord) == 1) && (Math.abs(z[0].zCoord - z[1].zCoord) == 1);
    }
    
    public static TileOvenBrick getAbove(TileOvenBrick tile) {
    	TileEntity above = tile.worldObj.getBlockTileEntity(tile.xCoord, tile.yCoord + 1, tile.zCoord);
    
    	if (above instanceof TileOvenBrick) {
    		return (TileOvenBrick) above;
    	} else {
    		return null;
    	}
    }
    
    public static TileOvenBrick getBelow(TileOvenBrick tile) {
    	TileEntity below = tile.worldObj.getBlockTileEntity(tile.xCoord, tile.yCoord - 1, tile.zCoord);
    
    	if (below instanceof TileOvenBrick) {
    		return (TileOvenBrick) below;
    	} else {
    		return null;
    	}
    }
    
    public static TileOvenBrick getNextX(TileOvenBrick tile) {
    	TileEntity nextX = tile.worldObj.getBlockTileEntity(tile.xCoord + 1, tile.yCoord, tile.zCoord);
    
    	if (nextX instanceof TileOvenBrick) {
    		return (TileOvenBrick) nextX;
    	} else {
    		return null;
    	}
    }
    
    public static TileOvenBrick getPrevX(TileOvenBrick tile) {
    	TileEntity prevX = tile.worldObj.getBlockTileEntity(tile.xCoord - 1, tile.yCoord, tile.zCoord);
    
    	if (prevX instanceof TileOvenBrick) {
    		return (TileOvenBrick) prevX;
    	} else {
    		return null;
    	}
    }
    
    public static TileOvenBrick getNextZ(TileOvenBrick tile) {
    	TileEntity nextZ = tile.worldObj.getBlockTileEntity(tile.xCoord, tile.yCoord, tile.zCoord + 1);
    
    	if (nextZ instanceof TileOvenBrick) {
    		return (TileOvenBrick) nextZ;
    	} else {
    		return null;
    	}
    }
    
    public static TileOvenBrick getPrevZ(TileOvenBrick tile) {
    	TileEntity prevZ = tile.worldObj.getBlockTileEntity(tile.xCoord, tile.yCoord, tile.zCoord - 1);
    
    	if (prevZ instanceof TileOvenBrick) {
    		return (TileOvenBrick) prevZ;
    	} else {
    		return null;
    	}
    }
    
    @Override
    public TileEntity[] getXBound() {
    	TileEntity[] result = new TileOvenBrick[2];
    	TileOvenBrick nextX = this;
    	TileOvenBrick prevX = this;
    
    	for(; {
    		TileOvenBrick temp = getNextX(nextX);
    
    		if (temp != null) {
    			nextX = temp;
    		} else {
    			result[0] = nextX;
    			break;
    		}
    	}
    
    	for(; {
    		TileOvenBrick temp = getPrevX(prevX);
    
    		if (temp != null) {
    			prevX = temp;
    		} else {
    			result[1] = prevX;
    			break;
    		}
    	}
    
    	return result;
    }
    
    @Override
    public TileEntity[] getYBound() {
    	TileEntity[] result = new TileOvenBrick[2];
    	TileOvenBrick nextY = this;
    	TileOvenBrick prevY = this;
    
    	for(; {
    		TileOvenBrick temp = getAbove(nextY);
    
    		if (temp != null) {
    			nextY = temp;
    		} else {
    			result[0] = nextY;
    			break;
    		}
    	}
    
    	for(; {
    		TileOvenBrick temp = getBelow(prevY);
    
    		if (temp != null) {
    			prevY = temp;
    		} else {
    			result[1] = prevY;
    			break;
    		}
    	}
    
    	return result;
    }
    
    @Override
    public TileEntity[] getZBound() {
    	TileEntity[] result = new TileOvenBrick[2];
    	TileOvenBrick nextZ = this;
    	TileOvenBrick prevZ = this;
    
    	for(; {
    		TileOvenBrick temp = getNextZ(nextZ);
    
    		if (temp != null) {
    			nextZ = temp;
    		} else {
    			result[0] = nextZ;
    			break;
    		}
    	}
    
    	for(; {
    		TileOvenBrick temp = getPrevZ(prevZ);
    
    		if (temp != null) {
    			prevZ = temp;
    		} else {
    			result[1] = prevZ;
    			break;
    		}
    	}
    
    	return result;
    }
    
     public void smeltItem() {
    	 if (this.canSmelt()) {
                ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
    
                if (this.furnaceItemStacks[2] == null)
                {
                    this.furnaceItemStacks[2] = var1.copy();
                }
                else if (this.furnaceItemStacks[2].isItemEqual(var1))
                {
                    furnaceItemStacks[2].stackSize += var1.stackSize;
                }
    
                --this.furnaceItemStacks[0].stackSize;
    
                if (this.furnaceItemStacks[0].stackSize <= 0)
                {
                    this.furnaceItemStacks[0] = null;
                }
            }
        }
    
     private boolean canSmelt() {
    	 if (this.furnaceItemStacks[0] == null) {
                return false;
            } else {
            	ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
                if (var1 == null) return false;
                if (this.furnaceItemStacks[2] == null) return true;
                if (!this.furnaceItemStacks[2].isItemEqual(var1)) return false;
                int result = furnaceItemStacks[2].stackSize + var1.stackSize;
                return (result <= getInventoryStackLimit() && result <= var1.getMaxStackSize());
            }
    }
    
    public int getInventoryStackLimit() {
    	return 64;
    }
    
    @Override
    public int getStartInventorySide(ForgeDirection side) {
    	// TODO Auto-generated method stub
    	return 0;
    }
    
    @Override
    public int getSizeInventorySide(ForgeDirection side) {
    	// TODO Auto-generated method stub
    	return 0;
    }
    
    @Override
    public int getSizeInventory() {
    	// TODO Auto-generated method stub
    	return 0;
    }
    
    @Override
    public ItemStack getStackInSlot(int var1) {
    	// TODO Auto-generated method stub
    	return null;
    }
    
    @Override
    public ItemStack decrStackSize(int var1, int var2) {
    	// TODO Auto-generated method stub
    	return null;
    }
    
    @Override
    public ItemStack getStackInSlotOnClosing(int var1) {
    	// TODO Auto-generated method stub
    	return null;
    }
    
    @Override
    public void setInventorySlotContents(int var1, ItemStack var2) {
    	// TODO Auto-generated method stub
    
    }
    
    @Override
    public String getInvName() {
    	// TODO Auto-generated method stub
    	return null;
    }
    
    @Override
    public boolean isUseableByPlayer(EntityPlayer var1) {
    	// TODO Auto-generated method stub
    	return false;
    }
    
    @Override
    public void openChest() {
    	// TODO Auto-generated method stub
    
    }
    
    @Override
    public void closeChest() {
    	// TODO Auto-generated method stub
    
    }
    }
    

     

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.Block;
    import net.minecraft.src.BlockContainer;
    import net.minecraft.src.EntityPlayer;
    import net.minecraft.src.Material;
    import net.minecraft.src.TileEntity;
    import net.minecraft.src.World;
    
    public class BlockOvenBrick extends BlockContainer {
    
    public BlockOvenBrick(int par1, int par2) {
    	super(par1, par2, Material.rock);
    }
    
    @Override
    public TileEntity createNewTileEntity(World var1) {
    	return new TileOvenBrick();
    }
    
    @Override
    public boolean renderAsNormalBlock() {
    	return false;
    }
    
    public boolean isOpaqueCube() {
            return false;
        }
    
    @Override
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
    	TileOvenBrick brick = (TileOvenBrick) par1World.getBlockTileEntity(par2, par3, par4);
    
    	if (brick != null && brick.isValidCombination()) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    public int idDropped(int par1, Random par2Random, int par3) {
            return modHerbcraft.BlockOvenBrick.blockID;
        }
    }
    

     

    Beyond this, I have no idea what I'm supposed to do. If the blocks are placed in the proper arrangement, how do I get them to behave as a single unit?

  7. Sorry about taking so long to post this.

     

    tree file:

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.Block;
    import net.minecraft.src.Direction;
    import net.minecraft.src.World;
    import net.minecraft.src.WorldGenTrees;
    import net.minecraft.src.WorldGenerator;
    
    
    public class WorldGenObbywood extends WorldGenerator {
    /** The minimum height of a generated tree. */
        private final int minTreeHeight;
    
        /** True if this tree should grow Vines. */
        private final boolean vinesGrow;
    
        /** The metadata value of the wood to use in tree generation. */
        private final int metaWood;
    
        /** The metadata value of the leaves to use in tree generation. */
        private final int metaLeaves;
    
        public WorldGenObbywood(boolean par1)
        {
            this(par1, 4, 0, 0, false);
        }
    
        public WorldGenObbywood(boolean par1, int par2, int par3, int par4, boolean par5)
        {
            super(par1);
            this.minTreeHeight = par2;
            this.metaWood = par3;
            this.metaLeaves = par4;
            this.vinesGrow = par5;
        }
    
        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
        {
            int var6 = par2Random.nextInt(3) + this.minTreeHeight;
            boolean var7 = true;
    
            if (par4 >= 1 && par4 + var6 + 1 <= 256)
            {
                int var8;
                byte var9;
                int var11;
                int var12;
    
                for (var8 = par4; var8 <= par4 + 1 + var6; ++var8)
                {
                    var9 = 1;
    
                    if (var8 == par4)
                    {
                        var9 = 0;
                    }
    
                    if (var8 >= par4 + 1 + var6 - 2)
                    {
                        var9 = 2;
                    }
    
                    for (int var10 = par3 - var9; var10 <= par3 + var9 && var7; ++var10)
                    {
                        for (var11 = par5 - var9; var11 <= par5 + var9 && var7; ++var11)
                        {
                            if (var8 >= 0 && var8 < 256)
                            {
                                var12 = par1World.getBlockId(var10, var8, var11);
    
                                Block block = Block.blocksList[var12];
    
                                if (var12 != 0 &&
                                   !block.isLeaves(par1World, var10, var8, var11) &&
                                    var12 != Block.grass.blockID &&
                                    var12 != Block.dirt.blockID &&
                                   !block.isWood(par1World, var10, var8, var11))
                                {
                                    var7 = false;
                                }
                            }
                            else
                            {
                                var7 = false;
                            }
                        }
                    }
                }
    
                if (!var7)
                {
                    return false;
                }
                else
                {
                    var8 = par1World.getBlockId(par3, par4 - 1, par5);
    
                    if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1)
                    {
                        this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID);
                        var9 = 3;
                        byte var18 = 0;
                        int var13;
                        int var14;
                        int var15;
    
                        for (var11 = par4 - var9 + var6; var11 <= par4 + var6; ++var11)
                        {
                            var12 = var11 - (par4 + var6);
                            var13 = var18 + 1 - var12 / 2;
    
                            for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)
                            {
                                var15 = var14 - par3;
    
                                for (int var16 = par5 - var13; var16 <= par5 + var13; ++var16)
                                {
                                    int var17 = var16 - par5;
    
                                    Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)];
    
                                    if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) &&
                                        (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16)))
                                    {
                                        this.setBlockAndMetadata(par1World, var14, var11, var16, modHerbcraft.Desertleaves.blockID, this.metaLeaves);
                                    }
                                }
                            }
                        }
    
                        for (var11 = 0; var11 < var6; ++var11)
                        {
                            var12 = par1World.getBlockId(par3, par4 + var11, par5);
    
                            Block block = Block.blocksList[var12];
    
                            if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5))
                            {
                                this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, modHerbcraft.Desertwood.blockID, this.metaWood);
    
                                if (this.vinesGrow && var11 > 0)
                                {
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 - 1, par4 + var11, par5))
                                    {
                                        this.setBlockAndMetadata(par1World, par3 - 1, par4 + var11, par5, Block.vine.blockID, ;
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 + 1, par4 + var11, par5))
                                    {
                                        this.setBlockAndMetadata(par1World, par3 + 1, par4 + var11, par5, Block.vine.blockID, 2);
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 - 1))
                                    {
                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 - 1, Block.vine.blockID, 1);
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 + 1))
                                    {
                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 + 1, Block.vine.blockID, 4);
                                    }
                                }
                            }
                        }
    
                        if (this.vinesGrow)
                        {
                            for (var11 = par4 - 3 + var6; var11 <= par4 + var6; ++var11)
                            {
                                var12 = var11 - (par4 + var6);
                                var13 = 2 - var12 / 2;
    
                                for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)
                                {
                                    for (var15 = par5 - var13; var15 <= par5 + var13; ++var15)
                                    {
                                        Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)];
                                        if (block != null && block.isLeaves(par1World, var14, var11, var15))
                                        {
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0)
                                            {
                                                this.growVines(par1World, var14 - 1, var11, var15, ;
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 + 1, var11, var15) == 0)
                                            {
                                                this.growVines(par1World, var14 + 1, var11, var15, 2);
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 - 1) == 0)
                                            {
                                                this.growVines(par1World, var14, var11, var15 - 1, 1);
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 + 1) == 0)
                                            {
                                                this.growVines(par1World, var14, var11, var15 + 1, 4);
                                            }
                                        }
                                    }
                                }
                            }
    
                            if (par2Random.nextInt(5) == 0 && var6 > 5)
                            {
                                for (var11 = 0; var11 < 2; ++var11)
                                {
                                    for (var12 = 0; var12 < 4; ++var12)
                                    {
                                        if (par2Random.nextInt(4 - var11) == 0)
                                        {
                                            var13 = par2Random.nextInt(3);
                                            this.setBlockAndMetadata(par1World, par3 + Direction.offsetX[Direction.footInvisibleFaceRemap[var12]], par4 + var6 - 5 + var11, par5 + Direction.offsetZ[Direction.footInvisibleFaceRemap[var12]], Block.cocoaPlant.blockID, var13 << 2 | var12);
                                        }
                                    }
                                }
                            }
                        }
    
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
    
        /**
         * Grows vines downward from the given block for a given length. Args: World, x, starty, z, vine-length
         */
        private void growVines(World par1World, int par2, int par3, int par4, int par5)
        {
            this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
            int var6 = 4;
    
            while (true)
            {
                --par3;
    
                if (par1World.getBlockId(par2, par3, par4) != 0 || var6 <= 0)
                {
                    return;
                }
    
                this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
                --var6;
            }
        }
    }
    

     

    worldgen file:

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.IChunkProvider;
    import net.minecraft.src.World;
    import net.minecraft.src.WorldGenMinable;
    import cpw.mods.fml.common.IWorldGenerator;
    
    public class HerbcraftWorldGenerator implements IWorldGenerator {
    
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world,
    		IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
    	switch(world.provider.dimensionId) {
    	case -1: generateNether(world, random, chunkX*16, chunkZ*16);
    	case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
    	}
    }
    
    private void generateSurface(World world, Random random, int i, int j) {
    	/*
    	for (int n = 0; n < 30; n++) {
    		int X = i + random.nextInt(16);
    		int Z = j + random.nextInt(16);
    		int Y = random.nextInt(61);
    
    		(new WorldGenMinable(modHerbcraft.OreTin.blockID, 5)).generate(world, random, X, Y, Z);
    	}
    
    	for (int n = 0; n < 3; n++) {
    		int X = i + random.nextInt(16);
    		int Z = j + random.nextInt(16);
    		int Y = random.nextInt(51);
    
    		(new WorldGenMinable(modHerbcraft.OreAthentumite.blockID, 1)).generate(world, random, X, Y, Z);
    	}*/
    
    	//for (int n = 0; n < 5; n++) {
    		   int X = i + random.nextInt(16);
    		   int Z = j + random.nextInt(16);
    		   int Y = random.nextInt(10);
    		   
    		   (new WorldGenObbywood(false)).generate(world, random, X+(i*16), Y+64, Z+(j*16));
    	//}
    }
    
    private void generateNether(World world, Random random, int i, int j) {
    
    }
    
    }
    

  8. It's extending WorldGenerator. I copied the generate method from WorldGenTrees, but changed a couple of lines. For example, this line

     

    this.setBlockAndMetadata(par1World, var14, var11, var16, Block.leaves.blockID, this.metaLeaves);

     

    reads like this instead

     

    this.setBlockAndMetadata(par1World, var14, var11, var16, modHerbcraft.Desertleaves.blockID, this.metaLeaves);

  9. I have written code for a custom tree, but it doesn't generate no matter how much I tweak the code. I'm totally lost and don't know what to do.

    If it helps, I copied the code used by WorldGenTrees and replaced some of the variables.

     

    The relevant files are:

     

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.IChunkProvider;
    import net.minecraft.src.World;
    import net.minecraft.src.WorldGenMinable;
    import cpw.mods.fml.common.IWorldGenerator;
    
    public class HerbcraftWorldGenerator implements IWorldGenerator {
    
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world,
    		IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
    	switch(world.provider.dimensionId) {
    	case -1: generateNether(world, random, chunkX*16, chunkZ*16);
    	case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
    	}
    }
    
    private void generateSurface(World world, Random random, int i, int j) {
    	/*
    	for (int n = 0; n < 30; n++) {
    		int X = i + random.nextInt(16);
    		int Z = j + random.nextInt(16);
    		int Y = random.nextInt(61);
    
    		(new WorldGenMinable(modHerbcraft.OreTin.blockID, 5)).generate(world, random, X, Y, Z);
    	}
    
    	for (int n = 0; n < 3; n++) {
    		int X = i + random.nextInt(16);
    		int Z = j + random.nextInt(16);
    		int Y = random.nextInt(51);
    
    		(new WorldGenMinable(modHerbcraft.OreAthentumite.blockID, 1)).generate(world, random, X, Y, Z);
    	}*/
    
    	for (int n = 0; n < 100; n++) {
    		int X = i + random.nextInt(16);
    		int Z = j + random.nextInt(16);
    		int Y = random.nextInt();
    
    		(new WorldGenObbywood(true)).generate(world, random, X, Y, Z);
    	}
    }
    
    private void generateNether(World world, Random random, int i, int j) {
    
    }
    
    }
    

     

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.Block;
    import net.minecraft.src.Direction;
    import net.minecraft.src.World;
    import net.minecraft.src.WorldGenTrees;
    import net.minecraft.src.WorldGenerator;
    
    
    public class WorldGenObbywood extends WorldGenerator {
    /** The minimum height of a generated tree. */
        private final int minTreeHeight;
    
        /** True if this tree should grow Vines. */
        private final boolean vinesGrow;
    
        /** The metadata value of the wood to use in tree generation. */
        private final int metaWood;
    
        /** The metadata value of the leaves to use in tree generation. */
        private final int metaLeaves;
    
        public WorldGenObbywood(boolean par1)
        {
            this(par1, 4, 0, 0, false);
        }
    
        public WorldGenObbywood(boolean par1, int par2, int par3, int par4, boolean par5)
        {
            super(par1);
            this.minTreeHeight = par2;
            this.metaWood = par3;
            this.metaLeaves = par4;
            this.vinesGrow = par5;
        }
    
        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
        {
            int var6 = par2Random.nextInt(3) + this.minTreeHeight;
            boolean var7 = true;
    
            if (par4 >= 1 && par4 + var6 + 1 <= 256)
            {
                int var8;
                byte var9;
                int var11;
                int var12;
    
                for (var8 = par4; var8 <= par4 + 1 + var6; ++var8)
                {
                    var9 = 1;
    
                    if (var8 == par4)
                    {
                        var9 = 0;
                    }
    
                    if (var8 >= par4 + 1 + var6 - 2)
                    {
                        var9 = 2;
                    }
    
                    for (int var10 = par3 - var9; var10 <= par3 + var9 && var7; ++var10)
                    {
                        for (var11 = par5 - var9; var11 <= par5 + var9 && var7; ++var11)
                        {
                            if (var8 >= 0 && var8 < 256)
                            {
                                var12 = par1World.getBlockId(var10, var8, var11);
    
                                Block block = Block.blocksList[var12];
    
                                if (var12 != 0 &&
                                   !block.isLeaves(par1World, var10, var8, var11) &&
                                    var12 != Block.grass.blockID &&
                                    var12 != Block.dirt.blockID &&
                                   !block.isWood(par1World, var10, var8, var11))
                                {
                                    var7 = false;
                                }
                            }
                            else
                            {
                                var7 = false;
                            }
                        }
                    }
                }
    
                if (!var7)
                {
                    return false;
                }
                else
                {
                    var8 = par1World.getBlockId(par3, par4 - 1, par5);
    
                    if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1)
                    {
                        this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID);
                        var9 = 3;
                        byte var18 = 0;
                        int var13;
                        int var14;
                        int var15;
    
                        for (var11 = par4 - var9 + var6; var11 <= par4 + var6; ++var11)
                        {
                            var12 = var11 - (par4 + var6);
                            var13 = var18 + 1 - var12 / 2;
    
                            for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)
                            {
                                var15 = var14 - par3;
    
                                for (int var16 = par5 - var13; var16 <= par5 + var13; ++var16)
                                {
                                    int var17 = var16 - par5;
    
                                    Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)];
    
                                    if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) &&
                                        (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16)))
                                    {
                                        this.setBlockAndMetadata(par1World, var14, var11, var16, modHerbcraft.Desertleaves.blockID, this.metaLeaves);
                                    }
                                }
                            }
                        }
    
                        for (var11 = 0; var11 < var6; ++var11)
                        {
                            var12 = par1World.getBlockId(par3, par4 + var11, par5);
    
                            Block block = Block.blocksList[var12];
    
                            if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5))
                            {
                                this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, modHerbcraft.Desertwood.blockID, this.metaWood);
    
                                if (this.vinesGrow && var11 > 0)
                                {
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 - 1, par4 + var11, par5))
                                    {
                                        this.setBlockAndMetadata(par1World, par3 - 1, par4 + var11, par5, Block.vine.blockID, ;
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 + 1, par4 + var11, par5))
                                    {
                                        this.setBlockAndMetadata(par1World, par3 + 1, par4 + var11, par5, Block.vine.blockID, 2);
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 - 1))
                                    {
                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 - 1, Block.vine.blockID, 1);
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 + 1))
                                    {
                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 + 1, Block.vine.blockID, 4);
                                    }
                                }
                            }
                        }
    
                        if (this.vinesGrow)
                        {
                            for (var11 = par4 - 3 + var6; var11 <= par4 + var6; ++var11)
                            {
                                var12 = var11 - (par4 + var6);
                                var13 = 2 - var12 / 2;
    
                                for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)
                                {
                                    for (var15 = par5 - var13; var15 <= par5 + var13; ++var15)
                                    {
                                        Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)];
                                        if (block != null && block.isLeaves(par1World, var14, var11, var15))
                                        {
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0)
                                            {
                                                this.growVines(par1World, var14 - 1, var11, var15, ;
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 + 1, var11, var15) == 0)
                                            {
                                                this.growVines(par1World, var14 + 1, var11, var15, 2);
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 - 1) == 0)
                                            {
                                                this.growVines(par1World, var14, var11, var15 - 1, 1);
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 + 1) == 0)
                                            {
                                                this.growVines(par1World, var14, var11, var15 + 1, 4);
                                            }
                                        }
                                    }
                                }
                            }
    
                            if (par2Random.nextInt(5) == 0 && var6 > 5)
                            {
                                for (var11 = 0; var11 < 2; ++var11)
                                {
                                    for (var12 = 0; var12 < 4; ++var12)
                                    {
                                        if (par2Random.nextInt(4 - var11) == 0)
                                        {
                                            var13 = par2Random.nextInt(3);
                                            this.setBlockAndMetadata(par1World, par3 + Direction.offsetX[Direction.footInvisibleFaceRemap[var12]], par4 + var6 - 5 + var11, par5 + Direction.offsetZ[Direction.footInvisibleFaceRemap[var12]], Block.cocoaPlant.blockID, var13 << 2 | var12);
                                        }
                                    }
                                }
                            }
                        }
    
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
    
        /**
         * Grows vines downward from the given block for a given length. Args: World, x, starty, z, vine-length
         */
        private void growVines(World par1World, int par2, int par3, int par4, int par5)
        {
            this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
            int var6 = 4;
    
            while (true)
            {
                --par3;
    
                if (par1World.getBlockId(par2, par3, par4) != 0 || var6 <= 0)
                {
                    return;
                }
    
                this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
                --var6;
            }
        }
    }
    

  10. Alright, I figured out which file I am missing, only now it's causing my client to hang and not generate a crash report. Here are the files in question.

     

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.Block;
    import net.minecraft.src.Direction;
    import net.minecraft.src.World;
    import net.minecraft.src.WorldGenTrees;
    import net.minecraft.src.WorldGenerator;
    
    
    public class WorldGenObbywood extends WorldGenerator {
        private final int minTreeHeight;
        private final boolean vinesGrow;
        private final int metaWood;
        private final int metaLeaves;
    
        public WorldGenObbywood(boolean par1) {
            this(par1, 4, 0, 0, false);
        }
    
        public WorldGenObbywood(boolean par1, int par2, int par3, int par4, boolean par5) {
            super(par1);
            this.minTreeHeight = par2;
            this.metaWood = par3;
            this.metaLeaves = par4;
            this.vinesGrow = par5;
        }
    
        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
        {
            int var6 = par2Random.nextInt(3) + this.minTreeHeight;
            boolean var7 = true;
    
            if (par4 >= 1 && par4 + var6 + 1 <= 256)
            {
                int var8;
                byte var9;
                int var11;
                int var12;
    
                for (var8 = par4; var8 <= par4 + 1 + var6; ++var8)
                {
                    var9 = 1;
    
                    if (var8 == par4)
                    {
                        var9 = 0;
                    }
    
                    if (var8 >= par4 + 1 + var6 - 2)
                    {
                        var9 = 2;
                    }
    
                    for (int var10 = par3 - var9; var10 <= par3 + var9 && var7; ++var10)
                    {
                        for (var11 = par5 - var9; var11 <= par5 + var9 && var7; ++var11)
                        {
                            if (var8 >= 0 && var8 < 256)
                            {
                                var12 = par1World.getBlockId(var10, var8, var11);
    
                                Block block = Block.blocksList[var12];
    
                                if (var12 != 0 &&
                                   !block.isLeaves(par1World, var10, var8, var11) &&
                                    var12 != Block.grass.blockID &&
                                    var12 != Block.dirt.blockID &&
                                   !block.isWood(par1World, var10, var8, var11))
                                {
                                    var7 = false;
                                }
                            }
                            else
                            {
                                var7 = false;
                            }
                        }
                    }
                }
    
                if (!var7)
                {
                    return false;
                }
                else
                {
                    var8 = par1World.getBlockId(par3, par4 - 1, par5);
    
                    if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1)
                    {
                        this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID);
                        var9 = 3;
                        byte var18 = 0;
                        int var13;
                        int var14;
                        int var15;
    
                        for (var11 = par4 - var9 + var6; var11 <= par4 + var6; ++var11)
                        {
                            var12 = var11 - (par4 + var6);
                            var13 = var18 + 1 - var12 / 2;
    
                            for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)
                            {
                                var15 = var14 - par3;
    
                                for (int var16 = par5 - var13; var16 <= par5 + var13; ++var16)
                                {
                                    int var17 = var16 - par5;
    
                                    Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)];
    
                                    if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) &&
                                        (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16)))
                                    {
                                        this.setBlockAndMetadata(par1World, var14, var11, var16, modHerbcraft.Obbyleaves.blockID, this.metaLeaves);
                                    }
                                }
                            }
                        }
    
                        for (var11 = 0; var11 < var6; ++var11)
                        {
                            var12 = par1World.getBlockId(par3, par4 + var11, par5);
    
                            Block block = Block.blocksList[var12];
    
                            if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5))
                            {
                                this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, modHerbcraft.Obbywood.blockID, this.metaWood);
    
                                if (this.vinesGrow && var11 > 0)
                                {
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 - 1, par4 + var11, par5))
                                    {
                                        this.setBlockAndMetadata(par1World, par3 - 1, par4 + var11, par5, Block.vine.blockID, ;
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 + 1, par4 + var11, par5))
                                    {
                                        this.setBlockAndMetadata(par1World, par3 + 1, par4 + var11, par5, Block.vine.blockID, 2);
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 - 1))
                                    {
                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 - 1, Block.vine.blockID, 1);
                                    }
    
                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 + 1))
                                    {
                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 + 1, Block.vine.blockID, 4);
                                    }
                                }
                            }
                        }
    
                        if (this.vinesGrow)
                        {
                            for (var11 = par4 - 3 + var6; var11 <= par4 + var6; ++var11)
                            {
                                var12 = var11 - (par4 + var6);
                                var13 = 2 - var12 / 2;
    
                                for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)
                                {
                                    for (var15 = par5 - var13; var15 <= par5 + var13; ++var15)
                                    {
                                        Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)];
                                        if (block != null && block.isLeaves(par1World, var14, var11, var15))
                                        {
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0)
                                            {
                                                this.growVines(par1World, var14 - 1, var11, var15, ;
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 + 1, var11, var15) == 0)
                                            {
                                                this.growVines(par1World, var14 + 1, var11, var15, 2);
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 - 1) == 0)
                                            {
                                                this.growVines(par1World, var14, var11, var15 - 1, 1);
                                            }
    
                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 + 1) == 0)
                                            {
                                                this.growVines(par1World, var14, var11, var15 + 1, 4);
                                            }
                                        }
                                    }
                                }
                            }
    
                            if (par2Random.nextInt(5) == 0 && var6 > 5)
                            {
                                for (var11 = 0; var11 < 2; ++var11)
                                {
                                    for (var12 = 0; var12 < 4; ++var12)
                                    {
                                        if (par2Random.nextInt(4 - var11) == 0)
                                        {
                                            var13 = par2Random.nextInt(3);
                                            this.setBlockAndMetadata(par1World, par3 + Direction.offsetX[Direction.footInvisibleFaceRemap[var12]], par4 + var6 - 5 + var11, par5 + Direction.offsetZ[Direction.footInvisibleFaceRemap[var12]], Block.cocoaPlant.blockID, var13 << 2 | var12);
                                        }
                                    }
                                }
                            }
                        }
    
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
    
        /**
         * Grows vines downward from the given block for a given length. Args: World, x, starty, z, vine-length
         */
        private void growVines(World par1World, int par2, int par3, int par4, int par5)
        {
            this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
            int var6 = 4;
    
            while (true)
            {
                --par3;
    
                if (par1World.getBlockId(par2, par3, par4) != 0 || var6 <= 0)
                {
                    return;
                }
    
                this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
                --var6;
            }
        }
    }
    

     

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.IChunkProvider;
    import net.minecraft.src.World;
    import cpw.mods.fml.common.IWorldGenerator;
    
    public class HerbcraftWorldGenerator implements IWorldGenerator {
    
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world,
    		IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
    	switch(world.provider.dimensionId) {
    	case -1: generateNether(world, random, chunkX*16, chunkZ*16);
    	case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
    	}
    }
    
    private void generateSurface(World world, Random random, int i, int j) {
    	for (int n = 0; n < 100; n++) {
    		int X = i + random.nextInt(16);
    		int Z = j + random.nextInt(16);
    		int Y = random.nextInt(256);
    
    		(new WorldGenObbywood(false)).generate(world, random, X, Y, Z);
    	}
    }
    
    private void generateNether(World world, Random random, int i, int j) {
    
    }
    
    }
    

     

    package insanegravy.herbcraft.common;
    
    import java.util.Random;
    
    import net.minecraft.src.Block;
    import net.minecraft.src.BlockFlower;
    import net.minecraft.src.CreativeTabs;
    import net.minecraft.src.World;
    import net.minecraft.src.WorldGenBigTree;
    import net.minecraft.src.WorldGenForest;
    import net.minecraft.src.WorldGenHugeTrees;
    import net.minecraft.src.WorldGenTaiga2;
    import net.minecraft.src.WorldGenTrees;
    import net.minecraft.src.WorldGenerator;
    import cpw.mods.fml.common.Side;
    import cpw.mods.fml.common.asm.SideOnly;
    
    public class Obbysapling extends BlockFlower {
    
    protected Obbysapling(int i, int j) {
    	super(i, j);
    	this.setCreativeTab(CreativeTabs.tabDecorations);
    }
    
    @Override
    protected boolean canThisPlantGrowOnThisBlockID(int i) {
            return i == Block.grass.blockID;
        }
    
    public int damageDropped(int par1) {
            return par1 & 3;
        }
    
    public boolean isSameSapling(World par1World, int par2, int par3, int par4, int par5)
        {
            return par1World.getBlockId(par2, par3, par4) == this.blockID && (par1World.getBlockMetadata(par2, par3, par4) & 3) == par5;
        }
    
    public void growTree(World par1World, int par2, int par3, int par4, Random par5Random)
        {
            int var6 = par1World.getBlockMetadata(par2, par3, par4) & 3;
            Object var7 = null;
            int var8 = 0;
            int var9 = 0;
            boolean var10 = false;
    
            if (var6 == 1)
            {
                var7 = new WorldGenTaiga2(true);
            }
            else if (var6 == 2)
            {
                var7 = new WorldGenForest(true);
            }
            else if (var6 == 3)
            {
                for (var8 = 0; var8 >= -1; --var8)
                {
                    for (var9 = 0; var9 >= -1; --var9)
                    {
                        if (this.isSameSapling(par1World, par2 + var8, par3, par4 + var9, 3) && this.isSameSapling(par1World, par2 + var8 + 1, par3, par4 + var9, 3) && this.isSameSapling(par1World, par2 + var8, par3, par4 + var9 + 1, 3) && this.isSameSapling(par1World, par2 + var8 + 1, par3, par4 + var9 + 1, 3))
                        {
                            var7 = new WorldGenHugeTrees(true, 10 + par5Random.nextInt(20), 3, 3);
                            var10 = true;
                            break;
                        }
                    }
    
                    if (var7 != null)
                    {
                        break;
                    }
                }
    
                if (var7 == null)
                {
                    var9 = 0;
                    var8 = 0;
                    var7 = new WorldGenObbywood(true, 4 + par5Random.nextInt(7), 3, 3, false);
                }
            }
            else
            {
                var7 = new WorldGenObbywood(true);
    
                if (par5Random.nextInt(10) == 0)
                {
                    var7 = new WorldGenBigTree(true);
                }
            }
    
            if (var10)
            {
                par1World.setBlock(par2 + var8, par3, par4 + var9, 0);
                par1World.setBlock(par2 + var8 + 1, par3, par4 + var9, 0);
                par1World.setBlock(par2 + var8, par3, par4 + var9 + 1, 0);
                par1World.setBlock(par2 + var8 + 1, par3, par4 + var9 + 1, 0);
            }
            else
            {
                par1World.setBlock(par2, par3, par4, 0);
            }
    
            if (!((WorldGenerator)var7).generate(par1World, par5Random, par2 + var8, par3, par4 + var9))
            {
                if (var10)
                {
                    par1World.setBlockAndMetadata(par2 + var8, par3, par4 + var9, this.blockID, var6);
                    par1World.setBlockAndMetadata(par2 + var8 + 1, par3, par4 + var9, this.blockID, var6);
                    par1World.setBlockAndMetadata(par2 + var8, par3, par4 + var9 + 1, this.blockID, var6);
                    par1World.setBlockAndMetadata(par2 + var8 + 1, par3, par4 + var9 + 1, this.blockID, var6);
                }
                else
                {
                    par1World.setBlockAndMetadata(par2, par3, par4, this.blockID, var6);
                }
            }
        }
    
    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) {
            if (!par1World.isRemote) {
                super.updateTick(par1World, par2, par3, par4, par5Random);
    
                if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9 && par5Random.nextInt(7) == 0) {
                    int var6 = par1World.getBlockMetadata(par2, par3, par4);
    
                    if ((var6 &  == 0) {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4, var6 | ;
                    } else {
                        this.growTree(par1World, par2, par3, par4, par5Random);
                    }
                }
            }
        }
    
    public int getBlockTextureFromSideAndMetadata(int par1, int par2) {
            par2 &= 3;
            return par2 == 1 ? 63 : (par2 == 2 ? 79 : (par2 == 3 ? 30 : super.getBlockTextureFromSideAndMetadata(par1, par2)));
        }
    
    @SideOnly(Side.CLIENT) 
    
    public String getTextureFile() {
    	return "/HerbcraftTerrain.png";
        }
    }
    

  11. I wrote some for creating a new tree, but for some reason it will not generate in the world. I have tried every possible fix and tweek I can think of, but nothing works. I'm including the class files below.

     

    This is the sapling class file

     

    package insanegravy.herbcraft.common;

     

    import java.util.Random;

     

    import net.minecraft.src.Block;

    import net.minecraft.src.BlockFlower;

    import net.minecraft.src.CreativeTabs;

    import net.minecraft.src.World;

    import net.minecraft.src.WorldGenBigTree;

    import net.minecraft.src.WorldGenForest;

    import net.minecraft.src.WorldGenHugeTrees;

    import net.minecraft.src.WorldGenTaiga2;

    import net.minecraft.src.WorldGenTrees;

    import net.minecraft.src.WorldGenerator;

    import cpw.mods.fml.common.Side;

    import cpw.mods.fml.common.asm.SideOnly;

     

    public class Obbysapling extends BlockFlower {

     

    protected Obbysapling(int i, int j) {

    super(i, j);

    this.setCreativeTab(CreativeTabs.tabDecorations);

    }

     

    @Override

    protected boolean canThisPlantGrowOnThisBlockID(int i) {

            return i == Block.grass.blockID;

        }

     

    public int damageDropped(int par1) {

            return par1 & 3;

        }

     

    public boolean isSameSapling(World par1World, int par2, int par3, int par4, int par5)

        {

            return par1World.getBlockId(par2, par3, par4) == this.blockID && (par1World.getBlockMetadata(par2, par3, par4) & 3) == par5;

        }

     

    public void growTree(World par1World, int par2, int par3, int par4, Random par5Random)

        {

            int var6 = par1World.getBlockMetadata(par2, par3, par4) & 3;

            Object var7 = null;

            int var8 = 0;

            int var9 = 0;

            boolean var10 = false;

     

            if (var6 == 1)

            {

                var7 = new WorldGenTaiga2(true);

            }

            else if (var6 == 2)

            {

                var7 = new WorldGenForest(true);

            }

            else if (var6 == 3)

            {

                for (var8 = 0; var8 >= -1; --var8)

                {

                    for (var9 = 0; var9 >= -1; --var9)

                    {

                        if (this.isSameSapling(par1World, par2 + var8, par3, par4 + var9, 3) && this.isSameSapling(par1World, par2 + var8 + 1, par3, par4 + var9, 3) && this.isSameSapling(par1World, par2 + var8, par3, par4 + var9 + 1, 3) && this.isSameSapling(par1World, par2 + var8 + 1, par3, par4 + var9 + 1, 3))

                        {

                            var7 = new WorldGenHugeTrees(true, 10 + par5Random.nextInt(20), 3, 3);

                            var10 = true;

                            break;

                        }

                    }

     

                    if (var7 != null)

                    {

                        break;

                    }

                }

     

                if (var7 == null)

                {

                    var9 = 0;

                    var8 = 0;

                    var7 = new WorldGenObbywood(true, 4 + par5Random.nextInt(7), 3, 3, false);

                }

            }

            else

            {

                var7 = new WorldGenObbywood(true);

     

                if (par5Random.nextInt(10) == 0)

                {

                    var7 = new WorldGenBigTree(true);

                }

            }

     

            if (var10)

            {

                par1World.setBlock(par2 + var8, par3, par4 + var9, 0);

                par1World.setBlock(par2 + var8 + 1, par3, par4 + var9, 0);

                par1World.setBlock(par2 + var8, par3, par4 + var9 + 1, 0);

                par1World.setBlock(par2 + var8 + 1, par3, par4 + var9 + 1, 0);

            }

            else

            {

                par1World.setBlock(par2, par3, par4, 0);

            }

     

            if (!((WorldGenerator)var7).generate(par1World, par5Random, par2 + var8, par3, par4 + var9))

            {

                if (var10)

                {

                    par1World.setBlockAndMetadata(par2 + var8, par3, par4 + var9, this.blockID, var6);

                    par1World.setBlockAndMetadata(par2 + var8 + 1, par3, par4 + var9, this.blockID, var6);

                    par1World.setBlockAndMetadata(par2 + var8, par3, par4 + var9 + 1, this.blockID, var6);

                    par1World.setBlockAndMetadata(par2 + var8 + 1, par3, par4 + var9 + 1, this.blockID, var6);

                }

                else

                {

                    par1World.setBlockAndMetadata(par2, par3, par4, this.blockID, var6);

                }

            }

        }

     

    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) {

            if (!par1World.isRemote) {

                super.updateTick(par1World, par2, par3, par4, par5Random);

     

                if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9 && par5Random.nextInt(7) == 0) {

                    int var6 = par1World.getBlockMetadata(par2, par3, par4);

     

                    if ((var6 & 8) == 0) {

                        par1World.setBlockMetadataWithNotify(par2, par3, par4, var6 | 8);

                    } else {

                        this.growTree(par1World, par2, par3, par4, par5Random);

                    }

                }

            }

        }

     

    public int getBlockTextureFromSideAndMetadata(int par1, int par2) {

            par2 &= 3;

            return par2 == 1 ? 63 : (par2 == 2 ? 79 : (par2 == 3 ? 30 : super.getBlockTextureFromSideAndMetadata(par1, par2)));

        }

     

    @SideOnly(Side.CLIENT)

     

    public String getTextureFile() {

    return "/HerbcraftTerrain.png";

        }

    }

     

     

     

     

    This is the worldGen class file

     

    package insanegravy.herbcraft.common;

     

    import java.util.Random;

     

    import net.minecraft.src.Block;

    import net.minecraft.src.Direction;

    import net.minecraft.src.World;

    import net.minecraft.src.WorldGenerator;

     

    public class WorldGenObbywood extends WorldGenerator {

     

    /** The minimum height of a generated tree. */

        private final int minTreeHeight;

     

        /** True if this tree should grow Vines. */

        private final boolean vinesGrow;

     

        /** The metadata value of the wood to use in tree generation. */

        private final int metaWood;

     

        /** The metadata value of the leaves to use in tree generation. */

        private final int metaLeaves;

     

        public WorldGenObbywood(boolean par1) {

            this(par1, 4, 0, 0, false);

        }

     

        public WorldGenObbywood(boolean par1, int par2, int par3, int par4, boolean par5) {

            super(par1);

            this.minTreeHeight = par2;

            this.metaWood = par3;

            this.metaLeaves = par4;

            this.vinesGrow = par5;

        }

     

        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)

        {

            int var6 = par2Random.nextInt(3) + this.minTreeHeight;

            boolean var7 = true;

     

            if (par4 >= 1 && par4 + var6 + 1 <= 256)

            {

                int var8;

                byte var9;

                int var11;

                int var12;

     

                for (var8 = par4; var8 <= par4 + 1 + var6; ++var8)

                {

                    var9 = 1;

     

                    if (var8 == par4)

                    {

                        var9 = 0;

                    }

     

                    if (var8 >= par4 + 1 + var6 - 2)

                    {

                        var9 = 2;

                    }

     

                    for (int var10 = par3 - var9; var10 <= par3 + var9 && var7; ++var10)

                    {

                        for (var11 = par5 - var9; var11 <= par5 + var9 && var7; ++var11)

                        {

                            if (var8 >= 0 && var8 < 256)

                            {

                                var12 = par1World.getBlockId(var10, var8, var11);

     

                                Block block = Block.blocksList[var12];

     

                                if (var12 != 0 &&

                                  !block.isLeaves(par1World, var10, var8, var11) &&

                                    var12 != Block.grass.blockID &&

                                    var12 != Block.dirt.blockID &&

                                  !block.isWood(par1World, var10, var8, var11))

                                {

                                    var7 = false;

                                }

                            }

                            else

                            {

                                var7 = false;

                            }

                        }

                    }

                }

     

                if (!var7)

                {

                    return false;

                }

                else

                {

                    var8 = par1World.getBlockId(par3, par4 - 1, par5);

     

                    if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1)

                    {

                        this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID);

                        var9 = 3;

                        byte var18 = 0;

                        int var13;

                        int var14;

                        int var15;

     

                        for (var11 = par4 - var9 + var6; var11 <= par4 + var6; ++var11)

                        {

                            var12 = var11 - (par4 + var6);

                            var13 = var18 + 1 - var12 / 2;

     

                            for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)

                            {

                                var15 = var14 - par3;

     

                                for (int var16 = par5 - var13; var16 <= par5 + var13; ++var16)

                                {

                                    int var17 = var16 - par5;

     

                                    Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)];

     

                                    if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) &&

                                        (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16)))

                                    {

                                        this.setBlockAndMetadata(par1World, var14, var11, var16, modHerbcraft.Obbyleaves.blockID, this.metaLeaves);

                                    }

                                }

                            }

                        }

     

                        for (var11 = 0; var11 < var6; ++var11)

                        {

                            var12 = par1World.getBlockId(par3, par4 + var11, par5);

     

                            Block block = Block.blocksList[var12];

     

                            if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5))

                            {

                                this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, modHerbcraft.Obbywood.blockID, this.metaWood);

     

                                if (this.vinesGrow && var11 > 0)

                                {

                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 - 1, par4 + var11, par5))

                                    {

                                        this.setBlockAndMetadata(par1World, par3 - 1, par4 + var11, par5, Block.vine.blockID, 8);

                                    }

     

                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 + 1, par4 + var11, par5))

                                    {

                                        this.setBlockAndMetadata(par1World, par3 + 1, par4 + var11, par5, Block.vine.blockID, 2);

                                    }

     

                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 - 1))

                                    {

                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 - 1, Block.vine.blockID, 1);

                                    }

     

                                    if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + var11, par5 + 1))

                                    {

                                        this.setBlockAndMetadata(par1World, par3, par4 + var11, par5 + 1, Block.vine.blockID, 4);

                                    }

                                }

                            }

                        }

     

                        if (this.vinesGrow)

                        {

                            for (var11 = par4 - 3 + var6; var11 <= par4 + var6; ++var11)

                            {

                                var12 = var11 - (par4 + var6);

                                var13 = 2 - var12 / 2;

     

                                for (var14 = par3 - var13; var14 <= par3 + var13; ++var14)

                                {

                                    for (var15 = par5 - var13; var15 <= par5 + var13; ++var15)

                                    {

                                        Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)];

                                        if (block != null && block.isLeaves(par1World, var14, var11, var15))

                                        {

                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0)

                                            {

                                                this.growVines(par1World, var14 - 1, var11, var15, 8);

                                            }

     

                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 + 1, var11, var15) == 0)

                                            {

                                                this.growVines(par1World, var14 + 1, var11, var15, 2);

                                            }

     

                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 - 1) == 0)

                                            {

                                                this.growVines(par1World, var14, var11, var15 - 1, 1);

                                            }

     

                                            if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14, var11, var15 + 1) == 0)

                                            {

                                                this.growVines(par1World, var14, var11, var15 + 1, 4);

                                            }

                                        }

                                    }

                                }

                            }

     

                            if (par2Random.nextInt(5) == 0 && var6 > 5)

                            {

                                for (var11 = 0; var11 < 2; ++var11)

                                {

                                    for (var12 = 0; var12 < 4; ++var12)

                                    {

                                        if (par2Random.nextInt(4 - var11) == 0)

                                        {

                                            var13 = par2Random.nextInt(3);

                                            this.setBlockAndMetadata(par1World, par3 + Direction.offsetX[Direction.footInvisibleFaceRemap[var12]], par4 + var6 - 5 + var11, par5 + Direction.offsetZ[Direction.footInvisibleFaceRemap[var12]], Block.cocoaPlant.blockID, var13 << 2 | var12);

                                        }

                                    }

                                }

                            }

                        }

     

                        return true;

                    }

                    else

                    {

                        return false;

                    }

                }

            }

            else

            {

                return false;

            }

        }

     

        /**

        * Grows vines downward from the given block for a given length. Args: World, x, starty, z, vine-length

        */

        private void growVines(World par1World, int par2, int par3, int par4, int par5)

        {

            this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);

            int var6 = 4;

     

            while (true)

            {

                --par3;

     

                if (par1World.getBlockId(par2, par3, par4) != 0 || var6 <= 0)

                {

                    return;

                }

     

                this.setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);

                --var6;

            }

        }

    }

     

     

     

×
×
  • Create New...

Important Information

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