package net.minecraft.server;
public class BlockTNT extends Block {
public static final BlockStateBoolean EXPLODE = BlockStateBoolean.of("explode");
public BlockTNT() {
super(Material.TNT);
this.y(this.blockStateList.getBlockData().set(BlockTNT.EXPLODE, Boolean.valueOf(false)));
this.a(CreativeModeTab.d);
}
public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) {
super.onPlace(world, blockposition, iblockdata);
if (world.isBlockIndirectlyPowered(blockposition)) {
this.postBreak(world, blockposition, iblockdata.set(BlockTNT.EXPLODE, Boolean.valueOf(true)));
world.setAir(blockposition);
}
}
public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1) {
if (world.isBlockIndirectlyPowered(blockposition)) {
this.postBreak(world, blockposition, iblockdata.set(BlockTNT.EXPLODE, Boolean.valueOf(true)));
world.setAir(blockposition);
}
}
public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
if (!world.isClientSide) {
// Paper start - Old TNT cannon behaviors
double y = blockposition.getY();
if (!world.paperConfig.oldCannonBehaviors) y += 0.5;
EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource());
// Paper end
entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8));
world.addEntity(entitytntprimed);
}
}
public void postBreak(World world, BlockPosition blockposition, IBlockData iblockdata) {
this.a(world, blockposition, iblockdata, (EntityLiving) null);
}
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) {
if (!world.isClientSide) {
if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) {
// Paper start - Old TNT cannon behaviors
double y = blockposition.getY();
if (!world.paperConfig.oldCannonBehaviors) y += 0.5;
EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), entityliving);
// Paper end
world.addEntity(entitytntprimed);
world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gV, SoundCategory.BLOCKS, 1.0F, 1.0F);
}
}
}
public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumHand enumhand, EnumDirection enumdirection, float f, float f1, float f2) {
ItemStack itemstack = entityhuman.b(enumhand);
if (!itemstack.isEmpty() && (itemstack.getItem() == Items.FLINT_AND_STEEL || itemstack.getItem() == Items.FIRE_CHARGE)) {
this.a(world, blockposition, iblockdata.set(BlockTNT.EXPLODE, Boolean.valueOf(true)), (EntityLiving) entityhuman);
world.setTypeAndData(blockposition, Blocks.AIR.getBlockData(), 11);
if (itemstack.getItem() == Items.FLINT_AND_STEEL) {
itemstack.damage(1, entityhuman);
} else if (!entityhuman.abilities.canInstantlyBuild) {
itemstack.subtract(1);
}
return true;
} else {
return super.interact(world, blockposition, iblockdata, entityhuman, enumhand, enumdirection, f, f1, f2);
}
}
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, Entity entity) {
if (!world.isClientSide && entity instanceof EntityArrow) {
EntityArrow entityarrow = (EntityArrow) entity;
if (entityarrow.isBurning()) {
// CraftBukkit start
if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entityarrow, blockposition, Blocks.AIR, 0).isCancelled()) {
return;
}
// CraftBukkit end
this.a(world, blockposition, world.getType(blockposition).set(BlockTNT.EXPLODE, Boolean.valueOf(true)), entityarrow.shooter instanceof EntityLiving ? (EntityLiving) entityarrow.shooter : null);
world.setAir(blockposition);
}
}
}
public boolean a(Explosion explosion) {
return false;
}
public IBlockData fromLegacyData(int i) {
return this.getBlockData().set(BlockTNT.EXPLODE, Boolean.valueOf((i & 1) > 0));
}
public int toLegacyData(IBlockData iblockdata) {
return ((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue() ? 1 : 0;
}
protected BlockStateList getStateList() {
return new BlockStateList(this, new IBlockState[] { BlockTNT.EXPLODE});
}
}