diff --git a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java index 71d8a95..010f928 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java @@ -1,6 +1,7 @@ package net.knarcraft.dynmapcitizens; -import net.knarcraft.dynmapcitizens.formatting.DynmapCitizensTranslatableMessage; +import net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage; +import net.knarcraft.dynmapcitizens.formatting.SentinelTranslatableMessage; import net.knarcraft.dynmapcitizens.handler.VaultHandler; import net.knarcraft.dynmapcitizens.handler.trait.BlacksmithHandler; import net.knarcraft.dynmapcitizens.handler.trait.CitizensTraitHandler; @@ -8,6 +9,7 @@ import net.knarcraft.dynmapcitizens.handler.trait.MinstrelHandler; import net.knarcraft.dynmapcitizens.handler.trait.SentinelHandler; import net.knarcraft.dynmapcitizens.handler.trait.quests.QuestsHandler; import net.knarcraft.dynmapcitizens.settings.GlobalSettings; +import net.knarcraft.knarlib.formatting.StringFormatter; import net.knarcraft.knarlib.formatting.TranslatableTimeUnit; import net.knarcraft.knarlib.formatting.Translator; import org.bukkit.Bukkit; @@ -26,6 +28,7 @@ public final class DynmapCitizens extends JavaPlugin { private static DynmapCitizens instance; private static Translator translator; + private static StringFormatter stringFormatter; private DynmapAPI dynmapAPIInstance; private VaultHandler vaultHandler; private GlobalSettings globalSettings; @@ -57,8 +60,10 @@ public final class DynmapCitizens extends JavaPlugin { //Load all messages translator = new Translator(); translator.registerMessageCategory(TranslatableTimeUnit.UNIT_SECOND); - translator.registerMessageCategory(DynmapCitizensTranslatableMessage.SENTINEL_DESCRIPTION); + translator.registerMessageCategory(QuestsTranslatableMessage.QUESTS_REQUIREMENTS_FORMAT); + translator.registerMessageCategory(SentinelTranslatableMessage.SENTINEL_DESCRIPTION); translator.loadLanguages(this.getDataFolder(), "en"); + stringFormatter = new StringFormatter(this.getDescription().getName(), translator); //Initialize all enabled traits initializeTraitHandlers(configuration); @@ -89,6 +94,15 @@ public final class DynmapCitizens extends JavaPlugin { return translator; } + /** + * Gets the string formatter to use for formatting + * + * @return

The string formatter to use

+ */ + public static StringFormatter getFormatter() { + return stringFormatter; + } + /** * Gets the global settings for this plugin * diff --git a/src/main/java/net/knarcraft/dynmapcitizens/formatting/DynmapCitizensTranslatableMessage.java b/src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java similarity index 84% rename from src/main/java/net/knarcraft/dynmapcitizens/formatting/DynmapCitizensTranslatableMessage.java rename to src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java index 878d474..004693a 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/formatting/DynmapCitizensTranslatableMessage.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java @@ -5,22 +5,7 @@ import net.knarcraft.knarlib.formatting.TranslatableMessage; /** * An enum describing all of DynmapCitizens' translatable messages */ -public enum DynmapCitizensTranslatableMessage implements TranslatableMessage { - - /** - * The format for the basic description of any sentinel - * - *

Placeholders: {name}, {squad}, {sentinelDetails}

- */ - SENTINEL_DESCRIPTION, - - /** - * The format for the detailed description of any sentinel - * - *

Placeholders: {invincible}, {armor}, {health}, {accuracy}, {damage}, {speed}, {allowKnockback}, {range}, - * {reach}, {targets}, {avoids}, {ignores}

- */ - SENTINEL_DETAILS, +public enum QuestsTranslatableMessage implements TranslatableMessage { /** * The format for a quest's planner description @@ -150,6 +135,6 @@ public enum DynmapCitizensTranslatableMessage implements TranslatableMessage { @Override public TranslatableMessage[] getAllMessages() { - return DynmapCitizensTranslatableMessage.values(); + return QuestsTranslatableMessage.values(); } } diff --git a/src/main/java/net/knarcraft/dynmapcitizens/formatting/SentinelTranslatableMessage.java b/src/main/java/net/knarcraft/dynmapcitizens/formatting/SentinelTranslatableMessage.java new file mode 100644 index 0000000..27898cc --- /dev/null +++ b/src/main/java/net/knarcraft/dynmapcitizens/formatting/SentinelTranslatableMessage.java @@ -0,0 +1,31 @@ +package net.knarcraft.dynmapcitizens.formatting; + +import net.knarcraft.knarlib.formatting.TranslatableMessage; + +/** + * An enum describing all translatable messages for sentinels + */ +public enum SentinelTranslatableMessage implements TranslatableMessage { + + /** + * The format for the basic description of any sentinel + * + *

Placeholders: {name}, {squad}, {sentinelDetails}

+ */ + SENTINEL_DESCRIPTION, + + /** + * The format for the detailed description of any sentinel + * + *

Placeholders: {invincible}, {armor}, {health}, {accuracy}, {damage}, {speed}, {allowKnockback}, {range}, + * {reach}, {targets}, {avoids}, {ignores}

+ */ + SENTINEL_DETAILS, + ; + + @Override + public TranslatableMessage[] getAllMessages() { + return SentinelTranslatableMessage.values(); + } + +} diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestRequirementsInfoGenerator.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestRequirementsInfoGenerator.java index 426b2ff..e2a9a6d 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestRequirementsInfoGenerator.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestRequirementsInfoGenerator.java @@ -2,18 +2,37 @@ package net.knarcraft.dynmapcitizens.handler.trait.quests; import me.blackvein.quests.quests.IQuest; import me.blackvein.quests.quests.Requirements; +import net.knarcraft.dynmapcitizens.DynmapCitizens; import net.knarcraft.dynmapcitizens.util.QuestsHelper; +import net.knarcraft.knarlib.formatting.StringFormatter; +import net.knarcraft.knarlib.formatting.StringReplacer; +import net.knarcraft.knarlib.formatting.TranslatableMessage; import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_BLOCKED_BY_QUEST_FORMAT; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_BLOCKED_BY_QUEST_ITEM; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_EXP; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_FORMAT; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_MC_MMO_SKILL; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_QUEST_POINTS; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_REQUIRED_ITEM_FORMAT; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_REQUIRED_ITEM_ITEM; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_REQUIRED_PERMISSION_FORMAT; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_REQUIRED_PERMISSION_ITEM; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_REQUIRED_QUEST_FORMAT; +import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REQUIREMENTS_REQUIRED_QUEST_ITEM; + /** * A class to generate a string containing all information about a quest's requirements */ public class QuestRequirementsInfoGenerator { private final IQuest quest; + private final StringFormatter formatter; /** * Instantiates a new quest requirement info generator @@ -22,6 +41,7 @@ public class QuestRequirementsInfoGenerator { */ public QuestRequirementsInfoGenerator(IQuest quest) { this.quest = quest; + formatter = DynmapCitizens.getFormatter(); } /** @@ -31,78 +51,122 @@ public class QuestRequirementsInfoGenerator { */ public String getQuestRequirementsInfo() { Requirements requirements = quest.getRequirements(); - StringBuilder requirementInfo = new StringBuilder(); if (!requirements.hasRequirement()) { - return requirementInfo.toString(); + return ""; } - requirementInfo.append("Requirements: "); - return requirementInfo.toString(); + /** + * Gets a list of item names from the given list of items + * + * @param items

The items to get the names of

+ * @return

The names of the given items

+ */ + private List getItemNames(List items) { + List itemNames = new ArrayList<>(); + for (ItemStack itemStack : items) { + itemNames.add(QuestsHelper.getUpperCasedItemStackString(itemStack)); + } + return itemNames; + } + + /** + * Gets a list of the quest names for the given quests + * + * @param quests

The quests to get names for

+ * @return

A list of quest names

+ */ + private List getQuestNames(List quests) { + List questNames = new ArrayList<>(quests.size()); + for (IQuest quest : quests) { + questNames.add(quest.getName()); + } + return questNames; + } + + /** + * Gets a string for the given list of requirements + * + * @param itemList

The items to display in the list of requirements

+ * @param formatMessage

The translatable message describing the list format

+ * @param formatPlaceholder

The placeholder to replace with the list items

+ * @param itemMessage

The translatable message describing each item's format

+ * @param itemPlaceholder

The placeholder to replace with each item in the list

+ * @return

The string corresponding to the given requirement list

+ */ + private String getRequirementList(List itemList, TranslatableMessage formatMessage, String formatPlaceholder, + TranslatableMessage itemMessage, String itemPlaceholder) { + StringBuilder blockedBuilder = new StringBuilder(); + for (Object requirements : itemList) { + blockedBuilder.append(formatter.replacePlaceholder(itemMessage, itemPlaceholder, + String.valueOf(requirements))); + } + return formatter.replacePlaceholder(formatMessage, formatPlaceholder, blockedBuilder.toString()); } }