Fixes some savage fail problems
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good

Fixes item not being returned when salvage fails
Removes some redundancy when giving back items
Makes extended salvage return 50% of the salvage (no items if only one item would be returned)
Adds a better message when failing to salvage extended salvage items
Fixes a bug in the caching of smith presets
This commit is contained in:
2024-05-07 01:45:48 +02:00
parent 1d7e8a0732
commit 33ef557771
11 changed files with 170 additions and 132 deletions

View File

@ -246,13 +246,32 @@ public final class SalvageHelper {
}
double percentageRemaining = (double) durability / maxDurability;
return pickRandomSalvage(recipeItems, trashSalvage, percentageRemaining);
}
int totalItems = totalItemAmount(recipeItems);
/**
* Picks random salvage from the given items
*
* @param itemsToChooseFrom <p>The salvage to choose from</p>
* @param trashSalvage <p>The salvage considered trash</p>
* @param percentageRemaining <p>The percentage remaining for the salvaged item (0-1)</p>
* @return <p>Random salvage</p>
*/
@NotNull
public static List<ItemStack> pickRandomSalvage(@NotNull List<ItemStack> itemsToChooseFrom,
@NotNull Collection<Material> trashSalvage,
double percentageRemaining) {
// Avoid an infinite loop
if (percentageRemaining > 1 || percentageRemaining < 0) {
percentageRemaining = 1;
}
int totalItems = totalItemAmount(itemsToChooseFrom);
//Get the amount of recipe items to be returned
int itemsToReturn = (int) Math.floor(percentageRemaining * totalItems);
int bound = recipeItems.size();
int bound = itemsToChooseFrom.size();
List<ItemStack> goodItems = copyItems(recipeItems);
List<ItemStack> goodItems = copyItems(itemsToChooseFrom);
goodItems.removeIf((item) -> trashSalvage.contains(item.getType()));
int goodSalvage = totalItemAmount(goodItems);
@ -260,7 +279,7 @@ public final class SalvageHelper {
for (int i = 0; i < itemsToReturn; i++) {
// Pick random item
int itemIndex = SalvageHelper.random.nextInt(bound);
ItemStack itemStack = recipeItems.get(itemIndex);
ItemStack itemStack = itemsToChooseFrom.get(itemIndex);
// The selected item is trash, so skip it
if (trashSalvage.contains(itemStack.getType()) && i < goodSalvage) {
@ -275,7 +294,6 @@ public final class SalvageHelper {
}
itemStack.setAmount(itemStack.getAmount() - 1);
salvage.add(new ItemStack(itemStack.getType(), 1));
}
return salvage;
@ -287,7 +305,7 @@ public final class SalvageHelper {
* @param items <p>The items to get the sum of</p>
* @return <p>The total number of items</p>
*/
private static int totalItemAmount(@NotNull List<ItemStack> items) {
public static int totalItemAmount(@NotNull List<ItemStack> items) {
int sum = 0;
for (ItemStack itemStack : items) {
sum += itemStack.getAmount();