@Override public void onBlock(ItemStack tool, EntityPlayer player, LivingHurtEvent event) { // block fire damage if(event.getSource().isFireDamage()) { event.setCanceled(true); ToolHelper.damageTool(tool, 3, player); } if(event.getSource().getTrueSource() != null) { event.getSource().getTrueSource().setFire(3); } } }
@Override public void onBlock(ItemStack tool, EntityPlayer player, LivingHurtEvent event) { Entity target = event.getSource().getTrueSource(); dealSpikyDamage(true, tool, player, target); }
public boolean effectOnDamage(LivingHurtEvent event, EntityPlayer player, ItemStack stack) { if(!event.getSource().isMagicDamage()) { event.setCanceled(true); 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 yellow = Math.random() > 0.5; Botania.proxy.sparkleFX(x, y, z, yellow ? 1F : 0.3F, yellow ? 1F : 0.3F, yellow ? 0.3F : 1F, 0.8F + (float) Math.random() * 0.4F, 3); } return true; } return false; }
@SubscribeEvent public void onDamageEntity(LivingHurtEvent event) { DamageSource source = event.getSource(); if(source.isProjectile() && !(source.getTrueSource() instanceof FakePlayer) && source.getTrueSource() instanceof EntityPlayerMP && source.getImmediateSource() instanceof EntityArrow) { grantAdvancement((EntityPlayerMP) source.getTrueSource(), ADVANCEMENT_SHOOT_ARROW); } }
@SubscribeEvent(priority = EventPriority.LOW) // lower priority so we get called later since we change tool NBT public void reducedDamageBlocked(LivingHurtEvent event) { // don't affect unblockable or magic damage or explosion damage // projectiles are handled in LivingAttackEvent if(event.getSource().isUnblockable() || event.getSource().isMagicDamage() || event.getSource().isExplosion() || event.getSource().isProjectile() || event.isCanceled()) { return; } if(!shouldBlockDamage(event.getEntityLiving())) { return; } EntityPlayer player = (EntityPlayer) event.getEntityLiving(); ItemStack battlesign = player.getActiveItemStack(); // got hit by something: reduce damage int damage = event.getAmount() < 2f ? 1 : Math.round(event.getAmount() / 2f); // reduce damage. After this event the damage will be halved again because we're blocking so we have to factor this in event.setAmount(event.getAmount() * 0.7f); // reflect damage if(event.getSource().getTrueSource() != null) { event.getSource().getTrueSource().attackEntityFrom(DamageSource.causeThornsDamage(player), event.getAmount() / 2f); damage = damage * 3 / 2; } ToolHelper.damageTool(battlesign, damage, player); }
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; }
boolean isPlayerGettingDamaged = event.getEntityLiving() instanceof EntityPlayer; boolean isClient = event.getEntityLiving().getEntityWorld().isRemote; boolean isReflectedDamage = event.getSource() instanceof EntityDamageSource && ((EntityDamageSource) event.getSource()).getIsThornsDamage(); Entity attacker = event.getSource().getTrueSource();
@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; }
@SubscribeEvent public static void onLivingHurt(LivingHurtEvent event) { EntityLivingBase entity = event.getEntityLiving(); if(entity.isRiding() && entity.getRidingEntity() instanceof EntityLivingBase) entity = (EntityLivingBase) entity.getRidingEntity(); if((entity instanceof EntityZombieHorse || entity instanceof EntitySkeletonHorse) && event.getSource() == DamageSource.FALL && ((AbstractHorse) entity).isTame()) { event.setCanceled(true); } }
@SubscribeEvent public void onEntityDamaged(LivingHurtEvent event) { if (event.getSource().getImmediateSource() instanceof EntityPlayer && event.getEntityLiving() instanceof EntityLiving && !event.getEntityLiving().world.isRemote && Math.random() < 0.6F) { Runnable lambda = () -> { EntityLiving target = (EntityLiving) event.getEntityLiving(); EntityPlayer player = (EntityPlayer) event.getSource().getImmediateSource(); ItemStack amulet = BaublesApi.getBaublesHandler(player).getStackInSlot(6);
@SubscribeEvent public static void onDamageTaken(LivingHurtEvent event) { if(!event.getEntityLiving().world.isRemote && event.getEntityLiving() instanceof EntityPlayer && event.getSource().getTrueSource() instanceof EntityLivingBase) { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); ItemStack stack = PlayerHelper.getFirstHeldItemClass(player, IPixieSpawner.class); float chance = getChance(stack); for (ItemStack element : player.inventory.armorInventory) chance += getChance(element); IItemHandler baubles = BaublesApi.getBaublesHandler(player); for(int i = 0; i < baubles.getSlots(); i++) chance += getChance(baubles.getStackInSlot(i)); if(Math.random() < chance) { EntityPixie pixie = new EntityPixie(player.world); pixie.setPosition(player.posX, player.posY + 2, player.posZ); if(((ItemElementiumHelm) ModItems.elementiumHelm).hasArmorSet(player)) { pixie.setApplyPotionEffect(new PotionEffect(potions[event.getEntityLiving().world.rand.nextInt(potions.length)], 40, 0)); } float dmg = 4; if(!stack.isEmpty() && stack.getItem() == ModItems.elementiumSword) dmg += 2; pixie.setProps((EntityLivingBase) event.getSource().getTrueSource(), player, 0, dmg); pixie.onInitialSpawn(player.world.getDifficultyForLocation(new BlockPos(pixie)), null); player.world.spawnEntity(pixie); } } }
@SubscribeEvent public void onEntityAttacked(LivingHurtEvent event) { Entity attacker = event.getSource().getImmediateSource(); if(attacker instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) attacker; event.getEntityLiving().addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 60, 1)); if(verac) event.getSource().setDamageBypassesArmor(); if(karil) event.getEntityLiving().addPotionEffect(new PotionEffect(MobEffects.WITHER, 60, 1));
@Override public void onPlayerHurt(LivingHurtEvent event, EntityPlayer victim, @Nonnull ItemStack armorStack, EntityEquipmentSlot slot) { DamageSource source = event.getSource(); if (isHotDamageSource(source) && isInHotness(victim)) { event.getEntity().motionY = 0.5D; event.setCanceled(true); } }
@SubscribeEvent public void onAttack(LivingHurtEvent event) { //true source is player that was holding the fang item //immediate source is the entity. and we check the boolean flag to make sure it was one of these, not from illager or some other spawn reason if (event.getSource().getImmediateSource() instanceof EntityEvokerFangs && UtilNBT.getEntityBoolean(event.getSource().getImmediateSource(), NBT_FANG_FROMPLAYER)) { event.setAmount(event.getAmount() * 2); } } }
@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)); } }
@SubscribeEvent public void onHurt(LivingHurtEvent event) { if (event.getEntityLiving().isPotionActive(this) && event.getSource() == DamageSource.IN_WALL) { event.setAmount(0); } }
@SubscribeEvent public void onDamage(LivingHurtEvent event) { if(halveDamage && event.getSource().getTrueSource() != null && event.getSource().getTrueSource() instanceof EntityWitch) { ItemStack hat = event.getEntityLiving().getItemStackFromSlot(EntityEquipmentSlot.HEAD); if(!hat.isEmpty() && hat.getItem() == witch_hat) event.setAmount(event.getAmount() / 2); } }
@SubscribeEvent public static void onLivingHurt(LivingHurtEvent event) { if (event.getEntityLiving() != null && event.getEntityLiving().getRidingEntity() instanceof EntityBroom && event.getSource().getImmediateSource() instanceof IProjectile) { EntityBroom broom = (EntityBroom) event.getEntityLiving().getRidingEntity(); float modifierValue = broom.getModifier(BroomModifiers.WITHERSHIELD); if (modifierValue > 0 && modifierValue > broom.world.rand.nextInt((int) BroomModifiers.WITHERSHIELD.getMaxTierValue())) { event.setCanceled(true); } } }
@SubscribeEvent public void onHurt(LivingHurtEvent event) { Entity e = event.getEntity(); if(e instanceof EntitySquid && !e.world.isRemote && event.getSource().getTrueSource() instanceof EntityPlayer) { List<EntityPlayer> players = e.world.getEntitiesWithinAABB(EntityPlayer.class, e.getEntityBoundingBox().grow(4, 4, 4)); for(EntityPlayer player : players) player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, time, 0)); WorldServer ws = (WorldServer) e.world; ws.spawnParticle(EnumParticleTypes.SMOKE_LARGE, e.posX + e.width / 2, e.posY + e.height / 2, e.posZ + e.width / 2, 100, 0, 0, 0, 0.02); } }
@Override public void onPlayerHurt(LivingHurtEvent event, EntityPlayer victim, @Nonnull ItemStack armorStack, EntityEquipmentSlot slot) { if (event.getSource() == DamageSource.FALL) { boolean hasPower = ChargableUtility.hasPower(event.getEntityLiving(), (int) (event.getAmount() / ArmorModule.fallAssistDivisor)); if (hasPower) { if (event.getAmount() <= 6.0F) { event.setAmount(0F); } event.setAmount(event.getAmount() / 3F); ChargableUtility.drainSteam(victim.getItemStackFromSlot(EntityEquipmentSlot.CHEST), (int) (event.getAmount() / ArmorModule.fallAssistDivisor), victim); if (event.getAmount() == 0.0F) { event.setResult(Event.Result.DENY); event.setCanceled(true); } } } } }