Improves messages when trying to salvage an item
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
Implements unimplemented too damaged for salvage message Adds two new messages explaining whether an item will produce full or partial salvage
This commit is contained in:
parent
e956c7dda7
commit
2612f4f7d8
@ -75,8 +75,8 @@ public enum BlacksmithSetting implements Setting {
|
|||||||
*/
|
*/
|
||||||
REFORGE_ABLE_ITEMS("reforgeAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "",
|
REFORGE_ABLE_ITEMS("reforgeAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "",
|
||||||
"The items a blacksmith is able to reforge. Setting this only " +
|
"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" +
|
"allows NPCs to repair the listed items. This should be set for each individual NPC.",
|
||||||
" here, unless you want to restrict NPCs which have not been set up yet.", true, false),
|
true, false),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The setting for the title used to display which kind of blacksmith the NPC is
|
* The setting for the title used to display which kind of blacksmith the NPC is
|
||||||
|
@ -136,6 +136,7 @@ public class ScrapperNPCSettings implements TraitSettings<ScrapperSetting> {
|
|||||||
*
|
*
|
||||||
* @return <p>The message to use for displaying salvage cost</p>
|
* @return <p>The message to use for displaying salvage cost</p>
|
||||||
*/
|
*/
|
||||||
|
@NotNull
|
||||||
public String getCostMessage() {
|
public String getCostMessage() {
|
||||||
return asString(ScrapperSetting.COST_MESSAGE);
|
return asString(ScrapperSetting.COST_MESSAGE);
|
||||||
}
|
}
|
||||||
@ -310,4 +311,34 @@ public class ScrapperNPCSettings implements TraitSettings<ScrapperSetting> {
|
|||||||
return asString(ScrapperSetting.INSUFFICIENT_FUNDS_MESSAGE);
|
return asString(ScrapperSetting.INSUFFICIENT_FUNDS_MESSAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the message to display if an item is too damaged to produce any salvage
|
||||||
|
*
|
||||||
|
* @return <p>The no salvage message</p>
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
public String getTooDamagedMessage() {
|
||||||
|
return asString(ScrapperSetting.TOO_DAMAGED_FOR_SALVAGE_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the message to display when explaining that full salvage will be given for an item
|
||||||
|
*
|
||||||
|
* @return <p>The full salvage message</p>
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
public String getFullSalvageMessage() {
|
||||||
|
return asString(ScrapperSetting.FULL_SALVAGE_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the message to display when explaining that only partial salvage will be given for an item
|
||||||
|
*
|
||||||
|
* @return <p>The partial salvage message</p>
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
public String getPartialSalvageMessage() {
|
||||||
|
return asString(ScrapperSetting.PARTIAL_SALVAGE_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@ public enum ScrapperSetting implements Setting {
|
|||||||
*/
|
*/
|
||||||
SALVAGE_ABLE_ITEMS("salvageAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "",
|
SALVAGE_ABLE_ITEMS("salvageAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "",
|
||||||
"The items a blacksmith is able to salvage. Setting this only " +
|
"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 " +
|
"allows NPCs to repair the listed items. This should be set for each individual NPC",
|
||||||
"set here, unless you want to restrict NPCs which have not been set up yet", true, false),
|
true, false),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum amount of seconds a player may need to wait for the reforging to finish
|
* The maximum amount of seconds a player may need to wait for the reforging to finish
|
||||||
@ -151,9 +151,23 @@ public enum ScrapperSetting implements Setting {
|
|||||||
* The message displayed when displaying the cost of reforging the held item to the player
|
* The message displayed when displaying the cost of reforging the held item to the player
|
||||||
*/
|
*/
|
||||||
COST_MESSAGE("costMessage", SettingValueType.STRING,
|
COST_MESSAGE("costMessage", SettingValueType.STRING,
|
||||||
"&eIt will cost &a{cost}&e to salvage that item! Click again to salvage!",
|
"&eIt will cost &a{cost}&e to salvage that item! {yield} Click again to salvage!",
|
||||||
"The message to display when informing a player about the salvaging cost", true, true),
|
"The message to display when informing a player about the salvaging cost", true, true),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The message displayed when explaining that all items will be returned as salvage
|
||||||
|
*/
|
||||||
|
FULL_SALVAGE_MESSAGE("fullSalvageMessage", SettingValueType.STRING,
|
||||||
|
"&aI should be able to extract all components from that pristine item.&r",
|
||||||
|
"The message to display when explaining expected full yield as part of the cost message", true, true),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The message displayed when explaining that only some items will be returned as salvage
|
||||||
|
*/
|
||||||
|
PARTIAL_SALVAGE_MESSAGE("partialSalvageMessage", SettingValueType.STRING,
|
||||||
|
"&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),
|
||||||
|
|
||||||
/*------------------
|
/*------------------
|
||||||
| Global settings |
|
| Global settings |
|
||||||
------------------*/
|
------------------*/
|
||||||
|
@ -45,6 +45,7 @@ public class ScrapperTrait extends CustomTrait<ScrapperSetting> {
|
|||||||
*
|
*
|
||||||
* @return <p>The current settings for this NPC</p>
|
* @return <p>The current settings for this NPC</p>
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
@NotNull
|
@NotNull
|
||||||
public ScrapperNPCSettings getSettings() {
|
public ScrapperNPCSettings getSettings() {
|
||||||
return config;
|
return config;
|
||||||
@ -80,14 +81,18 @@ public class ScrapperTrait extends CustomTrait<ScrapperSetting> {
|
|||||||
List<Material> salvageAbleItems = this.config.getSalvageAbleItems();
|
List<Material> salvageAbleItems = this.config.getSalvageAbleItems();
|
||||||
boolean extended = this.config.extendedSalvageEnabled();
|
boolean extended = this.config.extendedSalvageEnabled();
|
||||||
|
|
||||||
List<ItemStack> salvage = getSalvage(player.getServer(), itemInHand, salvageAbleItems, extended);
|
if (!canBeSalvaged(player.getServer(), itemInHand, salvageAbleItems, extended)) {
|
||||||
|
sendNPCMessage(this.npc, player, StringFormatter.replacePlaceholder(config.getInvalidItemMessage(),
|
||||||
|
"{title}", config.getScrapperTitle()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ItemStack> salvage = getSalvage(itemInHand, extended);
|
||||||
|
|
||||||
// If extended mode is disabled, only allow repairable items to be salvaged
|
// If extended mode is disabled, only allow repairable items to be salvaged
|
||||||
boolean notHoldingSalvageable = salvage == null || salvage.isEmpty();
|
boolean noUsefulSalvage = salvage == null || salvage.isEmpty();
|
||||||
if (notHoldingSalvageable) {
|
if (noUsefulSalvage) {
|
||||||
String invalidMessage = StringFormatter.replacePlaceholder(config.getInvalidItemMessage(),
|
sendNPCMessage(this.npc, player, config.getTooDamagedMessage());
|
||||||
"{title}", config.getScrapperTitle());
|
|
||||||
sendNPCMessage(this.npc, player, invalidMessage);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +101,16 @@ public class ScrapperTrait extends CustomTrait<ScrapperSetting> {
|
|||||||
session = new SalvageSession(this, player, npc, config, salvage);
|
session = new SalvageSession(this, player, npc, config, salvage);
|
||||||
//Tell the player the cost of repairing the item
|
//Tell the player the cost of repairing the item
|
||||||
String cost = EconomyManager.formatScrapperCost();
|
String cost = EconomyManager.formatScrapperCost();
|
||||||
sendNPCMessage(this.npc, player, config.getCostMessage().replace("{cost}", cost));
|
|
||||||
|
String expectedYield;
|
||||||
|
if (ItemHelper.getDamage(itemInHand) <= 0) {
|
||||||
|
expectedYield = config.getFullSalvageMessage();
|
||||||
|
} else {
|
||||||
|
expectedYield = config.getPartialSalvageMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
sendNPCMessage(this.npc, player, StringFormatter.replacePlaceholders(config.getCostMessage(),
|
||||||
|
List.of("{cost}", "{yield}"), List.of(cost, expectedYield)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -105,23 +119,30 @@ public class ScrapperTrait extends CustomTrait<ScrapperSetting> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets salvage for an item, if it's salvage-able
|
* Gets whether this scrapper can salvage the given item
|
||||||
*
|
*
|
||||||
* @param server <p>The server to get recipes from</p>
|
* @param server <p>The server to get recipes from</p>
|
||||||
* @param item <p>The item to calculate salvage for</p>
|
* @param item <p>The item to check</p>
|
||||||
* @param salvageAbleItems <p>The items this scrapper can salvage</p>
|
* @param salvageAbleItems <p>The items this scrapper can salvage</p>
|
||||||
* @param extended <p>Whether extended salvage is enabled</p>
|
* @param extended <p>Whether extended salvage is enabled</p>
|
||||||
|
* @return <p>True if the item can be theoretically salvaged</p>
|
||||||
|
*/
|
||||||
|
private boolean canBeSalvaged(@NotNull Server server, @NotNull ItemStack item,
|
||||||
|
@NotNull List<Material> salvageAbleItems, boolean extended) {
|
||||||
|
return (extended || ItemHelper.isRepairable(item)) && ItemHelper.isSalvageable(server, item) &&
|
||||||
|
(salvageAbleItems.isEmpty() || salvageAbleItems.contains(item.getType())) &&
|
||||||
|
SalvageHelper.hasRecipe(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets salvage for an item, if it's salvage-able
|
||||||
|
*
|
||||||
|
* @param item <p>The item to calculate salvage for</p>
|
||||||
|
* @param extended <p>Whether extended salvage is enabled</p>
|
||||||
* @return <p>The possible salvage, or null if not salvage-able</p>
|
* @return <p>The possible salvage, or null if not salvage-able</p>
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
private List<ItemStack> getSalvage(@NotNull Server server, @NotNull ItemStack item,
|
private List<ItemStack> getSalvage(@NotNull ItemStack item, boolean extended) {
|
||||||
@NotNull List<Material> salvageAbleItems, boolean extended) {
|
|
||||||
boolean isSalvageable = (extended || ItemHelper.isRepairable(item)) && ItemHelper.isSalvageable(server, item) &&
|
|
||||||
(salvageAbleItems.isEmpty() || salvageAbleItems.contains(item.getType()));
|
|
||||||
if (!isSalvageable) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the salvage, for the item, but ignore some materials if set, and the item isn't at full durability
|
// Get the salvage, for the item, but ignore some materials if set, and the item isn't at full durability
|
||||||
Set<Material> ignoredSalvage = BlacksmithPlugin.getInstance().getGlobalScrapperSettings().getIgnoredSalvage(
|
Set<Material> ignoredSalvage = BlacksmithPlugin.getInstance().getGlobalScrapperSettings().getIgnoredSalvage(
|
||||||
item.getType());
|
item.getType());
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.knarcraft.blacksmith.util;
|
package net.knarcraft.blacksmith.util;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
@ -24,6 +25,23 @@ public final class SalvageHelper {
|
|||||||
|
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether the given item has a valid crafting recipe
|
||||||
|
*
|
||||||
|
* @param item <p>The item to check</p>
|
||||||
|
* @return <p>True if the item has a valid crafting recipe</p>
|
||||||
|
*/
|
||||||
|
public static boolean hasRecipe(@NotNull ItemStack item) {
|
||||||
|
List<Recipe> recipes = Bukkit.getRecipesFor(new ItemStack(item.getType(), item.getAmount()));
|
||||||
|
for (Recipe recipe : recipes) {
|
||||||
|
if (recipe instanceof ShapedRecipe || recipe instanceof ShapelessRecipe) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the sum of all enchantment levels for the given item
|
* Gets the sum of all enchantment levels for the given item
|
||||||
*
|
*
|
||||||
|
@ -197,4 +197,10 @@ scrapper:
|
|||||||
insufficientFundsMessage: "&cYou don't have enough money to salvage an item!"
|
insufficientFundsMessage: "&cYou don't have enough money to salvage an item!"
|
||||||
|
|
||||||
# The message to display when explaining the shown item's salvage cost
|
# The message to display when explaining the shown item's salvage cost
|
||||||
costMessage: "&eIt will cost &a{cost}&e to salvage that item! Click again to salvage!"
|
costMessage: "&eIt will cost &a{cost}&e to salvage that item! {yield} &eClick again to salvage!"
|
||||||
|
|
||||||
|
# The yield message to display if trying to salvage a non-damaged item
|
||||||
|
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"
|
Loading…
Reference in New Issue
Block a user