From 703342024d5d82459723de292f2f418d6c9d1101 Mon Sep 17 00:00:00 2001 From: okx-code Date: Thu, 23 Aug 2018 21:29:53 +0100 Subject: [PATCH] update to alpha.7 --- build.gradle | 4 +- src/main/java/sh/okx/rankup/Rankup.java | 39 +++++++++++----- .../okx/rankup/commands/RankListCommand.java | 7 ++- .../java/sh/okx/rankup/messages/Message.java | 4 +- .../okx/rankup/messages/MessageBuilder.java | 14 ------ .../okx/rankup/placeholders/Placeholders.java | 40 ++++++++--------- src/main/java/sh/okx/rankup/ranks/Rank.java | 2 +- .../PlaytimeHoursRequirement.java | 37 --------------- .../PlaytimeMinutesRequirement.java | 45 +++++++++++++++++++ src/main/resources/config.yml | 14 +++++- src/main/resources/messages.yml | 7 ++- src/main/resources/plugin.yml | 2 +- src/main/resources/rankups.yml | 2 +- src/test/java/sh/okx/rankup/RankupTest.java | 9 ---- 14 files changed, 120 insertions(+), 106 deletions(-) delete mode 100644 src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeHoursRequirement.java create mode 100644 src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java delete mode 100644 src/test/java/sh/okx/rankup/RankupTest.java diff --git a/build.gradle b/build.gradle index af3101c..3e31ae1 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.0-alpha' +version '3.0-alpha.7' sourceCompatibility = 1.8 @@ -29,7 +29,7 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' apt "org.projectlombok:lombok:1.18.2" - compile 'org.spigotmc:spigot-api:1.13-R0.1-SNAPSHOT' + compile 'org.spigotmc:spigot-api:1.12-R0.1-SNAPSHOT' compile('net.milkbowl.vault:VaultAPI:1.6') { exclude group: 'org.bukkit' } diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 555c56c..c22ec80 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -24,12 +24,13 @@ 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.PlaytimeHoursRequirement; -import sh.okx.rankup.ranks.requirements.XpLevelRequirement; import sh.okx.rankup.ranks.requirements.MoneyRequirement; +import sh.okx.rankup.ranks.requirements.PlaytimeMinutesRequirement; import sh.okx.rankup.ranks.requirements.RequirementRegistry; +import sh.okx.rankup.ranks.requirements.XpLevelRequirement; import java.io.File; +import java.util.List; public class Rankup extends JavaPlugin { @Getter @@ -86,7 +87,7 @@ public class Rankup extends JavaPlugin { placeholders.register(); } - if(config.getInt("version") != YamlConfiguration.loadConfiguration(getTextResource("config.yml")).getInt("version")) { + if (config.getInt("version") != YamlConfiguration.loadConfiguration(getTextResource("config.yml")).getInt("version")) { 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),"); @@ -103,9 +104,9 @@ public class Rankup extends JavaPlugin { * on a plugin reload. */ private void closeInventories() { - for(Player player : Bukkit.getOnlinePlayers()) { + for (Player player : Bukkit.getOnlinePlayers()) { InventoryView view = player.getOpenInventory(); - if(view.getType() == InventoryType.CHEST + if (view.getType() == InventoryType.CHEST && view.getTopInventory().getHolder() instanceof Gui) { player.closeInventory(); } @@ -129,7 +130,7 @@ public class Rankup extends JavaPlugin { private void registerRequirements() { requirementRegistry.addRequirement(new MoneyRequirement(this, "money")); requirementRegistry.addRequirement(new XpLevelRequirement(this, "xp-level")); - requirementRegistry.addRequirement(new PlaytimeHoursRequirement(this, "playtime-hours")); + requirementRegistry.addRequirement(new PlaytimeMinutesRequirement(this, "playtime-minutes")); } private void setupPermissions() { @@ -146,10 +147,26 @@ public class Rankup extends JavaPlugin { } } + public String formatMoney(double money) { + List shortened = config.getStringList("shorten"); + String suffix = ""; + + for (int i = shortened.size(); i > 0; i--) { + double value = Math.pow(10, 3 * i); + if (money >= value) { + money /= value; + suffix = shortened.get(i - 1); + } + } + + String format = placeholders.getMoneyFormat().format(money); + return format + suffix; + } + public MessageBuilder getMessage(Rank rank, Message message) { ConfigurationSection messages = rankups.getConfig() .getConfigurationSection(rank.getName()); - if(messages == null || !messages.isSet(message.getName())) { + if (messages == null || !messages.isSet(message.getName())) { messages = this.messages; } return MessageBuilder.of(messages, message); @@ -160,7 +177,7 @@ public class Rankup extends JavaPlugin { } public void rankup(Player player) { - if(!checkRankup(player)) { + if (!checkRankup(player)) { return; } @@ -187,6 +204,7 @@ public class Rankup extends JavaPlugin { /** * Checks if a player can rankup, * and if they can't, sends the player a message and returns false + * * @param player the player to check if they can rankup * @return true if the player can rankup, false otherwise */ @@ -208,9 +226,10 @@ public class Rankup extends JavaPlugin { .replaceAll(player, rank); if (economy != null) { double balance = economy.getBalance(player); + double amount = rank.getRequirement("money").getAmount(); builder = builder - .replace(Variable.MONEY, balance) - .replace(Variable.MONEY_NEEDED, rank.getRequirement("money").getAmount() - balance); + .replace(Variable.MONEY, formatMoney(amount)) + .replace(Variable.MONEY_NEEDED, formatMoney(Math.max(0, amount - balance))); } builder.send(player); return false; diff --git a/src/main/java/sh/okx/rankup/commands/RankListCommand.java b/src/main/java/sh/okx/rankup/commands/RankListCommand.java index 3c92ba3..f65dc82 100644 --- a/src/main/java/sh/okx/rankup/commands/RankListCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RankListCommand.java @@ -47,7 +47,7 @@ public class RankListCommand implements CommandExecutor { } private void sendHeaderFooter(CommandSender sender, Rank rank, Message type) { - MessageBuilder builder = plugin.getMessage(type) + MessageBuilder builder = plugin.getMessage(rank, type) .failIfEmpty(); if(rank == null) { builder.replace(Variable.PLAYER, sender.getName()); @@ -84,12 +84,11 @@ public class RankListCommand implements CommandExecutor { } else { amount = money.getAmount(); } - DecimalFormat moneyFormat = plugin.getPlaceholders().getMoneyFormat(); DecimalFormat percentFormat = plugin.getPlaceholders().getPercentFormat(); return builder - .replace(Variable.MONEY_NEEDED, moneyFormat.format(amount)) + .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, moneyFormat.format(money.getAmount())); + .replace(Variable.MONEY, plugin.formatMoney(money.getAmount())); } } diff --git a/src/main/java/sh/okx/rankup/messages/Message.java b/src/main/java/sh/okx/rankup/messages/Message.java index f20813f..0fcb916 100644 --- a/src/main/java/sh/okx/rankup/messages/Message.java +++ b/src/main/java/sh/okx/rankup/messages/Message.java @@ -10,8 +10,8 @@ public enum Message { SUCCESS_PRIVATE("rankup.success-private"), CONFIRMATION("rankup.confirmation"), TITLE("rankup.title"), - RANKS_HEADER("ranks.header"), - RANKS_FOOTER("ranks.footer"), + RANKS_HEADER("rankup.ranks.header"), + RANKS_FOOTER("rankup.ranks.footer"), RANKS_COMPLETE("rankup.ranks.complete"), RANKS_CURRENT("rankup.ranks.current"), RANKS_INCOMPLETE("rankup.ranks.incomplete"); diff --git a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java index e522e30..cc2cd3b 100644 --- a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java +++ b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java @@ -54,20 +54,6 @@ public class MessageBuilder { return this; } - public MessageBuilder replaceCost(CommandSender sender, Economy economy, Rank rank) { - Requirement money = rank.getRequirement("money"); - if(money == null || economy == null) { - return this; - } - replace(Variable.MONEY, money.getAmount()); - if(sender instanceof Player && rank.isInRank((Player) sender)) { - replace(Variable.MONEY_NEEDED, money.getRemaining((Player) sender)); - } else { - replace(Variable.MONEY_NEEDED, money.getAmount()); - } - return this; - } - /** * Fails the MessageBuilder if the message is empty. * if this fails, all subsequent calls to that MessageBuilder will do nothing diff --git a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java index d2f56f7..5d021c2 100644 --- a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java +++ b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java @@ -53,9 +53,9 @@ public class Placeholders extends PlaceholderExpansion { case "current_rank_name": return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder"); case "current_rank_money": - return orElsePlaceholder(rank, r -> simplify(r.getRequirement("money").getAmount()), 0); + return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getAmount()), 0)); case "current_rank_money_formatted": - return moneyFormat.format(orElsePlaceholder(rank, r -> r.getRequirement("money").getAmount(), 0)); + return moneyFormat.format(orElse(rank, r -> r.getRequirement("money").getAmount(), 0)); case "next_rank": if (rank == null) { return getPlaceholder("not-in-ladder"); @@ -72,22 +72,22 @@ public class Placeholders extends PlaceholderExpansion { } else { return next.getName(); } - case "next_rank_money": - return orElsePlaceholder(next, r -> simplify(r.getRequirement("money").getAmount()), 0); - case "next_rank_money_formatted": - return moneyFormat.format(orElsePlaceholder(next, r -> r.getRequirement("money").getAmount(), 0)); - case "next_rank_money_left": - return orElsePlaceholder(next, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getAmount()), 0); - case "next_rank_money_left_formatted": - return moneyFormat.format(orElsePlaceholder(next, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getAmount(), 0)); - case "next_rank_percent_left": - return orElsePlaceholder(next, r -> (1-(plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount())) * 100, 0); - case "next_rank_percent_left_formatted": - return percentFormat.format(orElsePlaceholder(next, r -> (1-(plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount())) * 100, 0)); - case "next_rank_percent_done": - return orElsePlaceholder(next, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0); - case "next_rank_percent_done_formatted": - return percentFormat.format(orElsePlaceholder(next, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0)); + case "money": + return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getAmount()), 0)); + case "money_formatted": + return plugin.formatMoney(orElse(rank, r -> r.getRequirement("money").getAmount(), 0D)); + case "money_left": + return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getAmount()), 0).doubleValue())); + case "money_left_formatted": + return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getAmount(), 0D))); + case "percent_left": + return String.valueOf(Math.max(0D, orElse(rank, r -> (1-(plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount())) * 100, 0).doubleValue())); + 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())); + case "percent_done_formatted": + return percentFormat.format(Math.max(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue())); default: return null; } @@ -114,9 +114,9 @@ public class Placeholders extends PlaceholderExpansion { private Number simplify(Number number) { if (number instanceof Float) { - return (float) number % 1 == 0 ? (int) number : number; + return (float) number % 1 == 0 ? number.intValue() : number; } else if (number instanceof Double) { - return (double) number % 1 == 0 ? (long) number : number; + return (double) number % 1 == 0 ? number.longValue() : number; } else { return number; } diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java index 9c5106b..1fa1f2e 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rank.java +++ b/src/main/java/sh/okx/rankup/ranks/Rank.java @@ -39,7 +39,7 @@ public class Rank { if(requirementsSection != null) { for (Map.Entry entry : requirementsSection.getValues(false).entrySet()) { String name = entry.getKey(); - double amount = Double.parseDouble(String.valueOf(entry.getValue())); + double amount = Double.parseDouble(String.valueOf(entry.getValue()).replace(",", "")); Requirement requirement = plugin.getRequirementRegistry().newRequirement(name, amount); if (requirement == null) { diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeHoursRequirement.java b/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeHoursRequirement.java deleted file mode 100644 index 1406f30..0000000 --- a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeHoursRequirement.java +++ /dev/null @@ -1,37 +0,0 @@ -package sh.okx.rankup.ranks.requirements; - -import org.bukkit.Statistic; -import org.bukkit.entity.Player; -import sh.okx.rankup.Rankup; - -public class PlaytimeHoursRequirement extends Requirement { - private static final int TICKS_PER_HOUR = 20 * 60 * 60; - - public PlaytimeHoursRequirement(Rankup plugin, String name) { - super(plugin, name); - } - - protected PlaytimeHoursRequirement(Requirement clone) { - super(clone); - } - - @Override - public boolean check(Player player) { - return player.getStatistic(Statistic.PLAY_ONE_MINUTE) * TICKS_PER_HOUR >= amount; - } - - @Override - public void apply(Player player) { - // well, we can't really take hours of playtime away, can we? - } - - @Override - public double getRemaining(Player player) { - return amount - (player.getStatistic(Statistic.PLAY_ONE_MINUTE) * TICKS_PER_HOUR); - } - - @Override - public Requirement clone() { - return new PlaytimeHoursRequirement(this); - } -} diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java b/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java new file mode 100644 index 0000000..f6385c8 --- /dev/null +++ b/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java @@ -0,0 +1,45 @@ +package sh.okx.rankup.ranks.requirements; + +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; + +public class PlaytimeMinutesRequirement extends Requirement { + private static final int TICKS_PER_MINUTE = 20 * 60; + private Statistic playOneTick; + + public PlaytimeMinutesRequirement(Rankup plugin, String name) { + super(plugin, name); + try { + playOneTick = Statistic.valueOf("PLAY_ONE_MINUTE"); + } catch(IllegalArgumentException e) { + // statistic was changed in 1.13. + playOneTick = Statistic.valueOf("PLAY_ONE_TICK"); + } + } + + protected PlaytimeMinutesRequirement(PlaytimeMinutesRequirement clone) { + super(clone); + this.playOneTick = clone.playOneTick; + } + + @Override + public boolean check(Player player) { + return player.getStatistic(playOneTick) * TICKS_PER_MINUTE >= amount; + } + + @Override + public void apply(Player player) { + // well, we can't really take hours of playtime away, can we? + } + + @Override + public double getRemaining(Player player) { + return amount - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE); + } + + @Override + public Requirement clone() { + return new PlaytimeMinutesRequirement(this); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b15deda..c299894 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -42,4 +42,16 @@ placeholders: # used for current_rank and next_rank placeholders when a player not in anything in rankups.yml not-in-ladder: "None" # used in next_rank placeholders when there is no rankup - highest-rank: "None" \ No newline at end of file + highest-rank: "None" + +# what to shorten money by. +# ie 1000 -> 1k +# set to an empty list to disable +shorten: +- 'k' +- 'M' +- 'B' +- 'T' +- 'Q' +- 'Qu' +- 'S' \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index b94341e..1dc69d7 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -27,9 +27,8 @@ rankup: complete: "&7{OLD_RANK} &8\xbb &7{RANK}" current: "&c{OLD_RANK} &e\xbb &c{RANK}" incomplete: "&r{OLD_RANK} &e\xbb &r{RANK}" -ranks: - # an empty string disables the header/footer - header: '' - footer: '' + # an empty string disables the header/footer + header: '' + footer: '' not-in-ladder: "&cSorry, but we could not find any rankups for the group(s) you are in." \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9d46051..f57cfe4 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.0-alpha +version: 3.0-alpha.7 main: sh.okx.rankup.Rankup author: Okx depend: [Vault] diff --git a/src/main/resources/rankups.yml b/src/main/resources/rankups.yml index 42be2cc..163203a 100644 --- a/src/main/resources/rankups.yml +++ b/src/main/resources/rankups.yml @@ -10,7 +10,7 @@ Aexample: # (ie, this example will charge 1000 money to rankup from A to B) # money: money from the server economy # xp-level: amount of experience levels - # playtime-hours: hours a player has played + # playtime-minutes: minutes a player has played # custom requirements can also be added by other plugins. requirements: money: 1000 diff --git a/src/test/java/sh/okx/rankup/RankupTest.java b/src/test/java/sh/okx/rankup/RankupTest.java deleted file mode 100644 index 8d88f18..0000000 --- a/src/test/java/sh/okx/rankup/RankupTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package sh.okx.rankup; - -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; - -public class RankupTest { -} \ No newline at end of file