package net.minecraft.server;
public class EntityMinecartTNT extends EntityMinecartAbstract {
private int b = -1;
public EntityMinecartTNT(EntityTypes<? extends EntityMinecartTNT> entitytypes, World world) {
super(entitytypes, world);
}
public EntityMinecartTNT(World world, double d0, double d1, double d2) {
super(EntityTypes.TNT_MINECART, world, d0, d1, d2);
}
@Override
public EntityMinecartAbstract.EnumMinecartType getMinecartType() {
return EntityMinecartAbstract.EnumMinecartType.TNT;
}
@Override
public IBlockData q() {
return Blocks.TNT.getBlockData();
}
@Override
public void tick() {
super.tick();
if (this.b > 0) {
--this.b;
this.world.addParticle(Particles.SMOKE, this.locX(), this.locY() + 0.5D, this.locZ(), 0.0D, 0.0D, 0.0D);
} else if (this.b == 0) {
this.h(b(this.getMot()));
}
if (this.positionChanged) {
double d0 = b(this.getMot());
if (d0 >= 0.009999999776482582D) {
this.h(d0);
}
}
}
@Override
public boolean damageEntity(DamageSource damagesource, float f) {
Entity entity = damagesource.j();
if (entity instanceof EntityArrow) {
EntityArrow entityarrow = (EntityArrow) entity;
if (entityarrow.isBurning()) {
this.h(entityarrow.getMot().g());
}
}
return super.damageEntity(damagesource, f);
}
@Override
public void a(DamageSource damagesource) {
double d0 = b(this.getMot());
if (!damagesource.isFire() && !damagesource.isExplosion() && d0 < 0.009999999776482582D) {
super.a(damagesource);
if (!damagesource.isExplosion() && this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) {
this.a((IMaterial) Blocks.TNT);
}
} else {
if (this.b < 0) {
this.v();
this.b = this.random.nextInt(20) + this.random.nextInt(20);
}
}
}
protected void h(double d0) {
if (!this.world.isClientSide) {
double d1 = Math.sqrt(d0);
if (d1 > 5.0D) {
d1 = 5.0D;
}
this.world.explode(this, this.locX(), this.locY(), this.locZ(), (float) (4.0D + this.random.nextDouble() * 1.5D * d1), Explosion.Effect.BREAK);
this.die();
}
}
@Override
public boolean b(float f, float f1) {
if (f >= 3.0F) {
float f2 = f / 10.0F;
this.h((double) (f2 * f2));
}
return super.b(f, f1);
}
@Override
public void a(int i, int j, int k, boolean flag) {
if (flag && this.b < 0) {
this.v();
}
}
public void v() {
this.b = 80;
if (!this.world.isClientSide) {
this.world.broadcastEntityEffect(this, (byte) 10);
if (!this.isSilent()) {
this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F);
}
}
}
public boolean z() {
return this.b > -1;
}
@Override
public float a(Explosion explosion, IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, Fluid fluid, float f) {
return this.z() && (iblockdata.a(TagsBlock.RAILS) || iblockaccess.getType(blockposition.up()).a(TagsBlock.RAILS)) ? 0.0F : super.a(explosion, iblockaccess, blockposition, iblockdata, fluid, f);
}
@Override
public boolean a(Explosion explosion, IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, float f) {
return this.z() && (iblockdata.a(TagsBlock.RAILS) || iblockaccess.getType(blockposition.up()).a(TagsBlock.RAILS)) ? false : super.a(explosion, iblockaccess, blockposition, iblockdata, f);
}
@Override
protected void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
if (nbttagcompound.hasKeyOfType("TNTFuse", 99)) {
this.b = nbttagcompound.getInt("TNTFuse");
}
}
@Override
protected void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
nbttagcompound.setInt("TNTFuse", this.b);
}
}