From feca6d5c75cbd691def074c0f32827f26612b438 Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 8 Sep 2018 17:07:07 +0100 Subject: [PATCH] update to 3.0.1 --- build.gradle | 4 +- src/main/java/sh/okx/rankup/Rankup.java | 9 +- .../okx/rankup/placeholders/Placeholders.java | 151 ++--------------- .../rankup/placeholders/RankupExpansion.java | 160 ++++++++++++++++++ src/main/resources/plugin.yml | 2 +- src/main/resources/rankups.yml | 2 +- 6 files changed, 179 insertions(+), 149 deletions(-) create mode 100644 src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java diff --git a/build.gradle b/build.gradle index f6ffdbe..492f4b5 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,7 @@ plugins { } group 'sh.okx' -version '3.0-alpha.22' - -sourceCompatibility = 1.8 +version '3.0.1' repositories { mavenCentral() diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 7800048..70081e2 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -104,23 +104,22 @@ public class Rankup extends JavaPlugin { getCommand("rankup").setExecutor(new RankupCommand(this)); getCommand("rankup3").setExecutor(new InfoCommand(this)); getServer().getPluginManager().registerEvents(new GuiListener(this), this); + + placeholders = new Placeholders(this); + placeholders.register(); } @Override public void onDisable() { closeInventories(); - PlaceholderAPI.unregisterExpansion(placeholders); + placeholders.unregister(); } public void reload() { cooldowns = new WeakHashMap<>(); closeInventories(); loadConfigs(); - if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { - placeholders = new Placeholders(this); - placeholders.register(); - } if (config.getInt("version") != 0) { getLogger().severe("You are using an outdated config!"); diff --git a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java index 049e472..2b2711c 100644 --- a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java +++ b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java @@ -1,7 +1,9 @@ package sh.okx.rankup.placeholders; import lombok.Getter; +import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.prestige.Prestige; @@ -13,8 +15,9 @@ import sh.okx.rankup.requirements.Requirement; import java.text.DecimalFormat; import java.util.function.Function; -public class Placeholders extends PlaceholderExpansion { +public class Placeholders { private final Rankup plugin; + private boolean registered; @Getter private final DecimalFormat moneyFormat; @Getter @@ -29,148 +32,18 @@ public class Placeholders extends PlaceholderExpansion { this.simpleFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.simple-format")); } - @Override - public String onPlaceholderRequest(Player player, String params) { - if (player == null) { - return ""; - } - params = params.toLowerCase(); - - Rankups rankups = plugin.getRankups(); - Rank rank = rankups.getByPlayer(player); - Rank nextRank = rank == null ? null : rankups.next(rank); - - Prestiges prestiges = plugin.getPrestiges(); - Prestige prestige = prestiges.getByPlayer(player); - Prestige nextPrestige = prestiges.next(prestige); - - if (params.startsWith("requirement_")) { - String[] parts = params.split("_", 3); - return getPlaceholderRequirement(player, rank, - parts[1], parts.length > 2 ? parts[2] : ""); - } else if (params.startsWith("rank_requirement_")) { - String[] parts = params.split("_", 4); - return simpleFormat.format(orElse(rankups.getByName(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0)); - } else if (params.startsWith("rank_money_")) { - String[] parts = params.split("_", 4); - double amount = rankups.getByName(parts[2]).getRequirement("money").getValueDouble(); - if(parts.length > 3 && parts[3].equalsIgnoreCase("left")) { - amount = amount - plugin.getEconomy().getBalance(player); - } - return plugin.formatMoney(Math.max(0, amount)); - } - - switch (params) { - case "current_prestige": - return prestige.getRank(); - case "current_prestige_name": - return prestige.getName(); - case "next_prestige": - return orElsePlaceholder(nextPrestige, Prestige::getRank, "highest-rank"); - case "next_prestige_name": - return orElsePlaceholder(nextPrestige, Prestige::getName, "highest-rank"); - case "current_rank": - return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder"); - case "current_rank_name": - return orElsePlaceholder(rank, Rank::getName, "not-in-ladder"); - case "current_rank_money": - return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0)); - case "current_rank_money_formatted": - return moneyFormat.format(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0)); - case "next_rank": - return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getRank, "highest-rank"), "not-in-ladder"); - case "next_rank_name": - return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getName, "highest-rank"), "not-in-ladder"); - case "money": - return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0)); - case "money_formatted": - return plugin.formatMoney(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0D)); - case "money_left": - return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue())); - case "money_left_formatted": - return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble(), 0D))); - case "percent_left": - return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue())); - case "percent_left_formatted": - return percentFormat.format(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue())); - case "percent_done": - return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue())); - case "percent_done_formatted": - return percentFormat.format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue())); - default: - return null; - } - } - - private String getPlaceholderRequirement(Player player, Rank rank, String requirementName, String params) { - if (rank == null) { - return ""; - } - Requirement requirement = rank.getRequirement(requirementName); - switch (params) { - case "": - return simpleFormat.format(orElse(requirement, Requirement::getValueDouble, 0)); - case "left": - return simpleFormat.format(orElse(requirement, r -> r.getRemaining(player), 0)); - case "percent_left": - return percentFormat.format(orElse(requirement, r -> (r.getRemaining(player) / r.getValueDouble()) * 100, 0)); - case "percent_done": - return percentFormat.format(orElse(requirement, r -> (1 - (r.getRemaining(player) / r.getValueDouble())) * 100, 100)); - default: - return null; - } - } - - private Number simplify(Number number) { - if (number instanceof Float) { - return (float) number % 1 == 0 ? number.intValue() : number; - } else if (number instanceof Double) { - return (double) number % 1 == 0 ? number.longValue() : number; + public void register() { + if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { + new RankupExpansion(plugin, this).register(); + registered = true; } else { - return number; + registered = false; } } - private String orElsePlaceholder(T t, Function value, Object fallback) { - if (t == null) { - return getPlaceholder(String.valueOf(fallback)); + public void unregister() { + if(registered) { + PlaceholderAPI.unregisterPlaceholderHook("rankup"); } - - try { - return String.valueOf(value.apply(t)); - } catch (NullPointerException ex) { - return getPlaceholder(String.valueOf(fallback)); - } - } - - private R orElse(T t, Function value, R fallback) { - if (t == null) { - return fallback; - } - - try { - return value.apply(t); - } catch (NullPointerException ex) { - return fallback; - } - } - - private String getPlaceholder(String name) { - return plugin.getConfig().getString("placeholders." + name); - } - - @Override - public String getIdentifier() { - return "rankup"; - } - - @Override - public String getAuthor() { - return String.join(", ", plugin.getDescription().getAuthors()); - } - - @Override - public String getVersion() { - return plugin.getDescription().getVersion(); } } diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java new file mode 100644 index 0000000..ecaa89f --- /dev/null +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -0,0 +1,160 @@ +package sh.okx.rankup.placeholders; + +import lombok.RequiredArgsConstructor; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.prestige.Prestige; +import sh.okx.rankup.prestige.Prestiges; +import sh.okx.rankup.ranks.Rank; +import sh.okx.rankup.ranks.Rankups; +import sh.okx.rankup.requirements.Requirement; + +import java.util.function.Function; + +@RequiredArgsConstructor +public class RankupExpansion extends PlaceholderExpansion { + private final Rankup plugin; + private final Placeholders placeholders; + + @Override + public String onPlaceholderRequest(Player player, String params) { + if (player == null) { + return ""; + } + params = params.toLowerCase(); + + Rankups rankups = plugin.getRankups(); + Rank rank = rankups.getByPlayer(player); + Rank nextRank = rank == null ? null : rankups.next(rank); + + Prestiges prestiges = plugin.getPrestiges(); + Prestige prestige = prestiges.getByPlayer(player); + Prestige nextPrestige = prestiges.next(prestige); + + if (params.startsWith("requirement_")) { + String[] parts = params.split("_", 3); + return getPlaceholderRequirement(player, rank, + parts[1], parts.length > 2 ? parts[2] : ""); + } else if (params.startsWith("rank_requirement_")) { + String[] parts = params.split("_", 4); + return placeholders.getSimpleFormat().format(orElse(rankups.getByName(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0)); + } else if (params.startsWith("rank_money_")) { + String[] parts = params.split("_", 4); + double amount = rankups.getByName(parts[2]).getRequirement("money").getValueDouble(); + if (parts.length > 3 && parts[3].equalsIgnoreCase("left")) { + amount = amount - plugin.getEconomy().getBalance(player); + } + return plugin.formatMoney(Math.max(0, amount)); + } + + switch (params) { + case "current_prestige": + return prestige.getRank(); + case "current_prestige_name": + return prestige.getName(); + case "next_prestige": + return orElsePlaceholder(nextPrestige, Prestige::getRank, "highest-rank"); + case "next_prestige_name": + return orElsePlaceholder(nextPrestige, Prestige::getName, "highest-rank"); + case "current_rank": + return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder"); + case "current_rank_name": + return orElsePlaceholder(rank, Rank::getName, "not-in-ladder"); + case "next_rank": + return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getRank, "highest-rank"), "not-in-ladder"); + case "next_rank_name": + return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getName, "highest-rank"), "not-in-ladder"); + case "money": + return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0)); + case "money_formatted": + return plugin.formatMoney(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0D)); + case "money_left": + return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue())); + case "money_left_formatted": + return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble(), 0D))); + case "percent_left": + return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue())); + case "percent_left_formatted": + return placeholders.getPercentFormat().format(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue())); + case "percent_done": + return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue())); + case "percent_done_formatted": + return placeholders.getPercentFormat().format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue())); + default: + return null; + } + } + + private String getPlaceholderRequirement(Player player, Rank rank, String requirementName, String params) { + if (rank == null) { + return ""; + } + Requirement requirement = rank.getRequirement(requirementName); + switch (params) { + case "": + return placeholders.getSimpleFormat().format(orElse(requirement, Requirement::getValueDouble, 0)); + case "left": + return placeholders.getSimpleFormat().format(orElse(requirement, r -> r.getRemaining(player), 0)); + case "percent_left": + return placeholders.getPercentFormat().format(orElse(requirement, r -> (r.getRemaining(player) / r.getValueDouble()) * 100, 0)); + case "percent_done": + return placeholders.getPercentFormat().format(orElse(requirement, r -> (1 - (r.getRemaining(player) / r.getValueDouble())) * 100, 100)); + default: + return null; + } + } + + private Number simplify(Number number) { + if (number instanceof Float) { + return (float) number % 1 == 0 ? number.intValue() : number; + } else if (number instanceof Double) { + return (double) number % 1 == 0 ? number.longValue() : number; + } else { + return number; + } + } + + private String orElsePlaceholder(T t, Function value, Object fallback) { + if (t == null) { + return getPlaceholder(String.valueOf(fallback)); + } + + try { + return String.valueOf(value.apply(t)); + } catch (NullPointerException ex) { + return getPlaceholder(String.valueOf(fallback)); + } + } + + private R orElse(T t, Function value, R fallback) { + if (t == null) { + return fallback; + } + + try { + return value.apply(t); + } catch (NullPointerException ex) { + return fallback; + } + } + + private String getPlaceholder(String name) { + return plugin.getConfig().getString("placeholders." + name); + } + + @Override + public String getIdentifier() { + return "rankup"; + } + + @Override + public String getAuthor() { + return String.join(", ", plugin.getDescription().getAuthors()); + } + + @Override + public String getVersion() { + return plugin.getDescription().getVersion(); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b750a2d..161600d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.0-alpha.22 +version: 3.0.1 main: sh.okx.rankup.Rankup author: Okx depend: [Vault] diff --git a/src/main/resources/rankups.yml b/src/main/resources/rankups.yml index 9ddc562..482ba6a 100644 --- a/src/main/resources/rankups.yml +++ b/src/main/resources/rankups.yml @@ -41,7 +41,7 @@ Cexample: # you can use this to list the requirements needed. rankup: requirements-not-met: '&cYou need 5000 money and 2 levels of XP to rankup to D.' - ranks: + list: complete: "&7{OLD_RANK} &8\xbb &7{RANK} &e(5000 money, 2 XP levels)" current: "&c{OLD_RANK} &e\xbb &c{RANK} &e(5000 money, 2 XP levels)" incomplete: "&r{OLD_RANK} &e\xbb &r{RANK} &e(5000 money, 2 XP levels)"