@Override public void onUserHurt(@Nonnull EntityLivingBase user, @Nonnull Entity attacker, int level) { if (user instanceof EntityPlayer && attacker instanceof EntityLivingBase && !EnchantmentHelper.getEnchantedItem(this, user).isEmpty()) { if (level > getMaxLevel()) { for (Entity e : user.world.getEntitiesWithinAABBExcludingEntity(user, user.getEntityBoundingBox().expand(level * 8, level * 4, level * 8))) { RandomTeleportUtil.teleportEntity(e.world, e, false, false, 16 * level); } } else if (user.getRNG().nextFloat() < (.5f + .1f * level)) { RandomTeleportUtil.teleportEntity(attacker.world, attacker, false, attacker instanceof EntityPlayer || user.getRNG().nextFloat() < .75f, 16 * level); } } }
/** * repair random equipped/held item with mending enchant. * * @param xp amount of xp available to mend with * @return xp left after mending */ private double applyMending(final double xp) { double localXp = xp; final ItemStack tool = EnchantmentHelper.getEnchantedItem(Enchantments.MENDING, citizen); if (!ItemStackUtils.isEmpty(tool) && tool.isItemDamaged()) { //2 xp to heal 1 dmg final double dmgHealed = Math.min(localXp / 2, tool.getItemDamage()); localXp -= dmgHealed * 2; tool.setItemDamage(tool.getItemDamage() - (int) Math.ceil(dmgHealed)); } return localXp; }
@SubscribeEvent(priority = EventPriority.LOWEST) public static void onExperiencePickup(PlayerPickupXpEvent event) { EntityPlayer player = event.getEntityPlayer(); ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantments.MENDING, player); if (!itemstack.isEmpty() && itemstack.isItemDamaged()) { int i = Math.min(xpToDurability(event.getOrb().xpValue), itemstack.getItemDamage()); event.getOrb().xpValue -= durabilityToXp(i); itemstack.setItemDamage(itemstack.getItemDamage() - i); } if (!player.getEntityWorld().isRemote) { for (ItemStack stack : player.inventory.mainInventory) { if (stack.getItem() instanceof ItemExperienceBook) { ItemExperienceBook.addExperience(stack, event.getOrb().xpValue); event.getOrb().xpValue = 0; break; } } } }
xpToGet.setDead(); world.playSound((EntityPlayer) null, xpToGet.posX, xpToGet.posY, xpToGet.posZ, SoundEvents.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.PLAYERS, 0.1F, 0.5F * ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.7F + 1.8F)); ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantments.MENDING, player); if (!itemstack.isEmpty() && itemstack.isItemDamaged()) { int i = Math.min(xpToDurability(xpAmount), itemstack.getItemDamage());