Changes ignored salvage into trash salvage according to #22
This commit is contained in:
@ -61,14 +61,14 @@ public final class SalvageHelper {
|
||||
*
|
||||
* <p>Note: Only items craft-able in a crafting table are salvageable. Netherite gear is therefore not salvageable.</p>
|
||||
*
|
||||
* @param server <p>The server to get recipes from</p>
|
||||
* @param salvagedItem <p>The item stack to salvage</p>
|
||||
* @param ignoredSalvage <p>Any material which should not be returned as part of the salvage.</p>
|
||||
* @param extended <p>Whether to enable extended salvage, ignoring the repairable restriction</p>
|
||||
* @param server <p>The server to get recipes from</p>
|
||||
* @param salvagedItem <p>The item stack to salvage</p>
|
||||
* @param trashSalvage <p>Any material treated as trash salvage</p>
|
||||
* @param extended <p>Whether to enable extended salvage, ignoring the repairable restriction</p>
|
||||
* @return <p>The items to return to the user, or null if not salvageable</p>
|
||||
*/
|
||||
public static @Nullable List<ItemStack> getSalvage(@NotNull Server server, @Nullable ItemStack salvagedItem,
|
||||
@NotNull Collection<Material> ignoredSalvage, boolean extended) {
|
||||
@NotNull Collection<Material> trashSalvage, boolean extended) {
|
||||
if (salvagedItem == null || salvagedItem.getAmount() < 1 ||
|
||||
(!extended && !ItemHelper.isRepairable(salvagedItem))) {
|
||||
return null;
|
||||
@ -76,7 +76,7 @@ public final class SalvageHelper {
|
||||
|
||||
for (Recipe recipe : server.getRecipesFor(new ItemStack(salvagedItem.getType(), salvagedItem.getAmount()))) {
|
||||
if (recipe instanceof ShapedRecipe || recipe instanceof ShapelessRecipe) {
|
||||
List<ItemStack> salvage = getRecipeSalvage(recipe, salvagedItem, ignoredSalvage);
|
||||
List<ItemStack> salvage = getRecipeSalvage(recipe, salvagedItem, trashSalvage);
|
||||
if (salvage != null && !salvage.isEmpty()) {
|
||||
return salvage;
|
||||
}
|
||||
@ -89,13 +89,13 @@ public final class SalvageHelper {
|
||||
/**
|
||||
* Gets the salvage resulting from the given recipe and the given item
|
||||
*
|
||||
* @param recipe <p>The recipe to get salvage for</p>
|
||||
* @param salvagedItem <p>The item to be salvaged</p>
|
||||
* @param ignoredSalvage <p>Any material which should not be returned as part of the salvage.</p>
|
||||
* @param recipe <p>The recipe to get salvage for</p>
|
||||
* @param salvagedItem <p>The item to be salvaged</p>
|
||||
* @param trashSalvage <p>Any material treated as trash salvage</p>
|
||||
* @return <p>A list of items, or null if not a valid type of recipe</p>
|
||||
*/
|
||||
private static @Nullable List<ItemStack> getRecipeSalvage(@NotNull Recipe recipe, @NotNull ItemStack salvagedItem,
|
||||
@NotNull Collection<Material> ignoredSalvage) {
|
||||
@NotNull Collection<Material> trashSalvage) {
|
||||
List<ItemStack> ingredients;
|
||||
if (recipe instanceof ShapedRecipe shapedRecipe) {
|
||||
ingredients = getIngredients(shapedRecipe);
|
||||
@ -108,10 +108,7 @@ public final class SalvageHelper {
|
||||
//Make things easier by eliminating identical stacks
|
||||
ingredients = combineStacks(ingredients);
|
||||
|
||||
//Purge any ignored salvage to only calculate salvage using the remaining items
|
||||
ingredients.removeIf((item) -> ignoredSalvage.contains(item.getType()));
|
||||
|
||||
return combineStacks(getSalvage(copyItems(ingredients), salvagedItem));
|
||||
return combineStacks(getSalvage(copyItems(ingredients), salvagedItem, trashSalvage));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -135,11 +132,13 @@ public final class SalvageHelper {
|
||||
*
|
||||
* @param recipeItems <p>All items required for crafting the item to salvage</p>
|
||||
* @param salvagedItem <p>The item to be salvaged</p>
|
||||
* @param trashSalvage <p>The types of materials considered trash for this recipe</p>
|
||||
* @return <p>The items to be returned to the user as salvage</p>
|
||||
*/
|
||||
@NotNull
|
||||
private static List<ItemStack> getSalvage(@NotNull List<ItemStack> recipeItems,
|
||||
@NotNull ItemStack salvagedItem) {
|
||||
@NotNull ItemStack salvagedItem,
|
||||
@NotNull Collection<Material> trashSalvage) {
|
||||
int durability = ItemHelper.getDurability(salvagedItem);
|
||||
int maxDurability = ItemHelper.getMaxDurability(salvagedItem);
|
||||
|
||||
@ -156,16 +155,28 @@ public final class SalvageHelper {
|
||||
int itemsToReturn = (int) Math.floor(percentageRemaining * totalItems);
|
||||
int bound = recipeItems.size();
|
||||
|
||||
List<ItemStack> goodItems = copyItems(recipeItems);
|
||||
goodItems.removeIf((item) -> trashSalvage.contains(item.getType()));
|
||||
int goodSalvage = totalItemAmount(goodItems);
|
||||
|
||||
List<ItemStack> salvage = new ArrayList<>();
|
||||
for (int i = 0; i < itemsToReturn; i++) {
|
||||
// Pick random item
|
||||
int itemIndex = SalvageHelper.random.nextInt(bound);
|
||||
ItemStack itemStack = recipeItems.get(itemIndex);
|
||||
|
||||
// The selected item is trash, so skip it
|
||||
if (trashSalvage.contains(itemStack.getType()) && i < goodSalvage) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
//Make sure to never give more of one item than the amount which exists in the recipe
|
||||
if (itemStack.getAmount() <= 0) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||
|
||||
salvage.add(new ItemStack(itemStack.getType(), 1));
|
||||
|
Reference in New Issue
Block a user