Posted June 6, 20187 yr I don't know how the register the generator for generating trees Here is how I registered my ore GameRegistry.registerWorldGenerator(new InfinityWeaponsOreGen(), 0); Here are my classes for the generating part Base Tree Gen Class package com.mrf.infinityweapons.worldgen; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; public abstract class TreeGenBase extends WorldGenerator { public TreeGenBase(boolean notify) { super(notify); } /** * returns whether or not a tree can grow into a block * For example, a tree will not grow into stone */ protected boolean canGrowInto(Block blockType) { Material material = blockType.getDefaultState().getMaterial(); return material == Material.AIR || material == Material.LEAVES || blockType == Blocks.GRASS || blockType == Blocks.DIRT || blockType == Blocks.LOG || blockType == Blocks.LOG2 || blockType == Blocks.SAPLING || blockType == Blocks.VINE; } public void generateSaplings(World worldIn, Random random, BlockPos pos) { } /** * sets dirt at a specific location if it isn't already dirt */ protected void setDirtAt(World worldIn, BlockPos pos) { if (worldIn.getBlockState(pos).getBlock() != Blocks.DIRT) { this.setBlockAndNotifyAdequately(worldIn, pos, Blocks.DIRT.getDefaultState()); } } public boolean isReplaceable(World world, BlockPos pos) { net.minecraft.block.state.IBlockState state = world.getBlockState(pos); return state.getBlock().isAir(state, world, pos) || state.getBlock().isLeaves(state, world, pos) || state.getBlock().isWood(world, pos) || canGrowInto(state.getBlock()); } } Rubber Tree Gen package com.mrf.infinityweapons.worldgen; import java.util.Random; import com.mrf.infinityweapons.blocks.OldRubberTreeLeaves; import com.mrf.infinityweapons.blocks.OldRubberTreeLog; import com.mrf.infinityweapons.init.ModBlocks; import com.mrf.infinityweapons.init.ModLogs; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.IChunkGenerator; import net.minecraftforge.fml.common.IWorldGenerator; public class RubberTreeGen extends TreeGenBase { private static final IBlockState LOG = ModBlocks.RUBBER_TREE_LOG.getDefaultState().withProperty(OldRubberTreeLog.VARIANT, ModLogs.EnumType.RUBBER); private static final IBlockState LEAF = ModBlocks.LEAVES_RUBBER.getDefaultState() .withProperty(OldRubberTreeLeaves.VARIANT, ModLogs.EnumType.RUBBER) .withProperty(OldRubberTreeLeaves.CHECK_DECAY, Boolean.valueOf(false)); private final boolean useExtraRandomHeight; public RubberTreeGen(boolean notify, boolean useExtraRandomHeightIn) { super(notify); this.useExtraRandomHeight = useExtraRandomHeightIn; } @Override public boolean generate(World worldIn, Random rand, BlockPos position) { int i = rand.nextInt(3) + 5; if (this.useExtraRandomHeight) { i += rand.nextInt(7); } boolean flag = true; if (position.getY() >= 1 && position.getY() + i + 1 <= 256) { for (int j = position.getY(); j <= position.getY() + 1 + i; ++j) { int k = 1; if (j == position.getY()) { k = 0; } if (j >= position.getY() + 1 + i - 2) { k = 2; } BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); for (int l = position.getX() - k; l <= position.getX() + k && flag; ++l) { for (int i1 = position.getZ() - k; i1 <= position.getZ() + k && flag; ++i1) { if (j >= 0 && j < worldIn.getHeight()) { if (!this.isReplaceable(worldIn, blockpos$mutableblockpos.setPos(l, j, i1))) { flag = false; } } else { flag = false; } } } } if (!flag) { return false; } else { BlockPos down = position.down(); IBlockState state = worldIn.getBlockState(down); boolean isSoil = state.getBlock().canSustainPlant(state, worldIn, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling) Blocks.SAPLING); if (isSoil && position.getY() < worldIn.getHeight() - i - 1) { state.getBlock().onPlantGrow(state, worldIn, down, position); for (int i2 = position.getY() - 3 + i; i2 <= position.getY() + i; ++i2) { int k2 = i2 - (position.getY() + i); int l2 = 1 - k2 / 2; for (int i3 = position.getX() - l2; i3 <= position.getX() + l2; ++i3) { int j1 = i3 - position.getX(); for (int k1 = position.getZ() - l2; k1 <= position.getZ() + l2; ++k1) { int l1 = k1 - position.getZ(); if (Math.abs(j1) != l2 || Math.abs(l1) != l2 || rand.nextInt(2) != 0 && k2 != 0) { BlockPos blockpos = new BlockPos(i3, i2, k1); IBlockState state2 = worldIn.getBlockState(blockpos); if (state2.getBlock().isAir(state2, worldIn, blockpos) || state2.getBlock().isAir(state2, worldIn, blockpos)) { this.setBlockAndNotifyAdequately(worldIn, blockpos, LEAF); } } } } } for (int j2 = 0; j2 < i; ++j2) { BlockPos upN = position.up(j2); IBlockState state2 = worldIn.getBlockState(upN); if (state2.getBlock().isAir(state2, worldIn, upN) || state2.getBlock().isLeaves(state2, worldIn, upN)) { this.setBlockAndNotifyAdequately(worldIn, position.up(j2), LOG); } } return true; } else { return false; } } } else { return false; } } }
June 6, 20187 yr this Is the tutorial I used for tree gen. Hope it helps Edited June 7, 20187 yr by Blue_Atlas
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.