inventory #14

Merged
erns6604 merged 11 commits from inventory into main 2025-10-29 14:21:29 +01:00
5 changed files with 55 additions and 9 deletions
Showing only changes of commit 5500656e46 - Show all commits

View File

@@ -1,27 +1,33 @@
package Inventory; package Inventory;
import Item.Item; import Item.Item;
import Item.ItemStack;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public class Inventory { public class Inventory {
List<Item> items; List<ItemStack> items;
public Inventory() { public Inventory() {
items = new ArrayList<>(); items = new ArrayList<>();
} }
public List<Item> getItems() { public List<ItemStack> getItems() {
return Collections.unmodifiableList(items); return Collections.unmodifiableList(items);
} }
public void addItem(Item item) { public void addItem(ItemStack item) {
items.add(item); items.add(item);
} }
public boolean containsItem(String item) { public boolean containsItem(Item item) {
return items.contains(item); for (ItemStack stack : items) {
if (stack.item().equals(item)) {
return true;
}
}
return false;
} }
} }

View File

@@ -0,0 +1,16 @@
package Item;
public record ItemStack(Item item, int quantity) {
public ItemStack {
if (quantity <= 0) {
throw new IllegalArgumentException("Quantity must be greater than zero.");
}
}
public Item getItem() {
return item;
}
public int getQuantity() {
return quantity;
}
}

View File

@@ -1,6 +1,7 @@
package Job; package Job;
import Inventory.HasInventory; import Inventory.HasInventory;
import Item.ItemStack;
import Terrain.Biome; import Terrain.Biome;
@@ -18,6 +19,6 @@ public class Miner extends Job {
public void dig(Biome biome) { public void dig(Biome biome) {
var item = biome.getLootTable().roll(); var item = biome.getLootTable().roll();
actor.getInventory().addItem(item); actor.getInventory().addItem(new ItemStack(item, 1));
} }
} }

View File

@@ -1,5 +1,6 @@
import Inventory.Inventory; import Inventory.Inventory;
import Item.BasicItem; import Item.BasicItem;
import Item.ItemStack;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
@@ -9,9 +10,27 @@ public class InventoryTest {
@Test @Test
void can_add_item_to_inventory() { void can_add_item_to_inventory() {
var inventory = new Inventory(); var inventory = new Inventory();
inventory.addItem(new BasicItem("iron_sword", "Iron Sword")); var item = new BasicItem("iron_sword", "Iron Sword");
inventory.addItem(new ItemStack(item, 1));
assertThat(inventory.getItems(), hasItem( assertThat(inventory.getItems(), hasItem(
hasProperty("item",
hasProperty("id", equalTo("iron_sword")) hasProperty("id", equalTo("iron_sword"))
)
));
}
@Test
void can_add_quantity_to_inventory() {
var inventory = new Inventory();
var item = new BasicItem("iron_sword", "Iron Sword");
var stack = new ItemStack(item, 5);
inventory.addItem(stack);
assertThat(inventory.getItems(), hasItem(
allOf(
hasProperty("item",
hasProperty("id", equalTo("iron_sword"))),
hasProperty("quantity", equalTo(5))
)
)); ));
} }
} }

View File

@@ -46,7 +46,7 @@ public class MinerTest {
Biome.COAST.getLootTable().setRandomProvider(random); Biome.COAST.getLootTable().setRandomProvider(random);
job.dig(Biome.COAST); job.dig(Biome.COAST);
assertThat(job.getActor().getInventory().getItems(), hasItem( assertThat(job.getActor().getInventory().getItems(), hasItem(
hasProperty("id", equalTo("sand")))); hasProperty("item", hasProperty("id", equalTo("sand")))));
} }
@Test @Test
@@ -55,7 +55,11 @@ public class MinerTest {
var job = new Miner(defaultPlayer()); var job = new Miner(defaultPlayer());
Biome.MOUNTAIN.getLootTable().setRandomProvider(random); Biome.MOUNTAIN.getLootTable().setRandomProvider(random);
job.dig(Biome.MOUNTAIN); job.dig(Biome.MOUNTAIN);
assertThat(job.getActor().getInventory().getItems(), hasItem( hasProperty("id", equalTo("iron")))); assertThat(job.getActor().getInventory().getItems(), hasItem(
hasProperty("item",
hasProperty("id", equalTo("iron")))
)
);
} }
} }