diff --git a/README.md b/README.md index 230a362..4492ecc 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ fee. Costs are highly customizable. - This plugin is not directly compatible with the original. If you are using the old one, you will need to set it up again! -### Dependencies +### Required dependencies - Citizens2 - Vault @@ -146,7 +146,7 @@ All currently supported presets, and available filters for each preset: |----------|------------|----------------------------------------------------------------------------------------------| | language | string | The language used for this plugin. Only "en" is supported, unless you add a custom language. | -### Global-only options +### Blacksmith global-only options | Key | Value type | Description | |---------------------------|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -158,7 +158,7 @@ All currently supported presets, and available filters for each preset: | chippedAnvilReforgingCost | positive decimal number | The price for reforging a chipped anvil (slightly damaged). No other costs apply! | | damagedAnvilReforgingCost | positive decimal number | The price for reforging a damaged anvil (very damaged). No other costs apply! | -### Per-npc (with default values set in config.yml) +### Blacksmith per-npc (with default values set in config.yml) #### Configuration values @@ -179,7 +179,7 @@ All currently supported presets, and available filters for each preset: | enchantmentBlocklist | string list | A string list of all enchantments a blacksmith should not be allowed to add to items. | | reforgeAnvils | true/false | Whether to allow the blacksmith to reforge anvils. If enabled, chipped and damaged anvils will be replaced with a normal anvil. | -#### Messages +#### Blacksmith per-npc messages (with default values set in config.yml) | Message Key | Explanation | |--------------------------|-----------------------------------------------------------------------------------------------------------------| diff --git a/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithSetting.java b/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithSetting.java index feca9cd..d2f5109 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithSetting.java +++ b/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithSetting.java @@ -15,14 +15,14 @@ public enum BlacksmithSetting implements Setting { * *
If set to false, the item will be directly put in the player's inventory instead
*/ - DROP_ITEM("dropItem", SettingValueType.BOOLEAN, true, "dropItem", "Whether the " + + DROP_ITEM("dropItem", SettingValueType.BOOLEAN, true, "Whether the " + "item will drop a reforged item on the ground, instead of putting it into the user's inventory", true, false), /** * The setting for the chance of a reforging to fail */ - FAIL_CHANCE("failReforgeChance", SettingValueType.PERCENTAGE, 10, "failReforgeChance", + FAIL_CHANCE("failReforgeChance", SettingValueType.PERCENTAGE, 10, "The chance to fail reforging an item, which only repairs the item a tiny bit or not at all (0-100)", true, false), @@ -30,51 +30,51 @@ public enum BlacksmithSetting implements Setting { * The setting for whether failing a reforging should downgrade/remove enchantments as well */ FAIL_REMOVE_ENCHANTMENTS("failReforgeRemovesEnchantments", SettingValueType.BOOLEAN, false, - "failReforgeRemovesEnchantments", "Whether failed reforging should remove or " + - "downgrade the item's enchantments", true, false), + "Whether failed reforging should remove or " + + "downgrade the item's enchantments", true, false), /** * The setting for the chance of an additional enchantment being added */ EXTRA_ENCHANTMENT_CHANCE("extraEnchantmentChance", SettingValueType.PERCENTAGE, 5, - "extraEnchantmentChance", "The chance that an enchantment will be added to the " + - "reforged item (0-100)", true, false), + "The chance that an enchantment will be added to the " + + "reforged item (0-100)", true, false), /** * The setting for the maximum amount of enchantments that can be added to an item */ MAX_ENCHANTMENTS("maxEnchantments", SettingValueType.POSITIVE_INTEGER, 3, - "maxEnchantments", "The maximum number of enchantments the blacksmith will try to" + - " add", true, false), + "The maximum number of enchantments the blacksmith will try to" + + " add", true, false), /** * The maximum amount of seconds a player may need to wait for the reforging to finish */ - MAX_REFORGE_DELAY("delaysInSeconds.maximum", SettingValueType.POSITIVE_INTEGER, 30, - "maxReforgeDelay", "The maximum time for a reforging to finish", + MAX_REFORGE_DELAY("maxReforgeWaitTimeSeconds", SettingValueType.POSITIVE_INTEGER, 30, + "The maximum time for a reforging to finish", true, false), /** * The minimum amount of seconds a player may need to wait for the reforging to finish */ - MIN_REFORGE_DELAY("delaysInSeconds.minimum", SettingValueType.POSITIVE_INTEGER, 5, - "minReforgeDelay", "The minimum time for a reforging to finish", + MIN_REFORGE_DELAY("minReforgeWaitTimeSeconds", SettingValueType.POSITIVE_INTEGER, 5, + "The minimum time for a reforging to finish", true, false), /** * The setting for number of seconds a player has to wait between each usage of the blacksmith */ - REFORGE_COOL_DOWN("delaysInSeconds.reforgeCoolDown", SettingValueType.POSITIVE_INTEGER, 60, - "reforgeCoolDown", "The cool-down period between each reforge", + REFORGE_COOL_DOWN("reforgeCoolDownSeconds", SettingValueType.POSITIVE_INTEGER, 60, + "The cool-down period between each reforge", true, false), /** * The setting for which items the blacksmith is able to reforge */ REFORGE_ABLE_ITEMS("reforgeAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "", - "reforgeAbleItems", "The items a blacksmith is able to reforge. Setting this only " + - "allows NPCs to repair the listed items. This should be set for each individual NPC, and should not be set" + - " here, unless you want to restrict NPCs which have not been set up yet.", true, false), + "The items a blacksmith is able to reforge. Setting this only " + + "allows NPCs to repair the listed items. This should be set for each individual NPC, and should not be set" + + " here, unless you want to restrict NPCs which have not been set up yet.", true, false), /** * The setting for the title used to display which kind of blacksmith the NPC is @@ -83,21 +83,20 @@ public enum BlacksmithSetting implements Setting { * describe the blacksmith's specialization, and thus the range of reforge-able items, is expected. */ BLACKSMITH_TITLE("blacksmithTitle", SettingValueType.STRING, "blacksmith", - "blacksmithTitle", "The title describing the blacksmith's usage/speciality", - true, false), + "The title describing the blacksmith's usage/speciality", true, false), /** * The setting for the enchantments a blacksmith cannot apply to items */ ENCHANTMENT_BLOCKLIST("enchantmentBlocklist", SettingValueType.STRING_LIST, new String[]{"binding_curse", - "mending", "vanishing_curse"}, "enchantmentBlocklist", "The enchantments a " + + "mending", "vanishing_curse"}, "The enchantments a " + "blacksmith is denied from applying to an item. Disable anything you find too op or annoying.", true, false), /** * Whether to allow this blacksmith to repair anvils */ - REPAIR_ANVILS("reforgeAnvils", SettingValueType.BOOLEAN, false, "reforgeAnvils", + REPAIR_ANVILS("reforgeAnvils", SettingValueType.BOOLEAN, false, "Whether the blacksmith will reforge anvils as a special case", true, false), /*----------- @@ -107,83 +106,83 @@ public enum BlacksmithSetting implements Setting { /** * The message displayed when the blacksmith is busy with another player */ - BUSY_WITH_PLAYER_MESSAGE("messages.busyPlayerMessage", SettingValueType.STRING, - "&cI'm busy at the moment. Come back later!", "busyPlayerMessage", + BUSY_WITH_PLAYER_MESSAGE("busyPlayerMessage", SettingValueType.STRING, + "&cI'm busy at the moment. Come back later!", "The message to display when another player is using the blacksmith", true, true), /** * The message displayed when the blacksmith is already reforging something for the player */ - BUSY_WITH_REFORGE_MESSAGE("messages.busyReforgeMessage", SettingValueType.STRING, - "&cI'm working on it. Be patient! I'll finish {time}!", "busyReforgeMessage", + BUSY_WITH_REFORGE_MESSAGE("busyReforgeMessage", SettingValueType.STRING, + "&cI'm working on it. Be patient! I'll finish {time}!", "The message to display when the blacksmith is working on the reforging", true, true), /** * The message displayed if the player has to wait for the cool-down to expire */ - COOL_DOWN_UNEXPIRED_MESSAGE("messages.coolDownUnexpiredMessage", SettingValueType.STRING, + COOL_DOWN_UNEXPIRED_MESSAGE("coolDownUnexpiredMessage", SettingValueType.STRING, "&cYou've already had your chance! Give me a break! I'll be ready {time}!", - "coolDownUnexpiredMessage", "The message to display when the blacksmith is still on" + - " a cool-down from the previous re-forging", true, true), + "The message to display when the blacksmith is still on" + + " a cool-down from the previous re-forging", true, true), /** * The message displayed when displaying the cost of reforging the held item to the player */ - COST_MESSAGE("messages.costMessage", SettingValueType.STRING, + COST_MESSAGE("costMessage", SettingValueType.STRING, "&eIt will cost &a{cost}&e to reforge that &a{item}&e! Click again to reforge!", - "costMessage", "The message to display when informing a player about the reforging" + - " cost", true, true), + "The message to display when informing a player about the reforging" + + " cost", true, true), /** * The message displayed if the blacksmith fails reforging an item */ - FAIL_MESSAGE("messages.failReforgeMessage", SettingValueType.STRING, - "&cWhoops! Didn't mean to do that! Maybe next time?", "failReforgeMessage", + FAIL_MESSAGE("failReforgeMessage", SettingValueType.STRING, + "&cWhoops! Didn't mean to do that! Maybe next time?", "The message to display when the blacksmith fails to reforge an item", true, true), /** * The message displayed if a player is unable to pay the blacksmith */ - INSUFFICIENT_FUNDS_MESSAGE("messages.insufficientFundsMessage", SettingValueType.STRING, - "&cYou don't have enough money to reforge that item!", "insufficientFundsMessage", + INSUFFICIENT_FUNDS_MESSAGE("insufficientFundsMessage", SettingValueType.STRING, + "&cYou don't have enough money to reforge that item!", "The message to display when a player cannot pay for the reforging", true, true), /** * The message displayed if the blacksmith encounters an item they cannot reforge */ - INVALID_ITEM_MESSAGE("messages.invalidItemMessage", SettingValueType.STRING, + INVALID_ITEM_MESSAGE("invalidItemMessage", SettingValueType.STRING, "&cI'm sorry, but I'm a/an {title}, I don't know how to reforge that!", - "invalidItemMessage", "The message to display when holding an item the blacksmith " + - "is unable to reforge", true, true), + "The message to display when holding an item the blacksmith " + + "is unable to reforge", true, true), /** * The message displayed if a player presents a different item after seeing the price to reforge an item */ - ITEM_UNEXPECTEDLY_CHANGED_MESSAGE("messages.itemChangedMessage", SettingValueType.STRING, - "&cThat's not the item you wanted to reforge before!", "itemChangedMessage", + ITEM_UNEXPECTEDLY_CHANGED_MESSAGE("itemChangedMessage", SettingValueType.STRING, + "&cThat's not the item you wanted to reforge before!", "The message to display when presenting a different item than the one just evaluated", true, true), /** * The message displayed when the blacksmith starts reforging an item */ - START_REFORGE_MESSAGE("messages.startReforgeMessage", SettingValueType.STRING, - "&eOk, let's see what I can do...", "startReforgeMessage", "The message to " + + START_REFORGE_MESSAGE("startReforgeMessage", SettingValueType.STRING, + "&eOk, let's see what I can do...", "The message to " + "display once the blacksmith starts re-forging", true, true), /** * The message displayed when the blacksmith successfully finishes reforging an item */ - SUCCESS_MESSAGE("messages.successMessage", SettingValueType.STRING, - "There you go! All better!", "successMessage", "The message to display once " + + SUCCESS_MESSAGE("successMessage", SettingValueType.STRING, + "There you go! All better!", "The message to display once " + "the reforging has successfully finished", true, true), /** * The message displayed when trying to reforge an item with full durability */ - NOT_DAMAGED_MESSAGE("messages.notDamagedMessage", SettingValueType.STRING, - "&cThat item is not in need of repair", "notDamagedMessage", "The message to " + - "display if a player is trying to reforge an item with full durability", true, true), + NOT_DAMAGED_MESSAGE("notDamagedMessage", SettingValueType.STRING, "&cThat item is not in need of repair", + "The message to display if a player is trying to reforge an item with full durability", + true, true), /*------------------ | Global settings | @@ -194,8 +193,8 @@ public enum BlacksmithSetting implements Setting { * *This allows specifying a price for each item, by setting basePrice.item_name.
*/ - BASE_PRICE("basePrice.default", SettingValueType.POSITIVE_DOUBLE, 10.0, "basePrice", - "The minimum price of each cost", false, false), + BASE_PRICE("basePrice.default", SettingValueType.POSITIVE_DOUBLE, 10.0, "The minimum price of " + + "each cost", false, false), /** * The base price for each durability point @@ -204,9 +203,9 @@ public enum BlacksmithSetting implements Setting { * this is the cost each present durability point will add to the cost. This allows specifying a price per * durability point value for each item, by setting pricePerDurabilityPoint.item_name */ - PRICE_PER_DURABILITY_POINT("pricePerDurabilityPoint.default", SettingValueType.POSITIVE_DOUBLE, - 0.005, "pricePerDurabilityPoint", "The additional cost for each durability " + - "point missing (natural cost) or present (not natural cost)", false, false), + PRICE_PER_DURABILITY_POINT("pricePerDurabilityPoint.default", SettingValueType.POSITIVE_DOUBLE, 0.005, + "The additional cost for each durability point missing (natural cost) or present (not natural " + + "cost)", false, false), /** * The price increase for each level of each present enchantment @@ -214,37 +213,33 @@ public enum BlacksmithSetting implements Setting { *This can be specified for each possible enchantment by setting enchantment-cost.enchantment_name
*/ ENCHANTMENT_COST("enchantmentCost.default", SettingValueType.POSITIVE_DOUBLE, 5.0, - "enchantmentCost", "The additional cost for each enchantment level present on an item", - false, false), + "The additional cost for each enchantment level present on an item", false, false), /** * Whether the cost should increase for damage taken, as opposed to increase for durability present */ - NATURAL_COST("useNaturalCost", SettingValueType.BOOLEAN, true, "useNaturalCost", - "Natural cost makes re-forging more expensive the more damaged the item is. Disabling this will " + - "enable the legacy blacksmith behavior instead", false, false), + NATURAL_COST("useNaturalCost", SettingValueType.BOOLEAN, true, "Natural cost makes re-forging " + + "more expensive the more damaged the item is. Disabling this will enable the legacy blacksmith behavior " + + "instead", false, false), /** * Whether to show exact time when displaying the wait time for a reforging or the cool-down */ - SHOW_EXACT_TIME("showExactTime", SettingValueType.BOOLEAN, false, "showExactTime", - "Exact time displays the exact number of seconds and minutes remaining as part of the reforging" + - " cool-down and reforging delay messages, instead of just vaguely hinting at the remaining time.", - false, false), + SHOW_EXACT_TIME("showExactTime", SettingValueType.BOOLEAN, false, "Exact time displays the " + + "exact number of seconds and minutes remaining as part of the reforging cool-down and reforging delay " + + "messages, instead of just vaguely hinting at the remaining time.", false, false), /** * The cost for repairing a chipped anvil */ ANVIL_CHIPPED_COST("chippedAnvilReforgingCost", SettingValueType.POSITIVE_DOUBLE, 10.0, - "chippedAnvilReforgingCost", "The cost of fully repairing a chipped anvil", - false, false), + "The cost of fully repairing a chipped anvil", false, false), /** * The cost for repairing a damaged anvil */ ANVIL_DAMAGED_COST("damagedAnvilReforgingCost", SettingValueType.POSITIVE_DOUBLE, 20.0, - "damagedAnvilReforgingCost", "The cost of fully repairing a damaged anvil", - false, false); + "The cost of fully repairing a damaged anvil", false, false); private final String path; private final String childPath; @@ -258,26 +253,33 @@ public enum BlacksmithSetting implements Setting { /** * Instantiates a new setting * - * @param pathThe full config path for this setting
+ * @param keyThe configuration key for this setting
* @param valueTypeThe type of value used by this setting
* @param valueThe default value of this setting
- * @param commandNameThe name of the command used to change this setting
* @param descriptionThe description describing this setting
* @param isPerNPCWhether this setting is per-NPC or global
* @param isMessageWhether this option is for an NPC message
*/ - BlacksmithSetting(@NotNull String path, @NotNull SettingValueType valueType, @NotNull Object value, - @NotNull String commandName, @NotNull String description, boolean isPerNPC, - boolean isMessage) { + BlacksmithSetting(@NotNull String key, @NotNull SettingValueType valueType, @NotNull Object value, + @NotNull String description, boolean isPerNPC, boolean isMessage) { if (isPerNPC) { - this.path = "blacksmith.defaults." + path; + if (isMessage) { + this.path = "blacksmith.defaults.messages." + key; + } else { + this.path = "blacksmith.defaults." + key; + } } else { - this.path = "blacksmith.global." + path; + this.path = "blacksmith.global." + key; } this.value = value; this.valueType = valueType; - this.childPath = path; - this.commandName = commandName; + this.childPath = key; + if (key.contains(".")) { + String[] pathParts = path.split("\\."); + this.commandName = pathParts[0]; + } else { + this.commandName = key; + } this.description = description; this.isPerNPC = isPerNPC; this.isMessage = isMessage; diff --git a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java index 901f6fe..3157430 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java +++ b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java @@ -140,7 +140,7 @@ public class ScrapperNPCSettings implements TraitSettingsWhether to drop reforged items on the ground
*/ public boolean getDropItem() { - return asBoolean(ScrapperSetting.DROP_ITEM); + return ConfigHelper.asBoolean(getValue(ScrapperSetting.DROP_ITEM)); } @Override @@ -179,16 +179,6 @@ public class ScrapperNPCSettings implements TraitSettingsThe setting to get the value of
- * @returnThe value of the given setting as a boolean
- */ - private boolean asBoolean(ScrapperSetting setting) { - return ConfigHelper.asBoolean(getValue(setting)); - } - /** * Gets the value of a setting, using the default if not set * diff --git a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperSetting.java b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperSetting.java index 4e70863..55ae7e2 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperSetting.java +++ b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperSetting.java @@ -15,7 +15,7 @@ public enum ScrapperSetting implements Setting { * *If set to false, the item will be directly put in the player's inventory instead
*/ - DROP_ITEM("dropItem", SettingValueType.BOOLEAN, true, "dropItem", "Whether the " + + DROP_ITEM("dropItem", SettingValueType.BOOLEAN, true, "Whether the " + "item will drop materials resulting from scrapping on the ground, instead of putting them into the user's" + " inventory", true, false), @@ -23,37 +23,46 @@ public enum ScrapperSetting implements Setting { * The chance of a scrapper returning no salvage, regardless of item condition */ FAIL_SALVAGE_CHANCE("failSalvageChance", SettingValueType.POSITIVE_DOUBLE, 0, - "failSalvageChance", "The chance to fail a salvage, thus destroying the item (0-100)", + "The chance to fail a salvage, thus destroying the item (0-100)", true, false), /** * The setting for which items a scrapper is able to salvage */ SALVAGE_ABLE_ITEMS("salvageAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "", - "salvageAbleItems", "The items a blacksmith is able to salvage. Setting this only " + - "allows NPCs to repair the listed items. This should be set for each individual NPC, and should not be " + - "set here, unless you want to restrict NPCs which have not been set up yet", true, false), + "The items a blacksmith is able to salvage. Setting this only " + + "allows NPCs to repair the listed items. This should be set for each individual NPC, and should not be " + + "set here, unless you want to restrict NPCs which have not been set up yet", true, false), /** * The maximum amount of seconds a player may need to wait for the reforging to finish */ - MAX_SALVAGE_DELAY("delaysInSeconds.maximum", SettingValueType.POSITIVE_INTEGER, 30, - "maxReforgeDelay", "The maximum time for a salvaging to finish", + MAX_SALVAGE_DELAY("maxSalvageWaitTimeSeconds", SettingValueType.POSITIVE_INTEGER, 30, + "The maximum time for a salvaging to finish", true, false), /** * The minimum amount of seconds a player may need to wait for the reforging to finish */ - MIN_SALVAGE_DELAY("delaysInSeconds.minimum", SettingValueType.POSITIVE_INTEGER, 5, - "minReforgeDelay", "The minimum time for a salvaging to finish", + MIN_SALVAGE_DELAY("minSalvageWaitTimeSeconds", SettingValueType.POSITIVE_INTEGER, 5, + "The minimum time for a salvaging to finish", true, false), /** * The setting for number of seconds a player has to wait between each usage of the blacksmith */ - SALVAGE_COOL_DOWN("delaysInSeconds.salvageCoolDown", SettingValueType.POSITIVE_INTEGER, 60, - "salvageCoolDown", "The cool-down period between each salvage", + SALVAGE_COOL_DOWN("salvageCoolDownSeconds", SettingValueType.POSITIVE_INTEGER, 60, + "The cool-down period between each salvage", true, false), + + /** + * The setting for the title used to display which kind of scrapper the NPC is + * + *While this should be entirely configurable, values such as armor-scrapper, sword-scrapper and similar, which + * describe the scrapper's specialization, and thus the range of salvageable items, is expected.
+ */ + SCRAPPER_TITLE("scrapperTitle", SettingValueType.STRING, "scrapper", + "The title describing the scrapper's usage/speciality", true, false), /*----------- | Messages | @@ -62,62 +71,64 @@ public enum ScrapperSetting implements Setting { /** * The message displayed when the scrapper is busy with another player */ - BUSY_WITH_PLAYER_MESSAGE("messages.busyPlayerMessage", SettingValueType.STRING, - "&cI'm busy at the moment. Come back later!", "busyPlayerMessage", - "The message to display when another player is using the scrapper", true, true), + BUSY_WITH_PLAYER_MESSAGE("busyPlayerMessage", SettingValueType.STRING, "&cI'm busy at the moment. Come " + + "back later!", "The message to display when another player is using the scrapper", + true, true), /** * The message displayed when the scrapper is busy salvaging the player's item */ - BUSY_WITH_SALVAGE_MESSAGE("messages.busySalvageMessage", SettingValueType.STRING, - "&cI'm working on it. Be patient! I'll finish {time}!", "busySalvageMessage", - "The message to display when the blacksmith is working on the salvaging", - true, true), + BUSY_WITH_SALVAGE_MESSAGE("busySalvageMessage", SettingValueType.STRING, "&cI'm working on it. Be " + + "patient! I'll finish {time}!", "The message to display when the blacksmith is working on the " + + "salvaging", true, true), /** * The message displayed if the player needs to wait for the cool-down to expire */ - COOL_DOWN_UNEXPIRED_MESSAGE("messages.coolDownUnexpiredMessage", SettingValueType.STRING, + COOL_DOWN_UNEXPIRED_MESSAGE("coolDownUnexpiredMessage", SettingValueType.STRING, "&cYou've already had your chance! Give me a break! I'll be ready {time}!", - "coolDownUnexpiredMessage", "The message to display when the blacksmith is still " + - "on a cool-down from the previous re-forging", true, true), + "The message to display when the blacksmith is still " + + "on a cool-down from the previous re-forging", true, true), /** * The message displayed if presented with an item that cannot be salvaged by the NPC */ - CANNOT_SALVAGE_MESSAGE("messages.cannotSalvageMessage", SettingValueType.STRING, - "&cI'm unable to salvage that item", "cannotSalvageMessage", "The message to " + - "display if the player tries to salvage an item the blacksmith cannot salvage", true, true), + CANNOT_SALVAGE_MESSAGE("cannotSalvageMessage", SettingValueType.STRING, + "&cI'm unable to salvage that item", "The message to display if the player tries to salvage" + + " an item the blacksmith cannot salvage", true, true), /** * The message displayed if salvaging an item would return in no items */ - TOO_DAMAGED_FOR_SALVAGE_MESSAGE("messages.tooDamagedForSalvageMessage", SettingValueType.STRING, - "&cThat item is too damaged to be salvaged into anything useful", - "tooDamagedForSalvageMessage", "The message to display if salvaging the player's " + - "item would result in no salvage", true, true), + TOO_DAMAGED_FOR_SALVAGE_MESSAGE("tooDamagedForSalvageMessage", SettingValueType.STRING, + "&cThat item is too damaged to be salvaged into anything useful", "The message to display " + + "if salvaging the player's item would result in no salvage", true, true), /** * The message displayed if a salvage is successful */ - SUCCESS_SALVAGE_MESSAGE("messages.successSalvagedMessage", SettingValueType.STRING, "&cThere you go!", - "successSalvagedMessage", "The message to display when an item is successfully " + - "salvaged", true, true), + SUCCESS_SALVAGE_MESSAGE("successSalvagedMessage", SettingValueType.STRING, "&cThere you go!", + "The message to display when an item is successfully salvaged", true, true), + + /** + * The message displayed if a salvage is unsuccessful + */ + FAIL_SALVAGE_MESSAGE("failSalvageMessage", SettingValueType.STRING, "&cWhoops! The item broke! Maybe " + + "next time?", "The message to display when a scrapper fails to salvage an item because of the " + + "fail chance.", true, true), /** * The message displayed if a player presents a different item after seeing the price to reforge an item */ - ITEM_UNEXPECTEDLY_CHANGED_MESSAGE("messages.itemChangedMessage", SettingValueType.STRING, - "&cThat's not the item you wanted to reforge before!", "itemChangedMessage", - "The message to display when presenting a different item than the one just evaluated", - true, true), + ITEM_UNEXPECTEDLY_CHANGED_MESSAGE("itemChangedMessage", SettingValueType.STRING, "&cThat's not the item" + + " you wanted to reforge before!", "The message to display when presenting a different item than" + + " the one just evaluated", true, true), /** * The message displayed when the scrapper starts salvaging an item */ - START_SALVAGE_MESSAGE("messages.startSalvageMessage", SettingValueType.STRING, - "&eOk, let's see what I can do...", "startSalvageMessage", "The message to " + - "display once the blacksmith starts re-forging", true, true), + START_SALVAGE_MESSAGE("startSalvageMessage", SettingValueType.STRING, "&eOk, let's see what I can do...", + "The message to display once the blacksmith starts re-forging", true, true), /*------------------ | Global settings | @@ -126,17 +137,15 @@ public enum ScrapperSetting implements Setting { /** * Whether to display exact time in minutes and seconds when displaying a remaining cool-down */ - SHOW_EXACT_TIME("showExactTime", SettingValueType.BOOLEAN, "false", - "showExactTime", "Exact time displays the exact number of seconds and minutes " + - "remaining as part of the scrapping cool-down and scrapping delay messages, instead of just vaguely " + - "hinting at the remaining time.", false, false), + SHOW_EXACT_TIME("showExactTime", SettingValueType.BOOLEAN, "false", "Exact time displays the " + + "exact number of seconds and minutes remaining as part of the scrapping cool-down and scrapping delay " + + "messages, instead of just vaguely hinting at the remaining time.", false, false), /** * Whether to give experience back when salvaging an enchanted item */ - GIVE_EXPERIENCE("giveExperience", SettingValueType.BOOLEAN, "true", "giveExperience", - "Whether enchanted salvaged items should return some amount of exp upon salvage", - false, false), + GIVE_EXPERIENCE("giveExperience", SettingValueType.BOOLEAN, "true", "Whether enchanted " + + "salvaged items should return some amount of exp upon salvage", false, false), ; private final String path; @@ -151,25 +160,33 @@ public enum ScrapperSetting implements Setting { /** * Instantiates a new setting * - * @param pathThe full config path for this setting
+ * @param keyThe configuration key for this setting
* @param valueTypeThe type of value used by this setting
* @param valueThe default value of this setting
- * @param commandNameThe name of the command used to change this setting
* @param descriptionThe description describing this setting
* @param isPerNPCWhether this setting is per-NPC or global
* @param isMessageWhether this option is for an NPC message
*/ - ScrapperSetting(String path, SettingValueType valueType, Object value, String commandName, + ScrapperSetting(String key, SettingValueType valueType, Object value, @NotNull String description, boolean isPerNPC, boolean isMessage) { if (isPerNPC) { - this.path = "scrapper.defaults." + path; + if (isMessage) { + this.path = "scrapper.defaults.messages." + key; + } else { + this.path = "scrapper.defaults." + key; + } } else { - this.path = "scrapper.global." + path; + this.path = "scrapper.global." + key; } this.value = value; this.valueType = valueType; - this.childPath = path; - this.commandName = commandName; + this.childPath = key; + if (key.contains(".")) { + String[] pathParts = path.split("\\."); + this.commandName = pathParts[0]; + } else { + this.commandName = key; + } this.description = description; this.isPerNPC = isPerNPC; this.isMessage = isMessage; @@ -177,22 +194,22 @@ public enum ScrapperSetting implements Setting { @Override public @NotNull String getPath() { - return path; + return this.path; } @Override public @NotNull String getChildPath() { - return childPath; + return this.childPath; } @Override public @NotNull Object getDefaultValue() { - return value; + return this.value; } @Override public @NotNull String getCommandName() { - return commandName; + return this.commandName; } @Override @@ -223,7 +240,7 @@ public enum ScrapperSetting implements Setting { */ public static @Nullable ScrapperSetting getSetting(@NotNull String input) { for (ScrapperSetting scrapperSetting : ScrapperSetting.values()) { - if (input.equalsIgnoreCase(scrapperSetting.commandName)) { + if (input.equalsIgnoreCase(scrapperSetting.getCommandName())) { return scrapperSetting; } } diff --git a/src/main/java/net/knarcraft/blacksmith/listener/NPCClickListener.java b/src/main/java/net/knarcraft/blacksmith/listener/NPCClickListener.java index d3a8bbc..21e86b7 100644 --- a/src/main/java/net/knarcraft/blacksmith/listener/NPCClickListener.java +++ b/src/main/java/net/knarcraft/blacksmith/listener/NPCClickListener.java @@ -35,7 +35,7 @@ public class NPCClickListener implements Listener { * @param eventThe NPC click event performed
* @param customTraitThe NPC's custom trait
*/ - private void handleNPCClick(@NotNull NPCRightClickEvent event, @Nullable CustomTrait customTrait) { + private void handleNPCClick(@NotNull NPCRightClickEvent event, @Nullable CustomTrait> customTrait) { if (customTrait == null) { BlacksmithPlugin.getInstance().getLogger().log(Level.WARNING, "Could not get trait from NPC!"); return; diff --git a/src/main/resources/config-migrations.txt b/src/main/resources/config-migrations.txt index a3a0af6..8b0b84c 100644 --- a/src/main/resources/config-migrations.txt +++ b/src/main/resources/config-migrations.txt @@ -1,2 +1,8 @@ defaults=blacksmith.defaults -global=blacksmith.global \ No newline at end of file +global=blacksmith.global +scrapper.defaults.delaysInSeconds.minimum=scrapper.defaults.minSalvageWaitTimeSeconds +scrapper.defaults.delaysInSeconds.maximum=scrapper.defaults.maxSalvageWaitTimeSeconds +scrapper.defaults.delaysInSeconds.salvageCoolDown=scrapper.defaults.salvageCoolDownSeconds +blacksmith.defaults.delaysInSeconds.minimum=blacksmith.defaults.minReforgeWaitTimeSeconds +blacksmith.defaults.delaysInSeconds.maximum=blacksmith.defaults.maxReforgeWaitTimeSeconds +blacksmith.defaults.delaysInSeconds.reforgeCoolDown=blacksmith.defaults.reforgeCoolDownSeconds \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e640fc4..3c48a9f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -65,18 +65,16 @@ blacksmith: # Whether the blacksmith will reforge anvils as a special case reforgeAnvils: false - # All settable delays - delaysInSeconds: - # The maximum time for a reforging to finish - maximum: 30 - - # The minimum time for a reforging to finish - minimum: 5 - - # The cool-down period between each reforge - reforgeCoolDown: 60 + # The minimum time for a reforging to finish + minReforgeWaitTimeSeconds: 5 - # The title describing the blacksmith's usage/speciality + # The maximum time for a reforging to finish + maxReforgeWaitTimeSeconds: 30 + + # The cool-down period between each reforge + reforgeCoolDownSeconds: 60 + + # The title describing the blacksmith's usage/speciality (e.x: armor-smith, tool-smith, weapon-smith) blacksmithTitle: "blacksmith" # All messages used by the NPC @@ -124,9 +122,11 @@ scrapper: # Whether enchanted salvaged items should return some amount of exp upon salvage giveExperience: true + # The settings which are set to any new scrapper NPC. To change any of these settings for an existing NPC, you must # change the Citizens NPC file, or use the /scrapper command defaults: + # Whether the item will drop materials resulting from scrapping on the ground, instead of putting them into the user's inventory dropItems: true @@ -138,16 +138,19 @@ scrapper: # up yet. salvageAbleItems: [ ] - # All settable delays - delaysInSeconds: - # The maximum time for a salvaging to finish - maximum: 30 - - # The minimum time for a salvaging to finish - minimum: 5 - - # The cool-down period between each salvage - salvageCoolDown: 60 + # The minimum time for a salvaging to finish + minSalvageWaitTimeSeconds: 5 + + # The maximum time for a salvaging to finish + maxSalvageWaitTimeSeconds: 30 + + # The cool-down period between each salvage + salvageCoolDownSeconds: 60 + + # The title describing the scrapper's usage/speciality (e.x armor-scrapper, tool-scrapper, weapon-scrapper) + scrapperTitle: "scrapper" + + # Default values for messages used by NPCs messages: # The message to display when another player is using the scrapper busyPlayerMessage: "&cI'm busy at the moment. Come back later!" @@ -155,10 +158,10 @@ scrapper: # The message to display when the blacksmith is working on the salvaging busySalvageMessage: "&cI'm working on it. Be patient! I'll finish {time}!" - # The message to display when the blacksmith is still on a cool-down from the previous re-forging + # The message to display when the scrapper is still on a cool-down from the previous salvaging coolDownUnexpiredMessage: "&cYou've already had your chance! Give me a break! I'll be ready {time}!" - # The message to display if the player tries to salvage an item the blacksmith cannot salvage + # The message to display if the player tries to salvage an item the scrapper cannot salvage cannotSalvageMessage: "&cI'm unable to salvage that item" # The message to display if salvaging the player's item would result in no salvage @@ -167,11 +170,11 @@ scrapper: # The message to display when an item is successfully salvaged successSalvagedMessage: "&cThere you go!" - # The message to display when the blacksmith fails to reforge an item + # The message to display when the scrapper fails to salvage an item failSalvageMessage: "&cWhoops! The item broke! Maybe next time?" # The message to display when presenting a different item than the one just evaluated itemChangedMessage: "&cThat's not the item you wanted to salvage before!" - # The message to display once the blacksmith starts re-forging + # The message to display once the scrapper starts salvaging startSalvageMessage: "&eOk, let's see what I can do..." \ No newline at end of file