Finishes the scrapper implementation
Some checks failed
EpicKnarvik97/Blacksmith/pipeline/head There was a failure building this commit
Some checks failed
EpicKnarvik97/Blacksmith/pipeline/head There was a failure building this commit
This commit is contained in:
@ -22,6 +22,8 @@ import java.util.Random;
|
||||
*/
|
||||
public final class SalvageHelper {
|
||||
|
||||
private static final Random random = new Random();
|
||||
|
||||
/**
|
||||
* Gets the sum of all enchantment levels for the given item
|
||||
*
|
||||
@ -44,19 +46,22 @@ public final class SalvageHelper {
|
||||
* @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>
|
||||
* @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) {
|
||||
@NotNull Collection<Material> ignoredSalvage, boolean extended) {
|
||||
if (salvagedItem == null || salvagedItem.getAmount() < 1 ||
|
||||
!ItemHelper.isRepairable(salvagedItem)) {
|
||||
(!extended && !ItemHelper.isRepairable(salvagedItem))) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (Recipe recipe : server.getRecipesFor(salvagedItem)) {
|
||||
List<ItemStack> salvage = getRecipeSalvage(recipe, salvagedItem, ignoredSalvage);
|
||||
if (salvage != null) {
|
||||
return salvage;
|
||||
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);
|
||||
if (salvage != null && !salvage.isEmpty()) {
|
||||
return salvage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,15 +93,7 @@ public final class SalvageHelper {
|
||||
//Purge any ignored salvage to only calculate salvage using the remaining items
|
||||
ingredients.removeIf((item) -> ignoredSalvage.contains(item.getType()));
|
||||
|
||||
Random random = new Random();
|
||||
|
||||
//Make sure to give salvage for all items if a stack > 1 is provided
|
||||
List<ItemStack> allSalvage = new ArrayList<>();
|
||||
for (int i = 0; i < salvagedItem.getAmount(); i++) {
|
||||
allSalvage.addAll(getSalvage(copyItems(ingredients), salvagedItem, random));
|
||||
}
|
||||
|
||||
return combineStacks(allSalvage);
|
||||
return combineStacks(getSalvage(copyItems(ingredients), salvagedItem));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -120,21 +117,30 @@ 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 random <p>The randomness generator to use</p>
|
||||
* @return <p>The items to be returned to the user as salvage</p>
|
||||
*/
|
||||
private static @NotNull List<ItemStack> getSalvage(@NotNull List<ItemStack> recipeItems,
|
||||
@NotNull ItemStack salvagedItem, @NotNull Random random) {
|
||||
double percentageRemaining = (ItemHelper.getDurability(salvagedItem) /
|
||||
(double) ItemHelper.getMaxDurability(salvagedItem));
|
||||
@NotNull
|
||||
private static List<ItemStack> getSalvage(@NotNull List<ItemStack> recipeItems,
|
||||
@NotNull ItemStack salvagedItem) {
|
||||
int durability = ItemHelper.getDurability(salvagedItem);
|
||||
int maxDurability = ItemHelper.getMaxDurability(salvagedItem);
|
||||
|
||||
// Prevent divide by zero for items that don't have a set max durability
|
||||
if (maxDurability == 0) {
|
||||
maxDurability = 1;
|
||||
durability = 1;
|
||||
}
|
||||
|
||||
double percentageRemaining = (double) durability / maxDurability;
|
||||
|
||||
int totalItems = totalItemAmount(recipeItems);
|
||||
//Get the amount of recipe items to be returned
|
||||
int itemsToReturn = (int) Math.floor(percentageRemaining * totalItems);
|
||||
int bound = recipeItems.size();
|
||||
List<ItemStack> salvage = new ArrayList<>();
|
||||
|
||||
List<ItemStack> salvage = new ArrayList<>();
|
||||
for (int i = 0; i < itemsToReturn; i++) {
|
||||
int itemIndex = random.nextInt(bound);
|
||||
int itemIndex = SalvageHelper.random.nextInt(bound);
|
||||
ItemStack itemStack = recipeItems.get(itemIndex);
|
||||
|
||||
//Make sure to never give more of one item than the amount which exists in the recipe
|
||||
@ -192,7 +198,8 @@ public final class SalvageHelper {
|
||||
* @param shapedRecipe <p>The shaped recipe to get ingredients for</p>
|
||||
* @return <p>The items contained in the recipe</p>
|
||||
*/
|
||||
private static @NotNull List<ItemStack> getIngredients(@NotNull ShapedRecipe shapedRecipe) {
|
||||
@NotNull
|
||||
private static List<ItemStack> getIngredients(@NotNull ShapedRecipe shapedRecipe) {
|
||||
List<ItemStack> ingredients = new ArrayList<>();
|
||||
Map<Character, ItemStack> ingredientMap = shapedRecipe.getIngredientMap();
|
||||
//The shape is a list of the three rows' strings. Each string contains 3 characters.
|
||||
|
Reference in New Issue
Block a user