@Override protected void updateAITasks() { EntityLivingBase target = getAttackTarget(); if(target != null) { double d0 = target.posX + target.width / 2 - posX; double d1 = target.posY + target.height / 2 - posY; double d2 = target.posZ + target.width / 2 - posZ; double d3 = d0 * d0 + d1 * d1 + d2 * d2; float mod = 0.45F; if(getType() == 1) mod = 0.1F; motionX += d0 / d3 * mod; motionY += d1 / d3 * mod; motionZ += d2 / d3 * mod; if(Math.sqrt(d3) < 1F) { if(summoner != null) { if(summoner instanceof EntityPlayer) target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) summoner), damage); else { target.attackEntityFrom(DamageSource.causeMobDamage(summoner), damage); } } else target.attackEntityFrom(DamageSource.causeMobDamage(this), damage); if(effect != null && !(target instanceof EntityPlayer)) target.addPotionEffect(effect); setDead(); } } renderYawOffset = rotationYaw = -((float)Math.atan2(motionX, motionZ)) * 180.0F / (float)Math.PI; }
@Override public boolean hitEntity(ItemStack stack, EntityLivingBase entity, @Nonnull EntityLivingBase attacker) { if(!(entity instanceof EntityPlayer) && entity != null) { double range = 8; List<EntityLivingBase> alreadyTargetedEntities = new ArrayList<>(); int dmg = 5; long lightningSeed = ItemNBTHelper.getLong(stack, TAG_LIGHTNING_SEED, 0); Predicate<Entity> selector = e -> e instanceof EntityLivingBase && e instanceof IMob && !(e instanceof EntityPlayer) && !alreadyTargetedEntities.contains(e); Random rand = new Random(lightningSeed); EntityLivingBase lightningSource = entity; int hops = entity.world.isThundering() ? 10 : 4; for(int i = 0; i < hops; i++) { List<Entity> entities = entity.world.getEntitiesInAABBexcluding(lightningSource, new AxisAlignedBB(lightningSource.posX - range, lightningSource.posY - range, lightningSource.posZ - range, lightningSource.posX + range, lightningSource.posY + range, lightningSource.posZ + range), selector::test); if(entities.isEmpty()) break; EntityLivingBase target = (EntityLivingBase) entities.get(rand.nextInt(entities.size())); if(attacker instanceof EntityPlayer) target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) attacker), dmg); else target.attackEntityFrom(DamageSource.causeMobDamage(attacker), dmg); Botania.proxy.lightningFX(Vector3.fromEntityCenter(lightningSource), Vector3.fromEntityCenter(target), 1, 0x0179C4, 0xAADFFF); alreadyTargetedEntities.add(target); lightningSource = target; dmg--; } if(!entity.world.isRemote) ItemNBTHelper.setLong(stack, TAG_LIGHTNING_SEED, entity.world.rand.nextLong()); } return super.hitEntity(stack, entity, attacker); }
RayTraceResult rtr = player.getEntityBoundingBox().grow(0.25).calculateIntercept(origPos, newPos); if(rtr != null) player.attackEntityFrom(DamageSource.causeMobDamage(this), 6);
if(thrower != null) { EntityPlayer player = thrower instanceof EntityPlayer ? (EntityPlayer) thrower : null; target.attackEntityFrom(player == null ? DamageSource.causeMobDamage(thrower) : DamageSource.causePlayerDamage(player), evil ? 12 : 7); } else target.attackEntityFrom(DamageSource.GENERIC, evil ? 12 : 7);
if(!world.isRemote && pos.entityHit != null && pos.entityHit instanceof EntityLivingBase && pos.entityHit != getThrower()) { EntityLivingBase thrower = getThrower(); pos.entityHit.attackEntityFrom(thrower != null ? thrower instanceof EntityPlayer ? DamageSource.causeThrownDamage(this, thrower) : DamageSource.causeMobDamage(thrower) : DamageSource.GENERIC, 12); if(isFire()) pos.entityHit.setFire(5);
@Override public boolean attackEntityAsMob(@Nonnull Entity entityIn) { float f = (float) this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue(); return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), f); }
@Override public boolean attackEntityAsMob(Entity entityIn) { attackTimer = 10; world.setEntityState(this, (byte) 4); boolean var2 = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float) 7 + rand.nextInt(15)); if (var2) { entityIn.motionY += 0.2D; } playSound(SoundEvents.ENTITY_IRONGOLEM_ATTACK, 1.0F, 1.0F); return var2; }
@Override public boolean attackEntityAsMob(Entity entityIn) { attackTimer = 10; world.setEntityState(this, (byte) 4); boolean var2 = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 7F + rand.nextInt(15)); if (var2) { entityIn.motionY += 0.6000000059604645D; } playSound(SoundEvents.ENTITY_IRONGOLEM_ATTACK, 1.0F, 1.0F); return var2; }
@Override public void onCollideWithPlayer(@Nonnull EntityPlayer p_70100_1_) { int i = getSlimeSize(); if (canEntityBeSeen(p_70100_1_) && this.getDistanceSq(p_70100_1_) < (double) i * (double) i && p_70100_1_.attackEntityFrom(DamageSource.causeMobDamage(this), getAttackStrength())) { playSound(SoundEvents.ENTITY_SLIME_ATTACK, 1.0F, (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F); } }
@Override public boolean attackEntityAsMob(@Nonnull Entity entityIn) { super.attackEntityAsMob(entityIn); float attackDamage = (float) getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue(); if (entityIn instanceof EntitySpider) { attackDamage *= ZooConfig.owlSpiderDamageMultiplier.get(); } return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), attackDamage); }
public boolean attackEntityAsMob(Entity entityIn) { boolean attacked = entityIn.attackEntityFrom( DamageSource.causeMobDamage(this), (float) getEntityAttribute(ATTACK_DAMAGE).getAttributeValue() ); if (attacked) { applyEnchantments(this, entityIn); } return attacked; }
@Override public boolean attackEntityAsMob(@Nonnull Entity target) { if (isRidden() || isDead) { return false; } super.attackEntityAsMob(target); if (!isRearing()) { makeMad(); } float damage = (float) getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue(); return target.attackEntityFrom(DamageSource.causeMobDamage(this), damage); }
@Override protected void onImpact(RayTraceResult mop) { if (mop.entityHit != null) { if (mop.entityHit instanceof EntityLivingBase) { if (!getEntityWorld().isRemote) { ((EntityLivingBase) mop.entityHit).addPotionEffect(new PotionEffect(MobEffects.POISON, 5 * 20, 0)); ((EntityLivingBase) mop.entityHit).attackEntityFrom(DamageSource.causeMobDamage(getThrower()), 1.0F); } } } setDead(); }
@Override public boolean attackEntityAsMob(Entity entity) { if (entity != null && getDistance(entity) <= 1.5F && entity.getEntityBoundingBox().maxY > getEntityBoundingBox().minY && entity.getEntityBoundingBox().minY < getEntityBoundingBox().maxY) entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) (ConfigHandler.INSTANCE.mobAttackDamageMultiplier < 2 ? 1D : 1D * ConfigHandler.INSTANCE.mobAttackDamageMultiplier)); return super.attackEntityAsMob(entity); }
protected Entity areaOfEffect(World world, ItemStack stack, EntityPlayer player) { List<?> list = world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(player.getEntityBoundingBox().minX, player.getEntityBoundingBox().minY, player.getEntityBoundingBox().minZ, player.getEntityBoundingBox().maxX, player.getEntityBoundingBox().maxY, player.getEntityBoundingBox().maxZ).grow(stack.getTagCompound().getInteger("charge") * 0.25D, 1D, stack.getTagCompound().getInteger("charge") * 0.25D)); for (int i = 0; i < list.size(); i++) { Entity entity = (Entity) list.get(i); if (entity != null) if (entity instanceof EntityLivingBase && entity != player) { float Knockback = (float) (stack.getTagCompound().getInteger("charge") * 0.025D); entity.attackEntityFrom(DamageSource.causeMobDamage(player), stack.getTagCompound().getInteger("charge") * 0.25F); entity.addVelocity(-MathHelper.sin(player.rotationYaw * -3.141593F + world.rand.nextInt(3) + 0.141593F / 180.0F) * Knockback, 0.01D, MathHelper.cos(player.rotationYaw * -3.141593F + world.rand.nextInt(3) + 0.141593F / 180.0F) * Knockback); } } return null; }
@Override public boolean attackEntityAsMob(Entity entity) { if (getTameState() != 0) if (entity instanceof EntityPlayer) { setAttackTarget((EntityLivingBase) null); return false; } if (entity != null && getDistanceSq(entity) <= 2.5F && entity.getEntityBoundingBox().maxY > getEntityBoundingBox().minY && entity.getEntityBoundingBox().minY < getEntityBoundingBox().maxY) entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) (ConfigHandler.INSTANCE.mobAttackDamageMultiplier < 2 ? 4D : 4D * ConfigHandler.INSTANCE.mobAttackDamageMultiplier)); return super.attackEntityAsMob(entity); }
@Override public boolean attackEntityAsMob(Entity entity) { if (canEntityBeSeen(entity)) { boolean hasHitTarget = entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) ((int) this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue())); if (hasHitTarget) { if (getEntityWorld().getGameRules().getBoolean("mobGriefing")) getEntityWorld().createExplosion(entity, entity.posX, entity.posY, entity.posZ, 1.0F, false); } return hasHitTarget; } return false; }
@Override public boolean attackEntityAsMob(Entity entity) { if (getTameState() != 0) if (entity instanceof EntityPlayer) { setAttackTarget((EntityLivingBase) null); return false; } if (entity != null && getDistanceSq(entity) <= 2.5F && entity.getEntityBoundingBox().maxY > getEntityBoundingBox().minY && entity.getEntityBoundingBox().minY < getEntityBoundingBox().maxY) entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) (ConfigHandler.INSTANCE.mobAttackDamageMultiplier < 2 ? 4D : 4D * ConfigHandler.INSTANCE.mobAttackDamageMultiplier)); return super.attackEntityAsMob(entity); }
private void meleeAttackPlayer() { if (!getEntityWorld().isRemote && getAttackTarget().getEntityBoundingBox().maxY >= getEntityBoundingBox().minY - 1.0D && getAttackTarget().getEntityBoundingBox().minY <= getEntityBoundingBox().maxY && getSmashCount() == 20) { getEntityWorld().playSound(null, getPosition(), ModSounds.BLAM_SOUND, SoundCategory.HOSTILE, 0.5F, 1.0F); spawnBlamParticles(); getAttackTarget().attackEntityFrom(DamageSource.causeMobDamage(this), (float) (ConfigHandler.INSTANCE.mobAttackDamageMultiplier < 2 ? 6D : 6D * ConfigHandler.INSTANCE.mobAttackDamageMultiplier)); getAttackTarget().addVelocity(-MathHelper.sin(rotationYaw * 3.141593F / 180.0F) * 0.5D, 0.2D, MathHelper.cos(rotationYaw * 3.141593F / 180.0F) * 0.5D); } }
private boolean ram(Entity entity, float knockback, float damage) { if (getTameState() == 0 || !isBeingRidden()) setRammingCharge((byte) 32); if (!getEntityWorld().isRemote && entity.getEntityBoundingBox().maxY >= getEntityBoundingBox().minY && entity.getEntityBoundingBox().minY <= getEntityBoundingBox().maxY && entity.getEntityBoundingBox().maxX >= getEntityBoundingBox().minX - 0.25D && entity.getEntityBoundingBox().minX <= getEntityBoundingBox().maxX + 0.25D && entity.getEntityBoundingBox().maxZ >= getEntityBoundingBox().minZ - 0.25D && entity.getEntityBoundingBox().minZ <= getEntityBoundingBox().maxZ + 0.25D) { entity.attackEntityFrom(DamageSource.causeMobDamage(this), (int) damage); entity.addVelocity(-MathHelper.sin(rotationYaw * 3.141593F / 180.0F) * knockback, 0.4D, MathHelper.cos(rotationYaw * 3.141593F / 180.0F) * knockback); getEntityWorld().playSound((EntityPlayer)null, getPosition(), SoundEvents.ENTITY_PLAYER_BIG_FALL, SoundCategory.HOSTILE, 1.0F, 1.0F); ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, getEntityWorld().getDifficulty().ordinal() * 50, 0)); setRamming(false); } return true; }