ExperienceBarWrapper.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.gmail.nossr50.util.experience;
  2. import com.gmail.nossr50.config.experience.ExperienceConfig;
  3. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  4. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  5. import com.gmail.nossr50.locale.LocaleLoader;
  6. import com.gmail.nossr50.util.StringUtils;
  7. import org.bukkit.Server;
  8. import org.bukkit.boss.BarColor;
  9. import org.bukkit.boss.BarStyle;
  10. import org.bukkit.boss.BossBar;
  11. import org.bukkit.entity.Player;
  12. import java.util.List;
  13. /**
  14. * A visual representation of a players skill level progress for a PrimarySkillType
  15. */
  16. public class ExperienceBarWrapper {
  17. private final PrimarySkillType primarySkillType; //Primary Skill
  18. private BossBar bossBar;
  19. private final Server server;
  20. protected final McMMOPlayer mcMMOPlayer;
  21. private int lastLevelUpdated;
  22. /*
  23. * This is stored to help optimize updating the title
  24. */
  25. protected String niceSkillName;
  26. protected String title;
  27. public ExperienceBarWrapper(PrimarySkillType primarySkillType, McMMOPlayer mcMMOPlayer)
  28. {
  29. this.mcMMOPlayer = mcMMOPlayer;
  30. this.server = mcMMOPlayer.getPlayer().getServer(); //Might not be good for bungee to do this
  31. this.primarySkillType = primarySkillType;
  32. title = "";
  33. lastLevelUpdated = 0;
  34. //These vars are stored to help reduce operations involving strings
  35. niceSkillName = StringUtils.getCapitalized(primarySkillType.toString());
  36. //Create the bar
  37. initBar();
  38. }
  39. private void initBar()
  40. {
  41. title = getTitleTemplate();
  42. createBossBar();
  43. }
  44. public void updateTitle() {
  45. title = getTitleTemplate();
  46. bossBar.setTitle(title);
  47. }
  48. private String getTitleTemplate() {
  49. //If they are using extra details
  50. if(ExperienceConfig.getInstance().getAddExtraDetails())
  51. return LocaleLoader.getString("XPBar.Complex.Template", LocaleLoader.getString("XPBar."+niceSkillName, getLevel()), getCurrentXP(), getMaxXP(), getPowerLevel(), getPercentageOfLevel());
  52. return LocaleLoader.getString("XPBar."+niceSkillName, getLevel(), getCurrentXP(), getMaxXP(), getPowerLevel(), getPercentageOfLevel());
  53. }
  54. private int getLevel() {
  55. return mcMMOPlayer.getSkillLevel(primarySkillType);
  56. }
  57. private int getCurrentXP() { return mcMMOPlayer.getSkillXpLevel(primarySkillType); }
  58. private int getMaxXP() { return mcMMOPlayer.getXpToLevel(primarySkillType); }
  59. private int getPowerLevel() { return mcMMOPlayer.getPowerLevel(); }
  60. private int getPercentageOfLevel() { return (int) (mcMMOPlayer.getProgressInCurrentSkillLevel(primarySkillType) * 100); }
  61. public String getTitle() {
  62. return bossBar.getTitle();
  63. }
  64. public void setTitle(String s) {
  65. bossBar.setTitle(s);
  66. }
  67. public BarColor getColor() {
  68. return bossBar.getColor();
  69. }
  70. public void setColor(BarColor barColor) {
  71. bossBar.setColor(barColor);
  72. }
  73. public BarStyle getStyle() {
  74. return bossBar.getStyle();
  75. }
  76. public void setStyle(BarStyle barStyle) {
  77. bossBar.setStyle(barStyle);
  78. }
  79. public void setProgress(double v) {
  80. //Clamp Values
  81. if(v < 0)
  82. bossBar.setProgress(0.0D);
  83. else if(v > 1)
  84. bossBar.setProgress(1.0D);
  85. else
  86. bossBar.setProgress(v);
  87. //Every time progress updates we need to check for a title update
  88. if(getLevel() != lastLevelUpdated || ExperienceConfig.getInstance().getDoExperienceBarsAlwaysUpdateTitle())
  89. {
  90. updateTitle();
  91. lastLevelUpdated = getLevel();
  92. }
  93. }
  94. public double getProgress() {
  95. return bossBar.getProgress();
  96. }
  97. public List<Player> getPlayers() {
  98. return bossBar.getPlayers();
  99. }
  100. public boolean isVisible() {
  101. return bossBar.isVisible();
  102. }
  103. public void hideExperienceBar()
  104. {
  105. bossBar.setVisible(false);
  106. }
  107. public void showExperienceBar()
  108. {
  109. bossBar.setVisible(true);
  110. }
  111. /*public NamespacedKey getKey()
  112. {
  113. return bossBar
  114. }*/
  115. private void createBossBar()
  116. {
  117. bossBar = mcMMOPlayer.getPlayer().getServer().createBossBar(title, ExperienceConfig.getInstance().getExperienceBarColor(primarySkillType), ExperienceConfig.getInstance().getExperienceBarStyle(primarySkillType));
  118. bossBar.addPlayer(mcMMOPlayer.getPlayer());
  119. }
  120. }