package net.minecraft.server;
import java.util.Random;
import javax.annotation.Nullable;
public class BlockTallPlant extends BlockPlant implements IBlockFragilePlantElement {
public static final BlockStateEnum<BlockTallPlant.EnumTallFlowerVariants> VARIANT = BlockStateEnum.of("variant", BlockTallPlant.EnumTallFlowerVariants.class);
public static final BlockStateEnum<BlockTallPlant.EnumTallPlantHalf> HALF = BlockStateEnum.of("half", BlockTallPlant.EnumTallPlantHalf.class);
public static final BlockStateEnum<EnumDirection> d = BlockFacingHorizontal.FACING;
public BlockTallPlant() {
super(Material.REPLACEABLE_PLANT);
this.y(this.blockStateList.getBlockData().set(BlockTallPlant.VARIANT, BlockTallPlant.EnumTallFlowerVariants.SUNFLOWER).set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.LOWER).set(BlockTallPlant.d, EnumDirection.NORTH));
this.c(0.0F);
this.a(SoundEffectType.c);
this.c("doublePlant");
}
@Override
public AxisAlignedBB b(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) {
return BlockTallPlant.j;
}
private BlockTallPlant.EnumTallFlowerVariants a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) {
if (iblockdata.getBlock() == this) {
iblockdata = iblockdata.b(iblockaccess, blockposition);
return iblockdata.get(BlockTallPlant.VARIANT);
} else {
return BlockTallPlant.EnumTallFlowerVariants.FERN;
}
}
@Override
public boolean canPlace(World world, BlockPosition blockposition) {
return super.canPlace(world, blockposition) && world.isEmpty(blockposition.up());
}
@Override
public boolean a(IBlockAccess iblockaccess, BlockPosition blockposition) {
IBlockData iblockdata = iblockaccess.getType(blockposition);
if (iblockdata.getBlock() != this) {
return true;
} else {
BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = iblockdata.b(iblockaccess, blockposition).get(BlockTallPlant.VARIANT);
return blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.FERN || blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.GRASS;
}
}
@Override
protected void e(World world, BlockPosition blockposition, IBlockData iblockdata) {
if (!this.f(world, blockposition, iblockdata)) {
// CraftBukkit start
if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPhysicsEvent(world, blockposition).isCancelled()) {
return;
}
// CraftBukkit end
boolean flag = iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER;
BlockPosition blockposition1 = flag ? blockposition : blockposition.up();
BlockPosition blockposition2 = flag ? blockposition.down() : blockposition;
Object object = flag ? this : world.getType(blockposition1).getBlock();
Object object1 = flag ? world.getType(blockposition2).getBlock() : this;
if (object == this) {
world.setTypeAndData(blockposition1, Blocks.AIR.getBlockData(), 2);
}
if (object1 == this) {
world.setTypeAndData(blockposition2, Blocks.AIR.getBlockData(), 3);
if (!flag) {
this.b(world, blockposition2, iblockdata, 0);
}
}
}
}
@Override
public boolean f(World world, BlockPosition blockposition, IBlockData iblockdata) {
if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) {
return world.getType(blockposition.down()).getBlock() == this;
} else {
IBlockData iblockdata1 = world.getType(blockposition.up());
return iblockdata1.getBlock() == this && super.f(world, blockposition, iblockdata1);
}
}
@Override
public Item getDropType(IBlockData iblockdata, Random random, int i) {
if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) {
return Items.a;
} else {
BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = iblockdata.get(BlockTallPlant.VARIANT);
return blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.FERN ? Items.a : (blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.GRASS ? (random.nextInt(8) == 0 ? Items.WHEAT_SEEDS : Items.a) : super.getDropType(iblockdata, random, i));
}
}
@Override
public int getDropData(IBlockData iblockdata) {
return iblockdata.get(BlockTallPlant.HALF) != BlockTallPlant.EnumTallPlantHalf.UPPER && iblockdata.get(BlockTallPlant.VARIANT) != BlockTallPlant.EnumTallFlowerVariants.GRASS ? iblockdata.get(BlockTallPlant.VARIANT).a() : 0;
}
public void a(World world, BlockPosition blockposition, BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants, int i) {
world.setTypeAndData(blockposition, this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.LOWER).set(BlockTallPlant.VARIANT, blocktallplant_enumtallflowervariants), i);
world.setTypeAndData(blockposition.up(), this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.UPPER), i);
}
@Override
public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) {
world.setTypeAndData(blockposition.up(), this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.UPPER), 2);
}
@Override
public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, @Nullable TileEntity tileentity, ItemStack itemstack) {
if (world.isClientSide || itemstack.getItem() != Items.SHEARS || iblockdata.get(BlockTallPlant.HALF) != BlockTallPlant.EnumTallPlantHalf.LOWER || !this.b(world, blockposition, iblockdata, entityhuman)) {
super.a(world, entityhuman, blockposition, iblockdata, tileentity, itemstack);
}
}
@Override
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) {
if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) {
if (world.getType(blockposition.down()).getBlock() == this) {
if (entityhuman.abilities.canInstantlyBuild) {
world.setAir(blockposition.down());
} else {
IBlockData iblockdata1 = world.getType(blockposition.down());
BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = iblockdata1.get(BlockTallPlant.VARIANT);
if (blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.FERN && blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.GRASS) {
world.setAir(blockposition.down(), true);
} else if (world.isClientSide) {
world.setAir(blockposition.down());
} else if (!entityhuman.getItemInMainHand().isEmpty() && entityhuman.getItemInMainHand().getItem() == Items.SHEARS) {
this.b(world, blockposition, iblockdata1, entityhuman);
world.setAir(blockposition.down());
} else {
world.setAir(blockposition.down(), true);
}
}
}
} else if (world.getType(blockposition.up()).getBlock() == this) {
world.setTypeAndData(blockposition.up(), Blocks.AIR.getBlockData(), 2);
}
super.a(world, blockposition, iblockdata, entityhuman);
}
private boolean b(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) {
BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = iblockdata.get(BlockTallPlant.VARIANT);
if (blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.FERN && blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.GRASS) {
return false;
} else {
entityhuman.b(StatisticList.a(this));
int i = (blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.GRASS ? BlockLongGrass.EnumTallGrassType.GRASS : BlockLongGrass.EnumTallGrassType.FERN).a();
a(world, blockposition, new ItemStack(Blocks.TALLGRASS, 2, i));
return true;
}
}
@Override
public ItemStack a(World world, BlockPosition blockposition, IBlockData iblockdata) {
return new ItemStack(this, 1, this.a((IBlockAccess) world, blockposition, iblockdata).a());
}
@Override
public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = this.a((IBlockAccess) world, blockposition, iblockdata);
return blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.GRASS && blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.FERN;
}
@Override
public boolean a(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) {
return true;
}
@Override
public void b(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) {
a(world, blockposition, new ItemStack(this, 1, this.a((IBlockAccess) world, blockposition, iblockdata).a()));
}
@Override
public IBlockData fromLegacyData(int i) {
return (i & 8) > 0 ? this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.UPPER) : this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.LOWER).set(BlockTallPlant.VARIANT, BlockTallPlant.EnumTallFlowerVariants.a(i & 7));
}
@Override
public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) {
if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) {
IBlockData iblockdata1 = iblockaccess.getType(blockposition.down());
if (iblockdata1.getBlock() == this) {
iblockdata = iblockdata.set(BlockTallPlant.VARIANT, iblockdata1.get(BlockTallPlant.VARIANT));
}
}
return iblockdata;
}
@Override
public int toLegacyData(IBlockData iblockdata) {
return iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER ? 8 | iblockdata.get(BlockTallPlant.d).get2DRotationValue() : iblockdata.get(BlockTallPlant.VARIANT).a();
}
@Override
protected BlockStateList getStateList() {
return new BlockStateList(this, new IBlockState[] { BlockTallPlant.HALF, BlockTallPlant.VARIANT, BlockTallPlant.d});
}
@Override
public Block.EnumRandomOffset u() {
return Block.EnumRandomOffset.XZ;
}
public static enum EnumTallPlantHalf implements INamable {
UPPER, LOWER;
private EnumTallPlantHalf() {}
@Override
public String toString() {
return this.getName();
}
@Override
public String getName() {
return this == BlockTallPlant.EnumTallPlantHalf.UPPER ? "upper" : "lower";
}
}
public static enum EnumTallFlowerVariants implements INamable {
SUNFLOWER(0, "sunflower"), SYRINGA(1, "syringa"), GRASS(2, "double_grass", "grass"), FERN(3, "double_fern", "fern"), ROSE(4, "double_rose", "rose"), PAEONIA(5, "paeonia");
private static final BlockTallPlant.EnumTallFlowerVariants[] g = new BlockTallPlant.EnumTallFlowerVariants[values().length];
private final int h;
private final String i;
private final String j;
private EnumTallFlowerVariants(int i, String s) {
this(i, s, s);
}
private EnumTallFlowerVariants(int i, String s, String s1) {
this.h = i;
this.i = s;
this.j = s1;
}
public int a() {
return this.h;
}
@Override
public String toString() {
return this.i;
}
public static BlockTallPlant.EnumTallFlowerVariants a(int i) {
if (i < 0 || i >= BlockTallPlant.EnumTallFlowerVariants.g.length) {
i = 0;
}
return BlockTallPlant.EnumTallFlowerVariants.g[i];
}
@Override
public String getName() {
return this.i;
}
public String c() {
return this.j;
}
static {
BlockTallPlant.EnumTallFlowerVariants[] ablocktallplant_enumtallflowervariants = values();
int i = ablocktallplant_enumtallflowervariants.length;
for (int j = 0; j < i; ++j) {
BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = ablocktallplant_enumtallflowervariants[j];
BlockTallPlant.EnumTallFlowerVariants.g[blocktallplant_enumtallflowervariants.a()] = blocktallplant_enumtallflowervariants;
}
}
}
}