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