Advertisement
Guest User

ExperienceManager.java

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