Guest User

Untitled

a guest
Jul 3rd, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.07 KB | None | 0 0
  1. package com.usubzero.meepachievements.achievements;
  2.  
  3. import com.usubzero.meepachievements.MeepAchievements;
  4. import com.usubzero.meepachievements.exceptions.*;
  5. import com.usubzero.meepachievements.storage.MySQL;
  6. import com.usubzero.meepachievements.util.ItemBuilder;
  7. import com.usubzero.meepachievements.util.Util;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.inventory.ItemStack;
  10.  
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import java.util.Set;
  14.  
  15. /**
  16. * Created by ethanfine on 6/25/15.
  17. */
  18. public class AchievementHandler {
  19.  
  20. public static List<Achievement> achievements = new ArrayList<>();
  21.  
  22. /**
  23. *
  24. * @return list of all enabled servers
  25. */
  26.  
  27. public static Set<String> getServers() {
  28. return MeepAchievements.get().getConfig()
  29. .getConfigurationSection("Servers").getKeys(false);
  30. }
  31.  
  32. /**
  33. *
  34. * @param player
  35. * @return list of all acquired achievements for a player
  36. */
  37.  
  38. public static List<Achievement> getAchievements(Player player) {
  39. return Util.listAchievements(
  40. Util.serializeAchievements(MySQL.getAchievements(player.getName())));
  41. }
  42.  
  43. /**
  44. *
  45. * @param server
  46. * @return list of all registered achievements for a specific server
  47. */
  48.  
  49. public static List<Achievement> getAchievements(String server) {
  50. List<Achievement> serverAchievements = new ArrayList<>();
  51. for(Achievement achievement : achievements) {
  52. if(achievement.getServer().equals(server)) {
  53. serverAchievements.add(achievement);
  54. }
  55. }
  56. return serverAchievements;
  57. }
  58.  
  59. /**
  60. *
  61. * @param player
  62. * @param server
  63. * @return list of all acquired achievements for a player on a specific server
  64. * @throws ServerNotFoundException
  65. */
  66.  
  67. public static List<Achievement> getAchievements(Player player, String server)
  68. throws ServerNotFoundException {
  69. if(!getServers().contains(server)) {
  70. throw new ServerNotFoundException("Server '" + server +"' is not associated with MeepAchievements.");
  71. }
  72. List<Achievement> playerAchievements = new ArrayList<>();
  73. for(Achievement achievement : getAchievements(player)) {
  74. if(achievement.getServer().equalsIgnoreCase(server)) {
  75. playerAchievements.add(achievement);
  76. }
  77. }
  78. return playerAchievements;
  79. }
  80.  
  81. /**
  82. *
  83. * @param id
  84. * @return an achievement by it's id
  85. * @throws AchievementNotFoundException
  86. */
  87.  
  88. public static Achievement getAchievement(int id)
  89. throws AchievementNotFoundException {
  90. for(Achievement achievement : achievements) {
  91. if(achievement.getId() == id) {
  92. return achievement;
  93. }
  94. }
  95. throw new AchievementNotFoundException("Could not find achievement with ID '" + id +"'.");
  96. }
  97.  
  98. /**
  99. *
  100. * @param achievementName
  101. * @return an achievement by it's name
  102. * @throws AchievementNotFoundException
  103. */
  104.  
  105. public static Achievement getAchievement(String achievementName)
  106. throws AchievementNotFoundException {
  107. for(Achievement achievement : achievements) {
  108. if(achievement.getName().equalsIgnoreCase(achievementName)) {
  109. return achievement;
  110. }
  111. }
  112. throw new AchievementNotFoundException("Could not find achievement '" + achievementName +"'.");
  113. }
  114.  
  115. /**
  116. * Register an achievement as accomplished for a player
  117. * @param player
  118. * @param achievementName
  119. * @param message
  120. * @param reward
  121. * @throws AchievementAccomplishedException
  122. * @throws AchievementNotFoundException
  123. */
  124.  
  125. public static void achieve(Player player, String achievementName, boolean message, double reward)
  126. throws AchievementAccomplishedException, AchievementNotFoundException {
  127. if(getAchievement(achievementName) == null) {
  128. throw new AchievementNotFoundException("Could not find achievement '" + achievementName +"'.");
  129. }
  130. if(MySQL.hasAchievement(player.getName(), achievementName)) {
  131. throw new AchievementAccomplishedException (
  132. player.getName() +" has already met the '" + achievementName +"' achievement.");
  133. }
  134. MySQL.addAchievement(player.getName(), achievementName);
  135. MeepAchievements.getEconomy().depositPlayer(player, reward);
  136. if(message) {
  137. Util.sendMessage("&c" + player.getName() + " &fhas met the &c'" + achievementName + "' &fachievement!" +
  138. ((reward == 0) ? "" : " Reward: &c" + reward + " meebles"));
  139. }
  140. }
  141.  
  142. /**
  143. * Unregister an achievement from a player
  144. * @param player
  145. * @param achievementName
  146. * @throws AchievementNotAccomplishedException
  147. * @throws AchievementNotFoundException
  148. */
  149.  
  150. public static void unachieve(Player player, String achievementName)
  151. throws AchievementNotAccomplishedException, AchievementNotFoundException {
  152. if(getAchievement(achievementName) == null) {
  153. throw new AchievementNotFoundException("Could not find achievement '" + achievementName +"'.");
  154. }
  155. if(!MySQL.hasAchievement(player.getName(), achievementName)) {
  156. throw new AchievementNotAccomplishedException(
  157. player.getName() +" has not accomplished the '" + achievementName +"' achievement.");
  158. }
  159. MySQL.removeAchievement(player.getName(), achievementName);
  160. }
  161.  
  162. /**
  163. * Create a new achievement
  164. * @param achievementName
  165. * @param server
  166. * @param description
  167. * @param itemStack
  168. * @throws AchievementExistsException
  169. * @throws ServerNotFoundException
  170. */
  171.  
  172. public static void createAchievement(String achievementName, String server, String description, ItemStack itemStack)
  173. throws AchievementExistsException, ServerNotFoundException {
  174. if(!getServers().contains(server)) {
  175. throw new ServerNotFoundException("Server '" + server +"' is not associated with MeepAchievements.");
  176. }
  177. try {
  178. getAchievement(achievementName);
  179. throw new AchievementExistsException("Achievement '" + achievementName +"' already exists.");
  180. } catch (AchievementNotFoundException exception) {
  181. MySQL.createAchievement(achievementName, server, description, new ItemBuilder(itemStack));
  182. }
  183. }
  184.  
  185. /**
  186. * Delete an existing achievement
  187. * @param achievementName
  188. * @throws AchievementNotFoundException
  189. */
  190.  
  191. public static void deleteAchievement(String achievementName)
  192. throws AchievementNotFoundException {
  193. Achievement achievement = getAchievement(achievementName);
  194. if(achievement == null) {
  195. throw new AchievementNotFoundException("Could not find achievement '" + achievementName +"'.");
  196. }
  197. MySQL.deleteAchievement(achievementName);
  198. }
  199.  
  200. }
Advertisement
Add Comment
Please, Sign In to add comment