@Override public boolean attackEntityFrom(@Nonnull DamageSource par1DamageSource, float par2) { if(getType() == 0 && par1DamageSource.getTrueSource() != summoner || getType() == 1 && par1DamageSource.getTrueSource() instanceof EntityPlayer) return super.attackEntityFrom(par1DamageSource, par2); return false; }
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);
if (wasRecentlyHit && source.getTrueSource() instanceof EntityPlayer) { trueKiller = (EntityPlayer) source.getTrueSource(); super.dropLoot(wasRecentlyHit, lootingModifier, DamageSource.causePlayerDamage(player)); posX = savePosX; posY = savePosY;
@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; }
public boolean effectOnDamage(LivingHurtEvent event, EntityPlayer player, ItemStack stack) { if(!event.getSource().isMagicDamage()) { event.setAmount(event.getAmount() / 2); if(event.getSource().getTrueSource() != null) event.getSource().getTrueSource().attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, player), event.getAmount()); if(event.getAmount() > player.getHealth()) event.setAmount(player.getHealth() - 1); player.world.playSound(null, player.posX, player.posY, player.posZ, ModSounds.holyCloak, SoundCategory.PLAYERS, 1F, 1F); for(int i = 0; i < 30; i++) { double x = player.posX + Math.random() * player.width * 2 - player.width; double y = player.posY + Math.random() * player.height; double z = player.posZ + Math.random() * player.width * 2 - player.width; boolean green = Math.random() > 0.5; Botania.proxy.sparkleFX(x, y, z, 0.3F, green ? 1F : 0.3F, green ? 0.3F : 1F, 0.8F + (float) Math.random() * 0.4F, 3); } return true; } return false; }
@Override public boolean attackEntityFrom(@NotNull final DamageSource damageSource, final float damage) if (damageSource.getDamageType().equals(DamageSource.IN_WALL.getDamageType()) && citizenSleepHandler.isAsleep() || Compatibility.isDynTreePresent() && damageSource.damageType.equals(Compatibility.getDynamicTreeDamage())) final Entity sourceEntity = damageSource.getTrueSource(); if (sourceEntity instanceof EntityCitizen) setLastAttackedEntity(damageSource.getTrueSource()); final boolean result = super.attackEntityFrom(damageSource, damage); if (damageSource.isMagicDamage() || damageSource.isFireDamage())
@Override protected void onImpact(RayTraceResult par1MovingObjectPosition) { if (par1MovingObjectPosition.entityHit != null) { par1MovingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0.0F); } for (int i = 0; i < 32; ++i) { this.world.spawnParticle(EnumParticleTypes.CRIT_MAGIC, this.posX, this.posY + this.rand.nextDouble() * 2.0D, this.posZ, this.rand.nextGaussian(), 0.0D, this.rand.nextGaussian()); } if (!this.world.isRemote) { if (this.getThrower() != null && this.getThrower() instanceof EntityPlayerMP) { EntityHelpers.onEntityCollided(this.world, par1MovingObjectPosition.getBlockPos(), this); this.world.addWeatherEffect(new EntityLightningBolt(this.world, this.posX, this.posY, this.posZ, false)); } this.setDead(); } }
@SubscribeEvent (priority = EventPriority.HIGH) public void handleLivingAttackEvent(LivingAttackEvent event) { Entity entity = event.getEntity(); if (!(entity instanceof EntityPlayer)) { return; } DamageSource source = event.getSource(); if (source instanceof EntityDamageSourceIndirect || source.isUnblockable() || source.isProjectile()) { return; } if (source instanceof EntityDamageSource && ((EntityDamageSource) source).getIsThornsDamage()) { return; } EntityPlayer player = (EntityPlayer) event.getEntityLiving(); ItemStack stack = player.getActiveItemStack(); if (!stack.isEmpty() && stack.getItem() instanceof ItemShieldCore) { ((ItemShieldCore) stack.getItem()).onHit(stack, player, source.getTrueSource()); } }
RayTraceResult rtr = player.getEntityBoundingBox().grow(0.25).calculateIntercept(origPos, newPos); if(rtr != null) player.attackEntityFrom(DamageSource.causeMobDamage(this), 6);
@Override protected float applyPotionDamageCalculations(@Nonnull DamageSource damageSource, float damage) { // same as a vanilla witch damage = super.applyPotionDamageCalculations(damageSource, damage); if (damageSource.getTrueSource() == this) { damage = 0.0F; } if (damageSource.isMagicDamage()) { damage = (float) (damage * 0.15D); } return damage; }
@Override public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, int slot) { if(source.isUnblockable()) return new ArmorProperties(0, 0, 0); return new ArmorProperties(0, damageReduceAmount / 25D, armor.getMaxDamage() + 1 - armor.getItemDamage()); }
@SubscribeEvent public static void onEntityDamage(LivingHurtEvent event) { if(event.getEntityLiving() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); PlayerDataHandler.get(player).damage(event.getAmount()); EntityLivingBase attacker = null; if(event.getSource().getTrueSource() != null && event.getSource().getTrueSource() instanceof EntityLivingBase) attacker = (EntityLivingBase) event.getSource().getTrueSource(); PsiArmorEvent.post(new PsiArmorEvent(player, PsiArmorEvent.DAMAGE, event.getAmount(), attacker)); if(event.getSource().isFireDamage()) PsiArmorEvent.post(new PsiArmorEvent(player, PsiArmorEvent.ON_FIRE)); } }
@Override public void onPlayerAttacksOther(LivingAttackEvent event, EntityPlayer victim, @Nonnull ItemStack armorStack, EntityEquipmentSlot slot) { // Explosions must be ignored in order to prevent infinite recursive hearMeRoar calls. DamageSource source = event.getSource(); Entity sourceEntity = source.getTrueSource(); if (sourceEntity instanceof EntityLivingBase && !source.isExplosion()) { EntityLivingBase entity = (EntityLivingBase) sourceEntity; World world = entity.world; ItemStack chest = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST); if (entity.getHeldItemMainhand().isEmpty() && entity.isSneaking() && chest.getItem() instanceof ItemSteamExosuitArmor && chest.hasTagCompound()) { int consumption = (chest.getTagCompound().getInteger("SteamCapacity") / 2) + ArmorModule.dragonRoarConsumption; if (ChargableUtility.hasPower(entity, consumption)) { if (world.isRemote) { world.playSound(entity.posX, entity.posY, entity.posZ, SoundEvents.ENTITY_ENDERDRAGON_GROWL, SoundCategory.PLAYERS, 5.0F, 0.8F + world.rand.nextFloat() * 0.3F, false); } else { world.createExplosion(entity, entity.posX + 0.5F, entity.posY, entity.posZ + 0.5F, 10.0F, false); } ChargableUtility.drainSteam(chest, consumption, entity); } } } } }
@Override public boolean effectOnDamage(LivingHurtEvent event, EntityPlayer player, ItemStack stack) { if(!event.getSource().isUnblockable()) { int range = 6; List mobs = player.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(player.posX - range, player.posY - range, player.posZ - range, player.posX + range, player.posY + range, player.posZ + range), Predicates.instanceOf(IMob.class)); for(IMob mob : (List<IMob>) mobs) if(mob instanceof EntityLivingBase) { EntityLivingBase entity = (EntityLivingBase) mob; entity.attackEntityFrom(DamageSource.causePlayerDamage(player), event.getAmount()); } player.world.playSound(null, player.posX, player.posY, player.posZ, ModSounds.unholyCloak, SoundCategory.PLAYERS, 1F, 1F); for(int i = 0; i < 90; i++) { float rad = i * 4F * (float) Math.PI / 180F; float xMotion = (float) Math.cos(rad) * 0.2F; float zMotion = (float) Math.sin(rad) * 0.2F; Botania.proxy.wispFX(player.posX, player.posY + 0.5, player.posZ, 0.4F + (float) Math.random() + 0.25F, 0F, 0F, 0.6F + (float) Math.random() * 0.2F, xMotion, 0F, zMotion); } return true; } return false; }
@Override public boolean hitEntity(ItemStack stack, EntityLivingBase target, @Nonnull EntityLivingBase attacker) { if(!target.world.isRemote && target instanceof EntityEnderman && attacker instanceof EntityPlayer) { target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) attacker), 20); } stack.damageItem(1, attacker); return true; }
private void damageEntity(EntityLivingBase target, Entity caster, float damage) { int invTime = target.hurtResistantTime; target.hurtResistantTime = 0; if (caster instanceof EntityLivingBase) { ((EntityLivingBase) caster).setLastAttackedEntity(target); if (caster instanceof EntityPlayer) target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) caster).setMagicDamage(), damage); else target.attackEntityFrom(new DamageSource("generic").setMagicDamage(), damage); } else target.attackEntityFrom(new DamageSource("generic").setMagicDamage(), damage); target.hurtResistantTime = invTime; }
@Override protected void damageEntity(@Nonnull DamageSource par1DamageSource, float par2) { super.damageEntity(par1DamageSource, par2); Entity attacker = par1DamageSource.getImmediateSource(); if(attacker != null) { Vector3 thisVector = Vector3.fromEntityCenter(this); Vector3 playerVector = Vector3.fromEntityCenter(attacker); Vector3 motionVector = thisVector.subtract(playerVector).normalize().multiply(0.75); if(getHealth() > 0) { motionX = -motionVector.x; motionY = 0.5; motionZ = -motionVector.z; tpDelay = 4; spawnPixies = aggro; } aggro = true; } }
@Override public boolean attackEntityFrom( final DamageSource src, final float dmg ) { if( src.isExplosion() ) { this.doExplosion(); return false; } return super.attackEntityFrom( src, dmg ); }
return null; if (shootOnly && !((LivingDeathEvent) event).getSource().isProjectile()) { return null; if (burnOnly && !((LivingDeathEvent) event).getSource().isFireDamage()) { return null; if (explosionOnly && !((LivingDeathEvent) event).getSource().isExplosion()) { return null;
public float getScaledDamage(DamageSource src, float amt) { if (src == DamageType.explosiveMissile || src.isExplosion()) { return amt * (1 - (vehicle.currentExplosionResist * 0.01f)); } else if (src == DamageType.fireMissile || src == DamageSource.IN_FIRE || src == DamageSource.LAVA || src == DamageSource.ON_FIRE || src.isFireDamage()) { return amt * (1 - (vehicle.currentFireResist * 0.01f)); } return amt * (1 - (vehicle.currentGenericResist * 0.01f)); }