Hopefully switched tree leaves to separate IDS
This commit is contained in:
parent
d3bef87c36
commit
455d36e788
3 changed files with 350 additions and 340 deletions
|
@ -70,6 +70,8 @@ public class Blocks
|
|||
public static Optional<? extends Block> coral = Optional.absent();
|
||||
public static Optional<? extends Block> leaves1 = Optional.absent();
|
||||
public static Optional<? extends Block> leaves2 = Optional.absent();
|
||||
public static Optional<? extends Block> leaves3 = Optional.absent();
|
||||
public static Optional<? extends Block> leaves4 = Optional.absent();
|
||||
public static Optional<? extends Block> leavesColorized = Optional.absent();
|
||||
public static Optional<? extends Block> leavesFruit = Optional.absent();
|
||||
public static Optional<? extends Block> leavesFruit2 = Optional.absent();
|
||||
|
|
|
@ -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<ItemStack> onSheared(ItemStack item, World world, int x, int y, int z, int fortune)
|
||||
{
|
||||
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
|
||||
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<ItemStack> onSheared(ItemStack item, World world, int x, int y, int z, int fortune)
|
||||
{
|
||||
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
|
|
Loading…
Reference in a new issue