diff --git a/pom.xml b/pom.xml
index 58aeff5..19ee8d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,11 @@
1.18.36
provided
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.2
+
diff --git a/src/main/java/cz/jzitnik/game/SpriteLoader.java b/src/main/java/cz/jzitnik/game/SpriteLoader.java
index 476a7d3..3764722 100644
--- a/src/main/java/cz/jzitnik/game/SpriteLoader.java
+++ b/src/main/java/cz/jzitnik/game/SpriteLoader.java
@@ -200,14 +200,17 @@ public class SpriteLoader {
SPRITES_MAP.put(SPRITES.ITEM_COAL_ORE, new SimpleSprite("items/coal_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_IRON_ORE, new SimpleSprite("items/iron_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_GOLD_ORE, new SimpleSprite("items/gold_ore.ans"));
+ SPRITES_MAP.put(SPRITES.ITEM_DIAMOND_ORE, new SimpleSprite("items/diamond_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_COAL_BLOCK, new SimpleSprite("items/coal_block.ans"));
SPRITES_MAP.put(SPRITES.ITEM_IRON_BLOCK, new SimpleSprite("items/iron_block.ans"));
SPRITES_MAP.put(SPRITES.ITEM_GOLD_BLOCK, new SimpleSprite("items/gold_block.ans"));
+ SPRITES_MAP.put(SPRITES.ITEM_DIAMOND_BLOCK, new SimpleSprite("items/diamond_block.ans"));
SPRITES_MAP.put(SPRITES.COAL, new SimpleSprite("items/coal.ans"));
SPRITES_MAP.put(SPRITES.ITEM_IRON_INGOT, new SimpleSprite("items/iron_ingot.ans"));
SPRITES_MAP.put(SPRITES.ITEM_GOLD_INGOT, new SimpleSprite("items/gold_ingot.ans"));
+ SPRITES_MAP.put(SPRITES.DIAMOND, new SimpleSprite("items/diamond.ans"));
// Work Items
SPRITES_MAP.put(SPRITES.ITEM_CRAFTING_TABLE, new SimpleSprite("items/crafting_table.ans"));
diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalItem.java
index 68e11ab..d1747ef 100644
--- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalItem.java
+++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalItem.java
@@ -8,6 +8,6 @@ import cz.jzitnik.game.entities.items.ItemType;
@ItemRegistry("coal")
public class CoalItem extends Item {
public CoalItem() {
- super("coal", "Coal", ItemType.USELESS_ITEM, SpriteLoader.SPRITES.ITEM_COAL_ORE);
+ super("coal", "Coal", ItemType.USELESS_ITEM, SpriteLoader.SPRITES.COAL);
}
}
diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/SteakItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/SteakItem.java
index b701b7a..d5a233e 100644
--- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/SteakItem.java
+++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/SteakItem.java
@@ -8,6 +8,6 @@ import cz.jzitnik.game.entities.items.ItemType;
@ItemRegistry("steak")
public class SteakItem extends Item {
public SteakItem() {
- super("steak", "Steak", ItemType.FOOD, SpriteLoader.SPRITES.ITEM_BEEF, 4);
+ super("steak", "Steak", ItemType.FOOD, SpriteLoader.SPRITES.ITEM_STEAK, 4);
}
}
diff --git a/src/main/java/cz/jzitnik/game/generation/Generation.java b/src/main/java/cz/jzitnik/game/generation/Generation.java
index 3118092..1820e5f 100644
--- a/src/main/java/cz/jzitnik/game/generation/Generation.java
+++ b/src/main/java/cz/jzitnik/game/generation/Generation.java
@@ -35,6 +35,7 @@ public class Generation {
// Spawn player at a valid starting point
world[terrainHeight[256] - 1][256].add(steveBlock2);
world[terrainHeight[256] - 2][256].add(steveBlock);
+ world[terrainHeight[256] - 1][256 + 1].add(ItemBlockSupplier.getBlock("water"));
}
private static void initializeWorld(List[][] world) {
diff --git a/src/main/java/cz/jzitnik/game/sprites/Air.java b/src/main/java/cz/jzitnik/game/sprites/Air.java
index f6adce2..74e0101 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Air.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Air.java
@@ -2,6 +2,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Air extends Sprite {
public String getSprite() {
StringBuilder sprite = new StringBuilder();
@@ -15,4 +17,9 @@ public class Air extends Sprite {
public String getSprite(Enum e) {
throw new RuntimeException("Imposible state");
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.empty();
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Bed.java b/src/main/java/cz/jzitnik/game/sprites/Bed.java
index 412b304..472207b 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Bed.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Bed.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Bed extends Sprite {
public enum BedState {
LEFT,
@@ -22,4 +24,9 @@ public class Bed extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(BedState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Breaking.java b/src/main/java/cz/jzitnik/game/sprites/Breaking.java
index d56af4b..9fc99ad 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Breaking.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Breaking.java
@@ -4,6 +4,7 @@ import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
import java.util.Objects;
+import java.util.Optional;
public class Breaking extends Sprite {
public enum BreakingState {
@@ -28,4 +29,9 @@ public class Breaking extends Sprite {
default -> throw new IllegalStateException("Unexpected value: " + key);
})));
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(BreakingState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Cow.java b/src/main/java/cz/jzitnik/game/sprites/Cow.java
index 8a8b9cb..f44b7aa 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Cow.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Cow.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Cow extends Sprite {
public enum CowState{
LEFT,
@@ -26,4 +28,9 @@ public class Cow extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(CowState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Furnace.java b/src/main/java/cz/jzitnik/game/sprites/Furnace.java
index e40dae0..11ddc87 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Furnace.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Furnace.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Furnace extends Sprite {
public enum FurnaceState {
OFF,
@@ -22,4 +24,9 @@ public class Furnace extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(FurnaceState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Heart.java b/src/main/java/cz/jzitnik/game/sprites/Heart.java
index 5b3ca49..d164b8e 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Heart.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Heart.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Heart extends Sprite {
public enum HeartState {
OFF,
@@ -10,7 +12,7 @@ public class Heart extends Sprite {
}
public String getSprite() {
- throw new RuntimeException("Idk");
+ return getSprite(HeartState.OFF);
}
public String getSprite(Enum e) {
@@ -22,4 +24,9 @@ public class Heart extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(HeartState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Hunger.java b/src/main/java/cz/jzitnik/game/sprites/Hunger.java
index 979e6c2..3eed0e8 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Hunger.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Hunger.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Hunger extends Sprite {
public enum HungerState {
OFF,
@@ -10,7 +12,7 @@ public class Hunger extends Sprite {
}
public String getSprite() {
- throw new RuntimeException("Idk");
+ return getSprite(HungerState.OFF);
}
public String getSprite(Enum e) {
@@ -22,4 +24,9 @@ public class Hunger extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(HungerState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/OakDoor.java b/src/main/java/cz/jzitnik/game/sprites/OakDoor.java
index aa948a5..29c7488 100644
--- a/src/main/java/cz/jzitnik/game/sprites/OakDoor.java
+++ b/src/main/java/cz/jzitnik/game/sprites/OakDoor.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class OakDoor extends Sprite {
public enum OakDoorState {
TOP,
@@ -26,4 +28,9 @@ public class OakDoor extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(OakDoorState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Pig.java b/src/main/java/cz/jzitnik/game/sprites/Pig.java
index 53ae7a9..cf719b5 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Pig.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Pig.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Pig extends Sprite {
public enum PigState{
LEFT,
@@ -26,4 +28,9 @@ public class Pig extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(PigState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Sheep.java b/src/main/java/cz/jzitnik/game/sprites/Sheep.java
index 29602b4..0a07377 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Sheep.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Sheep.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Sheep extends Sprite {
public enum SheepState {
WHITE_LEFT,
@@ -77,4 +79,9 @@ public class Sheep extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(SheepState.class);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java b/src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java
index 6908f43..a241c37 100644
--- a/src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java
+++ b/src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class SimpleSprite extends Sprite {
private final String resource;
@@ -17,4 +19,9 @@ public class SimpleSprite extends Sprite {
public String getSprite(Enum key) {
throw new RuntimeException("Imposible state");
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.empty();
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Steve.java b/src/main/java/cz/jzitnik/game/sprites/Steve.java
index 5130f3f..0f4dc75 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Steve.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Steve.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Steve extends Sprite {
public enum SteveState{
FIRST,
@@ -10,7 +12,7 @@ public class Steve extends Sprite {
}
public String getSprite() {
- throw new RuntimeException("Error");
+ return getSprite(SteveState.FIRST);
}
public String getSprite(Enum e) {
@@ -22,4 +24,9 @@ public class Steve extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(SteveState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Water.java b/src/main/java/cz/jzitnik/game/sprites/Water.java
index 9a5af08..5d50179 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Water.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Water.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Water extends Sprite {
public enum WaterState {
FIRST,
@@ -52,4 +54,9 @@ public class Water extends Sprite {
return stringBuilder.toString();
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(WaterState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Wool.java b/src/main/java/cz/jzitnik/game/sprites/Wool.java
index 45bb8bf..f4daf36 100644
--- a/src/main/java/cz/jzitnik/game/sprites/Wool.java
+++ b/src/main/java/cz/jzitnik/game/sprites/Wool.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Wool extends Sprite {
public enum WoolState {
WHITE,
@@ -31,4 +33,9 @@ public class Wool extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(WoolState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/WoolItem.java b/src/main/java/cz/jzitnik/game/sprites/WoolItem.java
index 9e44895..503a7eb 100644
--- a/src/main/java/cz/jzitnik/game/sprites/WoolItem.java
+++ b/src/main/java/cz/jzitnik/game/sprites/WoolItem.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class WoolItem extends Sprite {
public enum WoolItemState {
WHITE,
@@ -31,4 +33,9 @@ public class WoolItem extends Sprite {
}
);
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(WoolItemState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/ui/Font.java b/src/main/java/cz/jzitnik/game/sprites/ui/Font.java
index 167a7e6..133ec11 100644
--- a/src/main/java/cz/jzitnik/game/sprites/ui/Font.java
+++ b/src/main/java/cz/jzitnik/game/sprites/ui/Font.java
@@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites.ui;
import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
+import java.util.Optional;
+
public class Font extends Sprite {
public enum FontState {
A,B,C,D,E,F,G,H,I,J,K,
@@ -24,4 +26,9 @@ public class Font extends Sprite {
return null;
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.empty();
+ }
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/ui/Number.java b/src/main/java/cz/jzitnik/game/sprites/ui/Number.java
index 7c18556..a3f13e9 100644
--- a/src/main/java/cz/jzitnik/game/sprites/ui/Number.java
+++ b/src/main/java/cz/jzitnik/game/sprites/ui/Number.java
@@ -4,6 +4,7 @@ import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite;
import java.util.Objects;
+import java.util.Optional;
public class Number extends Sprite {
public enum NumberState {
@@ -58,4 +59,9 @@ public class Number extends Sprite {
default -> throw new IllegalStateException("Unexpected value: " + key);
})));
}
+
+ @Override
+ public Optional> getStates() {
+ return Optional.of(NumberState.class);
+ }
}
diff --git a/src/main/java/cz/jzitnik/tui/Sprite.java b/src/main/java/cz/jzitnik/tui/Sprite.java
index faef08b..5fb0981 100644
--- a/src/main/java/cz/jzitnik/tui/Sprite.java
+++ b/src/main/java/cz/jzitnik/tui/Sprite.java
@@ -1,6 +1,9 @@
package cz.jzitnik.tui;
+import java.util.Optional;
+
public abstract class Sprite> {
public abstract String getSprite();
public abstract String getSprite(E key);
+ public abstract Optional> getStates();
}
diff --git a/src/test/java/cz/jzitnik/game/SpriteLoaderTest.java b/src/test/java/cz/jzitnik/game/SpriteLoaderTest.java
new file mode 100644
index 0000000..87a4201
--- /dev/null
+++ b/src/test/java/cz/jzitnik/game/SpriteLoaderTest.java
@@ -0,0 +1,35 @@
+package cz.jzitnik.game;
+
+import cz.jzitnik.tui.Sprite;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.DisplayName;
+import static org.junit.jupiter.api.Assertions.*;
+
+public class SpriteLoaderTest {
+ @Test
+ @DisplayName("Verify all SPRITES enum values are present in SPRITES_MAP")
+ void testAllSpritesArePresent() {
+ for (SpriteLoader.SPRITES spriteEnum : SpriteLoader.SPRITES.values()) {
+ assertTrue(SpriteLoader.SPRITES_MAP.containsKey(spriteEnum), "Missing sprite: " + spriteEnum);
+ assertNotNull(SpriteLoader.SPRITES_MAP.get(spriteEnum), "Sprite is null: " + spriteEnum);
+ }
+ }
+
+ @Test
+ @DisplayName("Ensure that for each sprite all the resources are present.")
+ void testAllResourcesArePresent() {
+ for (SpriteLoader.SPRITES spriteEnum : SpriteLoader.SPRITES_MAP.keySet()) {
+ Sprite sprite = SpriteLoader.SPRITES_MAP.get(spriteEnum);
+ assertNotNull(sprite.getSprite(),
+ "getSprite() couldn't find file for: " + spriteEnum);
+
+ if (sprite.getStates().isPresent()) {
+ for (Enum state : ((Class) SpriteLoader.SPRITES_MAP.get(spriteEnum).getStates().get()).getEnumConstants()) {
+ assertNotNull(SpriteLoader.SPRITES_MAP.get(spriteEnum).getSprite(state),
+ "getSprite("+state+") couldn't find file for: " + spriteEnum);
+ }
+ }
+
+ }
+ }
+}
diff --git a/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java b/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java
new file mode 100644
index 0000000..2223ab8
--- /dev/null
+++ b/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java
@@ -0,0 +1,25 @@
+package cz.jzitnik.game.smelting;
+
+import cz.jzitnik.game.entities.items.Item;
+import cz.jzitnik.game.entities.items.ItemBlockSupplier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.function.Executable;
+
+import java.util.function.Supplier;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class SmeltingTest {
+ @Test
+ @DisplayName("Verity that all items in Smelting are actual items")
+ void testAllItems() {
+ for (String item : Smelting.smeltingList.keySet()) {
+ assertDoesNotThrow(() -> ItemBlockSupplier.getItem(item));
+ }
+
+ for (Supplier- supplier: Smelting.smeltingList.values()) {
+ assertDoesNotThrow(supplier::get);
+ }
+ }
+}
\ No newline at end of file