Fixes a bug in multi-item salvage
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
This commit is contained in:
parent
7cc2aef9d4
commit
bbb93bb0eb
@ -72,12 +72,28 @@ public final class SalvageHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Make sure to give salvage for all items if a stack > 1 is provided
|
//Make sure to give salvage for all items if a stack > 1 is provided
|
||||||
List<ItemStack> salvage = new ArrayList<>();
|
List<ItemStack> allSalvage = new ArrayList<>();
|
||||||
for (int i = 0; i < salvagedItem.getAmount(); i++) {
|
for (int i = 0; i < salvagedItem.getAmount(); i++) {
|
||||||
salvage.addAll(getSalvage(ingredients, salvagedItem));
|
allSalvage.addAll(getSalvage(copyItems(ingredients), salvagedItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
return combineStacks(salvage);
|
return combineStacks(allSalvage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies a list of items
|
||||||
|
*
|
||||||
|
* <p>Note: This does not copy any metadata. It only copies the item type and the amount.</p>
|
||||||
|
*
|
||||||
|
* @param itemsToCopy <p>The items to make a copy of</p>
|
||||||
|
* @return <p>A copy of the given items</p>
|
||||||
|
*/
|
||||||
|
private static List<ItemStack> copyItems(List<ItemStack> itemsToCopy) {
|
||||||
|
List<ItemStack> copies = new ArrayList<>(itemsToCopy.size());
|
||||||
|
for (ItemStack itemStack : itemsToCopy) {
|
||||||
|
copies.add(new ItemStack(itemStack.getType(), itemStack.getAmount()));
|
||||||
|
}
|
||||||
|
return copies;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,6 +54,16 @@ public class SalvageHelperTest {
|
|||||||
assertEquals(expectedSalvage, new HashSet<>(SalvageHelper.getSalvage(server, itemToSalvage, null)));
|
assertEquals(expectedSalvage, new HashSet<>(SalvageHelper.getSalvage(server, itemToSalvage, null)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getSeveralFullSalvageTest() {
|
||||||
|
Set<ItemStack> expectedSalvage = new HashSet<>();
|
||||||
|
expectedSalvage.add(new ItemStack(Material.DIAMOND, 21));
|
||||||
|
expectedSalvage.add(new ItemStack(Material.STICK, 14));
|
||||||
|
ItemStack itemToSalvage = new ItemStack(Material.DIAMOND_PICKAXE, 7);
|
||||||
|
//Note: Conversion to sets makes sure the order doesn't matter
|
||||||
|
assertEquals(expectedSalvage, new HashSet<>(SalvageHelper.getSalvage(server, itemToSalvage, null)));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNonFullSalvageTest() {
|
public void getNonFullSalvageTest() {
|
||||||
List<ItemStack> expectedSalvage = new ArrayList<>();
|
List<ItemStack> expectedSalvage = new ArrayList<>();
|
||||||
@ -73,4 +83,24 @@ public class SalvageHelperTest {
|
|||||||
assertNotEquals(expectedSalvage, salvage);
|
assertNotEquals(expectedSalvage, salvage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void ignoredSalvageTest() {
|
||||||
|
List<ItemStack> expectedSalvage = new ArrayList<>();
|
||||||
|
expectedSalvage.add(new ItemStack(Material.DIAMOND, 2));
|
||||||
|
ItemStack itemToSalvage = new ItemStack(Material.DIAMOND_PICKAXE, 1);
|
||||||
|
List<Material> ignoredSalvage = new ArrayList<>();
|
||||||
|
ignoredSalvage.add(Material.STICK);
|
||||||
|
ItemMeta meta = itemToSalvage.getItemMeta();
|
||||||
|
Damageable damageable = (Damageable) meta;
|
||||||
|
if (damageable != null) {
|
||||||
|
damageable.setDamage(100);
|
||||||
|
}
|
||||||
|
itemToSalvage.setItemMeta(meta);
|
||||||
|
List<ItemStack> salvage = SalvageHelper.getSalvage(server, itemToSalvage, ignoredSalvage);
|
||||||
|
//Assert that some items are given
|
||||||
|
assertNotEquals(salvage, new ArrayList<>());
|
||||||
|
//Assert that a damaged diamond pickaxe with sticks ignored returns 2 diamonds a salvage
|
||||||
|
assertEquals(expectedSalvage, salvage);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user