(Possibly?) fixed Tome of Peritia bug of the Negative Speed of Light
This commit is contained in:
parent
5388dbf883
commit
d1bdec7113
|
@ -5,6 +5,7 @@ Version 2.0.1-43
|
|||
- Fixed an NPE with the Gathering of the Forsaken Souls
|
||||
- Fixed Absorption Hearts remaining after the absorption buff ends for the Steadfast Sentient Sword
|
||||
- Updated the Guide (Woooooooooooooo........)
|
||||
- (Possibly?) fixed Tome of Peritia bug of the Negative Speed of Light
|
||||
|
||||
------------------------------------------------------
|
||||
Version 2.0.1-42
|
||||
|
|
|
@ -80,15 +80,13 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
float progress = player.experience;
|
||||
int expToNext = getExperienceForNextLevel(player.experienceLevel);
|
||||
|
||||
float neededExp = (1 - progress) * expToNext;
|
||||
int neededExp = (int) Math.ceil((1 - progress) * expToNext);
|
||||
float containedExp = (float) getStoredExperience(stack);
|
||||
|
||||
if (containedExp >= neededExp)
|
||||
{
|
||||
setStoredExperience(stack, containedExp - neededExp);
|
||||
player.experience = 0;
|
||||
player.experienceTotal = Math.round(player.experienceTotal + neededExp);
|
||||
player.experienceLevel++;
|
||||
addPlayerXP(player, neededExp);
|
||||
|
||||
if (player.experienceLevel % 5 == 0)
|
||||
{
|
||||
|
@ -98,32 +96,45 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
} else
|
||||
{
|
||||
setStoredExperience(stack, 0);
|
||||
progress += containedExp / expToNext;
|
||||
player.experience = progress;
|
||||
player.experienceTotal = Math.round(player.experienceTotal + containedExp);
|
||||
addPlayerXP(player, (int) containedExp);
|
||||
}
|
||||
}
|
||||
|
||||
public void absorbOneLevelExpFromPlayer(ItemStack stack, EntityPlayer player)
|
||||
{
|
||||
float progress = player.experience;
|
||||
|
||||
if (progress > 0)
|
||||
{
|
||||
double expDeduction = getExperienceAcquiredToNext(player.experienceLevel, player.experience);
|
||||
player.experience = 0;
|
||||
player.experienceTotal -= (int) (expDeduction);
|
||||
|
||||
addExperience(stack, expDeduction);
|
||||
} else if (player.experienceLevel > 0)
|
||||
int expDeduction = (int) getExperienceAcquiredToNext(player);
|
||||
if (expDeduction > 0)
|
||||
{
|
||||
addPlayerXP(player, -expDeduction);
|
||||
addExperience(stack, expDeduction);
|
||||
}
|
||||
} else if (progress == 0 && player.experienceLevel > 0)
|
||||
{
|
||||
player.experienceLevel--;
|
||||
int expDeduction = getExperienceForNextLevel(player.experienceLevel);
|
||||
player.experienceTotal -= expDeduction;
|
||||
|
||||
int expDeduction = getExperienceForNextLevel(player.experienceLevel - 1);
|
||||
addPlayerXP(player, -expDeduction);
|
||||
addExperience(stack, expDeduction);
|
||||
}
|
||||
}
|
||||
|
||||
// Credits to Ender IO for some of the experience code, although now modified slightly for my convenience.
|
||||
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 = Math.max(0, getPlayerXP(player) + amount);
|
||||
player.experienceTotal = experience;
|
||||
player.experienceLevel = getLevelForExperience(experience);
|
||||
int expForLevel = getExperienceForLevel(player.experienceLevel);
|
||||
player.experience = (float) (experience - expForLevel) / (float) player.xpBarCap();
|
||||
}
|
||||
|
||||
public static void setStoredExperience(ItemStack stack, double exp)
|
||||
{
|
||||
NBTHelper.checkNBT(stack);
|
||||
|
@ -161,9 +172,28 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
}
|
||||
}
|
||||
|
||||
public static double getExperienceAcquiredToNext(int currentLevel, double progress)
|
||||
//TODO: Change to calculation form.
|
||||
public static int getExperienceForLevel(int level)
|
||||
{
|
||||
return progress * getExperienceForNextLevel(currentLevel);
|
||||
if (level >= 21863)
|
||||
{
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
if (level == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int res = 0;
|
||||
for (int i = 0; i < level; i++)
|
||||
{
|
||||
res += getExperienceForNextLevel(i);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public static double getExperienceAcquiredToNext(EntityPlayer player)
|
||||
{
|
||||
return player.experience * player.xpBarCap();
|
||||
}
|
||||
|
||||
public static int getLevelForExperience(double exp)
|
||||
|
|
Loading…
Reference in a new issue