173 lines
6 KiB
Java
173 lines
6 KiB
Java
package net.minecraft.block;
|
|
|
|
import java.util.Random;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityPlayer;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.crafting.ItemStack;
|
|
import net.minecraft.statistics.StatList;
|
|
import net.minecraft.world.World;
|
|
|
|
public class BlockLeaves extends BlockLeavesBase {
|
|
private int baseIndexInPNG;
|
|
int[] adjacentTreeBlocks;
|
|
|
|
protected BlockLeaves(int var1, int var2) {
|
|
super(var1, var2, Material.leaves, false);
|
|
this.baseIndexInPNG = var2;
|
|
this.setTickOnLoad(true);
|
|
}
|
|
|
|
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
|
|
byte var5 = 1;
|
|
int var6 = var5 + 1;
|
|
if(var1.checkChunksExist(var2 - var6, var3 - var6, var4 - var6, var2 + var6, var3 + var6, var4 + var6)) {
|
|
for(int var7 = -var5; var7 <= var5; ++var7) {
|
|
for(int var8 = -var5; var8 <= var5; ++var8) {
|
|
for(int var9 = -var5; var9 <= var5; ++var9) {
|
|
int var10 = var1.getBlockId(var2 + var7, var3 + var8, var4 + var9);
|
|
if(var10 == Block.leaves.blockID) {
|
|
int var11 = var1.getBlockMetadata(var2 + var7, var3 + var8, var4 + var9);
|
|
var1.setBlockMetadata(var2 + var7, var3 + var8, var4 + var9, var11 | 8);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
|
|
if(!var1.singleplayerWorld) {
|
|
int var6 = var1.getBlockMetadata(var2, var3, var4);
|
|
if((var6 & 8) != 0) {
|
|
byte var7 = 4;
|
|
int var8 = var7 + 1;
|
|
byte var9 = 32;
|
|
int var10 = var9 * var9;
|
|
int var11 = var9 / 2;
|
|
if(this.adjacentTreeBlocks == null) {
|
|
this.adjacentTreeBlocks = new int[var9 * var9 * var9];
|
|
}
|
|
|
|
int var12;
|
|
if(var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) {
|
|
var12 = -var7;
|
|
|
|
label111:
|
|
while(true) {
|
|
int var13;
|
|
int var14;
|
|
int var15;
|
|
if(var12 > var7) {
|
|
var12 = 1;
|
|
|
|
while(true) {
|
|
if(var12 > 4) {
|
|
break label111;
|
|
}
|
|
|
|
for(var13 = -var7; var13 <= var7; ++var13) {
|
|
for(var14 = -var7; var14 <= var7; ++var14) {
|
|
for(var15 = -var7; var15 <= var7; ++var15) {
|
|
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11] == var12 - 1) {
|
|
if(this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) {
|
|
this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12;
|
|
}
|
|
|
|
if(this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) {
|
|
this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12;
|
|
}
|
|
|
|
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] == -2) {
|
|
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] = var12;
|
|
}
|
|
|
|
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] == -2) {
|
|
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] = var12;
|
|
}
|
|
|
|
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] == -2) {
|
|
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] = var12;
|
|
}
|
|
|
|
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] == -2) {
|
|
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] = var12;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
++var12;
|
|
}
|
|
}
|
|
|
|
for(var13 = -var7; var13 <= var7; ++var13) {
|
|
for(var14 = -var7; var14 <= var7; ++var14) {
|
|
var15 = var1.getBlockId(var2 + var12, var3 + var13, var4 + var14);
|
|
if(var15 == Block.wood.blockID) {
|
|
this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0;
|
|
} else if(var15 == Block.leaves.blockID) {
|
|
this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2;
|
|
} else {
|
|
this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -1;
|
|
}
|
|
}
|
|
}
|
|
|
|
++var12;
|
|
}
|
|
}
|
|
|
|
var12 = this.adjacentTreeBlocks[var11 * var10 + var11 * var9 + var11];
|
|
if(var12 >= 0) {
|
|
var1.setBlockMetadata(var2, var3, var4, var6 & -9);
|
|
} else {
|
|
this.removeLeaves(var1, var2, var3, var4);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private void removeLeaves(World var1, int var2, int var3, int var4) {
|
|
this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
|
|
var1.setBlockWithNotify(var2, var3, var4, 0);
|
|
}
|
|
|
|
public int quantityDropped(Random var1) {
|
|
return var1.nextInt(20) == 0 ? 1 : 0;
|
|
}
|
|
|
|
public int idDropped(int var1, Random var2) {
|
|
return Block.sapling.blockID;
|
|
}
|
|
|
|
public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) {
|
|
if(!var1.singleplayerWorld && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.field_31022_bc.shiftedIndex) {
|
|
var2.addStat(StatList.mineBlockStatArray[this.blockID], 1);
|
|
this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.leaves.blockID, 1, var6 & 3));
|
|
} else {
|
|
super.harvestBlock(var1, var2, var3, var4, var5, var6);
|
|
}
|
|
|
|
}
|
|
|
|
protected int damageDropped(int var1) {
|
|
return var1 & 3;
|
|
}
|
|
|
|
public boolean isOpaqueCube() {
|
|
return !this.graphicsLevel;
|
|
}
|
|
|
|
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
|
|
return (var2 & 3) == 1 ? this.blockIndexInTexture + 80 : this.blockIndexInTexture;
|
|
}
|
|
|
|
public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
|
|
super.onEntityWalking(var1, var2, var3, var4, var5);
|
|
}
|
|
}
|