package com.jaquadro.minecraft.gardentrees.world.gen;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public abstract class WorldGenStandardOrnTree extends WorldGenOrnamentalTree
{
protected List<String> layers = new ArrayList<String>();
public WorldGenStandardOrnTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
}
@Override
protected boolean canGenerateCanopy (World world, int x, int y, int z, int trunkHeight) {
for (int i = 0; i < layers.size(); i++) {
if (!canGeneratePattern(world, x, y + trunkHeight + i, z, layers.get(i)))
return false;
}
return true;
}
@Override
protected void generateCanopy (World world, int x, int y, int z, int trunkHeight) {
for (int i = 0; i < layers.size(); i++)
generatePattern(world, x, y + trunkHeight + i, z, layers.get(i));
}
public static class SmallOakTree extends WorldGenStandardOrnTree
{
public SmallOakTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3PLUS, LayerType.CORE),
transform(PAT_3X3, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.LEAF),
transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallOakTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallSpruceTree extends WorldGenStandardOrnTree
{
public SmallSpruceTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.LEAF),
transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallSpruceTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallJungleTree extends WorldGenStandardOrnTree
{
public SmallJungleTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
}
@Override
protected void prepare (World world, Random rand, int x, int y, int z, int trunkHeight) {
layers = new ArrayList<String>();
layers.add(transform(PAT_5X5UNBAL, LayerType.CORE, rand.nextInt()));
layers.add(transform(PAT_3X3PLUS, LayerType.CORE));
layers.add(transform(PAT_5X5UNBAL, LayerType.CORE));
layers.add(transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallJungleTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallAcaciaTree extends WorldGenStandardOrnTree
{
public SmallAcaciaTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_1X1, LayerType.CORE),
transform(PAT_3X3, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallAcaciaTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class LargeOakTree extends WorldGenStandardOrnTree
{
public LargeOakTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3PLUS, LayerType.CORE),
transform(PAT_5X5PLUS, LayerType.CORE),
transform(PAT_5X5PLUS2T, LayerType.CORE),
transform(PAT_5X5PLUS, LayerType.CORE),
transform(PAT_5X5PLUS2N, LayerType.CORE),
transform(PAT_3X3, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new LargeOakTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallPalmTree extends WorldGenStandardOrnTree
{
public SmallPalmTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_1X1, LayerType.CORE),
transform(PAT_3X3IPLUS, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallPalmTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallWillowTree extends WorldGenStandardOrnTree
{
public SmallWillowTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3IPLUS, LayerType.CORE),
transform(PAT_3X3, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallWillowTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallPineTree extends WorldGenStandardOrnTree
{
public SmallPineTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
}
@Override
protected void prepare (World world, Random rand, int x, int y, int z, int trunkHeight) {
layers = new ArrayList<String>();
layers.add(transform(PAT_3X3UNBAL, LayerType.CORE, rand.nextInt()));
layers.add(transform(PAT_1X1, LayerType.CORE));
layers.add(transform(PAT_3X3PLUS, LayerType.CORE));
layers.add(transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallPineTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallMahoganyTree extends WorldGenStandardOrnTree
{
public SmallMahoganyTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3PLUS, LayerType.TRUNK),
transform(PAT_3X3, LayerType.LEAF),
transform(PAT_3X3PLUS, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallMahoganyTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallShrubTree extends WorldGenStandardOrnTree
{
public SmallShrubTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3PLUS, LayerType.LEAF),
transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallShrubTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class TallSmallOakTree extends WorldGenStandardOrnTree
{
public TallSmallOakTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_1X1, LayerType.TRUNK),
transform(PAT_3X3PLUS, LayerType.CORE),
transform(PAT_3X3, LayerType.CORE),
transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new TallSmallOakTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class LargeSpruceTree extends WorldGenStandardOrnTree
{
public LargeSpruceTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
}
@Override
protected void prepare (World world, Random rand, int x, int y, int z, int trunkHeight) {
layers = new ArrayList<String>();
layers.add(transform(PAT_1X1, LayerType.CORE));
layers.add(transform(PAT_3X3PLUS, LayerType.CORE));
layers.add(transform(PAT_3X3, LayerType.CORE));
layers.add(transform(PAT_5X5PLUS, LayerType.CORE));
layers.add(transform(PAT_3X3, LayerType.CORE));
layers.add(transform(PAT_3X3PLUS, LayerType.CORE));
layers.add(transform(PAT_3X3PLUS, LayerType.LEAF));
layers.add(transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new LargeSpruceTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallCyprusTree extends WorldGenStandardOrnTree
{
public SmallCyprusTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
layers = Arrays.asList(transform(PAT_3X3PLUS, LayerType.CORE),
transform(PAT_3X3, LayerType.CORE),
transform(PAT_3X3PLUS, LayerType.LEAF),
transform(PAT_3X3PLUS, LayerType.LEAF),
transform(PAT_1X1, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallCyprusTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
public static class SmallCanopyTree extends WorldGenStandardOrnTree
{
public SmallCanopyTree (boolean blockNotify, Block wood, int metaWood, Block leaves, int metaLeaves) {
super(blockNotify, wood, metaWood, leaves, metaLeaves);
}
@Override
protected void prepare (World world, Random rand, int x, int y, int z, int trunkHeight) {
layers = new ArrayList<String>();
layers.add(transform(PAT_3X3OPT, LayerType.TRUNK, rand.nextInt()));
layers.add(transform(PAT_5X5PLUS2, LayerType.CORE));
layers.add(transform(PAT_3X3, LayerType.LEAF));
}
public static final OrnamentalTreeFactory FACTORY = new OrnamentalTreeFactory() {
@Override
public WorldGenOrnamentalTree create (Block woodBlock, int woodMeta, Block leafBlock, int leafMeta) {
return new SmallCanopyTree(false, woodBlock, woodMeta, leafBlock, leafMeta);
}
};
}
}