diff --git a/pom.xml b/pom.xml index 5d87d88..b3e9d02 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,12 @@ + + + org.javassist + javassist + 3.30.2-GA + org.spigotmc @@ -390,6 +396,7 @@ XML + diff --git a/src/main/java/world/bentobox/challenges/commands/ChallengesGlobalPlayerCommand.java b/src/main/java/world/bentobox/challenges/commands/ChallengesGlobalPlayerCommand.java index 41f2b3e..db018c4 100644 --- a/src/main/java/world/bentobox/challenges/commands/ChallengesGlobalPlayerCommand.java +++ b/src/main/java/world/bentobox/challenges/commands/ChallengesGlobalPlayerCommand.java @@ -39,7 +39,7 @@ public class ChallengesGlobalPlayerCommand extends CompositeCommand public void setup() { this.setOnlyPlayer(true); - this.setPermission("challenges"); + this.setPermission("addon.challenges"); this.setParametersHelp("challenges.commands.user.main.parameters"); this.setDescription("challenges.commands.user.main.description"); } diff --git a/src/main/java/world/bentobox/challenges/panel/CommonPanel.java b/src/main/java/world/bentobox/challenges/panel/CommonPanel.java index f4236d6..6709d61 100644 --- a/src/main/java/world/bentobox/challenges/panel/CommonPanel.java +++ b/src/main/java/world/bentobox/challenges/panel/CommonPanel.java @@ -45,23 +45,23 @@ public abstract class CommonPanel { * @param user User who opens panel. */ protected CommonPanel(ChallengesAddon addon, User user, World world, String topLabel, String permissionPrefix) { - this.addon = addon; - this.world = world; - this.manager = addon.getChallengesManager(); - this.user = user; + this.addon = addon; + this.world = world; + this.manager = addon.getChallengesManager(); + this.user = user; - this.topLabel = topLabel; - this.permissionPrefix = permissionPrefix; + this.topLabel = topLabel; + this.permissionPrefix = permissionPrefix; - this.parentPanel = null; + this.parentPanel = null; - this.returnButton = new PanelItemBuilder().name(this.user.getTranslation(Constants.BUTTON + "quit.name")) - .description(this.user.getTranslationOrNothing(Constants.BUTTON + "quit.description")).description("") - .description(this.user.getTranslationOrNothing(Constants.TIPS + "click-to-quit")) - .icon(Material.OAK_DOOR).clickHandler((panel, user1, clickType, i) -> { - this.user.closeInventory(); - return true; - }).build(); + this.returnButton = new PanelItemBuilder().name(this.user.getTranslation(Constants.BUTTON + "quit.name")) + .description(this.user.getTranslationOrNothing(Constants.BUTTON + "quit.description")).description("") + .description(this.user.getTranslationOrNothing(Constants.TIPS + "click-to-quit")) + .icon(Material.OAK_DOOR).clickHandler((panel, user1, clickType, i) -> { + this.user.closeInventory(); + return true; + }).build(); } /** @@ -70,23 +70,23 @@ public abstract class CommonPanel { * @param parentPanel Parent panel of current panel. */ protected CommonPanel(@NonNull CommonPanel parentPanel) { - this.addon = parentPanel.addon; - this.manager = parentPanel.manager; - this.user = parentPanel.user; - this.world = parentPanel.world; + this.addon = parentPanel.addon; + this.manager = parentPanel.manager; + this.user = parentPanel.user; + this.world = parentPanel.world; - this.topLabel = parentPanel.topLabel; - this.permissionPrefix = parentPanel.permissionPrefix; + this.topLabel = parentPanel.topLabel; + this.permissionPrefix = parentPanel.permissionPrefix; - this.parentPanel = parentPanel; + this.parentPanel = parentPanel; - this.returnButton = new PanelItemBuilder().name(this.user.getTranslation(Constants.BUTTON + "return.name")) - .description(this.user.getTranslationOrNothing(Constants.BUTTON + "return.description")).description("") - .description(this.user.getTranslationOrNothing(Constants.TIPS + "click-to-return")) - .icon(Material.OAK_DOOR).clickHandler((panel, user1, clickType, i) -> { - this.parentPanel.build(); - return true; - }).build(); + this.returnButton = new PanelItemBuilder().name(this.user.getTranslation(Constants.BUTTON + "return.name")) + .description(this.user.getTranslationOrNothing(Constants.BUTTON + "return.description")).description("") + .description(this.user.getTranslationOrNothing(Constants.TIPS + "click-to-return")) + .icon(Material.OAK_DOOR).clickHandler((panel, user1, clickType, i) -> { + this.parentPanel.build(); + return true; + }).build(); } /** @@ -100,12 +100,12 @@ public abstract class CommonPanel { * @param panel Panel that must be reopened. */ public static void reopen(CommonPanel panel) { - panel.build(); + panel.build(); } -// --------------------------------------------------------------------- -// Section: Common methods -// --------------------------------------------------------------------- + // --------------------------------------------------------------------- + // Section: Common methods + // --------------------------------------------------------------------- /** * This method generates and returns given challenge description. It is used @@ -117,67 +117,67 @@ public abstract class CommonPanel { * @return List of strings that will be used in challenges description. */ protected List generateChallengeDescription(Challenge challenge, @Nullable User target) { - // Some values to avoid over checking. - final boolean isCompletedOnce = target != null - && this.manager.isChallengeComplete(target.getUniqueId(), this.world, challenge); + // Some values to avoid over checking. + final boolean isCompletedOnce = target != null + && this.manager.isChallengeComplete(target.getUniqueId(), this.world, challenge); - final long doneTimes = target != null && challenge.isRepeatable() - ? this.manager.getChallengeTimes(target, this.world, challenge) - : (isCompletedOnce ? 0 : 1); + final long doneTimes = target != null && challenge.isRepeatable() + ? this.manager.getChallengeTimes(target, this.world, challenge) + : (isCompletedOnce ? 0 : 1); - boolean isCompletedAll = isCompletedOnce - && (!challenge.isRepeatable() || challenge.getMaxTimes() > 0 && doneTimes >= challenge.getMaxTimes()); + boolean isCompletedAll = isCompletedOnce + && (!challenge.isRepeatable() || challenge.getMaxTimes() > 0 && doneTimes >= challenge.getMaxTimes()); - final String reference = Constants.DESCRIPTIONS + "challenge."; + final String reference = Constants.DESCRIPTIONS + "challenge."; - // Get description from custom translations - String description = this.user - .getTranslationOrNothing("challenges.challenges." + challenge.getUniqueId() + ".description"); + // Get description from custom translations + String description = this.user + .getTranslationOrNothing("challenges.challenges." + challenge.getUniqueId() + ".description"); - if (description.isEmpty()) { - // Get data from object in single string. - description = Util.translateColorCodes(String.join("\n", challenge.getDescription())); - } + if (description.isEmpty()) { + // Get data from object in single string. + description = Util.translateColorCodes(String.join("\n", challenge.getDescription())); + } - // Non-memory optimal code used for easier debugging and nicer code layout for - // my eye :) - // Get status in single string - String status = this.generateChallengeStatus(isCompletedOnce, isCompletedAll, doneTimes, - challenge.getMaxTimes()); - // Get requirements in single string - String requirements = isCompletedAll ? "" : this.generateRequirements(challenge, target); - // Get rewards in single string - String rewards = isCompletedAll ? "" : this.generateRewards(challenge, isCompletedOnce); - // Get coolDown in singe string - String coolDown = isCompletedAll || challenge.getTimeout() <= 0 ? "" : this.generateCoolDown(challenge, target); + // Non-memory optimal code used for easier debugging and nicer code layout for + // my eye :) + // Get status in single string + String status = this.generateChallengeStatus(isCompletedOnce, isCompletedAll, doneTimes, + challenge.getMaxTimes()); + // Get requirements in single string + String requirements = isCompletedAll ? "" : this.generateRequirements(challenge, target); + // Get rewards in single string + String rewards = isCompletedAll ? "" : this.generateRewards(challenge, isCompletedOnce); + // Get coolDown in singe string + String coolDown = isCompletedAll || challenge.getTimeout() <= 0 ? "" : this.generateCoolDown(challenge, target); - if (!description.replaceAll("(?m)^[ \\t]*\\r?\\n", "").isEmpty()) { - String returnString = this.user.getTranslationOrNothing(reference + "lore", "[requirements]", requirements, - "[rewards]", rewards, "[status]", status, "[cooldown]", coolDown); + if (!description.replaceAll("(?m)^[ \\t]*\\r?\\n", "").isEmpty()) { + String returnString = this.user.getTranslationOrNothing(reference + "lore", "[requirements]", requirements, + "[rewards]", rewards, "[status]", status, "[cooldown]", coolDown); - // remove empty lines from the generated text. - List collect = Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) - .collect(Collectors.toList()); + // remove empty lines from the generated text. + List collect = Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) + .collect(Collectors.toList()); - // find and replace description from collected blocks. + // find and replace description from collected blocks. - for (int i = 0; i < collect.size(); i++) { - if (collect.get(i).contains(Constants.PARAMETER_DESCRIPTION)) { - collect.set(i, collect.get(i).replace(Constants.PARAMETER_DESCRIPTION, description)); - } - } + for (int i = 0; i < collect.size(); i++) { + if (collect.get(i).contains(Constants.PARAMETER_DESCRIPTION)) { + collect.set(i, collect.get(i).replace(Constants.PARAMETER_DESCRIPTION, description)); + } + } - return collect; - } else { - String returnString = this.user.getTranslationOrNothing(reference + "lore", Constants.PARAMETER_DESCRIPTION, - description, "[requirements]", requirements, "[rewards]", rewards, "[status]", status, "[cooldown]", - coolDown); + return collect; + } else { + String returnString = this.user.getTranslationOrNothing(reference + "lore", Constants.PARAMETER_DESCRIPTION, + description, "[requirements]", requirements, "[rewards]", rewards, "[status]", status, "[cooldown]", + coolDown); - // Remove empty lines and returns as a list. + // Remove empty lines and returns as a list. - return Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) - .collect(Collectors.toList()); - } + return Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) + .collect(Collectors.toList()); + } } /** @@ -188,24 +188,24 @@ public abstract class CommonPanel { * @return the string */ private String generateCoolDown(Challenge challenge, @Nullable User target) { - final String reference = Constants.DESCRIPTIONS + "challenge.cooldown."; + final String reference = Constants.DESCRIPTIONS + "challenge.cooldown."; - String coolDown; + String coolDown; - if (target != null && this.manager.isBreachingTimeOut(target, this.world, challenge)) { - long missing = this.manager.getLastCompletionDate(this.user, this.world, challenge) + challenge.getTimeout() - - System.currentTimeMillis(); + if (target != null && this.manager.isBreachingTimeOut(target, this.world, challenge)) { + long missing = this.manager.getLastCompletionDate(this.user, this.world, challenge) + challenge.getTimeout() + - System.currentTimeMillis(); - coolDown = this.user.getTranslation(reference + "wait-time", "[time]", - Utils.parseDuration(Duration.ofMillis(missing), this.user)); - } else { - coolDown = ""; - } + coolDown = this.user.getTranslation(reference + "wait-time", "[time]", + Utils.parseDuration(Duration.ofMillis(missing), this.user)); + } else { + coolDown = ""; + } - String timeout = this.user.getTranslation(reference + "timeout", "[time]", - Utils.parseDuration(Duration.ofMillis(challenge.getTimeout()), this.user)); + String timeout = this.user.getTranslation(reference + "timeout", "[time]", + Utils.parseDuration(Duration.ofMillis(challenge.getTimeout()), this.user)); - return this.user.getTranslation(reference + "lore", "[timeout]", timeout, "[wait-time]", coolDown); + return this.user.getTranslation(reference + "lore", "[timeout]", timeout, "[wait-time]", coolDown); } /** @@ -215,64 +215,64 @@ public abstract class CommonPanel { * @return Lore message with requirements. */ private String generateRequirements(Challenge challenge, @Nullable User target) { - final String reference = Constants.DESCRIPTIONS + "challenge.requirements."; + final String reference = Constants.DESCRIPTIONS + "challenge.requirements."; - String environment; + String environment; - if (challenge.getEnvironment().isEmpty() || challenge.getEnvironment().size() == 3) { - // If challenge can be completed everywhere, do not display requirement. - environment = ""; - } else if (challenge.getEnvironment().size() == 1) { - environment = this.user.getTranslationOrNothing(reference + "environment-single", - Constants.PARAMETER_ENVIRONMENT, - Utils.prettifyObject(challenge.getEnvironment().iterator().next(), this.user)); - } else { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "environment-title")); - challenge.getEnvironment().stream().sorted().forEach(en -> { - builder.append("\n"); - builder.append(this.user.getTranslationOrNothing(reference + "environment-single", - Constants.PARAMETER_ENVIRONMENT, Utils.prettifyObject(en, this.user))); - }); + if (challenge.getEnvironment().isEmpty() || challenge.getEnvironment().size() == 3) { + // If challenge can be completed everywhere, do not display requirement. + environment = ""; + } else if (challenge.getEnvironment().size() == 1) { + environment = this.user.getTranslationOrNothing(reference + "environment-single", + Constants.PARAMETER_ENVIRONMENT, + Utils.prettifyObject(challenge.getEnvironment().iterator().next(), this.user)); + } else { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "environment-title")); + challenge.getEnvironment().stream().sorted().forEach(en -> { + builder.append("\n"); + builder.append(this.user.getTranslationOrNothing(reference + "environment-single", + Constants.PARAMETER_ENVIRONMENT, Utils.prettifyObject(en, this.user))); + }); - environment = builder.toString(); - } + environment = builder.toString(); + } - String permissions; + String permissions; - if (!challenge.getRequirements().getRequiredPermissions().isEmpty()) { - // Yes list duplication for complete menu. - List missingPermissions = challenge.getRequirements().getRequiredPermissions().stream() - .filter(permission -> target == null || !target.hasPermission(permission)).sorted().toList(); + if (!challenge.getRequirements().getRequiredPermissions().isEmpty()) { + // Yes list duplication for complete menu. + List missingPermissions = challenge.getRequirements().getRequiredPermissions().stream() + .filter(permission -> target == null || !target.hasPermission(permission)).sorted().toList(); - StringBuilder permissionBuilder = new StringBuilder(); + StringBuilder permissionBuilder = new StringBuilder(); - if (missingPermissions.size() == 1) { - permissionBuilder.append(this.user.getTranslationOrNothing(reference + "permission-single", - Constants.PARAMETER_PERMISSION, missingPermissions.get(0))); - } else if (!missingPermissions.isEmpty()) { - permissionBuilder.append(this.user.getTranslationOrNothing(reference + "permissions-title")); - missingPermissions.forEach(permission -> { - permissionBuilder.append("\n"); - permissionBuilder.append(this.user.getTranslationOrNothing(reference + "permissions-list", - Constants.PARAMETER_PERMISSION, permission)); - }); - } + if (missingPermissions.size() == 1) { + permissionBuilder.append(this.user.getTranslationOrNothing(reference + "permission-single", + Constants.PARAMETER_PERMISSION, missingPermissions.get(0))); + } else if (!missingPermissions.isEmpty()) { + permissionBuilder.append(this.user.getTranslationOrNothing(reference + "permissions-title")); + missingPermissions.forEach(permission -> { + permissionBuilder.append("\n"); + permissionBuilder.append(this.user.getTranslationOrNothing(reference + "permissions-list", + Constants.PARAMETER_PERMISSION, permission)); + }); + } - permissions = permissionBuilder.toString(); - } else { - permissions = ""; - } + permissions = permissionBuilder.toString(); + } else { + permissions = ""; + } - String typeRequirement = switch (challenge.getChallengeType()) { - case INVENTORY_TYPE -> this.generateInventoryChallenge(challenge.getRequirements()); - case ISLAND_TYPE -> this.generateIslandChallenge(challenge.getRequirements()); - case OTHER_TYPE -> this.generateOtherChallenge(challenge.getRequirements()); - case STATISTIC_TYPE -> this.generateStatisticChallenge(challenge.getRequirements()); - }; + String typeRequirement = switch (challenge.getChallengeType()) { + case INVENTORY_TYPE -> this.generateInventoryChallenge(challenge.getRequirements()); + case ISLAND_TYPE -> this.generateIslandChallenge(challenge.getRequirements()); + case OTHER_TYPE -> this.generateOtherChallenge(challenge.getRequirements()); + case STATISTIC_TYPE -> this.generateStatisticChallenge(challenge.getRequirements()); + }; - return this.user.getTranslationOrNothing(reference + "lore", Constants.PARAMETER_ENVIRONMENT, environment, - "[type-requirement]", typeRequirement, "[permissions]", permissions); + return this.user.getTranslationOrNothing(reference + "lore", Constants.PARAMETER_ENVIRONMENT, environment, + "[type-requirement]", typeRequirement, "[permissions]", permissions); } /** @@ -282,66 +282,66 @@ public abstract class CommonPanel { * @return Requirement lore message. */ private String generateIslandChallenge(IslandRequirements requirement) { - final String reference = Constants.DESCRIPTIONS + "challenge.requirements.island."; + final String reference = Constants.DESCRIPTIONS + "challenge.requirements.island."; - String blocks; + String blocks; - if (!requirement.getRequiredBlocks().isEmpty()) { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "blocks-title")); - requirement.getRequiredBlocks().entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { - builder.append("\n"); + if (!requirement.getRequiredBlocks().isEmpty()) { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "blocks-title")); + requirement.getRequiredBlocks().entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { + builder.append("\n"); - if (entry.getValue() > 1) { - builder.append(this.user.getTranslationOrNothing(reference + "blocks-value", - Constants.PARAMETER_NUMBER, String.valueOf(entry.getValue()), Constants.PARAMETER_MATERIAL, - Utils.prettifyObject(entry.getKey(), this.user))); - } else { - builder.append(this.user.getTranslationOrNothing(reference + "block-value", - Constants.PARAMETER_MATERIAL, Utils.prettifyObject(entry.getKey(), this.user))); - } - }); + if (entry.getValue() > 1) { + builder.append(this.user.getTranslationOrNothing(reference + "blocks-value", + Constants.PARAMETER_NUMBER, String.valueOf(entry.getValue()), Constants.PARAMETER_MATERIAL, + Utils.prettifyObject(entry.getKey(), this.user))); + } else { + builder.append(this.user.getTranslationOrNothing(reference + "block-value", + Constants.PARAMETER_MATERIAL, Utils.prettifyObject(entry.getKey(), this.user))); + } + }); - blocks = builder.toString(); - } else { - blocks = ""; - } + blocks = builder.toString(); + } else { + blocks = ""; + } - String entities; + String entities; - if (!requirement.getRequiredEntities().isEmpty()) { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "entities-title")); - requirement.getRequiredEntities().entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { - builder.append("\n"); + if (!requirement.getRequiredEntities().isEmpty()) { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "entities-title")); + requirement.getRequiredEntities().entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { + builder.append("\n"); - if (entry.getValue() > 1) { - builder.append(this.user.getTranslationOrNothing(reference + "entities-value", - Constants.PARAMETER_NUMBER, String.valueOf(entry.getValue()), Constants.PARAMETER_ENTITY, - Utils.prettifyObject(entry.getKey(), this.user))); - } else { - builder.append(this.user.getTranslationOrNothing(reference + "entity-value", - Constants.PARAMETER_ENTITY, Utils.prettifyObject(entry.getKey(), this.user))); - } - }); + if (entry.getValue() > 1) { + builder.append(this.user.getTranslationOrNothing(reference + "entities-value", + Constants.PARAMETER_NUMBER, String.valueOf(entry.getValue()), Constants.PARAMETER_ENTITY, + Utils.prettifyObject(entry.getKey(), this.user))); + } else { + builder.append(this.user.getTranslationOrNothing(reference + "entity-value", + Constants.PARAMETER_ENTITY, Utils.prettifyObject(entry.getKey(), this.user))); + } + }); - entities = builder.toString(); - } else { - entities = ""; - } + entities = builder.toString(); + } else { + entities = ""; + } - String searchRadius = this.user.getTranslationOrNothing(reference + "search-radius", Constants.PARAMETER_NUMBER, - String.valueOf(requirement.getSearchRadius())); + String searchRadius = this.user.getTranslationOrNothing(reference + "search-radius", Constants.PARAMETER_NUMBER, + String.valueOf(requirement.getSearchRadius())); - String warningBlocks = requirement.isRemoveBlocks() - ? this.user.getTranslationOrNothing(reference + "warning-block") - : ""; - String warningEntities = requirement.isRemoveEntities() - ? this.user.getTranslationOrNothing(reference + "warning-entity") - : ""; + String warningBlocks = requirement.isRemoveBlocks() + ? this.user.getTranslationOrNothing(reference + "warning-block") + : ""; + String warningEntities = requirement.isRemoveEntities() + ? this.user.getTranslationOrNothing(reference + "warning-entity") + : ""; - return this.user.getTranslationOrNothing(reference + "lore", "[blocks]", blocks, "[entities]", entities, - "[warning-block]", warningBlocks, "[warning-entity]", warningEntities, "[search-radius]", searchRadius); + return this.user.getTranslationOrNothing(reference + "lore", "[blocks]", blocks, "[entities]", entities, + "[warning-block]", warningBlocks, "[warning-entity]", warningEntities, "[search-radius]", searchRadius); } /** @@ -351,35 +351,35 @@ public abstract class CommonPanel { * @return Requirement lore message. */ private String generateInventoryChallenge(InventoryRequirements requirement) { - final String reference = Constants.DESCRIPTIONS + "challenge.requirements.inventory."; + final String reference = Constants.DESCRIPTIONS + "challenge.requirements.inventory."; - String items; + String items; - if (!requirement.getRequiredItems().isEmpty()) { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "item-title")); - Utils.groupEqualItems(requirement.getRequiredItems(), requirement.getIgnoreMetaData()).stream() - .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { - builder.append("\n"); + if (!requirement.getRequiredItems().isEmpty()) { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "item-title")); + Utils.groupEqualItems(requirement.getRequiredItems(), requirement.getIgnoreMetaData()).stream() + .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { + builder.append("\n"); - if (itemStack.getAmount() > 1) { - builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", - String.valueOf(itemStack.getAmount()), "[item]", - Utils.prettifyObject(itemStack, this.user))); - } else { - builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", - Utils.prettifyObject(itemStack, this.user))); - } - }); + if (itemStack.getAmount() > 1) { + builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", + String.valueOf(itemStack.getAmount()), "[item]", + Utils.prettifyObject(itemStack, this.user))); + } else { + builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", + Utils.prettifyObject(itemStack, this.user))); + } + }); - items = builder.toString(); - } else { - items = ""; - } + items = builder.toString(); + } else { + items = ""; + } - String warning = requirement.isTakeItems() ? this.user.getTranslationOrNothing(reference + "warning") : ""; + String warning = requirement.isTakeItems() ? this.user.getTranslationOrNothing(reference + "warning") : ""; - return this.user.getTranslationOrNothing(reference + "lore", "[items]", items, "[warning]", warning); + return this.user.getTranslationOrNothing(reference + "lore", "[items]", items, "[warning]", warning); } /** @@ -389,29 +389,29 @@ public abstract class CommonPanel { * @return Requirement lore message. */ private String generateOtherChallenge(OtherRequirements requirement) { - final String reference = Constants.DESCRIPTIONS + "challenge.requirements.other."; + final String reference = Constants.DESCRIPTIONS + "challenge.requirements.other."; - String experience = requirement.getRequiredExperience() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "experience", "[number]", - String.valueOf(requirement.getRequiredExperience())); + String experience = requirement.getRequiredExperience() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "experience", "[number]", + String.valueOf(requirement.getRequiredExperience())); - String experienceWarning = requirement.getRequiredExperience() > 0 && requirement.isTakeExperience() - ? this.user.getTranslationOrNothing(reference + "experience-warning") - : ""; + String experienceWarning = requirement.getRequiredExperience() > 0 && requirement.isTakeExperience() + ? this.user.getTranslationOrNothing(reference + "experience-warning") + : ""; - String money = !this.addon.isEconomyProvided() || requirement.getRequiredMoney() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "money", "[number]", - String.valueOf(requirement.getRequiredMoney())); + String money = !this.addon.isEconomyProvided() || requirement.getRequiredMoney() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "money", "[number]", + String.valueOf(requirement.getRequiredMoney())); - String moneyWarning = this.addon.isEconomyProvided() && requirement.getRequiredMoney() > 0 - && requirement.isTakeMoney() ? this.user.getTranslationOrNothing(reference + "money-warning") : ""; + String moneyWarning = this.addon.isEconomyProvided() && requirement.getRequiredMoney() > 0 + && requirement.isTakeMoney() ? this.user.getTranslationOrNothing(reference + "money-warning") : ""; - String level = !this.addon.isLevelProvided() || requirement.getRequiredIslandLevel() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "level", "[number]", - String.valueOf(requirement.getRequiredIslandLevel())); + String level = !this.addon.isLevelProvided() || requirement.getRequiredIslandLevel() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "level", "[number]", + String.valueOf(requirement.getRequiredIslandLevel())); - return this.user.getTranslationOrNothing(reference + "lore", "[experience]", experience, "[experience-warning]", - experienceWarning, "[money]", money, "[money-warning]", moneyWarning, "[level]", level); + return this.user.getTranslationOrNothing(reference + "lore", "[experience]", experience, "[experience-warning]", + experienceWarning, "[money]", money, "[money-warning]", moneyWarning, "[level]", level); } /** @@ -421,50 +421,50 @@ public abstract class CommonPanel { * @return Requirement lore message. */ private String generateStatisticChallenge(StatisticRequirements requirement) { - final String reference = Constants.DESCRIPTIONS + "challenge.requirements.statistic."; + final String reference = Constants.DESCRIPTIONS + "challenge.requirements.statistic."; - String statistic; + String statistic; - if (requirement.getStatistic() == null) { - // Challenges by default comes with empty statistic field. - return ""; - } + if (requirement.getStatistic() == null) { + // Challenges by default comes with empty statistic field. + return ""; + } - switch (requirement.getStatistic().getType()) { - case UNTYPED -> statistic = this.user.getTranslationOrNothing(reference + "statistic", "[statistic]", - Utils.prettifyObject(requirement.getStatistic(), this.user), "[number]", - String.valueOf(requirement.getAmount())); - case ITEM, BLOCK -> { - if (requirement.getAmount() > 1) { - statistic = this.user.getTranslationOrNothing(reference + "multiple-target", "[statistic]", - Utils.prettifyObject(requirement.getStatistic(), this.user), "[number]", - String.valueOf(requirement.getAmount()), "[target]", - Utils.prettifyObject(requirement.getMaterial(), this.user)); - } else { - statistic = this.user.getTranslationOrNothing(reference + "single-target", "[statistic]", - Utils.prettifyObject(requirement.getStatistic(), this.user), "[target]", - Utils.prettifyObject(requirement.getMaterial(), this.user)); - } - } - case ENTITY -> { - if (requirement.getAmount() > 1) { - statistic = this.user.getTranslationOrNothing(reference + "multiple-target", "[statistic]", - Utils.prettifyObject(requirement.getStatistic(), this.user), "[number]", - String.valueOf(requirement.getAmount()), "[target]", - Utils.prettifyObject(requirement.getEntity(), this.user)); - } else { - statistic = this.user.getTranslationOrNothing(reference + "single-target", "[statistic]", - Utils.prettifyObject(requirement.getStatistic(), this.user), "[target]", - Utils.prettifyObject(requirement.getEntity(), this.user)); - } - } - default -> statistic = ""; - } + switch (requirement.getStatistic().getType()) { + case UNTYPED -> statistic = this.user.getTranslationOrNothing(reference + "statistic", "[statistic]", + Utils.prettifyObject(requirement.getStatistic(), this.user), "[number]", + String.valueOf(requirement.getAmount())); + case ITEM, BLOCK -> { + if (requirement.getAmount() > 1) { + statistic = this.user.getTranslationOrNothing(reference + "multiple-target", "[statistic]", + Utils.prettifyObject(requirement.getStatistic(), this.user), "[number]", + String.valueOf(requirement.getAmount()), "[target]", + Utils.prettifyObject(requirement.getMaterial(), this.user)); + } else { + statistic = this.user.getTranslationOrNothing(reference + "single-target", "[statistic]", + Utils.prettifyObject(requirement.getStatistic(), this.user), "[target]", + Utils.prettifyObject(requirement.getMaterial(), this.user)); + } + } + case ENTITY -> { + if (requirement.getAmount() > 1) { + statistic = this.user.getTranslationOrNothing(reference + "multiple-target", "[statistic]", + Utils.prettifyObject(requirement.getStatistic(), this.user), "[number]", + String.valueOf(requirement.getAmount()), "[target]", + Utils.prettifyObject(requirement.getEntity(), this.user)); + } else { + statistic = this.user.getTranslationOrNothing(reference + "single-target", "[statistic]", + Utils.prettifyObject(requirement.getStatistic(), this.user), "[target]", + Utils.prettifyObject(requirement.getEntity(), this.user)); + } + } + default -> statistic = ""; + } - String warning = requirement.isReduceStatistic() ? this.user.getTranslationOrNothing(reference + "warning") - : ""; + String warning = requirement.isReduceStatistic() ? this.user.getTranslationOrNothing(reference + "warning") + : ""; - return this.user.getTranslationOrNothing(reference + "lore", "[statistic]", statistic, "[warning]", warning); + return this.user.getTranslationOrNothing(reference + "lore", "[statistic]", statistic, "[warning]", warning); } /** @@ -478,27 +478,27 @@ public abstract class CommonPanel { * @return String with a text that will be generated for status. */ private String generateChallengeStatus(boolean completedOnce, boolean completedAll, long completionCount, - int maxCompletions) { - final String reference = Constants.DESCRIPTIONS + "challenge.status."; + int maxCompletions) { + final String reference = Constants.DESCRIPTIONS + "challenge.status."; - if (completedAll) { - if (maxCompletions > 1) { - return this.user.getTranslationOrNothing(reference + "completed-times-reached", Constants.PARAMETER_MAX, - String.valueOf(maxCompletions)); - } else { - return this.user.getTranslationOrNothing(reference + "completed"); - } - } else if (completedOnce) { - if (maxCompletions > 0) { - return this.user.getTranslationOrNothing(reference + "completed-times-of", Constants.PARAMETER_MAX, - String.valueOf(maxCompletions), Constants.PARAMETER_NUMBER, String.valueOf(completionCount)); - } else { - return this.user.getTranslationOrNothing(reference + "completed-times", Constants.PARAMETER_NUMBER, - String.valueOf(completionCount)); - } - } else { - return ""; - } + if (completedAll) { + if (maxCompletions > 1) { + return this.user.getTranslationOrNothing(reference + "completed-times-reached", Constants.PARAMETER_MAX, + String.valueOf(maxCompletions)); + } else { + return this.user.getTranslationOrNothing(reference + "completed"); + } + } else if (completedOnce) { + if (maxCompletions > 0) { + return this.user.getTranslationOrNothing(reference + "completed-times-of", Constants.PARAMETER_MAX, + String.valueOf(maxCompletions), Constants.PARAMETER_NUMBER, String.valueOf(completionCount)); + } else { + return this.user.getTranslationOrNothing(reference + "completed-times", Constants.PARAMETER_NUMBER, + String.valueOf(completionCount)); + } + } else { + return ""; + } } /** @@ -510,11 +510,11 @@ public abstract class CommonPanel { * @return Reward text. */ private String generateRewards(Challenge challenge, boolean isRepeating) { - if (isRepeating) { - return this.generateRepeatReward(challenge); - } else { - return this.generateReward(challenge); - } + if (isRepeating) { + return this.generateRepeatReward(challenge); + } else { + return this.generateReward(challenge); + } } /** @@ -524,76 +524,76 @@ public abstract class CommonPanel { * @return Reward text. */ private String generateRepeatReward(Challenge challenge) { - final String reference = Constants.DESCRIPTIONS + "challenge.rewards."; + final String reference = Constants.DESCRIPTIONS + "challenge.rewards."; - String items; + String items; - if (!challenge.getRepeatItemReward().isEmpty()) { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "item-title")); - Utils.groupEqualItems(challenge.getRepeatItemReward(), challenge.getIgnoreRewardMetaData()).stream() - .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { - builder.append("\n"); + if (!challenge.getRepeatItemReward().isEmpty()) { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "item-title")); + Utils.groupEqualItems(challenge.getRepeatItemReward(), challenge.getIgnoreRewardMetaData()).stream() + .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { + builder.append("\n"); - if (itemStack.getAmount() > 1) { - builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", - String.valueOf(itemStack.getAmount()), "[item]", - Utils.prettifyObject(itemStack, this.user))); - } else { - builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", - Utils.prettifyObject(itemStack, this.user))); - } - }); + if (itemStack.getAmount() > 1) { + builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", + String.valueOf(itemStack.getAmount()), "[item]", + Utils.prettifyObject(itemStack, this.user))); + } else { + builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", + Utils.prettifyObject(itemStack, this.user))); + } + }); - items = builder.toString(); - } else { - items = ""; - } + items = builder.toString(); + } else { + items = ""; + } - String experience = challenge.getRepeatExperienceReward() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "experience", "[number]", - String.valueOf(challenge.getRepeatExperienceReward())); + String experience = challenge.getRepeatExperienceReward() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "experience", "[number]", + String.valueOf(challenge.getRepeatExperienceReward())); - String money = !this.addon.isEconomyProvided() || challenge.getRepeatMoneyReward() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "money", "[number]", - addon.getPlugin().getVault().map(v -> v.format(challenge.getRepeatMoneyReward())) - .orElse(String.valueOf(challenge.getRepeatMoneyReward()))); + String money = !this.addon.isEconomyProvided() || challenge.getRepeatMoneyReward() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "money", "[number]", + addon.getPlugin().getVault().map(v -> v.format(challenge.getRepeatMoneyReward())) + .orElse(String.valueOf(challenge.getRepeatMoneyReward()))); - String commands; + String commands; - if (!challenge.getRepeatRewardCommands().isEmpty()) { - StringBuilder permissionBuilder = new StringBuilder(); + if (!challenge.getRepeatRewardCommands().isEmpty()) { + StringBuilder permissionBuilder = new StringBuilder(); - if (!challenge.getRepeatRewardCommands().isEmpty()) { - permissionBuilder.append(this.user.getTranslationOrNothing(reference + "commands-title")); + if (!challenge.getRepeatRewardCommands().isEmpty()) { + permissionBuilder.append(this.user.getTranslationOrNothing(reference + "commands-title")); - challenge.getRepeatRewardCommands().forEach(command -> { - permissionBuilder.append("\n"); - permissionBuilder - .append(this.user.getTranslationOrNothing(reference + "command", "[command]", command)); - }); - } + challenge.getRepeatRewardCommands().forEach(command -> { + permissionBuilder.append("\n"); + permissionBuilder + .append(this.user.getTranslationOrNothing(reference + "command", "[command]", command)); + }); + } - commands = permissionBuilder.toString(); - } else { - commands = ""; - } + commands = permissionBuilder.toString(); + } else { + commands = ""; + } - if (challenge.getRepeatRewardText().isEmpty() && items.isEmpty() && experience.isEmpty() && money.isEmpty() - && commands.isEmpty()) { - // If everything is empty, do not return anything. - return ""; - } + if (challenge.getRepeatRewardText().isEmpty() && items.isEmpty() && experience.isEmpty() && money.isEmpty() + && commands.isEmpty()) { + // If everything is empty, do not return anything. + return ""; + } - String rewardText = this.user - .getTranslationOrNothing("challenges.challenges." + challenge.getUniqueId() + ".repeat-reward-text"); + String rewardText = this.user + .getTranslationOrNothing("challenges.challenges." + challenge.getUniqueId() + ".repeat-reward-text"); - if (rewardText.isEmpty()) { - rewardText = Util.translateColorCodes(String.join("\n", challenge.getRepeatRewardText())); - } + if (rewardText.isEmpty()) { + rewardText = Util.translateColorCodes(String.join("\n", challenge.getRepeatRewardText())); + } - return this.user.getTranslationOrNothing(reference + "lore", "[text]", rewardText, "[items]", items, - "[experience]", experience, "[money]", money, "[commands]", commands); + return this.user.getTranslationOrNothing(reference + "lore", "[text]", rewardText, "[items]", items, + "[experience]", experience, "[money]", money, "[commands]", commands); } /** @@ -603,76 +603,76 @@ public abstract class CommonPanel { * @return Reward text. */ private String generateReward(Challenge challenge) { - final String reference = Constants.DESCRIPTIONS + "challenge.rewards."; + final String reference = Constants.DESCRIPTIONS + "challenge.rewards."; - String items; + String items; - if (!challenge.getRewardItems().isEmpty()) { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "item-title")); - Utils.groupEqualItems(challenge.getRewardItems(), challenge.getIgnoreRewardMetaData()).stream() - .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { - builder.append("\n"); + if (!challenge.getRewardItems().isEmpty()) { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "item-title")); + Utils.groupEqualItems(challenge.getRewardItems(), challenge.getIgnoreRewardMetaData()).stream() + .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { + builder.append("\n"); - if (itemStack.getAmount() > 1) { - builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", - String.valueOf(itemStack.getAmount()), "[item]", - Utils.prettifyObject(itemStack, this.user))); - } else { - builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", - Utils.prettifyObject(itemStack, this.user))); - } - }); + if (itemStack.getAmount() > 1) { + builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", + String.valueOf(itemStack.getAmount()), "[item]", + Utils.prettifyObject(itemStack, this.user))); + } else { + builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", + Utils.prettifyObject(itemStack, this.user))); + } + }); - items = builder.toString(); - } else { - items = ""; - } + items = builder.toString(); + } else { + items = ""; + } - String experience = challenge.getRewardExperience() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "experience", "[number]", - String.valueOf(challenge.getRewardExperience())); + String experience = challenge.getRewardExperience() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "experience", "[number]", + String.valueOf(challenge.getRewardExperience())); - String money = !this.addon.isEconomyProvided() || challenge.getRewardMoney() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "money", "[number]", - addon.getPlugin().getVault().map(v -> v.format(challenge.getRewardMoney())) - .orElse(String.valueOf(challenge.getRewardMoney()))); + String money = !this.addon.isEconomyProvided() || challenge.getRewardMoney() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "money", "[number]", + addon.getPlugin().getVault().map(v -> v.format(challenge.getRewardMoney())) + .orElse(String.valueOf(challenge.getRewardMoney()))); - String commands; + String commands; - if (!challenge.getRewardCommands().isEmpty()) { - StringBuilder permissionBuilder = new StringBuilder(); + if (!challenge.getRewardCommands().isEmpty()) { + StringBuilder permissionBuilder = new StringBuilder(); - if (!challenge.getRewardCommands().isEmpty()) { - permissionBuilder.append(this.user.getTranslationOrNothing(reference + "commands-title")); + if (!challenge.getRewardCommands().isEmpty()) { + permissionBuilder.append(this.user.getTranslationOrNothing(reference + "commands-title")); - challenge.getRewardCommands().forEach(command -> { - permissionBuilder.append("\n"); - permissionBuilder - .append(this.user.getTranslationOrNothing(reference + "command", "[command]", command)); - }); - } + challenge.getRewardCommands().forEach(command -> { + permissionBuilder.append("\n"); + permissionBuilder + .append(this.user.getTranslationOrNothing(reference + "command", "[command]", command)); + }); + } - commands = permissionBuilder.toString(); - } else { - commands = ""; - } + commands = permissionBuilder.toString(); + } else { + commands = ""; + } - if (challenge.getRewardText().isEmpty() && items.isEmpty() && experience.isEmpty() && money.isEmpty() - && commands.isEmpty()) { - // If everything is empty, do not return anything. - return ""; - } + if (challenge.getRewardText().isEmpty() && items.isEmpty() && experience.isEmpty() && money.isEmpty() + && commands.isEmpty()) { + // If everything is empty, do not return anything. + return ""; + } - String rewardText = this.user - .getTranslationOrNothing("challenges.challenges." + challenge.getUniqueId() + ".reward-text"); + String rewardText = this.user + .getTranslationOrNothing("challenges.challenges." + challenge.getUniqueId() + ".reward-text"); - if (rewardText.isEmpty()) { - rewardText = Util.translateColorCodes(String.join("\n", challenge.getRewardText())); - } + if (rewardText.isEmpty()) { + rewardText = Util.translateColorCodes(String.join("\n", challenge.getRewardText())); + } - return this.user.getTranslationOrNothing(reference + "lore", "[text]", rewardText, "[items]", items, - "[experience]", experience, "[money]", money, "[commands]", commands); + return this.user.getTranslationOrNothing(reference + "lore", "[text]", rewardText, "[items]", items, + "[experience]", experience, "[money]", money, "[commands]", commands); } /** @@ -682,27 +682,27 @@ public abstract class CommonPanel { * @return List with generated description. */ protected List generateLevelDescription(ChallengeLevel level) { - final String reference = Constants.DESCRIPTIONS + "level."; + final String reference = Constants.DESCRIPTIONS + "level."; - // Non-memory optimal code used for easier debugging and nicer code layout for - // my eye :) - // Get status in single string - String status = ""; - // Get requirements in single string - String waiver = this.manager.isLastLevel(level, this.world) ? "" - : this.user.getTranslationOrNothing(reference + "waiver", "[number]", - String.valueOf(level.getWaiverAmount())); - // Get rewards in single string - String rewards = this.generateReward(level); + // Non-memory optimal code used for easier debugging and nicer code layout for + // my eye :) + // Get status in single string + String status = ""; + // Get requirements in single string + String waiver = this.manager.isLastLevel(level, this.world) ? "" + : this.user.getTranslationOrNothing(reference + "waiver", "[number]", + String.valueOf(level.getWaiverAmount())); + // Get rewards in single string + String rewards = this.generateReward(level); - String returnString = this.user.getTranslation(reference + "lore", "[text]", - Util.translateColorCodes(level.getUnlockMessage()), "[waiver]", waiver, "[rewards]", rewards, - "[status]", status); + String returnString = this.user.getTranslation(reference + "lore", "[text]", + Util.translateColorCodes(level.getUnlockMessage()), "[waiver]", waiver, "[rewards]", rewards, + "[status]", status); - // Remove empty lines and returns as a list. + // Remove empty lines and returns as a list. - return Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) - .collect(Collectors.toList()); + return Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) + .collect(Collectors.toList()); } /** @@ -713,36 +713,36 @@ public abstract class CommonPanel { * @return List with generated description. */ protected List generateLevelDescription(LevelStatus levelStatus, User user) { - ChallengeLevel level = levelStatus.getLevel(); + ChallengeLevel level = levelStatus.getLevel(); - final String reference = Constants.DESCRIPTIONS + "level."; + final String reference = Constants.DESCRIPTIONS + "level."; - // Non-memory optimal code used for easier debugging and nicer code layout for - // my eye :) - // Get status in single string - String status = this.generateLevelStatus(levelStatus); - // Get requirements in single string - String waiver = this.manager.isLastLevel(level, this.world) || !levelStatus.isUnlocked() - || levelStatus.isComplete() ? "" - : this.user.getTranslationOrNothing(reference + "waiver", "[number]", - String.valueOf(level.getWaiverAmount())); - // Get rewards in single string - String rewards = !levelStatus.isUnlocked() ? "" : this.generateReward(level); + // Non-memory optimal code used for easier debugging and nicer code layout for + // my eye :) + // Get status in single string + String status = this.generateLevelStatus(levelStatus); + // Get requirements in single string + String waiver = this.manager.isLastLevel(level, this.world) || !levelStatus.isUnlocked() + || levelStatus.isComplete() ? "" + : this.user.getTranslationOrNothing(reference + "waiver", "[number]", + String.valueOf(level.getWaiverAmount())); + // Get rewards in single string + String rewards = !levelStatus.isUnlocked() ? "" : this.generateReward(level); - String description = this.user - .getTranslationOrNothing("challenges.levels." + level.getUniqueId() + ".description"); + String description = this.user + .getTranslationOrNothing("challenges.levels." + level.getUniqueId() + ".description"); - if (description.isEmpty()) { - description = Util.translateColorCodes(String.join("\n", level.getUnlockMessage())); - } + if (description.isEmpty()) { + description = Util.translateColorCodes(String.join("\n", level.getUnlockMessage())); + } - String returnString = this.user.getTranslation(reference + "lore", "[text]", description, "[waiver]", waiver, - "[rewards]", rewards, "[status]", status); + String returnString = this.user.getTranslation(reference + "lore", "[text]", description, "[waiver]", waiver, + "[rewards]", rewards, "[status]", status); - // Remove empty lines and returns as a list. + // Remove empty lines and returns as a list. - return Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) - .collect(Collectors.toList()); + return Arrays.stream(returnString.replaceAll("(?m)^[ \\t]*\\r?\\n", "").split("\n")) + .collect(Collectors.toList()); } /** @@ -752,25 +752,25 @@ public abstract class CommonPanel { * @return Level status text. */ private String generateLevelStatus(LevelStatus levelStatus) { - final String reference = Constants.DESCRIPTIONS + "level.status."; + final String reference = Constants.DESCRIPTIONS + "level.status."; - if (!levelStatus.isUnlocked()) { - return this.user.getTranslationOrNothing(reference + "locked") + "\n" - + this.user.getTranslationOrNothing(reference + "missing-challenges", "[number]", - String.valueOf(levelStatus.getNumberOfChallengesStillToDo())); - } else if (levelStatus.isComplete()) { - return this.user.getTranslationOrNothing(reference + "completed"); - } else { - ChallengeLevel level = levelStatus.getLevel(); - List challengeList = this.addon.getChallengesManager().getLevelChallenges(level); + if (!levelStatus.isUnlocked()) { + return this.user.getTranslationOrNothing(reference + "locked") + "\n" + + this.user.getTranslationOrNothing(reference + "missing-challenges", "[number]", + String.valueOf(levelStatus.getNumberOfChallengesStillToDo())); + } else if (levelStatus.isComplete()) { + return this.user.getTranslationOrNothing(reference + "completed"); + } else { + ChallengeLevel level = levelStatus.getLevel(); + List challengeList = this.addon.getChallengesManager().getLevelChallenges(level); - // Check if unlock message should appear. - int doneChallenges = (int) challengeList.stream().filter(challenge -> this.addon.getChallengesManager() - .isChallengeComplete(user.getUniqueId(), world, challenge)).count(); + // Check if unlock message should appear. + int doneChallenges = (int) challengeList.stream().filter(challenge -> this.addon.getChallengesManager() + .isChallengeComplete(user.getUniqueId(), world, challenge)).count(); - return this.user.getTranslation(reference + "completed-challenges-of", "[number]", - String.valueOf(doneChallenges), "[max]", String.valueOf(challengeList.size())); - } + return this.user.getTranslation(reference + "completed-challenges-of", "[number]", + String.valueOf(doneChallenges), "[max]", String.valueOf(challengeList.size())); + } } /** @@ -780,80 +780,80 @@ public abstract class CommonPanel { * @return Reward text. */ private String generateReward(ChallengeLevel level) { - final String reference = Constants.DESCRIPTIONS + "level.rewards."; + final String reference = Constants.DESCRIPTIONS + "level.rewards."; - String items; + String items; - if (!level.getRewardItems().isEmpty()) { - StringBuilder builder = new StringBuilder(); - builder.append(this.user.getTranslationOrNothing(reference + "item-title")); - Utils.groupEqualItems(level.getRewardItems(), level.getIgnoreRewardMetaData()).stream() - .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { - builder.append("\n"); + if (!level.getRewardItems().isEmpty()) { + StringBuilder builder = new StringBuilder(); + builder.append(this.user.getTranslationOrNothing(reference + "item-title")); + Utils.groupEqualItems(level.getRewardItems(), level.getIgnoreRewardMetaData()).stream() + .sorted(Comparator.comparing(ItemStack::getType)).forEach(itemStack -> { + builder.append("\n"); - if (itemStack.getAmount() > 1) { - builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", - String.valueOf(itemStack.getAmount()), "[item]", - Utils.prettifyObject(itemStack, this.user))); - } else { - builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", - Utils.prettifyObject(itemStack, this.user))); - } - }); + if (itemStack.getAmount() > 1) { + builder.append(this.user.getTranslationOrNothing(reference + "items-value", "[number]", + String.valueOf(itemStack.getAmount()), "[item]", + Utils.prettifyObject(itemStack, this.user))); + } else { + builder.append(this.user.getTranslationOrNothing(reference + "item-value", "[item]", + Utils.prettifyObject(itemStack, this.user))); + } + }); - items = builder.toString(); - } else { - items = ""; - } + items = builder.toString(); + } else { + items = ""; + } - String experience = level.getRewardExperience() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "experience", "[number]", - String.valueOf(level.getRewardExperience())); + String experience = level.getRewardExperience() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "experience", "[number]", + String.valueOf(level.getRewardExperience())); - String money = !this.addon.isEconomyProvided() || level.getRewardMoney() <= 0 ? "" - : this.user.getTranslationOrNothing(reference + "money", "[number]", - String.valueOf(level.getRewardMoney())); + String money = !this.addon.isEconomyProvided() || level.getRewardMoney() <= 0 ? "" + : this.user.getTranslationOrNothing(reference + "money", "[number]", + String.valueOf(level.getRewardMoney())); - String commands; + String commands; - if (!level.getRewardCommands().isEmpty()) { - StringBuilder permissionBuilder = new StringBuilder(); + if (!level.getRewardCommands().isEmpty()) { + StringBuilder permissionBuilder = new StringBuilder(); - if (!level.getRewardCommands().isEmpty()) { - permissionBuilder.append(this.user.getTranslationOrNothing(reference + "commands-title")); + if (!level.getRewardCommands().isEmpty()) { + permissionBuilder.append(this.user.getTranslationOrNothing(reference + "commands-title")); - level.getRewardCommands().forEach(command -> { - permissionBuilder.append("\n"); - permissionBuilder - .append(this.user.getTranslationOrNothing(reference + "command", "[command]", command)); - }); - } + level.getRewardCommands().forEach(command -> { + permissionBuilder.append("\n"); + permissionBuilder + .append(this.user.getTranslationOrNothing(reference + "command", "[command]", command)); + }); + } - commands = permissionBuilder.toString(); - } else { - commands = ""; - } + commands = permissionBuilder.toString(); + } else { + commands = ""; + } - if (level.getRewardText().isEmpty() && items.isEmpty() && experience.isEmpty() && money.isEmpty() - && commands.isEmpty()) { - // If everything is empty, do not return anything. - return ""; - } + if (level.getRewardText().isEmpty() && items.isEmpty() && experience.isEmpty() && money.isEmpty() + && commands.isEmpty()) { + // If everything is empty, do not return anything. + return ""; + } - String rewardText = this.user - .getTranslationOrNothing("challenges.levels." + level.getUniqueId() + ".reward-text"); + String rewardText = this.user + .getTranslationOrNothing("challenges.levels." + level.getUniqueId() + ".reward-text"); - if (rewardText.isEmpty()) { - rewardText = Util.translateColorCodes(String.join("\n", level.getRewardText())); - } + if (rewardText.isEmpty()) { + rewardText = Util.translateColorCodes(String.join("\n", level.getRewardText())); + } - return this.user.getTranslationOrNothing(reference + "lore", "[text]", rewardText, "[items]", items, - "[experience]", experience, "[money]", money, "[commands]", commands); + return this.user.getTranslationOrNothing(reference + "lore", "[text]", rewardText, "[items]", items, + "[experience]", experience, "[money]", money, "[commands]", commands); } -// --------------------------------------------------------------------- -// Section: Variables -// --------------------------------------------------------------------- + // --------------------------------------------------------------------- + // Section: Variables + // --------------------------------------------------------------------- /** * This variable stores parent gui. diff --git a/src/main/java/world/bentobox/challenges/utils/Utils.java b/src/main/java/world/bentobox/challenges/utils/Utils.java index 973f6fa..09acb61 100644 --- a/src/main/java/world/bentobox/challenges/utils/Utils.java +++ b/src/main/java/world/bentobox/challenges/utils/Utils.java @@ -7,11 +7,19 @@ import java.util.List; import java.util.Locale; import java.util.Set; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.World; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.*; +import org.bukkit.inventory.meta.BookMeta; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionType; import org.eclipse.jdt.annotation.Nullable; diff --git a/src/test/java/world/bentobox/challenges/commands/ChallengesCommandTest.java b/src/test/java/world/bentobox/challenges/commands/ChallengesCommandTest.java index 0259db1..56c041c 100644 --- a/src/test/java/world/bentobox/challenges/commands/ChallengesCommandTest.java +++ b/src/test/java/world/bentobox/challenges/commands/ChallengesCommandTest.java @@ -16,7 +16,6 @@ import java.util.Optional; import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFactory; @@ -53,7 +52,7 @@ import world.bentobox.challenges.managers.ChallengesManager; * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, ChatColor.class, Util.class}) +@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class }) public class ChallengesCommandTest { @Mock @@ -141,10 +140,6 @@ public class ChallengesCommandTest { // Challenges exist when(chm.hasAnyChallengeData(any(World.class))).thenReturn(true); - // ChatColor - PowerMockito.mockStatic(ChatColor.class); - when(ChatColor.translateAlternateColorCodes(any(char.class), anyString())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); - // Settings Settings settings = new Settings(); when(addon.getChallengesSettings()).thenReturn(settings); @@ -159,6 +154,9 @@ public class ChallengesCommandTest { // Util PowerMockito.mockStatic(Util.class, Mockito.RETURNS_MOCKS); when(Util.sameWorld(any(), any())).thenReturn(true); + when(Util.translateColorCodes(anyString())) + .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); + // Command under test cc = new ChallengesPlayerCommand(addon, ic); } diff --git a/src/test/java/world/bentobox/challenges/commands/CompleteChallengeCommandTest.java b/src/test/java/world/bentobox/challenges/commands/CompleteChallengeCommandTest.java index 3c3cb01..876717a 100644 --- a/src/test/java/world/bentobox/challenges/commands/CompleteChallengeCommandTest.java +++ b/src/test/java/world/bentobox/challenges/commands/CompleteChallengeCommandTest.java @@ -19,7 +19,6 @@ import java.util.Optional; import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFactory; @@ -46,10 +45,10 @@ import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; import world.bentobox.challenges.ChallengesAddon; -import world.bentobox.challenges.managers.ChallengesManager; import world.bentobox.challenges.config.Settings; import world.bentobox.challenges.config.SettingsUtils.VisibilityMode; import world.bentobox.challenges.database.object.Challenge; +import world.bentobox.challenges.managers.ChallengesManager; import world.bentobox.challenges.tasks.TryToComplete; import world.bentobox.challenges.utils.Constants; import world.bentobox.challenges.utils.Utils; @@ -59,7 +58,7 @@ import world.bentobox.challenges.utils.Utils; * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, ChatColor.class, Utils.class, TryToComplete.class, Util.class}) +@PrepareForTest({ Bukkit.class, BentoBox.class, Utils.class, TryToComplete.class, Util.class }) public class CompleteChallengeCommandTest { @Mock @@ -150,11 +149,6 @@ public class CompleteChallengeCommandTest { List nameList = Arrays.asList("world_maker", "world_placer", "bad_challenge_name", "world_breaker"); when(chm.getAllChallengesNames(any())).thenReturn(nameList); - - // ChatColor - PowerMockito.mockStatic(ChatColor.class); - when(ChatColor.translateAlternateColorCodes(any(char.class), anyString())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); - // Settings Settings settings = new Settings(); when(addon.getChallengesSettings()).thenReturn(settings); @@ -176,6 +170,8 @@ public class CompleteChallengeCommandTest { // Util PowerMockito.mockStatic(Util.class); when(Util.tabLimit(any(), any())).thenAnswer((Answer>) invocation -> (List)invocation.getArgument(0, List.class)); + when(Util.translateColorCodes(anyString())) + .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); // Command under test cc = new CompleteChallengeCommand(addon, ic); diff --git a/src/test/java/world/bentobox/challenges/tasks/TryToCompleteTest.java b/src/test/java/world/bentobox/challenges/tasks/TryToCompleteTest.java index 6b39986..363367a 100644 --- a/src/test/java/world/bentobox/challenges/tasks/TryToCompleteTest.java +++ b/src/test/java/world/bentobox/challenges/tasks/TryToCompleteTest.java @@ -22,7 +22,6 @@ import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; @@ -71,14 +70,13 @@ import world.bentobox.challenges.database.object.requirements.InventoryRequireme import world.bentobox.challenges.database.object.requirements.IslandRequirements; import world.bentobox.challenges.managers.ChallengesManager; import world.bentobox.challenges.tasks.TryToComplete.ChallengeResult; -import world.bentobox.challenges.utils.Utils; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class, Utils.class, ChatColor.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class }) public class TryToCompleteTest { // Constants @@ -120,6 +118,7 @@ public class TryToCompleteTest { private final ItemStack[] contents = {}; @Mock private BoundingBox bb; + private Set onlinePlayers; /** */ @@ -169,6 +168,8 @@ public class TryToCompleteTest { when(Util.getWorld(any())).thenReturn(world); when(Util.prettifyText(anyString())).thenCallRealMethod(); when(Util.stripSpaceAfterColorCodes(anyString())).thenCallRealMethod(); + when(Util.translateColorCodes(anyString())) + .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); // Island World Manager IslandWorldManager iwm = mock(IslandWorldManager.class); @@ -205,6 +206,7 @@ public class TryToCompleteTest { when(user.hasPermission(anyString())).thenReturn(true); when(user.getPlayer()).thenReturn(player); UUID uniqueId = UUID.randomUUID(); + when(player.getUniqueId()).thenReturn(uniqueId); when(user.getUniqueId()).thenReturn(uniqueId); when(user.getTranslation(anyString())) .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); @@ -213,6 +215,7 @@ public class TryToCompleteTest { when(user.getTranslationOrNothing(anyString())) .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); when(user.getName()).thenReturn("tastybento"); + User.getInstance(player); @Nullable Location userLoc = mock(Location.class); when(userLoc.toString()).thenReturn("location"); @@ -227,6 +230,7 @@ public class TryToCompleteTest { LocalesManager lm = mock(LocalesManager.class); when(plugin.getLocalesManager()).thenReturn(lm); when(lm.get(any(), any())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); + when(lm.get(any(), any())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); PlaceholdersManager phm = mock(PlaceholdersManager.class); when(plugin.getPlaceholdersManager()).thenReturn(phm); when(phm.replacePlaceholders(any(), any())) @@ -242,7 +246,7 @@ public class TryToCompleteTest { // Bukkit - online players Map online = new HashMap<>(); - Set onlinePlayers = new HashSet<>(); + onlinePlayers = new HashSet<>(); for (String name : NAMES) { Player p1 = mock(Player.class); UUID uuid2 = UUID.randomUUID(); @@ -252,7 +256,7 @@ public class TryToCompleteTest { onlinePlayers.add(p1); } PowerMockito.mockStatic(Bukkit.class); - when(Bukkit.getOnlinePlayers()).then((Answer>) invocation -> onlinePlayers); + when(Bukkit.getOnlinePlayers()).then((Answer>) invocation -> Set.of(player)); // World settings Map map = new HashMap<>(); @@ -264,10 +268,6 @@ public class TryToCompleteTest { ItemFactory itemFactory = mock(ItemFactory.class); when(Bukkit.getItemFactory()).thenReturn(itemFactory); - // ChatColor - PowerMockito.mockStatic(ChatColor.class, Mockito.RETURNS_MOCKS); - when(ChatColor.stripColor(anyString())) - .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); } @After