From c5bc6f8fac2b776613fbfb9abd8dcb8342c739e0 Mon Sep 17 00:00:00 2001 From: okx-code Date: Wed, 29 Aug 2018 21:24:28 +0100 Subject: [PATCH] add placeholders for confirmation message --- build.gradle | 2 +- src/main/java/sh/okx/rankup/Rankup.java | 43 ++++++++++++------- .../sh/okx/rankup/commands/InfoCommand.java | 14 +++--- .../okx/rankup/commands/RankListCommand.java | 30 +++---------- .../sh/okx/rankup/commands/RankupCommand.java | 4 +- src/main/java/sh/okx/rankup/gui/Gui.java | 11 +++-- .../okx/rankup/placeholders/Placeholders.java | 2 +- src/main/java/sh/okx/rankup/ranks/Rank.java | 14 +++--- .../java/sh/okx/rankup/ranks/Rankups.java | 14 +++--- .../requirements/DeductibleRequirement.java | 1 + .../ranks/requirements/GroupRequirement.java | 6 +-- .../PlaytimeMinutesRequirement.java | 2 +- .../ranks/requirements/Requirement.java | 4 +- .../requirements/RequirementRegistry.java | 4 +- src/main/resources/plugin.yml | 2 +- 15 files changed, 73 insertions(+), 80 deletions(-) diff --git a/build.gradle b/build.gradle index c135551..ccf0fca 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.0-alpha.16' +version '3.0-alpha.17' sourceCompatibility = 1.8 diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index da0b980..0da953e 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -5,6 +5,7 @@ import me.clip.placeholderapi.PlaceholderAPI; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -24,9 +25,9 @@ import sh.okx.rankup.messages.Variable; import sh.okx.rankup.placeholders.Placeholders; import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.ranks.Rankups; +import sh.okx.rankup.ranks.requirements.GroupRequirement; import sh.okx.rankup.ranks.requirements.MoneyRequirement; import sh.okx.rankup.ranks.requirements.PlaytimeMinutesRequirement; -import sh.okx.rankup.ranks.requirements.GroupRequirement; import sh.okx.rankup.ranks.requirements.Requirement; import sh.okx.rankup.ranks.requirements.RequirementRegistry; import sh.okx.rankup.ranks.requirements.XpLevelRequirement; @@ -216,7 +217,7 @@ public class Rankup extends JavaPlugin { oldRank.runCommands(player, rank); // apply cooldown last - if(config.getInt("cooldown") > 0) { + if (config.getInt("cooldown") > 0) { cooldowns.put(player, System.currentTimeMillis()); } } @@ -241,18 +242,9 @@ public class Rankup extends JavaPlugin { .send(player); return false; } else if (!rank.checkRequirements(player)) { // check if they can afford it - MessageBuilder builder = - getMessage(rank, Message.REQUIREMENTS_NOT_MET) - .replaceAll(player, rank, rankups.nextRank(rank)); - if (economy != null) { - double balance = economy.getBalance(player); - double amount = rank.getRequirement("money").getValueDouble(); - builder = builder - .replace(Variable.MONEY, formatMoney(amount)) - .replace(Variable.MONEY_NEEDED, formatMoney(Math.max(0, amount - balance))); - } - replaceRequirements(player, builder, rank); - builder.send(player); + replaceMoneyRequirements(getMessage(rank, Message.REQUIREMENTS_NOT_MET) + .replaceAll(player, rank, rankups.nextRank(rank)), player, rank) + .send(player); return false; } else if (cooldowns.containsKey(player)) { long time = System.currentTimeMillis() - cooldowns.get(player); @@ -274,7 +266,25 @@ public class Rankup extends JavaPlugin { return true; } - public void replaceRequirements(Player player, MessageBuilder builder, Rank rank) { + public MessageBuilder replaceMoneyRequirements(MessageBuilder builder, CommandSender sender, Rank rank) { + Requirement money = rank.getRequirement("money"); + Double amount = null; + if (sender instanceof Player && rank.isInRank((Player) sender)) { + if (money != null && economy != null) { + amount = money.getRemaining((Player) sender); + } + replaceRequirements(builder, (Player) sender, rank); + } else { + amount = money.getValueDouble(); + } + if (amount != null && economy != null) { + builder.replace(Variable.MONEY_NEEDED, formatMoney(amount)); + builder.replace(Variable.MONEY, formatMoney(money.getValueDouble())); + } + return builder; + } + + public MessageBuilder replaceRequirements(MessageBuilder builder, Player player, Rank rank) { DecimalFormat simpleFormat = placeholders.getSimpleFormat(); DecimalFormat percentFormat = placeholders.getPercentFormat(); for (Requirement requirement : rank.getRequirements()) { @@ -283,9 +293,10 @@ public class Rankup extends JavaPlugin { replaceRequirements(builder, Variable.AMOUNT_NEEDED, requirement, () -> simpleFormat.format(requirement.getRemaining(player))); replaceRequirements(builder, Variable.PERCENT_LEFT, requirement, () -> percentFormat.format(Math.max(0, (requirement.getRemaining(player) / requirement.getValueDouble()) * 100))); replaceRequirements(builder, Variable.PERCENT_DONE, requirement, () -> percentFormat.format(Math.min(100, (1 - (requirement.getRemaining(player) / requirement.getValueDouble())) * 100))); - } catch(NumberFormatException ignored) { + } catch (NumberFormatException ignored) { } } + return builder; } private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier value) { diff --git a/src/main/java/sh/okx/rankup/commands/InfoCommand.java b/src/main/java/sh/okx/rankup/commands/InfoCommand.java index 4edc09e..5c22a3f 100644 --- a/src/main/java/sh/okx/rankup/commands/InfoCommand.java +++ b/src/main/java/sh/okx/rankup/commands/InfoCommand.java @@ -17,13 +17,13 @@ import java.net.URL; @RequiredArgsConstructor public class InfoCommand implements CommandExecutor { - private String versionMessage; private final Rankup plugin; + private String versionMessage; @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if(args.length > 0) { - if(args[0].equalsIgnoreCase("reload") && sender.hasPermission("rankup.reload")) { + if (args.length > 0) { + if (args[0].equalsIgnoreCase("reload") && sender.hasPermission("rankup.reload")) { plugin.reload(); sender.sendMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "Rankup " + ChatColor.YELLOW + "Reloaded configuration files."); return true; @@ -33,12 +33,12 @@ public class InfoCommand implements CommandExecutor { PluginDescriptionFile description = plugin.getDescription(); sender.sendMessage( ChatColor.GREEN + "" + ChatColor.BOLD + description.getName() + " " + description.getVersion() + - ChatColor.YELLOW + " by " + ChatColor.BLUE + ChatColor.BOLD + String.join(", ", description.getAuthors())); - if(sender.hasPermission("rankup.reload")) { + ChatColor.YELLOW + " by " + ChatColor.BLUE + ChatColor.BOLD + String.join(", ", description.getAuthors())); + if (sender.hasPermission("rankup.reload")) { sender.sendMessage(ChatColor.GREEN + "/" + label + " reload " + ChatColor.YELLOW + "Reloads configuration files."); } - if(sender.hasPermission("rankup.checkversion")) { - if(versionMessage == null) { + if (sender.hasPermission("rankup.checkversion")) { + if (versionMessage == null) { sender.sendMessage(ChatColor.YELLOW + "Checking version..."); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { String message; diff --git a/src/main/java/sh/okx/rankup/commands/RankListCommand.java b/src/main/java/sh/okx/rankup/commands/RankListCommand.java index 1ba6851..a0267fc 100644 --- a/src/main/java/sh/okx/rankup/commands/RankListCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RankListCommand.java @@ -11,7 +11,6 @@ import sh.okx.rankup.messages.MessageBuilder; import sh.okx.rankup.messages.Variable; import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.ranks.Rankups; -import sh.okx.rankup.ranks.requirements.Requirement; @RequiredArgsConstructor public class RankListCommand implements CommandExecutor { @@ -21,7 +20,7 @@ public class RankListCommand implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Rankups rankups = plugin.getRankups(); Rank playerRank = null; - if(sender instanceof Player) { + if (sender instanceof Player) { playerRank = rankups.getRank((Player) sender); } @@ -31,14 +30,14 @@ public class RankListCommand implements CommandExecutor { Rank rank = rankups.getFirstRank(); do { Rank next = rankups.nextRank(rank); - if(rank.equals(playerRank)) { + if (rank.equals(playerRank)) { sendMessage(sender, Message.RANKS_CURRENT, rank, next); message = Message.RANKS_INCOMPLETE; } else { sendMessage(sender, message, rank, next); } rank = next; - } while(!rank.isLastRank()); + } while (!rank.isLastRank()); sendHeaderFooter(sender, playerRank, Message.RANKS_FOOTER); return true; @@ -47,7 +46,7 @@ public class RankListCommand implements CommandExecutor { private void sendHeaderFooter(CommandSender sender, Rank rank, Message type) { MessageBuilder builder = plugin.getMessage(rank, type) .failIfEmpty(); - if(rank == null) { + if (rank == null) { builder.replace(Variable.PLAYER, sender.getName()); } else { builder.replaceAll(sender, rank); @@ -56,27 +55,8 @@ public class RankListCommand implements CommandExecutor { } private void sendMessage(CommandSender player, Message message, Rank oldRank, Rank rank) { - replaceRequirements(plugin.getMessage(oldRank, message) + plugin.replaceMoneyRequirements(plugin.getMessage(oldRank, message) .replaceAll(player, oldRank, rank), player, oldRank) .send(player); } - - private MessageBuilder replaceRequirements(MessageBuilder builder, CommandSender sender, Rank rank) { - Requirement money = rank.getRequirement("money"); - Double amount = null; - if(sender instanceof Player && rank.isInRank((Player) sender)) { - if(money != null && plugin.getEconomy() != null) { - amount = money.getRemaining((Player) sender); - } - plugin.replaceRequirements((Player) sender, builder, rank); - } else { - amount = money.getValueDouble(); - } - if(amount != null && plugin.getEconomy() != null) { - builder.replace(Variable.MONEY_NEEDED, plugin.formatMoney(amount)); - builder.replace(Variable.MONEY, plugin.formatMoney(money.getValueDouble())); - } - return builder; - - } } diff --git a/src/main/java/sh/okx/rankup/commands/RankupCommand.java b/src/main/java/sh/okx/rankup/commands/RankupCommand.java index 0d8282a..afe73f0 100644 --- a/src/main/java/sh/okx/rankup/commands/RankupCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RankupCommand.java @@ -54,8 +54,8 @@ public class RankupCommand implements CommandExecutor { switch (confirmationType) { case "text": confirming.put(player, System.currentTimeMillis()); - plugin.getMessage(rank, Message.CONFIRMATION) - .replaceAll(player, rank, rankups.nextRank(rank)) + plugin.replaceMoneyRequirements(plugin.getMessage(rank, Message.CONFIRMATION) + .replaceAll(player, rank, rankups.nextRank(rank)), player, rank) .send(player); break; case "gui": diff --git a/src/main/java/sh/okx/rankup/gui/Gui.java b/src/main/java/sh/okx/rankup/gui/Gui.java index 516ed3d..3f0f789 100644 --- a/src/main/java/sh/okx/rankup/gui/Gui.java +++ b/src/main/java/sh/okx/rankup/gui/Gui.java @@ -15,7 +15,6 @@ import org.bukkit.inventory.meta.ItemMeta; import sh.okx.rankup.Rankup; import sh.okx.rankup.messages.Message; import sh.okx.rankup.messages.MessageBuilder; -import sh.okx.rankup.messages.Variable; import sh.okx.rankup.ranks.Rank; import java.util.Arrays; @@ -30,10 +29,6 @@ public class Gui implements InventoryHolder { @Getter private ItemStack cancel; - public void open(Player player) { - player.openInventory(inventory); - } - public static Gui of(Player player, Rank oldRank, Rank rank, Rankup plugin) { ConfigurationSection config = plugin.getConfig().getConfigurationSection("gui"); ItemStack[] items = new ItemStack[config.getInt("rows") * 9]; @@ -54,7 +49,7 @@ public class Gui implements InventoryHolder { return gui; } - private static ItemStack getItem(ConfigurationSection section, Player player, Rank oldRank, Rank rank ) { + private static ItemStack getItem(ConfigurationSection section, Player player, Rank oldRank, Rank rank) { boolean legacy = !Bukkit.getVersion().contains("1.13"); String materialName = section.getString("material").toUpperCase(); @@ -118,4 +113,8 @@ public class Gui implements InventoryHolder { } } } + + public void open(Player player) { + player.openInventory(inventory); + } } diff --git a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java index e4f2e66..1bfa7c5 100644 --- a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java +++ b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java @@ -45,7 +45,7 @@ public class Placeholders extends PlaceholderExpansion { } else if (params.startsWith("rank_requirement_")) { String[] parts = params.split("_", 4); return simpleFormat.format(orElse(rankups.getRank(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0)); - } else if(params.startsWith("rank_money_")) { + } else if (params.startsWith("rank_money_")) { String[] parts = params.split("_", 3); return plugin.formatMoney(rankups.getRank(parts[2]).getRequirement("money").getValueDouble()); } diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java index 87a5a04..6b09d10 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rank.java +++ b/src/main/java/sh/okx/rankup/ranks/Rank.java @@ -38,7 +38,7 @@ public class Rank { Set requirements = new HashSet<>(); BinaryOperator reducer = null; ConfigurationSection requirementsSection = section.getConfigurationSection("requirements"); - if(requirementsSection != null) { + if (requirementsSection != null) { for (Map.Entry entry : requirementsSection.getValues(false).entrySet()) { String name = entry.getKey(); String value = String.valueOf(entry.getValue()); @@ -91,7 +91,7 @@ public class Rank { public boolean isInRank(Player player) { String[] groups = plugin.getPermissions().getPlayerGroups(player); for (String group : groups) { - if(group.equalsIgnoreCase(rank)) { + if (group.equalsIgnoreCase(rank)) { return true; } } @@ -103,8 +103,8 @@ public class Rank { } public Requirement getRequirement(String name) { - for(Requirement requirement : requirements) { - if(requirement.getName().equalsIgnoreCase(name)) { + for (Requirement requirement : requirements) { + if (requirement.getName().equalsIgnoreCase(name)) { return requirement; } } @@ -112,8 +112,8 @@ public class Rank { } public void applyRequirements(Player player) { - for(Requirement requirement : requirements) { - if(requirement instanceof DeductibleRequirement) { + for (Requirement requirement : requirements) { + if (requirement instanceof DeductibleRequirement) { ((DeductibleRequirement) requirement).apply(player); } } @@ -133,7 +133,7 @@ public class Rank { @Override public boolean equals(Object o) { - if(!(o instanceof Rank)) { + if (!(o instanceof Rank)) { return false; } return ((Rank) o).name.equals(name); diff --git a/src/main/java/sh/okx/rankup/ranks/Rankups.java b/src/main/java/sh/okx/rankup/ranks/Rankups.java index e33ea42..0b63f59 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rankups.java +++ b/src/main/java/sh/okx/rankup/ranks/Rankups.java @@ -25,10 +25,10 @@ public class Rankups { public Rank getFirstRank() { OUTER: - for(Rank rank : ranks) { + for (Rank rank : ranks) { // see if anything ranks up to this - for(Rank rank0 : ranks) { - if(!rank0.isLastRank() && rank0.getNext().equals(rank.getName())) { + for (Rank rank0 : ranks) { + if (!rank0.isLastRank() && rank0.getNext().equals(rank.getName())) { continue OUTER; } } @@ -39,8 +39,8 @@ public class Rankups { } public Rank getRank(String name) { - for(Rank rank : ranks) { - if(rank.getName().equalsIgnoreCase(name)) { + for (Rank rank : ranks) { + if (rank.getName().equalsIgnoreCase(name)) { return rank; } } @@ -55,11 +55,11 @@ public class Rankups { } public Rank nextRank(Rank rank) { - if(rank.isLastRank()) { + if (rank.isLastRank()) { return null; } - for(Rank nextRank : ranks) { + for (Rank nextRank : ranks) { if (rank.getNext().equalsIgnoreCase(nextRank.getName())) { return nextRank; } diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java b/src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java index b800ea7..3e57eb6 100644 --- a/src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java +++ b/src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java @@ -17,6 +17,7 @@ public abstract class DeductibleRequirement extends Requirement { * For money, this could be taking money away from the player. * You can assume that Requirement#check(Player) has been called, * and has returned true immediately prior to this. + * * @param player the player to take from */ public abstract void apply(Player player); diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java b/src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java index f77b4ac..d62187e 100644 --- a/src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java +++ b/src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java @@ -15,9 +15,9 @@ public class GroupRequirement extends Requirement { @Override public boolean check(Player player) { OUTER: - for(String requiredGroup : getValueString().split(" ")) { - for(String group : plugin.getPermissions().getPlayerGroups(player)) { - if(group.equalsIgnoreCase(requiredGroup)) { + for (String requiredGroup : getValueString().split(" ")) { + for (String group : plugin.getPermissions().getPlayerGroups(player)) { + if (group.equalsIgnoreCase(requiredGroup)) { continue OUTER; } } 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 7406199..136de3c 100644 --- a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java +++ b/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java @@ -12,7 +12,7 @@ public class PlaytimeMinutesRequirement extends Requirement { super(plugin, name); try { playOneTick = Statistic.valueOf("PLAY_ONE_MINUTE"); - } catch(IllegalArgumentException e) { + } catch (IllegalArgumentException e) { // statistic was changed in 1.13. playOneTick = Statistic.valueOf("PLAY_ONE_TICK"); } diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java b/src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java index eb6c849..38d3d61 100644 --- a/src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java +++ b/src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java @@ -1,7 +1,6 @@ package sh.okx.rankup.ranks.requirements; import lombok.Getter; -import lombok.Setter; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; @@ -43,6 +42,7 @@ public abstract class Requirement implements Cloneable { /** * Check if a player meets this requirement + * * @param player the player to check * @return true if they meet the requirement, false otherwise */ @@ -51,11 +51,13 @@ public abstract class Requirement implements Cloneable { /** * Get the remaining amount needed for Requirement#check(Player) to yield true. * This is not required and is only used in placeholders. + * * @param player the player to find the remaining amount of * @return the remaining amount needed. Should be non-negative. */ public double getRemaining(Player player) { return getValueDouble(); } + public abstract Requirement clone(); } diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java b/src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java index 777d7f1..8123069 100644 --- a/src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java +++ b/src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java @@ -11,8 +11,8 @@ public class RequirementRegistry { } public Requirement newRequirement(String name, String value) { - for(Requirement requirement : requirements) { - if(requirement.getName().equalsIgnoreCase(name)) { + for (Requirement requirement : requirements) { + if (requirement.getName().equalsIgnoreCase(name)) { Requirement newRequirement = requirement.clone(); newRequirement.setValue(value); return newRequirement; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1953b7e..e6cf27f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.0-alpha.16 +version: 3.0-alpha.17 main: sh.okx.rankup.Rankup author: Okx depend: [Vault]