(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 an NPE with the Gathering of the Forsaken Souls
|
||||||
- Fixed Absorption Hearts remaining after the absorption buff ends for the Steadfast Sentient Sword
|
- Fixed Absorption Hearts remaining after the absorption buff ends for the Steadfast Sentient Sword
|
||||||
- Updated the Guide (Woooooooooooooo........)
|
- Updated the Guide (Woooooooooooooo........)
|
||||||
|
- (Possibly?) fixed Tome of Peritia bug of the Negative Speed of Light
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
Version 2.0.1-42
|
Version 2.0.1-42
|
||||||
|
|
|
@ -80,15 +80,13 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
||||||
float progress = player.experience;
|
float progress = player.experience;
|
||||||
int expToNext = getExperienceForNextLevel(player.experienceLevel);
|
int expToNext = getExperienceForNextLevel(player.experienceLevel);
|
||||||
|
|
||||||
float neededExp = (1 - progress) * expToNext;
|
int neededExp = (int) Math.ceil((1 - progress) * expToNext);
|
||||||
float containedExp = (float) getStoredExperience(stack);
|
float containedExp = (float) getStoredExperience(stack);
|
||||||
|
|
||||||
if (containedExp >= neededExp)
|
if (containedExp >= neededExp)
|
||||||
{
|
{
|
||||||
setStoredExperience(stack, containedExp - neededExp);
|
setStoredExperience(stack, containedExp - neededExp);
|
||||||
player.experience = 0;
|
addPlayerXP(player, neededExp);
|
||||||
player.experienceTotal = Math.round(player.experienceTotal + neededExp);
|
|
||||||
player.experienceLevel++;
|
|
||||||
|
|
||||||
if (player.experienceLevel % 5 == 0)
|
if (player.experienceLevel % 5 == 0)
|
||||||
{
|
{
|
||||||
|
@ -98,32 +96,45 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
setStoredExperience(stack, 0);
|
setStoredExperience(stack, 0);
|
||||||
progress += containedExp / expToNext;
|
addPlayerXP(player, (int) containedExp);
|
||||||
player.experience = progress;
|
|
||||||
player.experienceTotal = Math.round(player.experienceTotal + containedExp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void absorbOneLevelExpFromPlayer(ItemStack stack, EntityPlayer player)
|
public void absorbOneLevelExpFromPlayer(ItemStack stack, EntityPlayer player)
|
||||||
{
|
{
|
||||||
float progress = player.experience;
|
float progress = player.experience;
|
||||||
|
|
||||||
if (progress > 0)
|
if (progress > 0)
|
||||||
{
|
{
|
||||||
double expDeduction = getExperienceAcquiredToNext(player.experienceLevel, player.experience);
|
int expDeduction = (int) getExperienceAcquiredToNext(player);
|
||||||
player.experience = 0;
|
if (expDeduction > 0)
|
||||||
player.experienceTotal -= (int) (expDeduction);
|
{
|
||||||
|
addPlayerXP(player, -expDeduction);
|
||||||
addExperience(stack, expDeduction);
|
addExperience(stack, expDeduction);
|
||||||
} else if (player.experienceLevel > 0)
|
}
|
||||||
|
} else if (progress == 0 && player.experienceLevel > 0)
|
||||||
{
|
{
|
||||||
player.experienceLevel--;
|
int expDeduction = getExperienceForNextLevel(player.experienceLevel - 1);
|
||||||
int expDeduction = getExperienceForNextLevel(player.experienceLevel);
|
addPlayerXP(player, -expDeduction);
|
||||||
player.experienceTotal -= expDeduction;
|
|
||||||
|
|
||||||
addExperience(stack, 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)
|
public static void setStoredExperience(ItemStack stack, double exp)
|
||||||
{
|
{
|
||||||
NBTHelper.checkNBT(stack);
|
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)
|
public static int getLevelForExperience(double exp)
|
||||||
|
|
Loading…
Reference in a new issue