From 4c7c4ef7f5d7d3f1e02f5cd812e67bf1c00648a3 Mon Sep 17 00:00:00 2001 From: okx-code Date: Thu, 6 Sep 2018 21:30:21 +0100 Subject: [PATCH] improve prestige customisation add prestiges section of messages.yml add prestige gui title add first rank for prestiges --- build.gradle | 2 +- src/main/java/sh/okx/rankup/Rankup.java | 12 ++++---- .../okx/rankup/commands/PrestigesCommand.java | 20 +++++-------- src/main/java/sh/okx/rankup/gui/Gui.java | 2 +- .../java/sh/okx/rankup/messages/Message.java | 27 +++++++++-------- .../okx/rankup/messages/MessageBuilder.java | 15 +++++++++- .../sh/okx/rankup/prestige/Prestiges.java | 10 ++++--- src/main/resources/config.yml | 2 ++ src/main/resources/messages.yml | 30 +++++++++++-------- src/main/resources/plugin.yml | 2 +- 10 files changed, 72 insertions(+), 50 deletions(-) diff --git a/build.gradle b/build.gradle index 846c31c..f6ffdbe 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.0-alpha.21' +version '3.0-alpha.22' sourceCompatibility = 1.8 diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 1294201..7800048 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -210,7 +210,7 @@ public class Rankup extends JavaPlugin { } public MessageBuilder getMessage(Rank rank, Message message) { - ConfigurationSection messages = rankups.getConfig() + ConfigurationSection messages = (rank instanceof Prestige ? prestiges : rankups).getConfig() .getConfigurationSection(rank.getName()); if (messages == null || !messages.isSet(message.getName())) { messages = this.messages; @@ -298,8 +298,7 @@ public class Rankup extends JavaPlugin { getMessage(rank, Message.NO_RANKUP); } } - getMessage(rank, prestiges == null ? Message.NO_RANKUP : - prestiges.getByPlayer(player).isLast() ? Message.NO_RANKUP : Message.MUST_PRESTIGE) + getMessage(rank, prestiges == null ? Message.NO_RANKUP : prestiges.getByPlayer(player).isLast() ? Message.NO_RANKUP : Message.MUST_PRESTIGE) .replaceRanks(player, rank) .send(player); return false; @@ -398,8 +397,10 @@ public class Rankup extends JavaPlugin { try { replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getValueDouble())); 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))); + 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) { } } @@ -412,6 +413,7 @@ public class Rankup extends JavaPlugin { public void sendMessage(CommandSender player, Message message, Rank oldRank, Rank rank) { replaceMoneyRequirements(getMessage(oldRank, message) + .replaceFirstPrestige(oldRank, prestiges, config.getString("placeholders.first-prestige-rank")) .replaceRanks(player, oldRank, rank), player, oldRank) .replaceFromTo(oldRank) .send(player); diff --git a/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java b/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java index e9d67dc..6aeefdf 100644 --- a/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java +++ b/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java @@ -9,7 +9,6 @@ import sh.okx.rankup.Rankup; import sh.okx.rankup.messages.Message; import sh.okx.rankup.prestige.Prestige; import sh.okx.rankup.prestige.Prestiges; -import sh.okx.rankup.ranks.Rank; @RequiredArgsConstructor public class PrestigesCommand implements CommandExecutor { @@ -27,18 +26,15 @@ public class PrestigesCommand implements CommandExecutor { Message message = playerRank == null ? Message.PRESTIGES_INCOMPLETE : Message.PRESTIGES_COMPLETE; Prestige prestige = prestiges.getFirst(); - if(!prestige.isLast()) { - prestige = prestiges.next(prestige); - while (!prestige.isLast()) { - Prestige next = prestiges.next(prestige); - if (prestige.equals(playerRank)) { - plugin.sendMessage(sender, Message.PRESTIGES_CURRENT, prestige, next); - message = Message.PRESTIGES_INCOMPLETE; - } else { - plugin.sendMessage(sender, message, prestige, next); - } - prestige = next; + while (!prestige.isLast()) { + Prestige next = prestiges.next(prestige); + if (prestige.equals(playerRank)) { + plugin.sendMessage(sender, Message.PRESTIGES_CURRENT, prestige, next); + message = Message.PRESTIGES_INCOMPLETE; + } else { + plugin.sendMessage(sender, message, prestige, next); } + prestige = next; } plugin.sendHeaderFooter(sender, playerRank, Message.PRESTIGES_FOOTER); diff --git a/src/main/java/sh/okx/rankup/gui/Gui.java b/src/main/java/sh/okx/rankup/gui/Gui.java index a98afdd..2eee2c1 100644 --- a/src/main/java/sh/okx/rankup/gui/Gui.java +++ b/src/main/java/sh/okx/rankup/gui/Gui.java @@ -45,7 +45,7 @@ public class Gui implements InventoryHolder { gui.cancel = getItem(config.getConfigurationSection("cancel"), player, oldRank, rank); Inventory inventory = Bukkit.createInventory(gui, items.length, - plugin.getMessage(rank, Message.TITLE) + plugin.getMessage(oldRank, gui.prestige ? Message.PRESTIGE_TITLE : Message.TITLE) .replaceRanks(player, oldRank, rank) .replaceFromTo(oldRank) .toString()); diff --git a/src/main/java/sh/okx/rankup/messages/Message.java b/src/main/java/sh/okx/rankup/messages/Message.java index 6deb689..66d1cf0 100644 --- a/src/main/java/sh/okx/rankup/messages/Message.java +++ b/src/main/java/sh/okx/rankup/messages/Message.java @@ -10,20 +10,21 @@ public enum Message { SUCCESS_PRIVATE("rankup.success-private"), CONFIRMATION("rankup.confirmation"), TITLE("rankup.title"), - 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"), - PRESTIGES_HEADER("rankup.prestiges.header"), - PRESTIGES_FOOTER("rankup.prestiges.footer"), - PRESTIGES_COMPLETE("rankup.prestiges.complete"), - PRESTIGES_CURRENT("rankup.prestiges.current"), - PRESTIGES_INCOMPLETE("rankup.prestiges.incomplete"), + RANKS_HEADER("rankup.list.header"), + RANKS_FOOTER("rankup.list.footer"), + RANKS_COMPLETE("rankup.list.complete"), + RANKS_CURRENT("rankup.list.current"), + RANKS_INCOMPLETE("rankup.list.incomplete"), + PRESTIGES_HEADER("prestige.list.header"), + PRESTIGES_FOOTER("prestige.list.footer"), + PRESTIGES_COMPLETE("prestige.list.complete"), + PRESTIGES_CURRENT("prestige.list.current"), + PRESTIGES_INCOMPLETE("prestige.list.incomplete"), + PRESTIGE_TITLE("prestige.title"), COOLDOWN_SINGULAR("rankup.cooldown.singular"), COOLDOWN_PLURAL("rankup.cooldown.plural"), - NOT_HIGH_ENOUGH("rankup.not-high-enough"), - MUST_PRESTIGE("rankup.must-prestige"); + MUST_PRESTIGE("rankup.must-prestige"), + NOT_HIGH_ENOUGH("prestige.not-high-enough"); @Getter private final String name; @@ -31,4 +32,4 @@ public enum Message { Message(String name) { this.name = name; } -} +} \ No newline at end of file diff --git a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java index ce547b2..7e768c0 100644 --- a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java +++ b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java @@ -6,6 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import sh.okx.rankup.prestige.Prestige; +import sh.okx.rankup.prestige.Prestiges; import sh.okx.rankup.ranks.Rank; import java.util.regex.Matcher; @@ -19,7 +20,11 @@ public class MessageBuilder { } public static MessageBuilder of(ConfigurationSection config, Message message) { - return new MessageBuilder(ChatColor.translateAlternateColorCodes('&', config.getString(message.getName()))); + return MessageBuilder.of(config, message.getName()); + } + + private static MessageBuilder of(ConfigurationSection config, String message) { + return new MessageBuilder(ChatColor.translateAlternateColorCodes('&', config.getString(message))); } public MessageBuilder replace(Variable variable, Object value) { @@ -33,6 +38,14 @@ public class MessageBuilder { return this; } + public MessageBuilder replaceFirstPrestige(Rank rank, Prestiges prestiges, String with) { + if(prestiges.getFirst().equals(rank)) { + replace(Variable.OLD_RANK, with); + replace(Variable.OLD_RANK_NAME, with); + } + return this; + } + public MessageBuilder replaceRanks(CommandSender player, Rank rank) { replace(Variable.PLAYER, player.getName()); replaceRanks(rank); diff --git a/src/main/java/sh/okx/rankup/prestige/Prestiges.java b/src/main/java/sh/okx/rankup/prestige/Prestiges.java index b92d916..95136a4 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestiges.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestiges.java @@ -12,9 +12,11 @@ public class Prestiges extends RankList { @Override public Prestige getByPlayer(Player player) { - return ranks.stream() - .filter(rank -> rank.isIn(player)) - .findFirst() - .orElseGet(this::getFirst); + Prestige prestige = super.getByPlayer(player); + if(prestige == null) { + return getFirst(); + } else { + return prestige; + } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index dbd604b..4258c58 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -57,6 +57,8 @@ placeholders: not-in-ladder: "None" # used in next_rank placeholders when there is no rankup highest-rank: "None" + # used in /prestiges as the {OLD_RANK} placeholder for the first prestige rank + first-prestige-rank: 'D' # what to shorten money by. # ie 1000 -> 1k diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 38d4ecc..0358122 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -13,7 +13,6 @@ rankup: # used for the GUI confirmation title: "Rankup to {RANK}" - not-high-enough: "&cYou cannot prestige at your rank!" must-prestige: "&cYou must prestige to /rankup further!" # you can (and probably should) you override these in rankups.yml @@ -22,26 +21,33 @@ rankup: # {MONEY} {MONEY_NEEDED} {PERCENT_DONE } {PERCENT_LEFT } {AMOUNT } {AMOUNT_NEEDED } # {MONEY} and {MONEY_NEEDED} are different from {AMOUNT money} and {AMOUNT_NEEDED money} in that they use a different format. # here is an example of showing the requirements for just money: - #ranks: + #list: # complete: "&7{OLD_RANK} &8\xbb &7{RANK} &efor &7${MONEY}" - # current: "&c{OLD_RANK} &e\xbb &c{RANK} &efor &a${MONEY} &e{PERCENT_DONE mon ey}%" + # current: "&c{OLD_RANK} &e\xbb &c{RANK} &efor &a${MONEY} &e{PERCENT_DONE money}%" # incomplete: "&r{OLD_RANK} &e\xbb &r{RANK} &efor &a${MONEY}" - ranks: + list: complete: "&7{OLD_RANK} &8\xbb &7{RANK}" current: "&c{OLD_RANK} &e\xbb &c{RANK}" incomplete: "&r{OLD_RANK} &e\xbb &r{RANK}" # an empty string disables the header/footer - header: '' - footer: '' - prestiges: + header: "" + footer: "" + # sent when a player tries to rankup when they are on cooldown + cooldown: + singular: "&cYou must wait {SECONDS_LEFT} more second to rankup again." + plural: "&cYou must wait {SECONDS_LEFT} more seconds to rankup again." +# prestige messages can also be customised +prestige: + title: "Prestige to {RANK}" + list: complete: "&7{OLD_RANK} &8\xbb &7{RANK}" current: "&c{OLD_RANK} &e\xbb &c{RANK}" incomplete: "&r{OLD_RANK} &e\xbb &r{RANK}" - header: '' - footer: '' - # sent when a player tries to rankup when they are on cooldown + header: "" + footer: "" cooldown: - singular: '&cYou must wait {SECONDS_LEFT} more second to rankup again.' - plural: '&cYou must wait {SECONDS_LEFT} more seconds to rankup again.' + singular: "&cYou must wait {SECONDS_LEFT} second to prestige again." + plural: "&cYou must wait {SECONDS_LEFT} more seconds to prestige again." +not-high-enough: "&cYou cannot prestige at your rank!" 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 fc75d55..b750a2d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.0-alpha.21 +version: 3.0-alpha.22 main: sh.okx.rankup.Rankup author: Okx depend: [Vault]