Package com.mojang.minecraft.mob.ai

Source Code of com.mojang.minecraft.mob.ai.BasicAttackAI

package com.mojang.minecraft.mob.ai;

import com.mojang.minecraft.Entity;
import com.mojang.minecraft.item.Arrow;
import com.mojang.minecraft.mob.ai.BasicAI;
import com.mojang.minecraft.model.Vec3D;
import com.mojang.util.MathHelper;

public class BasicAttackAI extends BasicAI {

   public static final long serialVersionUID = 0L;
   public int damage = 6;


   protected void update() {
      super.update();
      if(this.mob.health > 0) {
         this.doAttack();
      }

   }

   protected void doAttack() {
      Entity var1 = this.level.getPlayer();
      float var2 = 16.0F;
      if(this.attackTarget != null && this.attackTarget.removed) {
         this.attackTarget = null;
      }

      float var3;
      float var4;
      float var5;
      if(var1 != null && this.attackTarget == null) {
         var3 = var1.x - this.mob.x;
         var4 = var1.y - this.mob.y;
         var5 = var1.z - this.mob.z;
         if(var3 * var3 + var4 * var4 + var5 * var5 < var2 * var2) {
            this.attackTarget = var1;
         }
      }

      if(this.attackTarget != null) {
         var3 = this.attackTarget.x - this.mob.x;
         var4 = this.attackTarget.y - this.mob.y;
         var5 = this.attackTarget.z - this.mob.z;
         float var6;
         if((var6 = var3 * var3 + var4 * var4 + var5 * var5) > var2 * var2 * 2.0F * 2.0F && this.random.nextInt(100) == 0) {
            this.attackTarget = null;
         }

         if(this.attackTarget != null) {
            var6 = MathHelper.sqrt(var6);
            this.mob.yRot = (float)(Math.atan2((double)var5, (double)var3) * 180.0D / 3.1415927410125732D) - 90.0F;
            this.mob.xRot = -((float)(Math.atan2((double)var4, (double)var6) * 180.0D / 3.1415927410125732D));
            if(MathHelper.sqrt(var3 * var3 + var4 * var4 + var5 * var5) < 2.0F && this.attackDelay == 0) {
               this.attack(this.attackTarget);
            }
         }

      }
   }

   public boolean attack(Entity var1) {
      if(this.level.clip(new Vec3D(this.mob.x, this.mob.y, this.mob.z), new Vec3D(var1.x, var1.y, var1.z)) != null) {
         return false;
      } else {
         this.mob.attackTime = 5;
         this.attackDelay = this.random.nextInt(20) + 10;
         int var2 = (int)((this.random.nextFloat() + this.random.nextFloat()) / 2.0F * (float)this.damage + 1.0F);
         var1.hurt(this.mob, var2);
         this.noActionTime = 0;
         return true;
      }
   }

   public void hurt(Entity var1, int var2) {
      super.hurt(var1, var2);
      if(var1 instanceof Arrow) {
         var1 = ((Arrow)var1).getOwner();
      }

      if(var1 != null && !var1.getClass().equals(this.mob.getClass())) {
         this.attackTarget = var1;
      }

   }
}
TOP

Related Classes of com.mojang.minecraft.mob.ai.BasicAttackAI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.