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 java.util.List;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.init.SoundEvents;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
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"));
|
||||||
|
|
||||||
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
|
@Override
|
||||||
|
@ -49,7 +54,8 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
||||||
{
|
{
|
||||||
if (player.isSneaking())
|
if (player.isSneaking())
|
||||||
absorbOneLevelExpFromPlayer(stack, player);
|
absorbOneLevelExpFromPlayer(stack, player);
|
||||||
|
else
|
||||||
|
giveOneLevelExpToPlayer(stack, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack);
|
return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack);
|
||||||
|
@ -63,6 +69,35 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
||||||
return ret;
|
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)
|
public void absorbOneLevelExpFromPlayer(ItemStack stack, EntityPlayer player)
|
||||||
{
|
{
|
||||||
float progress = player.experience;
|
float progress = player.experience;
|
||||||
|
@ -76,7 +111,7 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
||||||
} else if (player.experienceLevel > 0)
|
} else if (player.experienceLevel > 0)
|
||||||
{
|
{
|
||||||
player.experienceLevel--;
|
player.experienceLevel--;
|
||||||
int expDeduction = getExperienceForNextLevel(player.experienceLevel - 1);
|
int expDeduction = getExperienceForNextLevel(player.experienceLevel);
|
||||||
player.experienceTotal -= expDeduction;
|
player.experienceTotal -= expDeduction;
|
||||||
|
|
||||||
addExperience(stack, expDeduction);
|
addExperience(stack, expDeduction);
|
||||||
|
@ -124,4 +159,23 @@ public class ItemExperienceBook extends Item implements IVariantProvider
|
||||||
{
|
{
|
||||||
return progress * getExperienceForNextLevel(currentLevel);
|
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.modItems.name=Mod Item Filter
|
||||||
item.BloodMagic.itemFilter.oreDict.name=Ore Dictionary Item Filter
|
item.BloodMagic.itemFilter.oreDict.name=Ore Dictionary Item Filter
|
||||||
|
|
||||||
|
item.BloodMagic.experienceTome.name=Tome of Peritia
|
||||||
|
|
||||||
# Blocks
|
# Blocks
|
||||||
tile.BloodMagic.fluid.lifeEssence.name=Life Essence
|
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=A book used to store experience
|
||||||
tooltip.BloodMagic.experienceTome.exp=Exp: %0.3f
|
tooltip.BloodMagic.experienceTome.exp=Exp: %0.3f
|
||||||
|
tooltip.BloodMagic.experienceTome.expLevel=Level: %d
|
||||||
|
|
||||||
# Ritual
|
# Ritual
|
||||||
ritual.BloodMagic.testRitual=Test Ritual
|
ritual.BloodMagic.testRitual=Test Ritual
|
||||||
|
|
Loading…
Reference in a new issue