Guest User

EntityArcher

a guest
Mar 5th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.01 KB | None | 0 0
  1. package mcmod.nxs.minextension.entity.passive.warrior;
  2.  
  3. import net.minecraft.enchantment.Enchantment;
  4. import net.minecraft.enchantment.EnchantmentHelper;
  5. import net.minecraft.entity.EntityLivingBase;
  6. import net.minecraft.entity.IRangedAttackMob;
  7. import net.minecraft.entity.SharedMonsterAttributes;
  8. import net.minecraft.entity.ai.EntityAIArrowAttack;
  9. import net.minecraft.entity.ai.EntityAIHurtByTarget;
  10. import net.minecraft.entity.ai.EntityAILookIdle;
  11. import net.minecraft.entity.ai.EntityAISwimming;
  12. import net.minecraft.entity.ai.EntityAIWander;
  13. import net.minecraft.entity.ai.EntityAIWatchClosest;
  14. import net.minecraft.entity.monster.EntityMob;
  15. import net.minecraft.entity.passive.EntityHorse;
  16. import net.minecraft.entity.player.EntityPlayer;
  17. import net.minecraft.entity.projectile.EntityArrow;
  18. import net.minecraft.init.Items;
  19. import net.minecraft.item.ItemBow;
  20. import net.minecraft.item.ItemStack;
  21. import net.minecraft.nbt.NBTTagCompound;
  22. import net.minecraft.world.World;
  23.  
  24. public class EntityArcher extends EntityMob implements IRangedAttackMob {
  25.  
  26.     public EntityArcher(World par1World) {
  27.         super(par1World);
  28.         this.setHealth(this.getMaxHealth());
  29.         this.isImmuneToFire = false;
  30.         this.getNavigator().setCanSwim(true);
  31.         this.tasks.addTask(0, new EntityAISwimming(this));
  32.         this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 40, 20.0F));
  33.         this.tasks.addTask(5, new EntityAIWander(this, 1.0D));
  34.         this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
  35.         this.tasks.addTask(7, new EntityAILookIdle(this));
  36.         this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
  37.         this.experienceValue = 75;
  38.  
  39.         if (par1World != null && !par1World.isRemote) {
  40.             this.setCombatTask();
  41.         }
  42.     }
  43.  
  44.     protected void applyEntityAttributes() {
  45.         super.applyEntityAttributes();
  46.         this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D);
  47.         this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(7.0D);
  48.         this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40.0D);
  49.     }
  50.  
  51.     @Override
  52.     protected void entityInit() {
  53.         super.entityInit();
  54.     }
  55.  
  56.     @Override
  57.     public boolean isAIEnabled() {
  58.         return true;
  59.     }
  60.  
  61.     @Override
  62.     public void onLivingUpdate() {
  63.         this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));
  64.         super.onLivingUpdate();
  65.     }
  66.  
  67.     @Override
  68.     protected void addRandomArmor() {
  69.         super.addRandomArmor();
  70.         this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));
  71.     }
  72.  
  73.     public void setCombatTask() {
  74.         ItemStack itemstack = this.getHeldItem();
  75.  
  76.         if (itemstack != null && itemstack.getItem() == Items.bow) {
  77.         } else {
  78.         }
  79.     }
  80.  
  81.     public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) {
  82.         EntityArrow entityarrow = new EntityArrow(this.worldObj, this, par1EntityLivingBase, 1.6F, (float) (14 - this.worldObj.difficultySetting.getDifficultyId() * 4));
  83.         int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, this.getHeldItem());
  84.         int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, this.getHeldItem());
  85.         entityarrow.setDamage((double) (par2 * 2.0F) + this.rand.nextGaussian() * 0.25D + (double) ((float) this.worldObj.difficultySetting.getDifficultyId() * 0.11F));
  86.  
  87.         if (i > 0) {
  88.             entityarrow.setDamage(entityarrow.getDamage() + (double) i * 0.5D + 0.5D);
  89.         }
  90.  
  91.         if (j > 0) {
  92.             entityarrow.setKnockbackStrength(j);
  93.         }
  94.  
  95.         if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, this.getHeldItem()) > 0) {
  96.             entityarrow.setFire(100);
  97.         }
  98.  
  99.         this.playSound("random.bow", 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F));
  100.         this.worldObj.spawnEntityInWorld(entityarrow);
  101.     }
  102.  
  103.     @Override
  104.     public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) {
  105.         super.readEntityFromNBT(par1NBTTagCompound);
  106.     }
  107.  
  108.     /**
  109.      * (abstract) Protected helper method to write subclass entity data to NBT.
  110.      */
  111.     @Override
  112.     public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) {
  113.         super.writeEntityToNBT(par1NBTTagCompound);
  114.     }
  115.  
  116.     @Override
  117.     public void setCurrentItemOrArmor(int par1, ItemStack par2ItemStack) {
  118.         super.setCurrentItemOrArmor(par1, par2ItemStack);
  119.  
  120.         if (!this.worldObj.isRemote && par1 == 0) {
  121.             this.setCombatTask();
  122.         }
  123.     }
  124.  
  125.     @Override
  126.     public double getYOffset() {
  127.         return super.getYOffset() - 0.5D;
  128.     }
  129.  
  130.     @Override
  131.     protected boolean interact(EntityPlayer Player) {
  132.         ItemStack handItem = Player.inventory.getCurrentItem();
  133.         if (handItem != null) {
  134.             if (Player.getHeldItem().getItem() instanceof ItemBow) {
  135.                 this.setCurrentItemOrArmor(0, handItem);
  136.                 Player.setCurrentItemOrArmor(0, null);
  137.                 return true;
  138.             }
  139.         }
  140.         return false;
  141.     }
  142.  
  143.     protected void dropEquipment(boolean par1, int par2) {
  144.         super.dropEquipment(true, 100);
  145.     }
  146.  
  147.     public void updateRidden() {
  148.         super.updateRidden();
  149.  
  150.         if (this.ridingEntity instanceof EntityHorse) {
  151.             EntityHorse entitycreature = (EntityHorse) this.ridingEntity;
  152.             this.renderYawOffset = entitycreature.renderYawOffset;
  153.         }
  154.     }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment