Fixes some savage fail problems
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
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:
@ -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();
|
||||
|
Reference in New Issue
Block a user