gt:         if (tagCompund.hasKey("ExplosionPower", 99))
context: package tk.cvrunmin.lanfasy.entity;
  
  import java.util.Random;
  
  import net.minecraft.entity.Entity;
  import net.minecraft.entity.EntityFlying;
  import net.minecraft.entity.EntityList;
  import net.minecraft.entity.EntityLivingBase;
  import net.minecraft.entity.SharedMonsterAttributes;
  import net.minecraft.entity.ai.EntityAIBase;
  import net.minecraft.entity.ai.EntityAIFindEntityNearestPlayer;
  import net.minecraft.entity.ai.EntityMoveHelper;
  import net.minecraft.entity.monster.EntityGhast;
  import net.minecraft.entity.monster.IMob;
  import net.minecraft.entity.player.EntityPlayer;
  import net.minecraft.entity.projectile.EntityLargeFireball;
  import net.minecraft.init.Items;
  import net.minecraft.item.Item;
  import net.minecraft.nbt.NBTTagCompound;
  import net.minecraft.stats.AchievementList;
  import net.minecraft.util.AxisAlignedBB;
  import net.minecraft.util.BlockPos;
  import net.minecraft.util.DamageSource;
  import net.minecraft.util.MathHelper;
  import net.minecraft.util.Vec3;
  import net.minecraft.world.EnumDifficulty;
  import net.minecraft.world.World;
  import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
  import net.minecraftforge.fml.common.registry.EntityRegistry;
  import net.minecraftforge.fml.relauncher.Side;
  import net.minecraftforge.fml.relauncher.SideOnly;
  
  public class LFEntityGhast extends EntityFlying implements IMob
  {
      public int courseChangeCooldown;
      public double waypointX;
      public double waypointY;
      public double waypointZ;
      private Entity targetedEntity;
      /** Cooldown time between target loss and new target aquirement. */
      private int aggroCooldown;
      public int prevAttackCounter;
      public int attackCounter;
      /** The explosion radius of spawned fireballs. */
      private int explosionStrength = 1;
      public Object instance;
  	int entityID = 1015;
  	public void preInit(FMLPreInitializationEvent event){
  		EntityRegistry.registerGlobalEntityID(LFEntityGhast.class, "Ghast(ML)", entityID);
  		EntityRegistry.registerModEntity(LFEntityGhast.class, "Ghast(ML)", entityID, instance, 64, 1, true);
  		EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID,  16382457, 12369084));        
  	}
      public LFEntityGhast(World par1World)
      {
          super(par1World);
          this.setSize(4.0F, 4.0F);
          this.isImmuneToFire = true;
          this.experienceValue = 5;
          this.moveHelper = new LFEntityGhast.GhastMoveHelper();
          this.tasks.addTask(5, new LFEntityGhast.AIRandomFly());
          this.tasks.addTask(7, new LFEntityGhast.AILookAround());
          this.tasks.addTask(7, new LFEntityGhast.AIFireballAttack());
          this.targetTasks.addTask(1, new EntityAIFindEntityNearestPlayer(this));
      }
  
  
      @SideOnly(Side.CLIENT)
      public boolean func_110182_bF()
      {
          return this.dataWatcher.getWatchableObjectByte(16) != 0;
      }
  
      public void func_175454_a(boolean p_175454_1_)
      {
          this.dataWatcher.updateObject(16, Byte.valueOf((byte)(p_175454_1_ ? 1 : 0)));
      }
  
      public int func_175453_cd()
      {
          return this.explosionStrength;
      }
  
      public void onUpdate()
      {
          super.onUpdate();
  
          if (!this.worldObj.isRemote && this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL)
          {
              this.setDead();
          }
      }
      /**
       * Called when the entity is attacked.
       */
      public boolean attackEntityFrom(DamageSource source, float amount)
      {
          if (this.isEntityInvulnerable(source))
          {
              return false;
          }
          else if ("fireball".equals(source.getDamageType()) && source.getEntity() instanceof EntityPlayer)
          {
              super.attackEntityFrom(source, 1000.0F);
              ((EntityPlayer)source.getEntity()).triggerAchievement(AchievementList.ghast);
              return true;
          }
          else
          {
              return super.attackEntityFrom(source, amount);
          }
      }
  
      protected void entityInit()
      {
          super.entityInit();
          this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
      }
  
      protected void applyEntityAttributes()
      {
          super.applyEntityAttributes();
          this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D);
          this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(100.0D);
      }
  
      /**
       * Returns the sound this mob makes while it's alive.
       */
      protected String getLivingSound()
      {
          return "mob.ghast.moan";
      }
  
      /**
       * Returns the sound this mob makes when it is hurt.
       */
      protected String getHurtSound()
      {
          return "mob.ghast.scream";
      }
  
      /**
       * Returns the sound this mob makes on death.
       */
      protected String getDeathSound()
      {
          return "mob.ghast.death";
      }
  
      protected Item getDropItem()
      {
  //        return MLRItems.rGunpowder;
      	return null;
      }
  
      /**
       * Drop 0-2 items of this living's type. @param par1 - Whether this entity has recently been hit by a player. @param
       * par2 - Level of Looting used to kill this mob.
       */
      protected void dropFewItems(boolean par1, int par2)
      {
          int j = this.rand.nextInt(2) + this.rand.nextInt(1 + par2);
          int k;
  
          for (k = 0; k < j; ++k)
          {
              this.dropItem(Items.ghast_tear, 1);
          }
  
          j = this.rand.nextInt(3) + this.rand.nextInt(1 + par2);
  
          for (k = 0; k < j; ++k)
          {
  //            this.dropItem(MLRItems.rGunpowder, 1);
          }
      }
  
      /**
       * Returns the volume for the sounds this mob makes.
       */
      protected float getSoundVolume()
      {
          return 10.0F;
      }
  
      /**
       * Checks if the entity's current position is a valid location to spawn this entity.
       */
      public boolean getCanSpawnHere()
      {
          return this.rand.nextInt(20) == 0 && super.getCanSpawnHere() && this.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL;
      }
  
      /**
       * Will return how many at most can spawn in a chunk at once.
       */
      public int getMaxSpawnedInChunk()
      {
          return 5;
      }
  
      public void writeEntityToNBT(NBTTagCompound tagCompound)
      {
          super.writeEntityToNBT(tagCompound);
          tagCompound.setInteger("ExplosionPower", this.explosionStrength);
      }
  
      public void readEntityFromNBT(NBTTagCompound tagCompund)
      {
          super.readEntityFromNBT(tagCompund);
  
  