diff --git a/build.gradle b/build.gradle index fdb1d7b..08eaf19 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.4.2' +version '3.5-beta' repositories { mavenCentral() @@ -22,17 +22,21 @@ repositories { maven { url 'https://raw.github.com/PyvesB/AdvancedAchievements/mvn-repo/' } + maven { + url 'https://jitpack.io' + } } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile 'org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT' - compile('net.milkbowl.vault:VaultAPI:1.6') { + compile('net.milkbowl.vault:VaultAPI:1.7') { exclude group: 'org.bukkit' } 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.17' + compile 'com.gmail.nossr50.mcMMO:mcMMO:2.1.+' + 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 b6f19f8..3574e50 100644 --- a/src/main/java/sh/okx/rankup/RankList.java +++ b/src/main/java/sh/okx/rankup/RankList.java @@ -1,6 +1,8 @@ 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; @@ -53,11 +55,18 @@ public class RankList { } public T getByName(String name) { + if (name == null) { + System.out.println("n"); + return null; + } for (T rank : ranks) { - if (rank.getRank().equalsIgnoreCase(name)) { + System.out.println(name + " <> " + rank.getNext()); + if (name.equalsIgnoreCase(rank.getRank())) { + System.out.println("y"); return rank; } } + System.out.println("l"); return null; } @@ -72,9 +81,25 @@ public class RankList { return null; } + public String getLast() { + List list = getOrderedList(); + return list.get(list.size() - 1).getNext(); + } + + public boolean isLast(Permission perms, Player player) { + String last = getLast(); + String[] groups = perms.getPlayerGroups(null, player); + for (String group : groups) { + if (group.equalsIgnoreCase(last)) { + return true; + } + } + return false; + } + public T next(T rank) { for (T nextRank : ranks) { - if (rank.getNext().equalsIgnoreCase(nextRank.getRank())) { + if (rank.getNext() != null && rank.getNext().equalsIgnoreCase(nextRank.getRank())) { return nextRank; } } diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 72d4075..3f43acf 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -13,7 +13,11 @@ import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.InventoryView; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; -import sh.okx.rankup.commands.*; +import sh.okx.rankup.commands.InfoCommand; +import sh.okx.rankup.commands.PrestigeCommand; +import sh.okx.rankup.commands.PrestigesCommand; +import sh.okx.rankup.commands.RanksCommand; +import sh.okx.rankup.commands.RankupCommand; import sh.okx.rankup.gui.Gui; import sh.okx.rankup.gui.GuiListener; import sh.okx.rankup.messages.EmptyMessageBuilder; @@ -29,8 +33,11 @@ import sh.okx.rankup.requirements.Requirement; import sh.okx.rankup.requirements.RequirementRegistry; import sh.okx.rankup.requirements.requirement.*; import sh.okx.rankup.requirements.requirement.XpLevelRequirement; -import sh.okx.rankup.requirements.requirement.advancedachievements.*; -import sh.okx.rankup.requirements.requirement.mcmmo.*; +import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsAchievementRequirement; +import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsTotalRequirement; +import sh.okx.rankup.requirements.requirement.mcmmo.McMMOPowerLevelRequirement; +import sh.okx.rankup.requirements.requirement.mcmmo.McMMOSkillRequirement; +import sh.okx.rankup.requirements.requirement.mcmmo.McMMOSkillUtil; import java.io.File; import java.text.DecimalFormat; @@ -125,7 +132,7 @@ public class Rankup extends JavaPlugin { - if (config.getInt("version") < 3) { + if (config.getInt("version") < 4) { getLogger().severe("You are using an outdated config!"); getLogger().severe("This means that some things might not work!"); getLogger().severe("To update, please rename ALL your config files (or the folder they are in),"); @@ -183,7 +190,7 @@ public class Rankup extends JavaPlugin { private void saveLocales() { saveLocale("en"); - saveLocale("pt-br"); + saveLocale("pt-br"); } private void saveLocale(String locale) { @@ -255,8 +262,7 @@ public class Rankup extends JavaPlugin { } public MessageBuilder getMessage(Rank rank, Message message) { - ConfigurationSection messages = (rank instanceof Prestige ? prestiges : rankups).getConfig() - .getConfigurationSection(rank.getRank()); + ConfigurationSection messages = rank.getSection(); if (messages == null || !messages.isSet(message.getName())) { messages = this.messages; } @@ -277,7 +283,7 @@ public class Rankup extends JavaPlugin { long secondsLeft = (long) Math.ceil(timeLeft / 1000f); getMessage(rank, secondsLeft > 1 ? Message.COOLDOWN_PLURAL : Message.COOLDOWN_SINGULAR) .failIfEmpty() - .replaceRanks(player, rank) + .replaceRanks(player, rank.getRank()) .replaceFromTo(rank) .replace(Variable.SECONDS, cooldownSeconds) .replace(Variable.SECONDS_LEFT, secondsLeft) @@ -302,23 +308,23 @@ public class Rankup extends JavaPlugin { } Rank oldRank = rankups.getByPlayer(player); - Rank rank = rankups.next(oldRank); + String next = oldRank.getNext(); oldRank.applyRequirements(player); permissions.playerRemoveGroup(null, player, oldRank.getRank()); - permissions.playerAddGroup(null, player, rank.getRank()); + permissions.playerAddGroup(null, player, next); getMessage(oldRank, Message.SUCCESS_PUBLIC) .failIfEmpty() - .replaceRanks(player, oldRank, rank) + .replaceRanks(player, oldRank, next) .broadcast(); getMessage(oldRank, Message.SUCCESS_PRIVATE) .failIfEmpty() - .replaceRanks(player, oldRank, rank) + .replaceRanks(player, oldRank, next) .send(player); - oldRank.runCommands(player, rank); + oldRank.runCommands(player, next); applyCooldown(player); } @@ -335,23 +341,22 @@ public class Rankup extends JavaPlugin { */ public boolean checkRankup(Player player, boolean message) { Rank rank = rankups.getByPlayer(player); - if (rank == null) { // check if in ladder + if (rankups.isLast(permissions, player)) { + getMessage(prestiges == null ? Message.NO_RANKUP : prestiges.getByPlayer(player).isLast() ? Message.NO_RANKUP : Message.MUST_PRESTIGE) + .failIf(!message) + .replaceRanks(player, rankups.getLast()) + .send(player); + return false; + } else if (rank == null) { // check if in ladder getMessage(Message.NOT_IN_LADDER) .failIf(!message) .replace(Variable.PLAYER, player.getName()) .send(player); return false; - } else if (rank.isLast()) { // check if they are at the highest rank - getMessage(rank, prestiges == null ? Message.NO_RANKUP : prestiges.getByPlayer(player).isLast() ? Message.NO_RANKUP : Message.MUST_PRESTIGE) - .failIf(!message) - .replaceRanks(player, rank) - .send(player); - return false; } else if (!rank.hasRequirements(player)) { // check if they can afford it if (message) { replaceMoneyRequirements(getMessage(rank, Message.REQUIREMENTS_NOT_MET) - .failIf(!message) - .replaceRanks(player, rank, rankups.next(rank)), player, rank) + .replaceRanks(player, rank, rank.getNext()), player, rank) .send(player); } return false; @@ -381,16 +386,16 @@ public class Rankup extends JavaPlugin { getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PUBLIC) .failIfEmpty() - .replaceRanks(player, oldPrestige, prestige) + .replaceRanks(player, oldPrestige, prestige.getRank()) .replaceFromTo(oldPrestige) .broadcast(); getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PRIVATE) .failIfEmpty() - .replaceRanks(player, oldPrestige, prestige) + .replaceRanks(player, oldPrestige, prestige.getRank()) .replaceFromTo(oldPrestige) .send(player); - oldPrestige.runCommands(player, prestige); + oldPrestige.runCommands(player, prestige.getRank()); applyCooldown(player); } @@ -400,23 +405,24 @@ public class Rankup extends JavaPlugin { public boolean checkPrestige(Player player, boolean message) { Prestige prestige = prestiges.getByPlayer(player); + System.out.println(prestige.getNext() + " .."); if (!prestige.isIn(player)) { // check if in ladder getMessage(Message.NOT_HIGH_ENOUGH) .failIf(!message) .replace(Variable.PLAYER, player.getName()) .send(player); return false; - } else if (prestige.isLast()) { // check if they are at the highest rank + } else if (prestiges.getByName(prestige.getNext()) == null) { // check if they are at the highest rank getMessage(prestige, Message.PRESTIGE_NO_PRESTIGE) .failIf(!message) - .replaceRanks(player, prestige) + .replaceRanks(player, prestige.getRank()) .replaceFromTo(prestige) .send(player); return false; } else if (!prestige.hasRequirements(player)) { // check if they can afford it replaceMoneyRequirements(getMessage(prestige, Message.PRESTIGE_REQUIREMENTS_NOT_MET) .failIf(!message) - .replaceRanks(player, prestige, prestiges.next(prestige)), player, prestige) + .replaceRanks(player, prestige, prestiges.next(prestige).getRank()), player, prestige) .replaceFromTo(prestige) .send(player); return false; @@ -476,9 +482,9 @@ public class Rankup extends JavaPlugin { builder.replace(variable + " " + requirement.getName(), value.get()); } - public MessageBuilder getMessage(CommandSender player, Message message, Rank oldRank, Rank rank) { + public MessageBuilder getMessage(CommandSender player, Message message, Rank oldRank, String rankName) { return replaceMoneyRequirements(getMessage(oldRank, message) - .replaceRanks(player, oldRank, rank), player, oldRank) + .replaceRanks(player, oldRank, rankName), player, oldRank) .replaceFromTo(oldRank); } @@ -491,7 +497,7 @@ public class Rankup extends JavaPlugin { } else { builder = getMessage(rank, type) .failIfEmpty() - .replaceRanks(sender, rank) + .replaceRanks(sender, rank.getRank()) .replaceFromTo(rank); } builder.send(sender); diff --git a/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java b/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java index c827ee6..5065680 100644 --- a/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java +++ b/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java @@ -48,12 +48,12 @@ public class PrestigeCommand implements CommandExecutor { case "text": confirming.put(player, System.currentTimeMillis()); plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.PRESTIGE_CONFIRMATION) - .replaceRanks(player, prestige, prestiges.next(prestige)), player, prestige) + .replaceRanks(player, prestige, prestiges.next(prestige).getRank()), player, prestige) .replaceFromTo(prestige) .send(player); break; case "gui": - Gui.of(player, prestige, prestiges.next(prestige), plugin).open(player); + Gui.of(player, prestige, prestige.getNext(), plugin).open(player); break; case "none": plugin.prestige(player); diff --git a/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java b/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java index 48f0e27..492919d 100644 --- a/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java +++ b/src/main/java/sh/okx/rankup/commands/PrestigesCommand.java @@ -29,12 +29,12 @@ public class PrestigesCommand implements CommandExecutor { Prestige next; while ((next = prestiges.next(prestige)) != null) { if (prestige.equals(playerRank)) { - plugin.getMessage(sender, Message.PRESTIGES_CURRENT, prestige, next) + plugin.getMessage(sender, Message.PRESTIGES_CURRENT, prestige, next.getRank()) .replaceFirstPrestige(prestige, prestiges, prestige.getFrom()) .send(sender); message = Message.PRESTIGES_INCOMPLETE; } else { - plugin.getMessage(sender, message, prestige, next) + plugin.getMessage(sender, message, prestige, next.getRank()) .replaceFirstPrestige(prestige, prestiges, prestige.getFrom()) .send(sender); } diff --git a/src/main/java/sh/okx/rankup/commands/RanksCommand.java b/src/main/java/sh/okx/rankup/commands/RanksCommand.java index 74d1873..ca7c5ea 100644 --- a/src/main/java/sh/okx/rankup/commands/RanksCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RanksCommand.java @@ -26,15 +26,15 @@ public class RanksCommand implements CommandExecutor { Message message = playerRank == null ? Message.RANKS_INCOMPLETE : Message.RANKS_COMPLETE; Rank rank = rankups.getFirst(); - Rank next; - while ((next = rankups.next(rank)) != null) { + while (rank != null) { + String name = rank.getNext(); if (rank.equals(playerRank)) { - plugin.getMessage(sender, Message.RANKS_CURRENT, rank, next).send(sender); + plugin.getMessage(sender, Message.RANKS_CURRENT, rank, name).send(sender); message = Message.RANKS_INCOMPLETE; } else { - plugin.getMessage(sender, message, rank, next).send(sender); + plugin.getMessage(sender, message, rank, name).send(sender); } - rank = next; + rank = rankups.getByName(name); } plugin.sendHeaderFooter(sender, playerRank, Message.RANKS_FOOTER); return true; diff --git a/src/main/java/sh/okx/rankup/commands/RankupCommand.java b/src/main/java/sh/okx/rankup/commands/RankupCommand.java index 3c251b8..0103e63 100644 --- a/src/main/java/sh/okx/rankup/commands/RankupCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RankupCommand.java @@ -35,13 +35,14 @@ public class RankupCommand implements CommandExecutor { if (!plugin.checkRankup(player)) { return true; } - Rank next = rankups.next(rank); + /*Rank next = rankups.next(rank); if (next == null) { plugin.getLogger().severe("Rankup from " + rank.getRank() + " to " + rank.getNext() + " is defined but " + rank.getNext() + " does not exist."); plugin.getMessage(Message.INVALID_RANKUP).failIfEmpty().send(player); return true; - } + }*/ + String next = rank.getNext(); FileConfiguration config = plugin.getConfig(); String confirmationType = config.getString("confirmation-type").toLowerCase(); diff --git a/src/main/java/sh/okx/rankup/gui/Gui.java b/src/main/java/sh/okx/rankup/gui/Gui.java index 51c7d69..55ca1da 100644 --- a/src/main/java/sh/okx/rankup/gui/Gui.java +++ b/src/main/java/sh/okx/rankup/gui/Gui.java @@ -19,6 +19,7 @@ import sh.okx.rankup.prestige.Prestige; import sh.okx.rankup.ranks.Rank; import java.util.Arrays; +import java.util.Objects; import java.util.stream.Collectors; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -32,7 +33,7 @@ public class Gui implements InventoryHolder { @Getter private boolean prestige; - public static Gui of(Player player, Rank oldRank, Rank rank, Rankup plugin) { + public static Gui of(Player player, Rank oldRank, String rank, Rankup plugin) { ConfigurationSection config = plugin.getConfig().getConfigurationSection("gui"); ItemStack[] items = new ItemStack[config.getInt("rows") * 9]; @@ -53,14 +54,14 @@ public class Gui implements InventoryHolder { plugin.replaceMoneyRequirements( plugin.getMessage(oldRank, gui.prestige ? Message.PRESTIGE_TITLE : Message.TITLE) .replaceRanks(player, oldRank, rank) - .replaceFromTo(oldRank), player, rank).toString()); + .replaceFromTo(oldRank), player, oldRank).toString()); inventory.setContents(items); gui.inventory = inventory; return gui; } @SuppressWarnings("deprecation") - private static ItemStack getItem(Rankup plugin, String name, Player player, Rank oldRank, Rank rank) { + private static ItemStack getItem(Rankup plugin, String name, Player player, Rank oldRank, String rank) { ConfigurationSection section = plugin.getConfig().getConfigurationSection("gui").getConfigurationSection(name); String materialName = section.getString("material").toUpperCase(); @@ -99,13 +100,14 @@ public class Gui implements InventoryHolder { return item; } - private static String format(Rankup plugin, String message, Player player, Rank oldRank, Rank rank) { + private static String format(Rankup plugin, String message, Player player, Rank oldRank, String rank) { return plugin.replaceMoneyRequirements(new MessageBuilder(ChatColor.translateAlternateColorCodes('&', message)) .replaceRanks(player, oldRank, rank), player, oldRank) .toString(); } private static void addItem(ItemStack[] items, ConfigurationSection section, ItemStack item) { + Objects.requireNonNull(section, "GUI configuration section not found"); if (section.getName().equalsIgnoreCase("fill")) { for (int i = 0; i < items.length; i++) { if (items[i] == null) { diff --git a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java index f109b29..7918f73 100644 --- a/src/main/java/sh/okx/rankup/messages/MessageBuilder.java +++ b/src/main/java/sh/okx/rankup/messages/MessageBuilder.java @@ -50,26 +50,26 @@ public class MessageBuilder { return this; } - public MessageBuilder replaceRanks(CommandSender player, Rank rank) { + public MessageBuilder replaceRanks(CommandSender player, String rankName) { replace(Variable.PLAYER, player.getName()); - replaceRanks(rank); + replaceRanks(rankName); return this; } - public MessageBuilder replaceRanks(CommandSender player, Rank oldRank, Rank rank) { + public MessageBuilder replaceRanks(CommandSender player, Rank oldRank, String rankName) { replace(Variable.PLAYER, player.getName()); - replaceRanks(oldRank, rank); + replaceRanks(oldRank, rankName); return this; } - public MessageBuilder replaceRanks(Rank rank) { - replace(Variable.RANK, rank.getRank()); - replace(Variable.RANK_NAME, rank.getRank()); + public MessageBuilder replaceRanks(String rankName) { + replace(Variable.RANK, rankName); + replace(Variable.RANK_NAME, rankName); return this; } - public MessageBuilder replaceRanks(Rank oldRank, Rank rank) { - replaceRanks(rank); + public MessageBuilder replaceRanks(Rank oldRank, String rankName) { + replaceRanks(rankName); replace(Variable.OLD_RANK, oldRank.getRank()); replace(Variable.OLD_RANK_NAME, oldRank.getRank()); return this; @@ -104,7 +104,7 @@ public class MessageBuilder { public void send(CommandSender sender) { String msg = message; - if (sender instanceof Player) { + if (sender instanceof Player && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { msg = PlaceholderAPI.setPlaceholders((Player) sender, msg); } sender.sendMessage(msg); diff --git a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java index 3e1d9de..31f04be 100644 --- a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java +++ b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java @@ -3,6 +3,7 @@ package sh.okx.rankup.placeholders; import lombok.Getter; import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import java.text.DecimalFormat; diff --git a/src/main/java/sh/okx/rankup/prestige/Prestige.java b/src/main/java/sh/okx/rankup/prestige/Prestige.java index 18f0957..cc60d99 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestige.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestige.java @@ -20,18 +20,17 @@ public class Prestige extends Rank { @Getter private final String to; - private Prestige(Rankup plugin, String next, String rank, Set requirements, List commands, String from, String to) { - super(plugin, next, rank, requirements, commands); + private Prestige(ConfigurationSection section, Rankup plugin, String next, String rank, Set requirements, List commands, String from, String to) { + super(section, plugin, next, rank, requirements, commands); this.from = from; this.to = to; } public static Prestige deserialize(Rankup plugin, ConfigurationSection section) { - ConfigurationSection requirementsSection = section.getConfigurationSection("requirements"); - Validate.notNull(requirementsSection, "No requirements defined for section " + section.getName()); - Set requirements = plugin.getRequirementRegistry().getRequirements(requirementsSection); + List requirementsList = section.getStringList("requirements"); + Set requirements = plugin.getRequirementRegistry().getRequirements(requirementsList); - return new Prestige(plugin, + return new Prestige(section, plugin, section.getString("next"), section.getString("rank"), requirements, @@ -39,4 +38,28 @@ public class Prestige extends Rank { section.getString("from"), section.getString("to")); } + + @Override + public boolean isIn(Player player) { + + String[] groups = plugin.getPermissions().getPlayerGroups(null, player); + for (String group : groups) { + if (group.equalsIgnoreCase(from) && rank == null) { + for (Prestige prestige : plugin.getPrestiges().getOrderedList()) { + if (prestige != this && prestige.isIn(player)) { + return false; + } + } + return true; + } else if(group.equalsIgnoreCase(rank)) { + return true; + } + } + return false; + } + + @Override + public boolean isLast() { + return plugin.getPrestiges().getByName(next) == null; + } } diff --git a/src/main/java/sh/okx/rankup/prestige/Prestiges.java b/src/main/java/sh/okx/rankup/prestige/Prestiges.java index 31977aa..2e9cd89 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestiges.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestiges.java @@ -11,12 +11,12 @@ public class Prestiges extends RankList { } @Override - public Prestige getByPlayer(Player player) { - Prestige prestige = super.getByPlayer(player); - if (prestige == null) { - return getFirst(); - } else { - return prestige; + public Prestige getFirst() { + for (Prestige prestige : ranks) { + if (prestige.getRank() == null) { + return prestige; + } } + throw new IllegalStateException("No prestige found for first prestige (first prestige is counted as a prestige without a rank set)"); } } diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java index 22f823f..2b8d438 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rank.java +++ b/src/main/java/sh/okx/rankup/ranks/Rank.java @@ -22,6 +22,8 @@ import java.util.stream.Collectors; @EqualsAndHashCode @RequiredArgsConstructor(access = AccessLevel.PROTECTED) public class Rank { + @Getter + protected final ConfigurationSection section; protected final Rankup plugin; @Getter protected final String next; @@ -32,11 +34,11 @@ public class Rank { protected final List commands; public static Rank deserialize(Rankup plugin, ConfigurationSection section) { - ConfigurationSection requirementsSection = section.getConfigurationSection("requirements"); - Validate.notNull(requirementsSection, "No requirements defined for section " + section.getName()); - Set requirements = plugin.getRequirementRegistry().getRequirements(requirementsSection); + List requirementsList = section.getStringList("requirements"); + Validate.notEmpty(requirementsList, "No requirements defined for rankup section " + section.getName()); + Set requirements = plugin.getRequirementRegistry().getRequirements(requirementsList); - return new Rank(plugin, + return new Rank(section, plugin, section.getString("next"), section.getString("rank"), requirements, @@ -83,10 +85,10 @@ public class Rank { } } - public void runCommands(Player player, Rank nextRank) { + public void runCommands(Player player, String next) { for (String command : commands) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), - new MessageBuilder(command).replaceRanks(player, this, nextRank).toString()); + new MessageBuilder(command).replaceRanks(player, this, next).toString()); } } } diff --git a/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java index 2c092f1..0bf7745 100644 --- a/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java +++ b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java @@ -1,9 +1,8 @@ package sh.okx.rankup.requirements; -import org.bukkit.configuration.ConfigurationSection; - import java.util.HashSet; -import java.util.Map; +import java.util.List; +import java.util.Objects; import java.util.Set; public class RequirementRegistry { @@ -24,18 +23,16 @@ public class RequirementRegistry { return null; } - public Set getRequirements(ConfigurationSection section) { + public Set getRequirements(List list) { Set requirements = new HashSet<>(); - for (Map.Entry entry : section.getValues(false).entrySet()) { - String name = entry.getKey(); - String value = String.valueOf(entry.getValue()); + for (String req : list) { + String[] parts = req.split(" ", 2); + String name = parts[0]; + String value = parts[1]; Requirement requirement = newRequirement(name, value); - if (requirement == null) { - System.err.println("Unknown requirement: " + name); - } else { - requirements.add(requirement); - } + Objects.requireNonNull(requirement, "Unknown requirement: " + name); + requirements.add(requirement); } return requirements; } diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java index 78237af..e51720d 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java @@ -9,7 +9,7 @@ import java.lang.reflect.Method; /** * Because mcMMO like changing the name of their skill types. - * Singleton (not thread safe!) class to access different mcMMO versions. + * Singleton class to access different mcMMO versions. */ public class McMMOSkillUtil { private static McMMOSkillUtil instance; @@ -31,19 +31,19 @@ public class McMMOSkillUtil { try { skillTypeClass = Class.forName(pckg + "SkillType"); } catch (ClassNotFoundException e2) { - throw new RuntimeException("mcMMO Skill Type class not found"); + throw new UnsupportedOperationException("mcMMO Skill Type class not found"); } } } try { values = skillTypeClass.getMethod("values"); } catch (NoSuchMethodException e) { - throw new RuntimeException("mcMMO " + skillTypeClass + ".values() not found"); + throw new UnsupportedOperationException("mcMMO " + skillTypeClass + ".values() not found"); } try { valueOf = skillTypeClass.getMethod("valueOf", String.class); } catch (NoSuchMethodException e) { - throw new RuntimeException("mcMMO" + skillTypeClass + ".valueOf(String) not found"); + throw new UnsupportedOperationException("mcMMO" + skillTypeClass + ".valueOf(String) not found"); } /*try { @@ -54,7 +54,7 @@ public class McMMOSkillUtil { try { getSkillLevel = McMMOPlayer.class.getMethod("getSkillLevel", skillTypeClass); } catch (NoSuchMethodException e) { - throw new RuntimeException("mcMMO UserManager.getSkillLevel(" + skillTypeClass + ") not found"); + throw new UnsupportedOperationException("mcMMO UserManager.getSkillLevel(" + skillTypeClass + ") not found"); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6b37a5c..0732139 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ # this is used for letting you know that you need to update/change your config file -version: 3 +version: 4 # the locale to use for messages # all messages can be customised but this allows you to diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 677b258..58a28d5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.4.2 +version: 3.5-beta main: sh.okx.rankup.Rankup author: Okx depend: [Vault] diff --git a/src/main/resources/rankups.yml b/src/main/resources/rankups.yml index f726387..00d3db3 100644 --- a/src/main/resources/rankups.yml +++ b/src/main/resources/rankups.yml @@ -14,7 +14,7 @@ Aexample: requirements: - 'money 1000' # the console will run these commands when a player ranks up - # the groups are automatically changed with vault + # nb: groups are automatically changed with vault #commands: # this will run when a player ranks up from A to B. #- 'say {PLAYER} well done for ranking up from {OLD_RANK} to {RANK}!' @@ -30,8 +30,7 @@ Cexample: - 'money 5000' - 'xp-level 2' # you can have a custom messages for each rank - # you can use this to list the requirements needed. - # the paths of these messages are the exact same as in the messages for your locale + # the paths of these messages are the same as in the messages for your locale rankup: requirements-not-met: '&cYou need 5000 money and 2 levels of XP to rankup to D.' list: