From d405c0dcff990160572f35acdb4336d2af167bf2 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Sun, 5 May 2024 23:45:59 +0200 Subject: [PATCH] Implements enchantment salvage toggle #23 --- .../config/scrapper/ScrapperNPCSettings.java | 34 +++++++++++++++++-- .../config/scrapper/ScrapperSetting.java | 11 ++++++ .../blacksmith/trait/ScrapperTrait.java | 33 ++++++++++-------- src/main/resources/config.yml | 9 ++++- 4 files changed, 70 insertions(+), 17 deletions(-) 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 563c705..f861b39 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java +++ b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java @@ -188,7 +188,7 @@ public class ScrapperNPCSettings implements TraitSettings { * @return

Whether to drop reforged items on the ground

*/ public boolean getDropItem() { - return ConfigHelper.asBoolean(getValue(ScrapperSetting.DROP_ITEM)); + return asBoolean(ScrapperSetting.DROP_ITEM); } @Override @@ -228,6 +228,16 @@ public class ScrapperNPCSettings implements TraitSettings { return getValue(setting).toString(); } + /** + * Gets the boolean value of the given setting + * + * @param setting

The setting to get the value of

+ * @return

The value of the given setting as a boolean

+ */ + private boolean asBoolean(@NotNull ScrapperSetting setting) { + return ConfigHelper.asBoolean(getValue(setting)); + } + /** * Gets the value of a setting, using the default if not set * @@ -275,7 +285,16 @@ public class ScrapperNPCSettings implements TraitSettings { * @return

True if extended salvaging is enabled

*/ public boolean extendedSalvageEnabled() { - return ConfigHelper.asBoolean(getValue(ScrapperSetting.EXTENDED_SALVAGE_ENABLED)); + return asBoolean(ScrapperSetting.EXTENDED_SALVAGE_ENABLED); + } + + /** + * Whether salvage of enchanted items is enabled + * + * @return

True of this scrapper can salvage enchanted items

+ */ + public boolean salvageEnchanted() { + return asBoolean(ScrapperSetting.SALVAGE_ENCHANTED); } /** @@ -341,4 +360,15 @@ public class ScrapperNPCSettings implements TraitSettings { return asString(ScrapperSetting.PARTIAL_SALVAGE_MESSAGE); } + + /** + * Gets the message to display when explaining that this scrapper is unable to salvage enchanted items + * + * @return

The cannot salvage enchanted message

+ */ + @NotNull + public String getCannotSalvageEnchantedMessage() { + return asString(ScrapperSetting.CANNOT_SALVAGE_ENCHANTED_MESSAGE); + } + } 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 f694b70..466027f 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperSetting.java +++ b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperSetting.java @@ -72,6 +72,13 @@ public enum ScrapperSetting implements Setting { */ EXTENDED_SALVAGE_ENABLED("extendedSalvageEnabled", SettingValueType.BOOLEAN, false, "Whether to enable salvaging of non-repairable items, such as planks", true, false), + + /** + * The setting for whether the NPC should allow salvaging of enchanted items + */ + SALVAGE_ENCHANTED("salvageEnchanted", SettingValueType.BOOLEAN, false, + "Whether to enable salvaging of enchanted items. This is disabled by default because it's " + + "possible to accidentally salvage items with very good enchantments.", true, false), /*----------- | Messages | @@ -168,6 +175,10 @@ public enum ScrapperSetting implements Setting { "&cI cannot extract all components from that damaged item.&r", "The message to display when explaining expected partial yield as part of the cost message", true, true), + CANNOT_SALVAGE_ENCHANTED_MESSAGE("cannotSalvageEnchantedMessage", SettingValueType.STRING, + "&cI'm sorry, but I'm unable to salvage enchanted items!", + "The message to display when asked to salvage an enchanted item, and that option is disabled", true, true), + /*------------------ | Global settings | ------------------*/ diff --git a/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java b/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java index 436623a..18b2e42 100644 --- a/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java +++ b/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java @@ -45,7 +45,6 @@ public class ScrapperTrait extends CustomTrait { * * @return

The current settings for this NPC

*/ - @SuppressWarnings("unused") @NotNull public ScrapperNPCSettings getSettings() { return config; @@ -58,7 +57,7 @@ public class ScrapperTrait extends CustomTrait { */ @Override public void load(@NotNull DataKey key) { - config.loadVariables(key); + getSettings().loadVariables(key); } /** @@ -68,7 +67,7 @@ public class ScrapperTrait extends CustomTrait { */ @Override public void save(@NotNull DataKey key) { - config.saveVariables(key); + getSettings().saveVariables(key); } /** @@ -78,38 +77,44 @@ public class ScrapperTrait extends CustomTrait { */ public void startSession(@NotNull Player player) { ItemStack itemInHand = player.getInventory().getItemInMainHand(); - List salvageAbleItems = this.config.getSalvageAbleItems(); - boolean extended = this.config.extendedSalvageEnabled(); + List salvageAbleItems = getSettings().getSalvageAbleItems(); + boolean extended = getSettings().extendedSalvageEnabled(); + // Check if the item can be salvaged if (!canBeSalvaged(player.getServer(), itemInHand, salvageAbleItems, extended)) { - sendNPCMessage(this.npc, player, StringFormatter.replacePlaceholder(config.getInvalidItemMessage(), - "{title}", config.getScrapperTitle())); + sendNPCMessage(this.npc, player, StringFormatter.replacePlaceholder(getSettings().getInvalidItemMessage(), + "{title}", getSettings().getScrapperTitle())); return; } - List salvage = getSalvage(itemInHand, extended); + // Check if the item is enchanted, and whether this blacksmith can salvage it + if (!itemInHand.getEnchantments().isEmpty() && !getSettings().salvageEnchanted()) { + sendNPCMessage(this.npc, player, getSettings().getCannotSalvageEnchantedMessage()); + return; + } - // If extended mode is disabled, only allow repairable items to be salvaged + // Check if any salvage will be produced + List salvage = getSalvage(itemInHand, extended); boolean noUsefulSalvage = salvage == null || salvage.isEmpty(); if (noUsefulSalvage) { - sendNPCMessage(this.npc, player, config.getTooDamagedMessage()); + sendNPCMessage(this.npc, player, getSettings().getTooDamagedMessage()); return; } //Start a new scrapper session for the player currentSessionStartTime = System.currentTimeMillis(); - session = new SalvageSession(this, player, npc, config, salvage); + session = new SalvageSession(this, player, npc, getSettings(), salvage); //Tell the player the cost of repairing the item String cost = EconomyManager.formatScrapperCost(); String expectedYield; if (ItemHelper.getDamage(itemInHand) <= 0) { - expectedYield = config.getFullSalvageMessage(); + expectedYield = getSettings().getFullSalvageMessage(); } else { - expectedYield = config.getPartialSalvageMessage(); + expectedYield = getSettings().getPartialSalvageMessage(); } - sendNPCMessage(this.npc, player, StringFormatter.replacePlaceholders(config.getCostMessage(), + sendNPCMessage(this.npc, player, StringFormatter.replacePlaceholders(getSettings().getCostMessage(), List.of("{cost}", "{yield}"), List.of(cost, expectedYield))); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index eac10e0..7ea2127 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -163,6 +163,10 @@ scrapper: # Whether to enable salvaging of non-repairable items, such as planks extendedSalvageEnabled: false + # Whether to enable salvaging of enchanted items. This is disabled by default because it's possible to accidentally + # salvage items with very good enchantments. + salvageEnchanted: false + # Default values for messages used by NPCs messages: # The message to display when another player is using the scrapper @@ -202,4 +206,7 @@ scrapper: fullSalvageMessage: "&aI should be able to extract all components from that pristine item.&r" # The yield message to display if trying to salvage a damaged item - partialSalvageMessage: "&cI cannot extract all components from that damaged item.&r" \ No newline at end of file + partialSalvageMessage: "&cI cannot extract all components from that damaged item.&r" + + # The message to display when asked to salvage an enchanted item, and that option is disabled + cannotSalvageEnchantedMessage: "&cI'm sorry, but I'm unable to salvage enchanted items!" \ No newline at end of file