diff --git a/src/main/java/forestry/apiculture/gadgets/StructureLogicAlveary.java b/src/main/java/forestry/apiculture/gadgets/StructureLogicAlveary.java index b435e0308..fbe2fad36 100755 --- a/src/main/java/forestry/apiculture/gadgets/StructureLogicAlveary.java +++ b/src/main/java/forestry/apiculture/gadgets/StructureLogicAlveary.java @@ -37,8 +37,7 @@ public class StructureLogicAlveary extends StructureLogic { slabBlocks.add(ForestryBlock.slabs1.block()); slabBlocks.add(ForestryBlock.slabs2.block()); slabBlocks.add(ForestryBlock.slabs3.block()); - if (ForestryBlock.slabs4.block() != null) - slabBlocks.add(ForestryBlock.slabs4.block()); + slabBlocks.add(ForestryBlock.slabs4.block()); } public StructureLogicAlveary(ITileStructure structure) { diff --git a/src/main/java/forestry/arboriculture/VillageHandlerArboriculture.java b/src/main/java/forestry/arboriculture/VillageHandlerArboriculture.java index 14a2e7f79..bd8340ca7 100755 --- a/src/main/java/forestry/arboriculture/VillageHandlerArboriculture.java +++ b/src/main/java/forestry/arboriculture/VillageHandlerArboriculture.java @@ -38,10 +38,7 @@ public class VillageHandlerArboriculture implements IVillageTradeHandler { WoodType sells = WoodType.VALUES[random.nextInt(WoodType.VALUES.length)]; Block plankBlock; int meta; - if(!sells.hasPlank) { - plankBlock = ForestryBlock.planks1.block(); - meta = 0; - } else if(sells.ordinal() > 15) { + if(sells.ordinal() > 15) { plankBlock = ForestryBlock.planks2.block(); meta = sells.ordinal() - 16; } else { diff --git a/src/main/java/forestry/arboriculture/WoodType.java b/src/main/java/forestry/arboriculture/WoodType.java index 623429af3..e9a60777b 100755 --- a/src/main/java/forestry/arboriculture/WoodType.java +++ b/src/main/java/forestry/arboriculture/WoodType.java @@ -19,24 +19,24 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; public enum WoodType { - LARCH, TEAK, ACACIA, LIME, CHESTNUT, WENGE, BAOBAB, SEQUOIA(4.0f), KAPOK, EBONY, MAHOGANY, BALSA(1.0f), WILLOW, WALNUT, GREENHEART(7.5f), CHERRY, MAHOE, POPLAR, PALM, PAPAYA, PINE( - 3.0f), PLUM, MAPLE, CITRUS, GIGANTEUM(2.0f, false); + LARCH, TEAK, ACACIA, LIME, + CHESTNUT, WENGE, BAOBAB, SEQUOIA(4.0f), + KAPOK, EBONY, MAHOGANY, BALSA(1.0f), + WILLOW, WALNUT, GREENHEART(7.5f), CHERRY, + MAHOE, POPLAR, PALM, PAPAYA, + PINE(3.0f), PLUM, MAPLE, CITRUS, + GIGANTEUM(2.0f), IPE, PADAUK, COCOBOLO, + ZEBRAWOOD; public static final WoodType[] VALUES = values(); private final float hardness; - public final boolean hasPlank; private WoodType() { - this(2.0f, true); + this(2.0f); } private WoodType(float hardness) { - this(hardness, true); - } - - private WoodType(float hardness, boolean hasPlank) { this.hardness = hardness; - this.hasPlank = hasPlank; } @SideOnly(Side.CLIENT) @@ -49,10 +49,7 @@ public enum WoodType { WoodType woodType = VALUES[i]; String woodName = woodType.toString().toLowerCase(Locale.ENGLISH); - if (woodType.hasPlank) - icons[0][i] = TextureManager.getInstance().registerTex(register, "wood/planks." + woodName); - else - icons[0][i] = null; + icons[0][i] = TextureManager.getInstance().registerTex(register, "wood/planks." + woodName); icons[1][i] = TextureManager.getInstance().registerTex(register, "wood/bark." + woodName); icons[2][i] = TextureManager.getInstance().registerTex(register, "wood/heart." + woodName); } diff --git a/src/main/java/forestry/arboriculture/gadgets/BlockArbStairs.java b/src/main/java/forestry/arboriculture/gadgets/BlockArbStairs.java index 6c2c5b554..5c9f4ef13 100755 --- a/src/main/java/forestry/arboriculture/gadgets/BlockArbStairs.java +++ b/src/main/java/forestry/arboriculture/gadgets/BlockArbStairs.java @@ -53,8 +53,6 @@ public class BlockArbStairs extends BlockStairs { @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list) { for (WoodType type : WoodType.VALUES) { - if(!type.hasPlank) - continue; ItemStack stack = new ItemStack(item, 1, 0); NBTTagCompound compound = new NBTTagCompound(); type.saveToCompound(compound); diff --git a/src/main/java/forestry/arboriculture/gadgets/BlockSlab.java b/src/main/java/forestry/arboriculture/gadgets/BlockSlab.java index f4c865c31..8126b60d4 100755 --- a/src/main/java/forestry/arboriculture/gadgets/BlockSlab.java +++ b/src/main/java/forestry/arboriculture/gadgets/BlockSlab.java @@ -35,7 +35,7 @@ import forestry.arboriculture.WoodType; public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyped { public static enum SlabCat { - CAT0, CAT1, CAT2 + CAT0, CAT1, CAT2, CAT3 } public static final int slabsPerCat = 8; diff --git a/src/main/java/forestry/arboriculture/genetics/TreeTemplates.java b/src/main/java/forestry/arboriculture/genetics/TreeTemplates.java index 13e0d11ad..bfe6e893e 100755 --- a/src/main/java/forestry/arboriculture/genetics/TreeTemplates.java +++ b/src/main/java/forestry/arboriculture/genetics/TreeTemplates.java @@ -64,6 +64,11 @@ public class TreeTemplates { public static IMutation papayaA; public static IMutation dateA; + public static IMutation ipeA; + public static TreeMutation padaukA; + public static TreeMutation cocoboloA; + public static TreeMutation zebrawoodA; + /* TEMPLATES */ public static IAllele[] getDefaultTemplate() { IAllele[] alleles = new IAllele[EnumTreeChromosome.values().length]; @@ -376,6 +381,38 @@ public class TreeTemplates { return alleles; } + public static IAllele[] getIpeTemplate() { + IAllele[] alleles = getDefaultTemplate(); + alleles[EnumTreeChromosome.SPECIES.ordinal()] = Allele.treeIpe; + alleles[EnumTreeChromosome.SAPPINESS.ordinal()] = Allele.sappinessLower; + alleles[EnumTreeChromosome.HEIGHT.ordinal()] = Allele.heightLarge; + alleles[EnumTreeChromosome.GIRTH.ordinal()] = Allele.int2; + return alleles; + } + + public static IAllele[] getPadaukTemplate() { + IAllele[] alleles = getDefaultTemplate(); + alleles[EnumTreeChromosome.SPECIES.ordinal()] = Allele.treePadauk; + alleles[EnumTreeChromosome.SAPPINESS.ordinal()] = Allele.sappinessLower; + alleles[EnumTreeChromosome.HEIGHT.ordinal()] = Allele.heightLarge; + return alleles; + } + + public static IAllele[] getCocoboloTemplate() { + IAllele[] alleles = getDefaultTemplate(); + alleles[EnumTreeChromosome.SPECIES.ordinal()] = Allele.treeCocobolo; + alleles[EnumTreeChromosome.HEIGHT.ordinal()] = Allele.heightLargest; + return alleles; + } + + public static IAllele[] getZebrawoodTemplate() { + IAllele[] alleles = getDefaultTemplate(); + alleles[EnumTreeChromosome.SPECIES.ordinal()] = Allele.treeZebrawood; + alleles[EnumTreeChromosome.HEIGHT.ordinal()] = Allele.heightLarge; + alleles[EnumTreeChromosome.GIRTH.ordinal()] = Allele.int2; + return alleles; + } + // / HELPER FUNCTIONS public static Chromosome[] templateAsChromosomes(IAllele[] template) { diff --git a/src/main/java/forestry/arboriculture/worldgen/WorldGenArboriculture.java b/src/main/java/forestry/arboriculture/worldgen/WorldGenArboriculture.java index e290f424d..0781aa7b3 100755 --- a/src/main/java/forestry/arboriculture/worldgen/WorldGenArboriculture.java +++ b/src/main/java/forestry/arboriculture/worldgen/WorldGenArboriculture.java @@ -160,7 +160,17 @@ public abstract class WorldGenArboriculture extends WorldGenBase { protected final void addWood(int x, int y, int z, EnumReplaceMode replace) { addBlock(x, y, z, wood, replace); } + + protected final void addXWood(int x, int y, int z, EnumReplaceMode replace) { + BlockType woodX = new BlockType(wood.getBlock(), wood.getMeta() + 4); + addBlock(x, y, z, woodX, replace); + } + protected final void addZWood(int x, int y, int z, EnumReplaceMode replace) { + BlockType woodZ = new BlockType(wood.getBlock(), wood.getMeta() + 8); + addBlock(x, y, z, woodZ, replace); + } + protected final void addLeaf(int x, int y, int z, EnumReplaceMode replace) { addBlock(x, y, z, leaf, replace); } diff --git a/src/main/java/forestry/arboriculture/worldgen/WorldGenCocobolo.java b/src/main/java/forestry/arboriculture/worldgen/WorldGenCocobolo.java new file mode 100644 index 000000000..3c92f5fc5 --- /dev/null +++ b/src/main/java/forestry/arboriculture/worldgen/WorldGenCocobolo.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.arboriculture.worldgen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenCocobolo extends WorldGenTree { + + public WorldGenCocobolo(ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + generateTreeTrunk(height, girth); + + int leafSpawn = height; + + addLeaf(0, leafSpawn--, 0, EnumReplaceMode.NONE); + generateAdjustedCylinder(leafSpawn--, 1, 1, leaf); + + if (height > 10) + generateAdjustedCylinder(leafSpawn--, 2, 1, leaf); + generateAdjustedCylinder(leafSpawn, 0, 1, leaf); + + leafSpawn--; + + while (leafSpawn > 4) { + int offset = 1; + if (leafSpawn % 2 == 0) { + if (rand.nextBoolean()) + offset = -1; + generateAdjustedCylinder(leafSpawn, offset, 2, 1, leaf, EnumReplaceMode.NONE); + } else { + if (rand.nextBoolean()) + offset = -1; + generateAdjustedCylinder(leafSpawn, offset, 0, 1, leaf, EnumReplaceMode.NONE ); + } + leafSpawn--; + } + + } + + @Override + public void preGenerate() { + height = determineHeight(8, 8); + girth = determineGirth(tree.getGirth(world, startX, startY, startZ)); + } +} diff --git a/src/main/java/forestry/arboriculture/worldgen/WorldGenCrescentia.java b/src/main/java/forestry/arboriculture/worldgen/WorldGenCrescentia.java new file mode 100644 index 000000000..4743541a9 --- /dev/null +++ b/src/main/java/forestry/arboriculture/worldgen/WorldGenCrescentia.java @@ -0,0 +1,97 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.arboriculture.worldgen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenCrescentia extends WorldGenTree { + + public WorldGenCrescentia(ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + generateTreeTrunk(height, girth); + + int leafSpawn = height + 1; + + generateAdjustedCylinder(leafSpawn--, 0, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 0.5f, 1, leaf); + + generateAdjustedCylinder(leafSpawn--, 1.9f, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 1.9f, 1, leaf); + if (rand.nextBoolean()) + generateAdjustedCylinder(leafSpawn--, 1.9f, 1, leaf); + + generateAdjustedCylinder(leafSpawn--, 0.5f, 1, leaf); + + } + + @Override + public void generateTreeTrunk(int height, int girth) { + + int offset = (girth - 1) / 2; + + + //Trunk generation + for (int x = 0; x < girth; x++) //offsets trunk in x direction + for (int z = 0; z < girth; z++) //offsets trunk in z direction + if (x==0 || x==girth-1) { //checks for edges in x direction + if (z==0 || z==girth-1) {//checks for corners + if (x==0 && z==0) {}//xz corner + if (x==girth-1 && z==0) {}//x-1z corner + if (x==0 && z==girth-1) {}//xz-1 corner + if (x==girth-1 && z==0) {} //x-1z-1 corner + } else { //these are the z only edges + if (x==0) { + + } else if (x==girth-1) { + + } + } + } else if (z==0 || z==girth-1) { //these are the x only edges + if (z==0) { + + } else if (z==girth-1) { + + } + } else { //these are center pieces + for (int i = 0; i < height; i++) { //grows trunk straight up in y direction to the correct height + addWood(x - offset, i, z - offset, EnumReplaceMode.ALL); + } + } + + //End trunk generation + + //Spawn pods + for (int y = minPodHeight; y < height; y++) + for (int x = 0; x < girth; x++) + for (int z = 0; z < girth; z++) { + + if ((x > 0 && x < girth) && (z > 0 && z < girth)) + continue; + + tree.trySpawnFruitBlock(world, startX + x + 1, startY + y, startZ + z); + tree.trySpawnFruitBlock(world, startX + x - 1, startY + y, startZ + z); + tree.trySpawnFruitBlock(world, startX + x, startY + y, startZ + z + 1); + tree.trySpawnFruitBlock(world, startX + x, startY + y, startZ + z - 1); + } + + + } + + @Override + public void preGenerate() { + height = determineHeight(6, 3); + girth = determineGirth(tree.getGirth(world, startX, startY, startZ)); + } +} diff --git a/src/main/java/forestry/arboriculture/worldgen/WorldGenIpe.java b/src/main/java/forestry/arboriculture/worldgen/WorldGenIpe.java new file mode 100644 index 000000000..e461240d6 --- /dev/null +++ b/src/main/java/forestry/arboriculture/worldgen/WorldGenIpe.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.arboriculture.worldgen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenIpe extends WorldGenTree { + + public WorldGenIpe(ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + generateTreeTrunk(height, girth); + + int leafSpawn = height + 1; + float adjustedGirth = girth*.65f; + + generateAdjustedCylinder(leafSpawn--, 0, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 0.2f*adjustedGirth, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 0.2f*adjustedGirth, 1, leaf); + + while (leafSpawn > 7) { + generateAdjustedCylinder(leafSpawn, (float) (1.25f*(adjustedGirth * .65)), 1, leaf); + leafSpawn--; + } + + generateAdjustedCylinder(leafSpawn--, 1.6f*adjustedGirth, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 1.6f*adjustedGirth, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 1.6f*adjustedGirth, 1, leaf); + + if (rand.nextBoolean()) + generateAdjustedCylinder(leafSpawn--, 1.25f*adjustedGirth, 1, leaf); + + generateAdjustedCylinder(leafSpawn--, 1f*adjustedGirth, 1, leaf); + + } + + @Override + public void preGenerate() { + height = determineHeight(8, 8); + girth = determineGirth(tree.getGirth(world, startX, startY, startZ)); + } +} diff --git a/src/main/java/forestry/arboriculture/worldgen/WorldGenPadauk.java b/src/main/java/forestry/arboriculture/worldgen/WorldGenPadauk.java new file mode 100644 index 000000000..c5463d9ee --- /dev/null +++ b/src/main/java/forestry/arboriculture/worldgen/WorldGenPadauk.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.arboriculture.worldgen; + +import java.util.Random; + +import forestry.api.world.ITreeGenData; + +public class WorldGenPadauk extends WorldGenTree { + + public WorldGenPadauk(ITreeGenData tree) { + super(tree); + + minHeight = 7; + } + + @Override + public void generate() { + generateTreeTrunk(height, girth); + + + int leafSpawn = height + 1; + + generateAdjustedCylinder(leafSpawn--, 0, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 1.5f, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 3f, 1, leaf); + + int count = 0; + int max = 3; + int min = 1; + int canopyHeight = rand.nextInt(max - min + 1) + min; + + while (leafSpawn > 3 && count < canopyHeight) { + generateAdjustedCylinder(leafSpawn--, 4.5f, 1, leaf); + count++; + //Random Trunk Branches + for (int i = 0; i < girth*4; i++) { + if (rand.nextBoolean()){ + + int[] offset = {-1, 1}; + int offsetValue = (offset[new Random().nextInt(offset.length)]); + int maxBranchLength = 3; + int branchLength = new Random().nextInt(maxBranchLength+1); + char[] direction = {'z', 'x'}; + char directionValue = (direction[new Random().nextInt(direction.length)]); + int branchSpawn = leafSpawn; + + for (int j = 1; j < branchLength+1; j++) { + if (j == branchLength && rand.nextBoolean()) { //Just adding a bit of variation to the ends for character + branchSpawn += 1; + } + if (directionValue == 'z') { + addZWood(0, branchSpawn, j*offsetValue, EnumReplaceMode.ALL); + } else if (directionValue == 'x'){ + addXWood(j*offsetValue, branchSpawn, 0, EnumReplaceMode.ALL); + } + } + + } + } + } + } + + @Override + public void preGenerate() { + height = determineHeight(6, 6); + girth = determineGirth(tree.getGirth(world, startX, startY, startZ)); + } +} diff --git a/src/main/java/forestry/arboriculture/worldgen/WorldGenZebrawood.java b/src/main/java/forestry/arboriculture/worldgen/WorldGenZebrawood.java new file mode 100644 index 000000000..259039f1c --- /dev/null +++ b/src/main/java/forestry/arboriculture/worldgen/WorldGenZebrawood.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.arboriculture.worldgen; + +import forestry.api.world.ITreeGenData; + +public class WorldGenZebrawood extends WorldGenTree { + + public WorldGenZebrawood(ITreeGenData tree) { + super(tree); + } + + @Override + public void generate() { + + generateTreeTrunk(height, girth); + + int leafSpawn = height + 1; + + generateAdjustedCylinder(leafSpawn--, 0, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 0.5f, 1, leaf); + + generateAdjustedCylinder(leafSpawn--, 1.9f, 1, leaf); + + while (leafSpawn > height - 4) + generateAdjustedCylinder(leafSpawn--, 2.5f, 1, leaf); + generateAdjustedCylinder(leafSpawn--, 1.9f, 1, leaf); + + // Add some smaller twigs below for flavour + for (int times = 0; times < height / 4; times++) { + int h = 10 + rand.nextInt(Math.max(1, height - 10)); + if (rand.nextBoolean() && h < height / 2) + h = height / 2 + rand.nextInt(height / 2); + int x_off = -1 + rand.nextInt(3); + int y_off = -1 + rand.nextInt(3); + generateSphere(new Vector(x_off, h, y_off), 1 + rand.nextInt(1), leaf, EnumReplaceMode.NONE); + } + + } + + @Override + public void preGenerate() { + height = determineHeight(8, 8); + girth = determineGirth(tree.getGirth(world, startX, startY, startZ)); + } +} diff --git a/src/main/java/forestry/core/genetics/Allele.java b/src/main/java/forestry/core/genetics/Allele.java index f87886311..660a59dc2 100755 --- a/src/main/java/forestry/core/genetics/Allele.java +++ b/src/main/java/forestry/core/genetics/Allele.java @@ -168,6 +168,11 @@ public class Allele implements IAllele { public static AlleleSpecies treeMaple; + public static AlleleSpecies treeIpe; + public static AlleleSpecies treePadauk; + public static AlleleSpecies treeCocobolo; + public static AlleleSpecies treeZebrawood; + /// BUTTERFLIES // SPECIES // Moths public static AlleleSpecies mothBrimstone; diff --git a/src/main/java/forestry/core/worldgen/BlockType.java b/src/main/java/forestry/core/worldgen/BlockType.java index 222d65467..5eb2a6327 100755 --- a/src/main/java/forestry/core/worldgen/BlockType.java +++ b/src/main/java/forestry/core/worldgen/BlockType.java @@ -36,4 +36,12 @@ public class BlockType { if (world.getTileEntity(x, y, z) != null) world.removeTileEntity(x, y, z); } + + public int getMeta() { + return this.meta; + } + + public Block getBlock() { + return this.block; + } } diff --git a/src/main/java/forestry/plugins/PluginArboriculture.java b/src/main/java/forestry/plugins/PluginArboriculture.java index d8bead8d5..f84ababe2 100644 --- a/src/main/java/forestry/plugins/PluginArboriculture.java +++ b/src/main/java/forestry/plugins/PluginArboriculture.java @@ -101,11 +101,13 @@ import forestry.arboriculture.worldgen.WorldGenBaobab; import forestry.arboriculture.worldgen.WorldGenBirch; import forestry.arboriculture.worldgen.WorldGenCherry; import forestry.arboriculture.worldgen.WorldGenChestnut; +import forestry.arboriculture.worldgen.WorldGenCocobolo; import forestry.arboriculture.worldgen.WorldGenDarkOak; import forestry.arboriculture.worldgen.WorldGenDate; import forestry.arboriculture.worldgen.WorldGenEbony; import forestry.arboriculture.worldgen.WorldGenGiganteum; import forestry.arboriculture.worldgen.WorldGenGreenheart; +import forestry.arboriculture.worldgen.WorldGenIpe; import forestry.arboriculture.worldgen.WorldGenJungle; import forestry.arboriculture.worldgen.WorldGenKapok; import forestry.arboriculture.worldgen.WorldGenLarch; @@ -115,6 +117,7 @@ import forestry.arboriculture.worldgen.WorldGenMahoe; import forestry.arboriculture.worldgen.WorldGenMahogany; import forestry.arboriculture.worldgen.WorldGenMaple; import forestry.arboriculture.worldgen.WorldGenOak; +import forestry.arboriculture.worldgen.WorldGenPadauk; import forestry.arboriculture.worldgen.WorldGenPapaya; import forestry.arboriculture.worldgen.WorldGenPine; import forestry.arboriculture.worldgen.WorldGenPlum; @@ -125,6 +128,7 @@ import forestry.arboriculture.worldgen.WorldGenTeak; import forestry.arboriculture.worldgen.WorldGenWalnut; import forestry.arboriculture.worldgen.WorldGenWenge; import forestry.arboriculture.worldgen.WorldGenWillow; +import forestry.arboriculture.worldgen.WorldGenZebrawood; import forestry.core.GameMode; import forestry.core.config.Defaults; import forestry.core.config.ForestryBlock; @@ -161,7 +165,8 @@ public class PluginArboriculture extends ForestryPlugin { ForestryBlock.log4, ForestryBlock.log5, ForestryBlock.log6, - ForestryBlock.log7); + ForestryBlock.log7, + ForestryBlock.log8); public static final EnumSet fireproofLogs = EnumSet.of( ForestryBlock.fireproofLog1, ForestryBlock.fireproofLog2, @@ -169,7 +174,8 @@ public class PluginArboriculture extends ForestryPlugin { ForestryBlock.fireproofLog4, ForestryBlock.fireproofLog5, ForestryBlock.fireproofLog6, - ForestryBlock.fireproofLog7); + ForestryBlock.fireproofLog7, + ForestryBlock.fireproofLog8); private static final EnumSet planks = EnumSet.of( ForestryBlock.planks1, ForestryBlock.planks2); @@ -179,7 +185,8 @@ public class PluginArboriculture extends ForestryPlugin { private static final EnumSet slabs = EnumSet.of( ForestryBlock.slabs1, ForestryBlock.slabs2, - ForestryBlock.slabs3); + ForestryBlock.slabs3, + ForestryBlock.slabs4); private static final EnumSet fences = EnumSet.of( ForestryBlock.fences1, ForestryBlock.fences2); @@ -195,6 +202,7 @@ public class PluginArboriculture extends ForestryPlugin { ForestryBlock.log5.registerBlock(new BlockLog(LogCat.CAT4), ItemWoodBlock.class, "log5"); ForestryBlock.log6.registerBlock(new BlockLog(LogCat.CAT5), ItemWoodBlock.class, "log6"); ForestryBlock.log7.registerBlock(new BlockLog(LogCat.CAT6), ItemWoodBlock.class, "log7"); + ForestryBlock.log8.registerBlock(new BlockLog(LogCat.CAT7), ItemWoodBlock.class, "log8"); for (ForestryBlock log : logs) { log.block().setHarvestLevel("axe", 0); @@ -208,6 +216,7 @@ public class PluginArboriculture extends ForestryPlugin { ForestryBlock.fireproofLog5.registerBlock(new BlockFireproofLog(LogCat.CAT4), ItemWoodBlock.class, "fireproofLog5"); ForestryBlock.fireproofLog6.registerBlock(new BlockFireproofLog(LogCat.CAT5), ItemWoodBlock.class, "fireproofLog6"); ForestryBlock.fireproofLog7.registerBlock(new BlockFireproofLog(LogCat.CAT6), ItemWoodBlock.class, "fireproofLog7"); + ForestryBlock.fireproofLog8.registerBlock(new BlockFireproofLog(LogCat.CAT7), ItemWoodBlock.class, "fireproofLog8"); for (ForestryBlock fireproofLog : fireproofLogs) { fireproofLog.block().setHarvestLevel("axe", 0); @@ -233,6 +242,7 @@ public class PluginArboriculture extends ForestryPlugin { ForestryBlock.slabs1.registerBlock(new BlockSlab(SlabCat.CAT0), ItemWoodBlock.class, "slabs1"); ForestryBlock.slabs2.registerBlock(new BlockSlab(SlabCat.CAT1), ItemWoodBlock.class, "slabs2"); ForestryBlock.slabs3.registerBlock(new BlockSlab(SlabCat.CAT2), ItemWoodBlock.class, "slabs3"); + ForestryBlock.slabs4.registerBlock(new BlockSlab(SlabCat.CAT3), ItemWoodBlock.class, "slabs4"); for (ForestryBlock plank : slabs) { plank.block().setHarvestLevel("axe", 0); @@ -394,6 +404,10 @@ public class PluginArboriculture extends ForestryPlugin { Proxies.common.addShapelessRecipe(ForestryBlock.planks2.getItemStack(4, i), ForestryBlock.log5.getItemStack(1, i)); for (int i = 0; i < 4; i++) Proxies.common.addShapelessRecipe(ForestryBlock.planks2.getItemStack(4, 4 + i), ForestryBlock.log6.getItemStack(1, i)); + for (int i = 0; i < 4; i++) + Proxies.common.addShapelessRecipe(ForestryBlock.planks2.getItemStack(4, 8 + i), ForestryBlock.log7.getItemStack(1, i)); + for (int i = 0; i < 1; i++) + Proxies.common.addShapelessRecipe(ForestryBlock.planks2.getItemStack(4, 12 + i), ForestryBlock.log8.getItemStack(1, i)); // Fabricator recipes if (PluginManager.Module.FACTORY.isEnabled() && PluginManager.Module.APICULTURE.isEnabled()) { @@ -403,11 +417,8 @@ public class PluginArboriculture extends ForestryPlugin { BlockLog blockLog = (BlockLog) forestryBlock.block(); ForestryBlock fireproofLog = BlockFireproofLog.getFireproofLog(blockLog); - if (forestryBlock == ForestryBlock.log8) - continue; - for (int i = 0; i < 4; i++) { - if (forestryBlock == ForestryBlock.log7 && i > 0) + if (forestryBlock == ForestryBlock.log8 && i > 0) break; ItemStack logStack = forestryBlock.getItemStack(1, i); @@ -435,7 +446,7 @@ public class PluginArboriculture extends ForestryPlugin { 'X', plankStack}); } plank = ForestryBlock.planks2; - for (int i = 0; i < 8; i++) { + for (int i = 0; i < 12; i++) { ForestryBlock fireproofPlank = BlockFireproofPlanks.getFireproofPlanks((BlockPlanks)plank.block()); ItemStack plankStack = plank.getItemStack(1, i); ItemStack fireproofPlankStack = fireproofPlank.getItemStack(5, i); @@ -461,14 +472,25 @@ public class PluginArboriculture extends ForestryPlugin { Proxies.common.addShapelessRecipe(ForestryBlock.fireproofPlanks2.getItemStack(4, i), ForestryBlock.fireproofLog5.getItemStack(1, i)); for (int i = 0; i < 4; i++) Proxies.common.addShapelessRecipe(ForestryBlock.fireproofPlanks2.getItemStack(4, 4 + i), ForestryBlock.fireproofLog6.getItemStack(1, i)); + for (int i = 0; i < 4; i++) + Proxies.common.addShapelessRecipe(ForestryBlock.fireproofPlanks2.getItemStack(4, 8 + i), ForestryBlock.fireproofLog7.getItemStack(1, i)); + for (int i = 0; i < 1; i++) + Proxies.common.addShapelessRecipe(ForestryBlock.fireproofPlanks2.getItemStack(4, 12 + i), ForestryBlock.fireproofLog8.getItemStack(1, i)); // Slab recipes - for (int i = 0; i < 8; i++) - Proxies.common.addPriorityRecipe(ForestryBlock.slabs1.getItemStack(6, i), "###", '#', ForestryBlock.planks1.getItemStack(1, i)); - for (int i = 0; i < 8; i++) - Proxies.common.addPriorityRecipe(ForestryBlock.slabs2.getItemStack(6, i), "###", '#', ForestryBlock.planks1.getItemStack(1, 8 + i)); - for (int i = 0; i < 8; i++) - Proxies.common.addPriorityRecipe(ForestryBlock.slabs3.getItemStack(6, i), "###", '#', ForestryBlock.planks2.getItemStack(1, i)); + for (WoodType woodType : WoodType.values()) { + int i = woodType.ordinal(); + if (i < 8) + Proxies.common.addPriorityRecipe(ForestryBlock.slabs1.getItemStack(6, i % 8), "###", '#', ForestryBlock.planks1.getItemStack(1, i % 16)); + else if (i < 16) + Proxies.common.addPriorityRecipe(ForestryBlock.slabs2.getItemStack(6, i % 8), "###", '#', ForestryBlock.planks1.getItemStack(1, i % 16)); + else if (i < 24) + Proxies.common.addPriorityRecipe(ForestryBlock.slabs3.getItemStack(6, i % 8), "###", '#', ForestryBlock.planks2.getItemStack(1, i % 16)); + else if (i < 32) + Proxies.common.addPriorityRecipe(ForestryBlock.slabs4.getItemStack(6, i % 8), "###", '#', ForestryBlock.planks2.getItemStack(1, i % 16)); + else + throw new RuntimeException("Wood type has no slabs defined"); + } // Fence recipes for (WoodType woodType : WoodType.values()) { @@ -629,6 +651,9 @@ public class PluginArboriculture extends ForestryPlugin { IClassification lamiaceae = AlleleManager.alleleRegistry.createAndRegisterClassification( EnumClassLevel.FAMILY, "lamiaceae", "Lamiaceae"); lamiales.addMemberGroup(lamiaceae); + IClassification bignoniaceae = AlleleManager.alleleRegistry.createAndRegisterClassification( + EnumClassLevel.FAMILY, "bignoniaceae", "Bignoniaceae"); + lamiales.addMemberGroup(bignoniaceae); IClassification ebenaceae = AlleleManager.alleleRegistry.createAndRegisterClassification( EnumClassLevel.FAMILY, "ebenaceae", "Ebenaceae"); @@ -656,7 +681,11 @@ public class PluginArboriculture extends ForestryPlugin { IClassification sapindaceae = AlleleManager.alleleRegistry.createAndRegisterClassification( EnumClassLevel.FAMILY, "sapindaceae", "Sapindaceae"); sapindales.addMemberGroup(sapindaceae); - + IClassification anacardiaceae = AlleleManager.alleleRegistry.createAndRegisterClassification( + EnumClassLevel.FAMILY, "anacardiaceae", "Anacardiaceae"); + sapindales.addMemberGroup(anacardiaceae); + + IClassification caricaceae = AlleleManager.alleleRegistry.createAndRegisterClassification( EnumClassLevel.FAMILY, "caricaceae", "Caricaceae"); brassicales.addMemberGroup(caricaceae); @@ -705,7 +734,17 @@ public class PluginArboriculture extends ForestryPlugin { fabaceae.addMemberGroup(acacia); IClassification millettia = new BranchTrees("millettia", "Millettia"); fabaceae.addMemberGroup(millettia); - + IClassification dalbergia = new BranchTrees("dalbergia", "Dalbergia"); + fabaceae.addMemberGroup(dalbergia); + IClassification pterocarpus = new BranchTrees("pterocarpus", "Pterocarpus"); + fabaceae.addMemberGroup(pterocarpus); + + IClassification tabebuia = new BranchTrees("tabebuia", "Tabebuia"); + bignoniaceae.addMemberGroup(tabebuia); + + IClassification astronium = new BranchTrees("astronium", "Astronium"); + anacardiaceae.addMemberGroup(astronium); + IClassification ochroma = new BranchTrees("ochroma", "Ochroma"); malvaceae.addMemberGroup(ochroma); @@ -778,6 +817,11 @@ public class PluginArboriculture extends ForestryPlugin { final ItemStack lemonLog = ForestryBlock.log6.getItemStack(1, 3); final ItemStack giganteumLog = ForestryBlock.log7.getItemStack(1, 0); + final ItemStack ipeLog = ForestryBlock.log7.getItemStack(1, 1); + final ItemStack padaukLog = ForestryBlock.log7.getItemStack(1, 2); + final ItemStack cocoboloLog = ForestryBlock.log7.getItemStack(1, 3); + + final ItemStack zebrawoodLog = ForestryBlock.log8.getItemStack(1, 0); // Deciduous Allele.treeOak = new AlleleTreeSpecies("treeOak", false, "appleOak", quercus, "robur", @@ -843,8 +887,11 @@ public class PluginArboriculture extends ForestryPlugin { "tectona", proxy.getFoliageColorBasic(), 0x539d12, WorldGenJungle.class, jungleLog) .addFruitFamily(jungle).setLeafIndices("jungle").setVanillaMap(3); Allele.treeTeak = new AlleleTreeSpecies("treeTeak", true, "teak", tectona, "grandis", - 0xfeff8f, 0xffd98f, WorldGenTeak.class, teakLog).addFruitFamily(jungle).setLeafIndices( - "jungle"); + 0xfeff8f, 0xffd98f, WorldGenTeak.class, teakLog) + .addFruitFamily(jungle).setLeafIndices("jungle"); + Allele.treeIpe = new AlleleTreeSpecies("treeIpe", true, "ipe", tabebuia, "serratifolia", + 0xfdd207, 0xad8f04, WorldGenIpe.class, ipeLog) + .addFruitFamily(jungle).setLeafIndices("jungle").setGirth(2); Allele.treeKapok = new AlleleTreeSpecies("treeKapok", true, "kapok", ceiba, "pentandra", 0x89987b, 0x89aa9e, WorldGenKapok.class, kapokLog).addFruitFamily(jungle) .addFruitFamily(prunes).setLeafIndices("jungle"); @@ -853,6 +900,9 @@ public class PluginArboriculture extends ForestryPlugin { Allele.treeEbony = new AlleleTreeSpecies("treeEbony", true, "myrtleEbony", diospyros, "pentamera", 0xa2d24a, 0xc4d24a, WorldGenEbony.class, ebonyLog).addFruitFamily(jungle) .addFruitFamily(prunes).setGirth(3).setLeafIndices("jungle"); + Allele.treeZebrawood = new AlleleTreeSpecies("treeZebrawood", false, "zebrawood", astronium, + "graveolens", 0xa2d24a, 0xc4d24a, WorldGenZebrawood.class, zebrawoodLog) + .addFruitFamily(nux).setGirth(2).setLeafIndices("jungle"); // Diospyros mespiliformis, the Jackalberry (also known as African Ebony // The Gaub Tree, Malabar ebony, Black-and-white Ebony or Pale Moon @@ -883,8 +933,12 @@ public class PluginArboriculture extends ForestryPlugin { Allele.treeDesertAcacia = new AlleleTreeSpecies("treeAcacia", true, "desertAcacia", acacia, "erioloba", 0x748C1C, 0xb3b302, WorldGenAcacia.class, desertAcaciaLog).addFruitFamily(jungle) .addFruitFamily(nux); + Allele.treePadauk = new AlleleTreeSpecies("treePadauk", true, "padauk", pterocarpus, + "soyauxii", 0xd0df8c, 0x435c32, WorldGenPadauk.class, padaukLog).addFruitFamily(jungle); Allele.treeBalsa = new AlleleTreeSpecies("treeBalsa", true, "balsa", ochroma, "pyramidale", 0x59ac00, 0xfeff8f, WorldGenBalsa.class, balsaLog).addFruitFamily(jungle).addFruitFamily(nux); + Allele.treeCocobolo = new AlleleTreeSpecies("treeCocobolo", false, "cocobolo", dalbergia, "retusa", + 0x6aa17a, 0x487d4c, WorldGenCocobolo.class, cocoboloLog).addFruitFamily(jungle); Allele.treeWenge = new AlleleTreeSpecies("treeWenge", true, "wenge", millettia, "laurentii", 0xada157, 0xad8a57, WorldGenWenge.class, wengeLog).addFruitFamily(jungle) .addFruitFamily(nux).setGirth(2); @@ -965,10 +1019,14 @@ public class PluginArboriculture extends ForestryPlugin { treeInterface.registerTemplate(TreeTemplates.getDesertAcaciaTemplate()); treeInterface.registerTemplate(TreeTemplates.getWengeTemplate()); treeInterface.registerTemplate(TreeTemplates.getBaobabTemplate()); - + treeInterface.registerTemplate(TreeTemplates.getPadaukTemplate()); + treeInterface.registerTemplate(TreeTemplates.getCocoboloTemplate()); + treeInterface.registerTemplate(TreeTemplates.getTeakTemplate()); + treeInterface.registerTemplate(TreeTemplates.getIpeTemplate()); treeInterface.registerTemplate(TreeTemplates.getKapokTemplate()); treeInterface.registerTemplate(TreeTemplates.getEbonyTemplate()); + treeInterface.registerTemplate(TreeTemplates.getZebrawoodTemplate()); treeInterface.registerTemplate(TreeTemplates.getMahoganyTemplate()); treeInterface.registerTemplate(TreeTemplates.getWillowTemplate()); @@ -1019,7 +1077,7 @@ public class PluginArboriculture extends ForestryPlugin { // Decidious TreeTemplates.limeA = new TreeMutation(Allele.treeBirch, Allele.treeOak, TreeTemplates.getLimeTemplate(), 15); - TreeTemplates.mapleA = new TreeMutation(Allele.treeLime, Allele.treeLarch, + TreeTemplates.mapleA = new TreeMutation(Allele.treeSpruce, Allele.treeLarch, TreeTemplates.getMapleTemplate(), 5); // Fructifera @@ -1051,12 +1109,16 @@ public class PluginArboriculture extends ForestryPlugin { TreeTemplates.getSequoiaTemplate(), 5); // Tropical - TreeTemplates.teakA = new TreeMutation(Allele.treeLime, Allele.treeJungle, + TreeTemplates.teakA = new TreeMutation(Allele.treeDarkOak, Allele.treeJungle, TreeTemplates.getTeakTemplate(), 10); + TreeTemplates.ipeA = new TreeMutation(Allele.treeTeak, Allele.treeDarkOak, + TreeTemplates.getIpeTemplate(), 10); TreeTemplates.kapokA = new TreeMutation(Allele.treeJungle, Allele.treeTeak, TreeTemplates.getKapokTemplate(), 10); - TreeTemplates.ebonyA = new TreeMutation(Allele.treeKapok, Allele.treeTeak, + TreeTemplates.ebonyA = new TreeMutation(Allele.treeDarkOak, Allele.treeKapok, TreeTemplates.getEbonyTemplate(), 10); + TreeTemplates.zebrawoodA = new TreeMutation(Allele.treeEbony, Allele.treePoplar, + TreeTemplates.getZebrawoodTemplate(), 5); TreeTemplates.mahoganyA = new TreeMutation(Allele.treeKapok, Allele.treeEbony, TreeTemplates.getMahoganyTemplate(), 10); @@ -1066,15 +1128,19 @@ public class PluginArboriculture extends ForestryPlugin { TreeTemplates.getDateTemplate(), 5); // Malva - TreeTemplates.balsaA = new TreeMutation(Allele.treeTeak, Allele.treeLime, + TreeTemplates.balsaA = new TreeMutation(Allele.treeTeak, Allele.treeAcacia, TreeTemplates.getBalsaTemplate(), 10); TreeTemplates.acaciaA = new TreeMutation(Allele.treeTeak, Allele.treeBalsa, TreeTemplates.getDesertAcaciaTemplate(), 10); - TreeTemplates.wengeA = new TreeMutation(Allele.treeDesertAcacia, Allele.treeBalsa, + TreeTemplates.padaukA = new TreeMutation(Allele.treeAcacia, Allele.treeJungle, + TreeTemplates.getPadaukTemplate(), 10); + TreeTemplates.cocoboloA = new TreeMutation(Allele.treeDesertAcacia, Allele.treeDarkOak, + TreeTemplates.getCocoboloTemplate(), 10); + TreeTemplates.wengeA = new TreeMutation(Allele.treeCocobolo, Allele.treeBalsa, TreeTemplates.getWengeTemplate(), 10); TreeTemplates.baobabA = new TreeMutation(Allele.treeBalsa, Allele.treeWenge, TreeTemplates.getBaobabTemplate(), 10); - TreeTemplates.mahoeA = new TreeMutation(Allele.treeBirch, Allele.treeDesertAcacia, + TreeTemplates.mahoeA = new TreeMutation(Allele.treeBalsa, Allele.treeDesertAcacia, TreeTemplates.getMahoeTemplate(), 5); TreeTemplates.willowA = new TreeMutation(Allele.treeOak, Allele.treeBirch, diff --git a/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeCocobolo.png b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeCocobolo.png new file mode 100644 index 000000000..f017d5b9a Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeCocobolo.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeIpe.png b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeIpe.png new file mode 100644 index 000000000..cf789a332 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeIpe.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treePadauk.png b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treePadauk.png new file mode 100644 index 000000000..4d4bb412f Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treePadauk.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeZebrawood.png b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeZebrawood.png new file mode 100644 index 000000000..5c681b97f Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/germlings/sapling.treeZebrawood.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/bark.cocobolo.png b/src/main/resources/assets/forestry/textures/blocks/wood/bark.cocobolo.png new file mode 100644 index 000000000..23c727615 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/bark.cocobolo.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/bark.ipe.png b/src/main/resources/assets/forestry/textures/blocks/wood/bark.ipe.png new file mode 100644 index 000000000..dcc0e33ae Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/bark.ipe.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/bark.padauk.png b/src/main/resources/assets/forestry/textures/blocks/wood/bark.padauk.png new file mode 100644 index 000000000..e281270db Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/bark.padauk.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/bark.zebrawood.png b/src/main/resources/assets/forestry/textures/blocks/wood/bark.zebrawood.png new file mode 100644 index 000000000..1cad97551 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/bark.zebrawood.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/heart.cocobolo.png b/src/main/resources/assets/forestry/textures/blocks/wood/heart.cocobolo.png new file mode 100644 index 000000000..ff21f9ab3 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/heart.cocobolo.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/heart.ipe.png b/src/main/resources/assets/forestry/textures/blocks/wood/heart.ipe.png new file mode 100644 index 000000000..8672a2d73 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/heart.ipe.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/heart.padauk.png b/src/main/resources/assets/forestry/textures/blocks/wood/heart.padauk.png new file mode 100644 index 000000000..02f58edb6 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/heart.padauk.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/heart.zebrawood.png b/src/main/resources/assets/forestry/textures/blocks/wood/heart.zebrawood.png new file mode 100644 index 000000000..f6a7bef4f Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/heart.zebrawood.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/planks.cocobolo.png b/src/main/resources/assets/forestry/textures/blocks/wood/planks.cocobolo.png new file mode 100644 index 000000000..e6ae46dac Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/planks.cocobolo.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/planks.giganteum.png b/src/main/resources/assets/forestry/textures/blocks/wood/planks.giganteum.png new file mode 100644 index 000000000..9d37011c9 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/planks.giganteum.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/planks.ipe.png b/src/main/resources/assets/forestry/textures/blocks/wood/planks.ipe.png new file mode 100644 index 000000000..5069aac83 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/planks.ipe.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/planks.padauk.png b/src/main/resources/assets/forestry/textures/blocks/wood/planks.padauk.png new file mode 100644 index 000000000..050fa9ad6 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/planks.padauk.png differ diff --git a/src/main/resources/assets/forestry/textures/blocks/wood/planks.zebrawood.png b/src/main/resources/assets/forestry/textures/blocks/wood/planks.zebrawood.png new file mode 100644 index 000000000..dd0b140e5 Binary files /dev/null and b/src/main/resources/assets/forestry/textures/blocks/wood/planks.zebrawood.png differ