From 455d36e788682c85bc94445bf57b68b527550ba1 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sat, 16 Nov 2013 11:01:11 +1100 Subject: [PATCH] Hopefully switched tree leaves to separate IDS --- common/biomesoplenty/api/Blocks.java | 2 + .../biomesoplenty/blocks/BlockBOPLeaves.java | 684 +++++++++--------- .../configuration/BOPBlocks.java | 4 + 3 files changed, 350 insertions(+), 340 deletions(-) diff --git a/common/biomesoplenty/api/Blocks.java b/common/biomesoplenty/api/Blocks.java index 58500e0a8..4ac60e99f 100644 --- a/common/biomesoplenty/api/Blocks.java +++ b/common/biomesoplenty/api/Blocks.java @@ -70,6 +70,8 @@ public class Blocks public static Optional coral = Optional.absent(); public static Optional leaves1 = Optional.absent(); public static Optional leaves2 = Optional.absent(); + public static Optional leaves3 = Optional.absent(); + public static Optional leaves4 = Optional.absent(); public static Optional leavesColorized = Optional.absent(); public static Optional leavesFruit = Optional.absent(); public static Optional leavesFruit2 = Optional.absent(); diff --git a/common/biomesoplenty/blocks/BlockBOPLeaves.java b/common/biomesoplenty/blocks/BlockBOPLeaves.java index 557f35642..d9b7a7367 100644 --- a/common/biomesoplenty/blocks/BlockBOPLeaves.java +++ b/common/biomesoplenty/blocks/BlockBOPLeaves.java @@ -24,370 +24,374 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockBOPLeaves extends BlockLeavesBase implements IShearable { - public static enum LeafCategory - { - CAT1, CAT2; - } + public static enum LeafCategory + { + CAT1, CAT2, CAT3, CAT4; + } - //Autumn - Orange = Leaves 1, Origin - White = Leaves 2 - private static final String[] leaves = new String[] {"yellowautumn", "bamboo", "magic", "dark", "dead", "fir", "holy", "orangeautumn", "origin", "pinkcherry", "maple", "whitecherry", "hellbark", "jacaranda"}; + //Yellow Autumn - Dark = Leaves 1, Dead - Orange Autumn = Leaves 2, Origin - White Cherry = Leaves 3, Hellbark - Jacaranda = Leaves 4 + private static final String[] leaves = new String[] {"yellowautumn", "bamboo", "magic", "dark", "dead", "fir", "holy", "orangeautumn", "origin", "pinkcherry", "maple", "whitecherry", "hellbark", "jacaranda"}; - private static final float[] fallingLeavesChance = new float[] {0.1F, 0.008F, 0.016F, 0.008F, 0.0F, 0.008F, 0.016F, 0.1F, 0.008F, 0.1F, 0.008F, 0.1F, 0.008F, 0.008F}; + private static final float[] fallingLeavesChance = new float[] {0.1F, 0.008F, 0.016F, 0.008F, 0.0F, 0.008F, 0.016F, 0.1F, 0.008F, 0.1F, 0.008F, 0.1F, 0.008F, 0.008F}; - private Icon[][] textures; - private final LeafCategory category; - int[] adjacentTreeBlocks; + private Icon[][] textures; + private final LeafCategory category; + int[] adjacentTreeBlocks; - public BlockBOPLeaves(int blockID, LeafCategory cat) - { - super(blockID, Material.leaves, false); - category = cat; - this.setTickRandomly(true); - setHardness(0.2F); - setLightOpacity(1); - setStepSound(Block.soundGrassFootstep); - this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty); - } + public BlockBOPLeaves(int blockID, LeafCategory cat) + { + super(blockID, Material.leaves, false); + category = cat; + this.setTickRandomly(true); + setHardness(0.2F); + setLightOpacity(1); + setStepSound(Block.soundGrassFootstep); + this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty); + } - @Override - public void registerIcons(IconRegister iconRegister) - { - textures = new Icon[3][leaves.length]; - if(Loader.isModLoaded("BetterGrassAndLeavesMod")) - for (int i = 0; i < leaves.length; ++i) - { - textures[0][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_round"); - textures[1][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_fast"); - textures[2][i] = iconRegister.registerIcon("biomesoplenty:better_leaves_" + leaves[i]); - } - else - for (int i = 0; i < leaves.length; ++i) - { - textures[0][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_fancy"); - textures[1][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_fast"); - } - } - - public Icon getIconBetterLeaves(int metadata, float randomIndex) - { - int type = getTypeFromMeta(metadata) + (category.ordinal() * 8); - return textures[2][type >= leaves.length ? 0 : type]; - } - - public Icon getIconFallingLeaves(int metadata) - { - int type = getTypeFromMeta(metadata) + (category.ordinal() * 8); - return textures[1][type >= leaves.length ? 0 : type]; - } - - public float getSpawnChanceFallingLeaves(int metadata) - { - int type = getTypeFromMeta(metadata) + (category.ordinal() * 8); - return fallingLeavesChance[type >= leaves.length ? 0 : type]; - } - - @Override - public Icon getIcon(int side, int metadata) - { - int type = getTypeFromMeta(metadata) + (category.ordinal() * 8); - return textures[(!isOpaqueCube() ? 0 : 1)][type >= leaves.length ? 0 : type]; - } - - @Override - public boolean isOpaqueCube() - { - return Block.leaves.isOpaqueCube(); - } - - @Override - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void getSubBlocks(int blockID, CreativeTabs creativeTabs, List list) { - for (int i = 0; i < 8; ++i) - if (category != LeafCategory.CAT2 || i < 6) { - list.add(new ItemStack(blockID, 1, i)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, int x, int y, int z, Random random) - { - if (world.canLightningStrikeAt(x, y + 1, z) && !world.doesBlockHaveSolidTopSurface(x, y - 1, z) && random.nextInt(15) == 1) - { - double d0 = x + random.nextFloat(); - double d1 = y - 0.05D; - double d2 = z + random.nextFloat(); - world.spawnParticle("dripWater", d0, d1, d2, 0.0D, 0.0D, 0.0D); - } - - super.randomDisplayTick(world, x, y, z, random); - - } - - @Override - public void breakBlock(World world, int x, int y, int z, int par5, int par6) - { - byte radius = 1; - int bounds = radius + 1; - - if (world.checkChunksExist(x - bounds, y - bounds, z - bounds, x + bounds, y + bounds, z + bounds)) { - for (int i = -radius; i <= radius; ++i) { - for (int j = -radius; j <= radius; ++j) { - for (int k = -radius; k <= radius; ++k) - { - int blockID = world.getBlockId(x + i, y + j, z + k); - - if (Block.blocksList[blockID] != null) { - Block.blocksList[blockID].beginLeavesDecay(world, x + i, y + j, z + k); - } - } - } - } - } - } - - @Override - public void updateTick(World world, int x, int y, int z, Random random) - { - if (world.isRemote) - return; - - int meta = world.getBlockMetadata(x, y, z); - - if ((meta & 8) != 0/* && (meta & 4) == 0*/) - { - byte b0 = 4; - int i1 = b0 + 1; - byte b1 = 32; - int j1 = b1 * b1; - int k1 = b1 / 2; - - if (adjacentTreeBlocks == null) - { - adjacentTreeBlocks = new int[b1 * b1 * b1]; - } - - int l1; - - if (world.checkChunksExist(x - i1, y - i1, z - i1, x + i1, y + i1, z + i1)) - { - int i2; - int j2; - int k2; - - for (l1 = -b0; l1 <= b0; ++l1) - { - for (i2 = -b0; i2 <= b0; ++i2) - { - for (j2 = -b0; j2 <= b0; ++j2) - { - k2 = world.getBlockId(x + l1, y + i2, z + j2); - - Block block = Block.blocksList[k2]; - - if (block != null && block.canSustainLeaves(world, x + l1, y + i2, z + j2)) - { - adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = 0; - } - else if (block != null && block.isLeaves(world, x + l1, y + i2, z + j2)) - { - adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = -2; - } - else - { - adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = -1; - } - } - } - } - - for (l1 = 1; l1 <= 4; ++l1) - { - for (i2 = -b0; i2 <= b0; ++i2) - { - for (j2 = -b0; j2 <= b0; ++j2) - { - for (k2 = -b0; k2 <= b0; ++k2) - { - if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1] == l1 - 1) - { - if (adjacentTreeBlocks[(i2 + k1 - 1) * j1 + (j2 + k1) * b1 + k2 + k1] == -2) - { - adjacentTreeBlocks[(i2 + k1 - 1) * j1 + (j2 + k1) * b1 + k2 + k1] = l1; - } - - if (adjacentTreeBlocks[(i2 + k1 + 1) * j1 + (j2 + k1) * b1 + k2 + k1] == -2) - { - adjacentTreeBlocks[(i2 + k1 + 1) * j1 + (j2 + k1) * b1 + k2 + k1] = l1; - } - - if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 - 1) * b1 + k2 + k1] == -2) - { - adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 - 1) * b1 + k2 + k1] = l1; - } - - if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 + 1) * b1 + k2 + k1] == -2) - { - adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 + 1) * b1 + k2 + k1] = l1; - } - - if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + (k2 + k1 - 1)] == -2) - { - adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + (k2 + k1 - 1)] = l1; - } - - if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1 + 1] == -2) - { - adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1 + 1] = l1; - } - } - } - } - } - } - } - - l1 = adjacentTreeBlocks[k1 * j1 + k1 * b1 + k1]; - - if (l1 >= 0) - { - world.setBlockMetadataWithNotify(x, y, z, meta & -9, 4); - } - else - { - this.removeLeaves(world, x, y, z); - } - } - } - - private void removeLeaves(World world, int x, int y, int z) - { - this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - world.setBlockToAir(x, y, z); - } - - @Override - public int getFlammability(IBlockAccess world, int x, int y, int z, int metadata, ForgeDirection face) - { - if (category == LeafCategory.CAT2 && metadata == 4) - return 0; - else - { - super.setBurnProperties(blockID, 30, 60); - return blockFlammability[blockID]; - } - } - - @Override - public int getFireSpreadSpeed(World world, int x, int y, int z, int metadata, ForgeDirection face) - { - if (category == LeafCategory.CAT2 && metadata == 4) - return 0; - else - return blockFireSpreadSpeed[blockID]; - } - - @Override - public boolean isFlammable(IBlockAccess world, int x, int y, int z, int metadata, ForgeDirection face) - { - if (category == LeafCategory.CAT2 && metadata == 4) - return false; - else - return getFlammability(world, x, y, z, metadata, face) > 0; - } - - - @Override - public int idDropped(int par1, Random par2Random, int par3) - { - return Blocks.saplings.get().blockID; - } - - @Override - public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int par7) - { - if (world.isRemote) - return; - - if (world.rand.nextInt(20) == 0) + @Override + public void registerIcons(IconRegister iconRegister) + { + textures = new Icon[3][leaves.length]; + if(Loader.isModLoaded("BetterGrassAndLeavesMod")) + for (int i = 0; i < leaves.length; ++i) { - int var9 = this.idDropped(meta, world.rand, par7); - this.dropBlockAsItem_do(world, x, y, z, new ItemStack(var9, 1, this.damageDropped(meta))); + textures[0][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_round"); + textures[1][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_fast"); + textures[2][i] = iconRegister.registerIcon("biomesoplenty:better_leaves_" + leaves[i]); } + else + for (int i = 0; i < leaves.length; ++i) + { + textures[0][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_fancy"); + textures[1][i] = iconRegister.registerIcon("biomesoplenty:leaves_" + leaves[i] + "_fast"); + } + } - if (((meta & 7) == 0 || (meta & 7) == 4 || (meta & 7) == 7) && (world.rand.nextInt(50) == 0)) { - this.dropBlockAsItem_do(world, x, y, z, new ItemStack(Items.food.get(), 1, 8)); + public Icon getIconBetterLeaves(int metadata, float randomIndex) + { + int type = getTypeFromMeta(metadata) + (category.ordinal() * 4); + return textures[2][type >= leaves.length ? 0 : type]; + } + + public Icon getIconFallingLeaves(int metadata) + { + int type = getTypeFromMeta(metadata) + (category.ordinal() * 4); + return textures[1][type >= leaves.length ? 0 : type]; + } + + public float getSpawnChanceFallingLeaves(int metadata) + { + int type = getTypeFromMeta(metadata) + (category.ordinal() * 4); + return fallingLeavesChance[type >= leaves.length ? 0 : type]; + } + + @Override + public Icon getIcon(int side, int metadata) + { + int type = getTypeFromMeta(metadata) + (category.ordinal() * 4); + return textures[(!isOpaqueCube() ? 0 : 1)][type >= leaves.length ? 0 : type]; + } + + @Override + public boolean isOpaqueCube() + { + return Block.leaves.isOpaqueCube(); + } + + @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void getSubBlocks(int blockID, CreativeTabs creativeTabs, List list) + { + for (int i = 0; i < 4; ++i) + { + if (category != LeafCategory.CAT4 || i < 2) + { + list.add(new ItemStack(blockID, 1, i)); } } + } - @Override - public int damageDropped(int meta) + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World world, int x, int y, int z, Random random) + { + if (world.canLightningStrikeAt(x, y + 1, z) && !world.doesBlockHaveSolidTopSurface(x, y - 1, z) && random.nextInt(15) == 1) { - return (getTypeFromMeta(meta) + category.ordinal() * 8) + 1; + double d0 = x + random.nextFloat(); + double d1 = y - 0.05D; + double d2 = z + random.nextFloat(); + world.spawnParticle("dripWater", d0, d1, d2, 0.0D, 0.0D, 0.0D); } - @Override - public int getDamageValue(World par1World, int par2, int par3, int par4) - { - return getTypeFromMeta(par1World.getBlockMetadata(par2, par3, par4)); - } + super.randomDisplayTick(world, x, y, z, random); - @Override - public int quantityDropped(Random random) - { - return random.nextInt(20) == 0 ? 1 : 0; - } + } - @Override - public boolean isShearable(ItemStack item, World world, int x, int y, int z) - { - return true; - } + @Override + public void breakBlock(World world, int x, int y, int z, int par5, int par6) + { + byte radius = 1; + int bounds = radius + 1; - @Override - public ArrayList onSheared(ItemStack item, World world, int x, int y, int z, int fortune) - { - ArrayList ret = new ArrayList(); - ret.add(new ItemStack(this, 1, getTypeFromMeta(world.getBlockMetadata(x, y, z)))); - return ret; - } + if (world.checkChunksExist(x - bounds, y - bounds, z - bounds, x + bounds, y + bounds, z + bounds)) { + for (int i = -radius; i <= radius; ++i) { + for (int j = -radius; j <= radius; ++j) { + for (int k = -radius; k <= radius; ++k) + { + int blockID = world.getBlockId(x + i, y + j, z + k); - public String getLeafType(int metadata) - { - int type = getTypeFromMeta(metadata) + (category.ordinal() * 8); - return leaves[type >= leaves.length ? 0 : type]; - } - - private static int getTypeFromMeta(int meta) - { - meta = meta & 7; - if (meta < 0 || meta >= leaves.length) { - meta = 0; + if (Block.blocksList[blockID] != null) { + Block.blocksList[blockID].beginLeavesDecay(world, x + i, y + j, z + k); + } + } } - return meta; + } + } + } + + @Override + public void updateTick(World world, int x, int y, int z, Random random) + { + if (world.isRemote) + return; + + int meta = world.getBlockMetadata(x, y, z); + + if ((meta & 4) != 0/* && (meta & 4) == 0*/) + { + byte b0 = 4; + int i1 = b0 + 1; + byte b1 = 32; + int j1 = b1 * b1; + int k1 = b1 / 2; + + if (adjacentTreeBlocks == null) + { + adjacentTreeBlocks = new int[b1 * b1 * b1]; + } + + int l1; + + if (world.checkChunksExist(x - i1, y - i1, z - i1, x + i1, y + i1, z + i1)) + { + int i2; + int j2; + int k2; + + for (l1 = -b0; l1 <= b0; ++l1) + { + for (i2 = -b0; i2 <= b0; ++i2) + { + for (j2 = -b0; j2 <= b0; ++j2) + { + k2 = world.getBlockId(x + l1, y + i2, z + j2); + + Block block = Block.blocksList[k2]; + + if (block != null && block.canSustainLeaves(world, x + l1, y + i2, z + j2)) + { + adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = 0; + } + else if (block != null && block.isLeaves(world, x + l1, y + i2, z + j2)) + { + adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = -2; + } + else + { + adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = -1; + } + } + } + } + + for (l1 = 1; l1 <= 4; ++l1) + { + for (i2 = -b0; i2 <= b0; ++i2) + { + for (j2 = -b0; j2 <= b0; ++j2) + { + for (k2 = -b0; k2 <= b0; ++k2) + { + if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1] == l1 - 1) + { + if (adjacentTreeBlocks[(i2 + k1 - 1) * j1 + (j2 + k1) * b1 + k2 + k1] == -2) + { + adjacentTreeBlocks[(i2 + k1 - 1) * j1 + (j2 + k1) * b1 + k2 + k1] = l1; + } + + if (adjacentTreeBlocks[(i2 + k1 + 1) * j1 + (j2 + k1) * b1 + k2 + k1] == -2) + { + adjacentTreeBlocks[(i2 + k1 + 1) * j1 + (j2 + k1) * b1 + k2 + k1] = l1; + } + + if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 - 1) * b1 + k2 + k1] == -2) + { + adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 - 1) * b1 + k2 + k1] = l1; + } + + if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 + 1) * b1 + k2 + k1] == -2) + { + adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 + 1) * b1 + k2 + k1] = l1; + } + + if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + (k2 + k1 - 1)] == -2) + { + adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + (k2 + k1 - 1)] = l1; + } + + if (adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1 + 1] == -2) + { + adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1 + 1] = l1; + } + } + } + } + } + } + } + + l1 = adjacentTreeBlocks[k1 * j1 + k1 * b1 + k1]; + + if (l1 >= 0) + { + world.setBlockMetadataWithNotify(x, y, z, meta & -9, 4); + } + else + { + this.removeLeaves(world, x, y, z); + } + } + } + + private void removeLeaves(World world, int x, int y, int z) + { + this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + world.setBlockToAir(x, y, z); + } + + @Override + public int getFlammability(IBlockAccess world, int x, int y, int z, int metadata, ForgeDirection face) + { + if (category == LeafCategory.CAT4 && metadata == 0) + return 0; + else + { + super.setBurnProperties(blockID, 30, 60); + return blockFlammability[blockID]; + } + } + + @Override + public int getFireSpreadSpeed(World world, int x, int y, int z, int metadata, ForgeDirection face) + { + if (category == LeafCategory.CAT4 && metadata == 0) + return 0; + else + return blockFireSpreadSpeed[blockID]; + } + + @Override + public boolean isFlammable(IBlockAccess world, int x, int y, int z, int metadata, ForgeDirection face) + { + if (category == LeafCategory.CAT4 && metadata == 0) + return false; + else + return getFlammability(world, x, y, z, metadata, face) > 0; + } + + + @Override + public int idDropped(int par1, Random par2Random, int par3) + { + return Blocks.saplings.get().blockID; + } + + @Override + public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int par7) + { + if (world.isRemote) + return; + + if (world.rand.nextInt(20) == 0) + { + int var9 = this.idDropped(meta, world.rand, par7); + this.dropBlockAsItem_do(world, x, y, z, new ItemStack(var9, 1, this.damageDropped(meta))); } - @SideOnly(Side.CLIENT) - public void setGraphicsLevel(boolean par1) - { - graphicsLevel = par1; + if (((meta & 3) == 0 || (meta & 3) == 4 || (meta & 3) == 7) && (world.rand.nextInt(50) == 0)) { + this.dropBlockAsItem_do(world, x, y, z, new ItemStack(Items.food.get(), 1, 8)); } + } - @Override - public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) - { - return true; - } + @Override + public int damageDropped(int meta) + { + return (getTypeFromMeta(meta) + category.ordinal() * 4) + 1; + } - @Override - public void beginLeavesDecay(World world, int x, int y, int z) - { - world.setBlockMetadataWithNotify(x, y, z, world.getBlockMetadata(x, y, z) | 8, 4); - } + @Override + public int getDamageValue(World par1World, int par2, int par3, int par4) + { + return getTypeFromMeta(par1World.getBlockMetadata(par2, par3, par4)); + } - @Override - public boolean isLeaves(World world, int x, int y, int z) - { - return true; + @Override + public int quantityDropped(Random random) + { + return random.nextInt(20) == 0 ? 1 : 0; + } + + @Override + public boolean isShearable(ItemStack item, World world, int x, int y, int z) + { + return true; + } + + @Override + public ArrayList onSheared(ItemStack item, World world, int x, int y, int z, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, getTypeFromMeta(world.getBlockMetadata(x, y, z)))); + return ret; + } + + public String getLeafType(int metadata) + { + int type = getTypeFromMeta(metadata) + (category.ordinal() * 4); + return leaves[type >= leaves.length ? 0 : type]; + } + + private static int getTypeFromMeta(int meta) + { + meta = meta & 7; + if (meta < 0 || meta >= leaves.length) { + meta = 0; } + return meta; + } + + @SideOnly(Side.CLIENT) + public void setGraphicsLevel(boolean par1) + { + graphicsLevel = par1; + } + + @Override + public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) + { + return true; + } + + @Override + public void beginLeavesDecay(World world, int x, int y, int z) + { + world.setBlockMetadataWithNotify(x, y, z, world.getBlockMetadata(x, y, z) | 8, 4); + } + + @Override + public boolean isLeaves(World world, int x, int y, int z) + { + return true; + } } \ No newline at end of file diff --git a/common/biomesoplenty/configuration/BOPBlocks.java b/common/biomesoplenty/configuration/BOPBlocks.java index 233f3a280..d812540da 100644 --- a/common/biomesoplenty/configuration/BOPBlocks.java +++ b/common/biomesoplenty/configuration/BOPBlocks.java @@ -140,6 +140,8 @@ public class BOPBlocks Blocks.ivy = Optional.of((new BlockIvy(BOPConfigurationIDs.ivyID)).setHardness(0.2F).setStepSound(Block.soundGrassFootstep).setUnlocalizedName("bop.ivy")); Blocks.leaves1 = Optional.of((new BlockBOPLeaves(BOPConfigurationIDs.leaves1ID, LeafCategory.CAT1)).setUnlocalizedName("bop.leaves1")); Blocks.leaves2 = Optional.of((new BlockBOPLeaves(BOPConfigurationIDs.leaves2ID, LeafCategory.CAT2)).setUnlocalizedName("bop.leaves2")); + Blocks.leaves3 = Optional.of((new BlockBOPLeaves(BOPConfigurationIDs.leaves3ID, LeafCategory.CAT3)).setUnlocalizedName("bop.leaves3")); + Blocks.leaves4 = Optional.of((new BlockBOPLeaves(BOPConfigurationIDs.leaves4ID, LeafCategory.CAT4)).setUnlocalizedName("bop.leaves4")); Blocks.foliage = Optional.of((new BlockBOPFoliage(BOPConfigurationIDs.foliageID)).setUnlocalizedName("bop.foliage")); Blocks.ashStone = Optional.of(new BlockBOPGeneric(BOPConfigurationIDs.ashStoneID, Material.rock, BlockType.ASH_STONE)); Blocks.hardIce = Optional.of(new BlockBOPGeneric(BOPConfigurationIDs.hardIceID, Material.rock, BlockType.HARD_ICE)); @@ -229,6 +231,8 @@ public class BOPBlocks registerBlock(Blocks.ivy.get(), ItemBOPIvy.class); registerBlock(Blocks.leaves1.get(), ItemBlockLeaves.class); registerBlock(Blocks.leaves2.get(), ItemBlockLeaves.class); + registerBlock(Blocks.leaves3.get(), ItemBlockLeaves.class); + registerBlock(Blocks.leaves4.get(), ItemBlockLeaves.class); registerBlock(Blocks.foliage.get(), ItemBlockFoliage.class); registerBlock(Blocks.ashStone.get()); registerBlock(Blocks.hardIce.get());