Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.util.List;
  3.  
  4. import org.bukkit.entity.Player;
  5.  
  6. public class ExperienceManager {
  7.  
  8. private Player player;
  9.  
  10. public ExperienceManager(Player player) {
  11. this.player = player;
  12. }
  13.  
  14. public int getTotalExperience() {
  15. int experience = 0;
  16. int level = player.getLevel();
  17. if(level >= 0 && level <= 15) {
  18. experience = (int) Math.ceil(Math.pow(level, 2) + (6 * level));
  19. int requiredExperience = 2 * level + 7;
  20. double currentExp = Double.parseDouble(Float.toString(player.getExp()));
  21. experience += Math.ceil(currentExp * requiredExperience);
  22. return experience;
  23. } else if(level > 15 && level <= 30) {
  24. experience = (int) Math.ceil((2.5 * Math.pow(level, 2) - (40.5 * level) + 360));
  25. int requiredExperience = 5 * level - 38;
  26. double currentExp = Double.parseDouble(Float.toString(player.getExp()));
  27. experience += Math.ceil(currentExp * requiredExperience);
  28. return experience;
  29. } else {
  30. experience = (int) Math.ceil(((4.5 * Math.pow(level, 2) - (162.5 * level) + 2220)));
  31. int requiredExperience = 9 * level - 158;
  32. double currentExp = Double.parseDouble(Float.toString(player.getExp()));
  33. experience += Math.ceil(currentExp * requiredExperience);
  34. return experience;
  35. }
  36. }
  37.  
  38. public void setTotalExperience(int xp) {
  39. //Levels 0 through 15
  40. if(xp >= 0 && xp < 351) {
  41. //Calculate Everything
  42. int a = 1; int b = 6; int c = -xp;
  43. int level = (int) (-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
  44. int xpForLevel = (int) (Math.pow(level, 2) + (6 * level));
  45. int remainder = xp - xpForLevel;
  46. int experienceNeeded = (2 * level) + 7;
  47. float experience = (float) remainder / (float) experienceNeeded;
  48. experience = round(experience, 2);
  49. System.out.println("xpForLevel: " + xpForLevel);
  50. System.out.println(experience);
  51.  
  52. //Set Everything
  53. player.setLevel(level);
  54. player.setExp(experience);
  55. //Levels 16 through 30
  56. } else if(xp >= 352 && xp < 1507) {
  57. //Calculate Everything
  58. double a = 2.5; double b = -40.5; int c = -xp + 360;
  59. double dLevel = (-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
  60. int level = (int) Math.floor(dLevel);
  61. int xpForLevel = (int) (2.5 * Math.pow(level, 2) - (40.5 * level) + 360);
  62. int remainder = xp - xpForLevel;
  63. int experienceNeeded = (5 * level) - 38;
  64. float experience = (float) remainder / (float) experienceNeeded;
  65. experience = round(experience, 2);
  66. System.out.println("xpForLevel: " + xpForLevel);
  67. System.out.println(experience);
  68.  
  69. //Set Everything
  70. player.setLevel(level);
  71. player.setExp(experience);
  72. //Level 31 and greater
  73. } else {
  74. //Calculate Everything
  75. double a = 4.5; double b = -162.5; int c = -xp + 2220;
  76. double dLevel = (-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
  77. int level = (int) Math.floor(dLevel);
  78. int xpForLevel = (int) (4.5 * Math.pow(level, 2) - (162.5 * level) + 2220);
  79. int remainder = xp - xpForLevel;
  80. int experienceNeeded = (9 * level) - 158;
  81. float experience = (float) remainder / (float) experienceNeeded;
  82. experience = round(experience, 2);
  83. System.out.println("xpForLevel: " + xpForLevel);
  84. System.out.println(experience);
  85.  
  86. //Set Everything
  87. player.setLevel(level);
  88. player.setExp(experience);
  89. }
  90. }
  91.  
  92. private float round(float d, int decimalPlace) {
  93. BigDecimal bd = new BigDecimal(Float.toString(d));
  94. bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_DOWN);
  95. return bd.floatValue();
  96. }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement