Finished the behaviour of the experience book.
This commit is contained in:
parent
dbedcf0745
commit
fe5a544e9d
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.SoundEvents;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
@ -39,7 +40,11 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
{
|
||||
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.experienceTome"));
|
||||
|
||||
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.experienceTome.exp", (int) getStoredExperience(stack)));
|
||||
double storedExp = getStoredExperience(stack);
|
||||
|
||||
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.experienceTome.exp", (int) storedExp));
|
||||
|
||||
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.experienceTome.expLevel", (int) getLevelForExperience(storedExp)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -49,7 +54,8 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
{
|
||||
if (player.isSneaking())
|
||||
absorbOneLevelExpFromPlayer(stack, player);
|
||||
|
||||
else
|
||||
giveOneLevelExpToPlayer(stack, player);
|
||||
}
|
||||
|
||||
return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack);
|
||||
|
@ -63,6 +69,35 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
return ret;
|
||||
}
|
||||
|
||||
public void giveOneLevelExpToPlayer(ItemStack stack, EntityPlayer player)
|
||||
{
|
||||
float progress = player.experience;
|
||||
int expToNext = getExperienceForNextLevel(player.experienceLevel);
|
||||
|
||||
float neededExp = (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++;
|
||||
|
||||
if (player.experienceLevel % 5 == 0)
|
||||
{
|
||||
float f = player.experienceLevel > 30 ? 1.0F : (float) player.experienceLevel / 30.0F;
|
||||
player.worldObj.playSound((EntityPlayer) null, player.posX, player.posY, player.posZ, SoundEvents.entity_player_levelup, player.getSoundCategory(), f * 0.75F, 1.0F);
|
||||
}
|
||||
} else
|
||||
{
|
||||
setStoredExperience(stack, 0);
|
||||
progress += containedExp / expToNext;
|
||||
player.experience = progress;
|
||||
player.experienceTotal = Math.round(player.experienceTotal + containedExp);
|
||||
}
|
||||
}
|
||||
|
||||
public void absorbOneLevelExpFromPlayer(ItemStack stack, EntityPlayer player)
|
||||
{
|
||||
float progress = player.experience;
|
||||
|
@ -76,7 +111,7 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
} else if (player.experienceLevel > 0)
|
||||
{
|
||||
player.experienceLevel--;
|
||||
int expDeduction = getExperienceForNextLevel(player.experienceLevel - 1);
|
||||
int expDeduction = getExperienceForNextLevel(player.experienceLevel);
|
||||
player.experienceTotal -= expDeduction;
|
||||
|
||||
addExperience(stack, expDeduction);
|
||||
|
@ -124,4 +159,23 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
|||
{
|
||||
return progress * getExperienceForNextLevel(currentLevel);
|
||||
}
|
||||
|
||||
public static int getLevelForExperience(double exp)
|
||||
{
|
||||
if (exp <= 352)
|
||||
{
|
||||
return (int) Math.floor(solveParabola(1, 6, -exp));
|
||||
} else if (exp <= 1507)
|
||||
{
|
||||
return (int) Math.floor(solveParabola(2.5, -40.5, 360 - exp));
|
||||
} else
|
||||
{
|
||||
return (int) Math.floor(solveParabola(4.5, -162.5, 2220 - exp));
|
||||
}
|
||||
}
|
||||
|
||||
public static double solveParabola(double a, double b, double c)
|
||||
{
|
||||
return (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -151,6 +151,8 @@ item.BloodMagic.itemFilter.ignoreNBT.name=NBT Item Filter
|
|||
item.BloodMagic.itemFilter.modItems.name=Mod Item Filter
|
||||
item.BloodMagic.itemFilter.oreDict.name=Ore Dictionary Item Filter
|
||||
|
||||
item.BloodMagic.experienceTome.name=Tome of Peritia
|
||||
|
||||
# Blocks
|
||||
tile.BloodMagic.fluid.lifeEssence.name=Life Essence
|
||||
|
||||
|
@ -349,6 +351,7 @@ tooltip.BloodMagic.currentType.steadfast=Contains: Steadfast Will
|
|||
|
||||
tooltip.BloodMagic.experienceTome=A book used to store experience
|
||||
tooltip.BloodMagic.experienceTome.exp=Exp: %0.3f
|
||||
tooltip.BloodMagic.experienceTome.expLevel=Level: %d
|
||||
|
||||
# Ritual
|
||||
ritual.BloodMagic.testRitual=Test Ritual
|
||||
|
|
Loading…
Reference in a new issue