| package mekanism.common.entity; |
| |
| import mekanism.common.Mekanism; |
| import net.minecraft.entity.Entity; |
| import net.minecraft.nbt.NBTTagCompound; |
| import net.minecraft.world.World; |
| |
| public class EntityObsidianTNT extends Entity |
| { |
| /** How long the fuse is */ |
| public int fuse; |
| |
| /** Whether or not the TNT has exploded */ |
| private boolean hasExploded = false; |
| |
| public EntityObsidianTNT(World world) |
| { |
| super(world); |
| fuse = 0; |
| preventEntitySpawning = true; |
| setSize(0.98F, 0.98F); |
| yOffset = height / 2.0F; |
| } |
| |
| public EntityObsidianTNT(World world, double x, double y, double z) |
| { |
| this(world); |
| |
| setPosition(x, y, z); |
| |
| float randPi = (float)(Math.random()*Math.PI*2); |
| |
| motionX = -(Math.sin(randPi))*0.02F; |
| motionY = 0.2; |
| motionZ = -(Math.cos(randPi))*0.02F; |
| |
| fuse = Mekanism.obsidianTNTDelay; |
| |
| prevPosX = x; |
| prevPosY = y; |
| prevPosZ = z; |
| } |
| |
| @Override |
| protected void entityInit() {} |
| |
| @Override |
| protected boolean canTriggerWalking() |
| { |
| return false; |
| } |
| |
| @Override |
| public boolean canBeCollidedWith() |
| { |
| return !isDead; |
| } |
| |
| @Override |
| public boolean canBePushed() |
| { |
| return true; |
| } |
| |
| @Override |
| public void onUpdate() |
| { |
| prevPosX = posX; |
| prevPosY = posY; |
| prevPosZ = posZ; |
| |
| motionY -= 0.04; |
| |
| moveEntity(motionX, motionY, motionZ); |
| |
| motionX *= 0.98; |
| motionY *= 0.98; |
| motionZ *= 0.98; |
| |
| if(onGround) |
| { |
| motionX *= 0.7; |
| motionZ *= 0.7; |
| motionY *= -0.5; |
| } |
| |
| if(fuse-- <= 0) |
| { |
| if(!worldObj.isRemote) |
| { |
| setDead(); |
| explode(); |
| } |
| else { |
| if(hasExploded) |
| { |
| setDead(); |
| } |
| else { |
| worldObj.spawnParticle("lava", posX, posY + 0.5, posZ, 0, 0, 0); |
| } |
| } |
| } |
| else { |
| worldObj.spawnParticle("lava", posX, posY + 0.5, posZ, 0, 0, 0); |
| } |
| } |
| |
| private void explode() |
| { |
| worldObj.createExplosion(null, posX, posY, posZ, Mekanism.obsidianTNTBlastRadius, true); |
| hasExploded = true; |
| } |
| |
| @Override |
| protected void writeEntityToNBT(NBTTagCompound nbtTags) |
| { |
| nbtTags.setByte("Fuse", (byte)fuse); |
| } |
| |
| @Override |
| protected void readEntityFromNBT(NBTTagCompound nbtTags) |
| { |
| fuse = nbtTags.getByte("Fuse"); |
| } |
| |
| @Override |
| public float getShadowSize() |
| { |
| return 0; |
| } |
| } |