diff --git a/build.gradle b/build.gradle index aba62b1..7cd38bc 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { } group 'sh.okx' -version '3.5-beta.5' +version '3.5.2' repositories { mavenCentral() @@ -37,7 +37,8 @@ dependencies { } compile 'me.clip:placeholderapi:2.9.2' compile 'com.hm.achievement:advanced-achievements-api:1.1.0' - // if compiling this you will have to download and install mcMMO locally - compile 'com.gmail.nossr50.mcMMO:mcMMO:2.1.+' + compile ('com.github.mcMMO-Dev:mcMMO:ac8042f') { + exclude group: 'com.sk89q.worldguard' + } compile 'com.github.Ben12345rocks:VotingPlugin:5.18.2' } diff --git a/src/main/java/sh/okx/rankup/RankList.java b/src/main/java/sh/okx/rankup/RankList.java index 9a49ecf..2533037 100644 --- a/src/main/java/sh/okx/rankup/RankList.java +++ b/src/main/java/sh/okx/rankup/RankList.java @@ -2,7 +2,6 @@ package sh.okx.rankup; import lombok.Getter; import net.milkbowl.vault.permission.Permission; -import org.apache.commons.lang3.Validate; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; @@ -34,7 +33,7 @@ public class RankList { String name = "'" + section.getName() + "'"; if (section.getConfigurationSection("requirements") != null) { throw new IllegalArgumentException( - "Rankup section " + name + " is using the old requirements system.\n" + + "Rankup/prestige section " + name + " is using the old requirements system.\n" + "Instead of a configuration section, it is now a list of strings.\n" + "For example, instead of \"requirements: money: 1000\" you should use \"requirements: - 'money 1000'\"."); } diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index facf69b..e9507bc 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -226,7 +226,7 @@ public class Rankup extends JavaPlugin { requirementRegistry.addRequirement(new PermissionRequirement(this)); requirementRegistry.addRequirement(new PlaceholderRequirement(this)); requirementRegistry.addRequirement(new WorldRequirement(this)); - requirementRegistry.addRequirement(new BlockBreakRequirement(this)); + //requirementRegistry.addRequirement(new BlockBreakRequirement(this)); requirementRegistry.addRequirement(new PlayerKillsRequirement(this)); requirementRegistry.addRequirement(new MobKillsRequirement(this)); if (Bukkit.getPluginManager().isPluginEnabled("mcMMO")) { @@ -488,12 +488,20 @@ public class Rankup extends JavaPlugin { } private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier value) { - builder.replace(variable + " " + requirement.getName(), value.get()); + builder.replace(variable + " " + requirement.getFullName(), value.get()); } public MessageBuilder getMessage(CommandSender player, Message message, Rank oldRank, String rankName) { + String oldRankName; + if (oldRank instanceof Prestige && oldRank.getRank() == null) { + oldRankName = ((Prestige) oldRank).getFrom(); + } else { + oldRankName = oldRank.getRank(); + } + return replaceMoneyRequirements(getMessage(oldRank, message) - .replaceRanks(player, oldRank, rankName), player, oldRank) + .replaceRanks(player, rankName) + .replace(Variable.OLD_RANK, oldRankName), player, oldRank) .replaceFromTo(oldRank); } diff --git a/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java b/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java index 5065680..b6f8d65 100644 --- a/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java +++ b/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java @@ -47,8 +47,11 @@ public class PrestigeCommand implements CommandExecutor { switch (confirmationType) { case "text": confirming.put(player, System.currentTimeMillis()); + Prestige next = prestiges.next(prestige); + String nextRank = next == null ? prestiges.getLast() : next.getRank(); + plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.PRESTIGE_CONFIRMATION) - .replaceRanks(player, prestige, prestiges.next(prestige).getRank()), player, prestige) + .replaceRanks(player, prestige, nextRank), player, prestige) .replaceFromTo(prestige) .send(player); break; diff --git a/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java b/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java index 492919d..df57c51 100644 --- a/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java +++ b/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java @@ -26,20 +26,19 @@ public class PrestigesCommand implements CommandExecutor { Message message = playerRank == null ? Message.PRESTIGES_INCOMPLETE : Message.PRESTIGES_COMPLETE; Prestige prestige = prestiges.getFirst(); - Prestige next; - while ((next = prestiges.next(prestige)) != null) { + String nextRank; + do { + nextRank = prestige.getNext(); if (prestige.equals(playerRank)) { - plugin.getMessage(sender, Message.PRESTIGES_CURRENT, prestige, next.getRank()) - .replaceFirstPrestige(prestige, prestiges, prestige.getFrom()) + plugin.getMessage(sender, Message.PRESTIGES_CURRENT, prestige, nextRank) .send(sender); message = Message.PRESTIGES_INCOMPLETE; } else { - plugin.getMessage(sender, message, prestige, next.getRank()) + plugin.getMessage(sender, message, prestige, nextRank) .replaceFirstPrestige(prestige, prestiges, prestige.getFrom()) .send(sender); } - prestige = next; - } + } while((prestige = prestiges.getByName(nextRank)) != null); plugin.sendHeaderFooter(sender, playerRank, Message.PRESTIGES_FOOTER); return true; diff --git a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java index 7918f73..54bd8bf 100644 --- a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java +++ b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java @@ -1,7 +1,6 @@ package sh.okx.rankup.messages; import me.clip.placeholderapi.PlaceholderAPI; -import org.apache.commons.lang3.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -11,6 +10,7 @@ import sh.okx.rankup.prestige.Prestige; import sh.okx.rankup.prestige.Prestiges; import sh.okx.rankup.ranks.Rank; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -27,7 +27,7 @@ public class MessageBuilder { private static MessageBuilder of(ConfigurationSection config, String message) { String string = config.getString(message); - Validate.notNull(string, "Configuration message '" + message + "' not found!"); + Objects.requireNonNull(string, "Configuration message '" + message + "' not found!"); return new MessageBuilder(ChatColor.translateAlternateColorCodes('&', string)); } @@ -45,7 +45,6 @@ public class MessageBuilder { public MessageBuilder replaceFirstPrestige(Rank rank, Prestiges prestiges, String with) { if (prestiges != null && prestiges.getFirst().equals(rank)) { replace(Variable.OLD_RANK, with); - replace(Variable.OLD_RANK_NAME, with); } return this; } @@ -64,14 +63,12 @@ public class MessageBuilder { public MessageBuilder replaceRanks(String rankName) { replace(Variable.RANK, rankName); - replace(Variable.RANK_NAME, rankName); return this; } public MessageBuilder replaceRanks(Rank oldRank, String rankName) { replaceRanks(rankName); replace(Variable.OLD_RANK, oldRank.getRank()); - replace(Variable.OLD_RANK_NAME, oldRank.getRank()); 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 506487c..d1aa49c 100644 --- a/src/main/java/sh/okx/rankup/messages/Variable.java +++ b/src/main/java/sh/okx/rankup/messages/Variable.java @@ -3,9 +3,7 @@ package sh.okx.rankup.messages; public enum Variable { PLAYER, OLD_RANK, - OLD_RANK_NAME, RANK, - RANK_NAME, FROM, TO, MONEY, diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java index d175069..a542067 100644 --- a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -1,10 +1,7 @@ package sh.okx.rankup.placeholders; -import com.sk89q.worldedit.extension.platform.Actor; -import com.sk89q.worldguard.WorldGuard; import lombok.RequiredArgsConstructor; import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import org.apache.commons.lang.Validate; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.prestige.Prestige; @@ -78,8 +75,17 @@ public class RankupExpansion extends PlaceholderExpansion { requirePrestiging(prestiges, params); return plugin.formatMoney(orElse(prestige, r -> r.isIn(player) ? r.getRequirement("money").getValueDouble() : 0, 0D)); case "current_rank": - return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder"); + if (rankups.isLast(plugin.getPermissions(), player)) { + return rankups.getLast(); + } else if (rank == null) { + return getPlaceholder("not-in-ladder"); + } else { + return rank.getRank(); + } case "next_rank": + if (rankups.isLast(plugin.getPermissions(), player)) { + return getPlaceholder("highest-rank"); + } return orElsePlaceholder(rank, r -> orElsePlaceholder(rank, Rank::getNext, "highest-rank"), "not-in-ladder"); case "money": return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0)); diff --git a/src/main/java/sh/okx/rankup/prestige/Prestiges.java b/src/main/java/sh/okx/rankup/prestige/Prestiges.java index 968914b..06b288d 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestiges.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestiges.java @@ -17,7 +17,7 @@ public class Prestiges extends RankList { return prestige; } } - throw new IllegalStateException("No prestige found for first prestige (first prestige is counted as a prestige without a rank set)." + + throw new IllegalStateException("No prestige found for first prestige (first prestige is counted as a prestige without a rank set). " + "Disable prestiges in config.yml if you don't want any."); } } diff --git a/src/main/java/sh/okx/rankup/requirements/Requirement.java b/src/main/java/sh/okx/rankup/requirements/Requirement.java index 5b0cb69..568ae02 100644 --- a/src/main/java/sh/okx/rankup/requirements/Requirement.java +++ b/src/main/java/sh/okx/rankup/requirements/Requirement.java @@ -1,7 +1,6 @@ package sh.okx.rankup.requirements; import lombok.Getter; -import lombok.Setter; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; @@ -29,6 +28,7 @@ public abstract class Requirement implements Cloneable { this.name = clone.name; this.value = clone.value; this.sub = clone.sub; + this.subRequirement = clone.subRequirement; } public void setValue(String value) { @@ -57,6 +57,13 @@ public abstract class Requirement implements Cloneable { return Integer.parseInt(value); } + public String getFullName() { + if (hasSubRequirement()) { + return name + "#" + sub; + } else { + return name; + } + } /** * Check if a player meets this requirement diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java index 325ca0a..8a90668 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java @@ -23,7 +23,7 @@ public class BlockBreakRequirement extends ProgressiveRequirement { @Override public double getProgress(Player player) { - return player.getStatistic(Statistic.MINE_BLOCK, Material.matchMaterial(getValueString())); + return player.getStatistic(Statistic.MINE_BLOCK, Material.matchMaterial(getSub())); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java index 11320c9..a7780ee 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java @@ -18,7 +18,7 @@ public class MobKillsRequirement extends ProgressiveRequirement { @Override public double getProgress(Player player) { - return player.getStatistic(Statistic.KILL_ENTITY, EntityType.fromName(getValueString())); + return player.getStatistic(Statistic.KILL_ENTITY, EntityType.fromName(getSub())); } @Override diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1bcc4e2..ff50e2b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.5-beta.5 +version: 3.5.2 main: sh.okx.rankup.Rankup author: Okx depend: [Vault]