diff --git a/src/main/java/me/draww/superrup/Rank.java b/src/main/java/me/draww/superrup/Rank.java index 48f94d8..d9d7610 100644 --- a/src/main/java/me/draww/superrup/Rank.java +++ b/src/main/java/me/draww/superrup/Rank.java @@ -4,7 +4,10 @@ import me.draww.superrup.executor.Executor; import org.bukkit.inventory.ItemStack; +import java.util.Comparator; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class Rank { @@ -38,6 +41,14 @@ public Rank(String id, String group, Integer queue) { this.queue = queue; } + public List getSortedConditions() { + return conditions.values().stream().sorted(Comparator.comparingInt(Condition::getQueue)).collect(Collectors.toList()); + } + + public List getSortedExecutors() { + return executors.values().stream().sorted(Comparator.comparingInt(Executor::getQueue)).collect(Collectors.toList()); + } + public String getId() { return id; } diff --git a/src/main/java/me/draww/superrup/RankMenu.java b/src/main/java/me/draww/superrup/RankMenu.java index 2079807..9aad4b0 100644 --- a/src/main/java/me/draww/superrup/RankMenu.java +++ b/src/main/java/me/draww/superrup/RankMenu.java @@ -92,10 +92,10 @@ public RankMenu(Player player) { addLast(new BasicElement(rank.getIconJump(), new BasicTarget(e -> { e.cancel(); - boolean controlConditions = ConditionProvider.testAllConditions(player, new ArrayList<>(rank.getConditions().values())); + boolean controlConditions = ConditionProvider.testAllConditions(player, rank); if (controlConditions) { Main.getInstance().getGroupManager().setPlayerPrimaryGroup(player, rank.getGroup()); - ExecutorProvider.runAllExecutors(player, new ArrayList<>(rank.getExecutors().values())); + ExecutorProvider.runAllExecutors(player, rank); } e.closeView(); }))); diff --git a/src/main/java/me/draww/superrup/condition/Condition.java b/src/main/java/me/draww/superrup/condition/Condition.java index 70b23d9..1ceb4d1 100644 --- a/src/main/java/me/draww/superrup/condition/Condition.java +++ b/src/main/java/me/draww/superrup/condition/Condition.java @@ -8,13 +8,15 @@ public class Condition { private final String id; + private final Integer queue; private final Rank rank; private Map requiredData; private String message; private ConditionType type; - public Condition(String id, Rank rank, Map requiredData, String message, ConditionType type) { + public Condition(String id, Integer queue, Rank rank, Map requiredData, String message, ConditionType type) { this.id = id; + this.queue = queue; this.rank = rank; this.requiredData = requiredData; this.message = message; @@ -29,6 +31,10 @@ public String getId() { return id; } + public Integer getQueue() { + return queue; + } + public Rank getRank() { return rank; } diff --git a/src/main/java/me/draww/superrup/condition/ConditionProvider.java b/src/main/java/me/draww/superrup/condition/ConditionProvider.java index 9d97ee9..ade4f71 100644 --- a/src/main/java/me/draww/superrup/condition/ConditionProvider.java +++ b/src/main/java/me/draww/superrup/condition/ConditionProvider.java @@ -14,25 +14,36 @@ public class ConditionProvider { public static Map deserializeConditions(ConfigurationSection section, Rank rank) { if (section == null) return new HashMap<>(); - if (section.contains("template") && section.isString("template")) { - ConfigurationSection templateSection = Main.getInstance().getTemplateConfig().getConfigurationSection("conditions." + section.getString("template")); - return deserializeConditions(templateSection, rank); - } Map conditionMap = new HashMap<>(); for (String condKey : section.getKeys(false)) { - if ((!section.contains(condKey + ".type") && ! section.isString(condKey + ".type")) - || (!section.contains(condKey + ".message") && ! section.isString(condKey + ".message"))) continue; - conditionMap.put(condKey, new Condition(condKey, - rank, - section.getConfigurationSection(condKey + ".data").getValues(true), - section.getString(condKey + ".message"), - ConditionType.valueOf(section.getString(condKey + ".type").toUpperCase()))); + if (section.contains(condKey + ".template") && section.isString(condKey + ".template")) { + ConfigurationSection templateSection = Main.getInstance().getTemplateConfig().getConfigurationSection("conditions." + section.getString(condKey + ".template")); + if ((!templateSection.contains("type") && !templateSection.isString("type")) + || (!templateSection.contains("message") && !templateSection.isString("message")) + || (!section.contains(condKey + ".queue") && !section.isInt(condKey + ".queue"))) continue; + conditionMap.put(condKey, new Condition(condKey, + section.getInt(condKey + ".queue"), + rank, + templateSection.getConfigurationSection("data").getValues(true), + templateSection.getString("message"), + ConditionType.valueOf(templateSection.getString("type").toUpperCase()))); + } else { + if ((!section.contains(condKey + ".type") && !section.isString(condKey + ".type")) + || (!section.contains(condKey + ".message") && !section.isString(condKey + ".message")) + || (!section.contains(condKey + ".queue") && !section.isString(condKey + ".queue"))) continue; + conditionMap.put(condKey, new Condition(condKey, + section.getInt(condKey + ".queue"), + rank, + section.getConfigurationSection(condKey + ".data").getValues(true), + section.getString(condKey + ".message"), + ConditionType.valueOf(section.getString(condKey + ".type").toUpperCase()))); + } } return conditionMap; } - public static boolean testAllConditions(Player player, List conditions) { - for (Condition condition : conditions) { + public static boolean testAllConditions(Player player, Rank rank) { + for (Condition condition : rank.getSortedConditions()) { if (!condition.test(player)) { return false; } diff --git a/src/main/java/me/draww/superrup/executor/Executor.java b/src/main/java/me/draww/superrup/executor/Executor.java index f6d75c0..e46e7df 100644 --- a/src/main/java/me/draww/superrup/executor/Executor.java +++ b/src/main/java/me/draww/superrup/executor/Executor.java @@ -8,12 +8,14 @@ public class Executor { private final String id; + private final Integer queue; private final Rank rank; private Map data; private ExecutorType type; - public Executor(String id, Rank rank, Map data, ExecutorType type) { + public Executor(String id, Integer queue, Rank rank, Map data, ExecutorType type) { this.id = id; + this.queue = queue; this.rank = rank; this.data = data; this.type = type; @@ -27,6 +29,10 @@ public String getId() { return id; } + public Integer getQueue() { + return queue; + } + public Rank getRank() { return rank; } diff --git a/src/main/java/me/draww/superrup/executor/ExecutorProvider.java b/src/main/java/me/draww/superrup/executor/ExecutorProvider.java index ec30119..2936458 100644 --- a/src/main/java/me/draww/superrup/executor/ExecutorProvider.java +++ b/src/main/java/me/draww/superrup/executor/ExecutorProvider.java @@ -13,24 +13,34 @@ public class ExecutorProvider { public static Map deserializeExecutors(ConfigurationSection section, Rank rank) { if (section == null) return new HashMap<>(); - if (section.contains("template") && section.isString("template")) { - ConfigurationSection templateSection = Main.getInstance().getTemplateConfig().getConfigurationSection("executors." + section.getString("template")); - return deserializeExecutors(templateSection, rank); - } Map executorMap = new HashMap<>(); for (String executorKey : section.getKeys(false)) { - if ((!section.contains(executorKey + ".type") && ! section.isString(executorKey + ".type")) - || (!section.contains(executorKey + ".message") && ! section.isString(executorKey + ".message"))) continue; - executorMap.put(executorKey, new Executor(executorKey, - rank, - section.getConfigurationSection(executorKey + ".data").getValues(true), - ExecutorType.valueOf(section.getString(executorKey + ".type").toUpperCase()))); + if (section.contains(executorKey + ".template") && section.isString(executorKey + ".template")) { + ConfigurationSection templateSection = Main.getInstance().getTemplateConfig().getConfigurationSection("executors." + section.getString(executorKey + ".template")); + if ((!templateSection.contains("type") && !templateSection.isString("type")) + || (!section.contains(executorKey + ".queue") && !section.isInt(executorKey + ".queue"))) + continue; + executorMap.put(executorKey, new Executor(executorKey, + section.getInt(executorKey + ".queue"), + rank, + templateSection.getConfigurationSection("data").getValues(true), + ExecutorType.valueOf(templateSection.getString("type").toUpperCase()))); + } else { + if ((!section.contains(executorKey + ".type") && !section.isString(executorKey + ".type")) + || (!section.contains(executorKey + ".queue") && !section.isInt(executorKey + ".queue"))) + continue; + executorMap.put(executorKey, new Executor(executorKey, + section.getInt(executorKey + ".queue"), + rank, + section.getConfigurationSection(executorKey + ".data").getValues(true), + ExecutorType.valueOf(section.getString(executorKey + ".type").toUpperCase()))); + } } return executorMap; } - public static void runAllExecutors(Player player, List executors) { - for (Executor executor : executors) { + public static void runAllExecutors(Player player, Rank rank) { + for (Executor executor : rank.getSortedExecutors()) { executor.run(player); } } diff --git a/src/main/resources/ranks.yml b/src/main/resources/ranks.yml index 05846c8..0c908b5 100644 --- a/src/main/resources/ranks.yml +++ b/src/main/resources/ranks.yml @@ -16,9 +16,20 @@ example_rank_1: template: custom_equal conditions: cond_1: + queue: 1 type: MONEY - message: "&cYou don't have enough money [&e%data%&c]" + message: "&cYou don't have enough money [&e%value%&c]" data: value: 500.00 cond_2: - template: custom_cond \ No newline at end of file + queue: 2 + template: custom_cond + executors: + exec_1: + queue: 1 + type: MESSAGE + data: + value: "&atest message &e%player_name% &aand &6%rank%" + exec_2: + queue: 2 + template: custom_exec \ No newline at end of file diff --git a/src/main/resources/template.yml b/src/main/resources/template.yml index 281f1c2..834eaee 100644 --- a/src/main/resources/template.yml +++ b/src/main/resources/template.yml @@ -23,7 +23,11 @@ icons: conditions: custom_cond: type: MONEY - message: "&cYou don't have enough money [&e%data%&c]" + message: "&cYou don't have enough money [&e%value%&c]" data: - value: 500.00 -executors: {} \ No newline at end of file + value: 1500.00 +executors: + custom_exec: + type: MESSAGE + data: + value: "&atest message 2 &e%player% &aand &6%rank%" \ No newline at end of file