package crazypants.enderio.xp;
import net.minecraft.entity.player.EntityPlayer;
/**
* Values taken from OpenMods EnchantmentUtils to ensure consistent behavior
* @see {@link https://github.com/OpenMods/OpenModsLib/blob/master/src/main/java/openmods/utils/EnchantmentUtils.java}
*
*/
public class XpUtil {
//Values taken from OpenBlocks to ensure compatibility
public static final int XP_PER_BOTTLE = 8;
public static final int RATIO = 20;
public static final int LIQUID_PER_XP_BOTTLE = XP_PER_BOTTLE * RATIO;
public static int liquidToExperience(int liquid) {
return liquid / RATIO;
}
public static int experienceToLiquid(int xp) {
return xp * RATIO;
}
public static int getLiquidForLevel(int level) {
return experienceToLiquid(getExperienceForLevel(level));
}
public static int getExperienceForLevel(int level) {
if (level == 0) { return 0; }
if (level > 0 && level < 16) {
return level * 17;
} else if (level > 15 && level < 31) {
return (int)(1.5 * Math.pow(level, 2) - 29.5 * level + 360);
} else {
return (int)(3.5 * Math.pow(level, 2) - 151.5 * level + 2220);
}
}
public static int getXpBarCapacity(int level) {
return level >= 30 ? 62 + (level - 30) * 7 : (level >= 15 ? 17 + (level - 15) * 3 : 17);
}
public static int getLevelForExperience(int experience) {
int i = 0;
while (getExperienceForLevel(i) <= experience) {
i++;
}
return i - 1;
}
public static int getPlayerXP(EntityPlayer player) {
return (int) (getExperienceForLevel(player.experienceLevel) + (player.experience * player.xpBarCap()));
}
public static void addPlayerXP(EntityPlayer player, int amount) {
int experience = getPlayerXP(player) + amount;
player.experienceTotal = experience;
player.experienceLevel = getLevelForExperience(experience);
int expForLevel = getExperienceForLevel(player.experienceLevel);
player.experience = (float)(experience - expForLevel) / (float)player.xpBarCap();
}
}