From be5ee9003699c1cf518d0ec52913186ea7026731 Mon Sep 17 00:00:00 2001 From: okx-code Date: Thu, 23 Aug 2018 23:32:19 +0100 Subject: [PATCH] update to alpha.10 --- build.gradle | 2 +- src/main/java/sh/okx/rankup/Rankup.java | 21 +++++++++++- .../okx/rankup/commands/RankListCommand.java | 32 +++++++++---------- .../okx/rankup/messages/MessageBuilder.java | 10 +++++- .../java/sh/okx/rankup/messages/Variable.java | 15 +++------ .../okx/rankup/placeholders/Placeholders.java | 4 +-- src/main/java/sh/okx/rankup/ranks/Rank.java | 1 + .../PlaytimeMinutesRequirement.java | 2 +- src/main/resources/plugin.yml | 2 +- 9 files changed, 54 insertions(+), 35 deletions(-) diff --git a/build.gradle b/build.gradle index 3e31ae1..aa3fd6b 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.0-alpha.7' +version '3.0-alpha.10' sourceCompatibility = 1.8 diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index c22ec80..be658de 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -26,11 +26,14 @@ import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.ranks.Rankups; import sh.okx.rankup.ranks.requirements.MoneyRequirement; import sh.okx.rankup.ranks.requirements.PlaytimeMinutesRequirement; +import sh.okx.rankup.ranks.requirements.Requirement; import sh.okx.rankup.ranks.requirements.RequirementRegistry; import sh.okx.rankup.ranks.requirements.XpLevelRequirement; import java.io.File; +import java.text.DecimalFormat; import java.util.List; +import java.util.function.Supplier; public class Rankup extends JavaPlugin { @Getter @@ -87,7 +90,7 @@ public class Rankup extends JavaPlugin { placeholders.register(); } - if (config.getInt("version") != YamlConfiguration.loadConfiguration(getTextResource("config.yml")).getInt("version")) { + if (config.getInt("version") != 0) { getLogger().severe("You are using an outdated config!"); getLogger().severe("This means that some things might not work!"); getLogger().severe("To update, please rename your config files (or the folder they are in),"); @@ -231,9 +234,25 @@ public class Rankup extends JavaPlugin { .replace(Variable.MONEY, formatMoney(amount)) .replace(Variable.MONEY_NEEDED, formatMoney(Math.max(0, amount - balance))); } + replaceRequirements(player, builder, rank); builder.send(player); return false; } return true; } + + public void replaceRequirements(Player player, MessageBuilder builder, Rank rank) { + DecimalFormat simpleFormat = placeholders.getSimpleFormat(); + DecimalFormat percentFormat = placeholders.getPercentFormat(); + for(Requirement requirement : rank.getRequirements()) { + replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getAmount())); + replaceRequirements(builder, Variable.AMOUNT_NEEDED, requirement, () -> simpleFormat.format(requirement.getRemaining(player))); + replaceRequirements(builder, Variable.PERCENT_LEFT, requirement, () -> percentFormat.format((requirement.getRemaining(player) / requirement.getAmount()) * 100)); + replaceRequirements(builder, Variable.PERCENT_DONE, requirement, () -> percentFormat.format((1-(requirement.getRemaining(player) / requirement.getAmount())) * 100)); + } + } + + private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier value) { + builder.replace(variable + " " + requirement.getName(), value.get()); + } } diff --git a/src/main/java/sh/okx/rankup/commands/RankListCommand.java b/src/main/java/sh/okx/rankup/commands/RankListCommand.java index f65dc82..d6a47e4 100644 --- a/src/main/java/sh/okx/rankup/commands/RankListCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RankListCommand.java @@ -13,8 +13,6 @@ import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.ranks.Rankups; import sh.okx.rankup.ranks.requirements.Requirement; -import java.text.DecimalFormat; - @RequiredArgsConstructor public class RankListCommand implements CommandExecutor { private final Rankup plugin; @@ -59,36 +57,36 @@ public class RankListCommand implements CommandExecutor { private void sendMessage(CommandSender player, int state, Rank oldRank, Rank rank) { if(state == 0) { - replaceCost(plugin.getMessage(oldRank, Message.RANKS_COMPLETE) + replaceRequirements(plugin.getMessage(oldRank, Message.RANKS_COMPLETE) .replaceAll(player, oldRank, rank), player, oldRank) .send(player); } else if(state == 1) { - replaceCost(plugin.getMessage(oldRank, Message.RANKS_CURRENT) + replaceRequirements(plugin.getMessage(oldRank, Message.RANKS_CURRENT) .replaceAll(player, oldRank, rank), player, oldRank) .send(player); } else if(state == 2) { - replaceCost(plugin.getMessage(oldRank, Message.RANKS_INCOMPLETE) + replaceRequirements(plugin.getMessage(oldRank, Message.RANKS_INCOMPLETE) .replaceAll(player, oldRank, rank), player, oldRank) .send(player); } } - private MessageBuilder replaceCost(MessageBuilder builder, CommandSender sender, Rank rank) { + private MessageBuilder replaceRequirements(MessageBuilder builder, CommandSender sender, Rank rank) { Requirement money = rank.getRequirement("money"); - if(money == null || plugin.getEconomy() == null) { - return builder; - } - double amount; + Double amount = null; if(sender instanceof Player && rank.isInRank((Player) sender)) { - amount = money.getRemaining((Player) sender); + if(money != null && plugin.getEconomy() != null) { + amount = money.getRemaining((Player) sender); + } + plugin.replaceRequirements((Player) sender, builder, rank); } else { amount = money.getAmount(); } - DecimalFormat percentFormat = plugin.getPlaceholders().getPercentFormat(); - return builder - .replace(Variable.MONEY_NEEDED, plugin.formatMoney(amount)) - .replace(Variable.PERCENT_LEFT, percentFormat.format((amount / money.getAmount()) * 100)) - .replace(Variable.PERCENT_DONE, percentFormat.format((1-(amount / money.getAmount())) * 100)) - .replace(Variable.MONEY, plugin.formatMoney(money.getAmount())); + if(amount != null && plugin.getEconomy() != null) { + builder.replace(Variable.MONEY_NEEDED, plugin.formatMoney(amount)); + builder.replace(Variable.MONEY, plugin.formatMoney(money.getAmount())); + } + return builder; + } } diff --git a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java index cc2cd3b..ede00b7 100644 --- a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java +++ b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java @@ -11,6 +11,8 @@ import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.ranks.requirements.Requirement; import java.text.DecimalFormat; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class MessageBuilder { private String message; @@ -24,7 +26,13 @@ public class MessageBuilder { } public MessageBuilder replace(Variable variable, Object value) { - this.message = variable.replace(message, String.valueOf(value)); + return replace(variable.name(), value); + } + + public MessageBuilder replace(String name, Object value) { + Pattern pattern = Pattern.compile("\\{" + name + "}", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(message); + this.message = matcher.replaceAll(String.valueOf(value)); return this; } diff --git a/src/main/java/sh/okx/rankup/messages/Variable.java b/src/main/java/sh/okx/rankup/messages/Variable.java index d3f18bf..0faed6b 100644 --- a/src/main/java/sh/okx/rankup/messages/Variable.java +++ b/src/main/java/sh/okx/rankup/messages/Variable.java @@ -11,20 +11,13 @@ public enum Variable { RANK_NAME, MONEY, MONEY_NEEDED, + AMOUNT, + AMOUNT_NEEDED, PERCENT_DONE, PERCENT_LEFT; - public static Variable getVariable(String name) { - for(Variable variable : values()) { - if(variable.toString().equalsIgnoreCase(name)) { - return variable; - } - } - return null; - } - - public String replace(String message, String value) { - Pattern pattern = Pattern.compile("\\{" + this + "}", Pattern.CASE_INSENSITIVE); + public String replace(String message, String value, String type) { + Pattern pattern = Pattern.compile("\\{" + type + "_" + this + "}", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(message); return matcher.replaceAll(value); } diff --git a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java index 5d021c2..9cab68d 100644 --- a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java +++ b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java @@ -85,9 +85,9 @@ public class Placeholders extends PlaceholderExpansion { case "percent_left_formatted": return percentFormat.format(Math.max(0D, orElse(rank, r -> (1-(plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount())) * 100, 0).doubleValue())); case "percent_done": - return String.valueOf(Math.max(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue())); + return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue())); case "percent_done_formatted": - return percentFormat.format(Math.max(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue())); + return percentFormat.format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue())); default: return null; } diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java index 1fa1f2e..4b384ff 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rank.java +++ b/src/main/java/sh/okx/rankup/ranks/Rank.java @@ -26,6 +26,7 @@ public class Rank { private final String next; @Getter private final String rank; + @Getter private final Set requirements; private final BinaryOperator reducer; private final List commands; diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java b/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java index f6385c8..e714fde 100644 --- a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java +++ b/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java @@ -35,7 +35,7 @@ public class PlaytimeMinutesRequirement extends Requirement { @Override public double getRemaining(Player player) { - return amount - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE); + return Math.max(0, amount - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE)); } @Override diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f57cfe4..4a5749a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.0-alpha.7 +version: 3.0-alpha.10 main: sh.okx.rankup.Rankup author: Okx depend: [Vault]