diff --git a/src/main/java/cz/jzitnik/game/Generation.java b/src/main/java/cz/jzitnik/game/Generation.java index 02aced8..22cf178 100644 --- a/src/main/java/cz/jzitnik/game/Generation.java +++ b/src/main/java/cz/jzitnik/game/Generation.java @@ -1,7 +1,6 @@ package cz.jzitnik.game; -import cz.jzitnik.game.items.Item; -import cz.jzitnik.game.items.ItemBlockGenerator; +import cz.jzitnik.game.items.ItemBlockSupplier; import cz.jzitnik.game.items.ItemType; import java.util.ArrayList; @@ -54,16 +53,16 @@ public class Generation { for (int i = 0; i < 512; i++) { int hillHeight = terrainHeight[i]; - world[hillHeight][i].add(ItemBlockGenerator.Blocks.grass()); + world[hillHeight][i].add(ItemBlockSupplier.Blocks.grass()); for (int j = 1; j <= 4; j++) { if (hillHeight + j < 256) { - world[hillHeight + j][i].add(ItemBlockGenerator.Blocks.dirt()); + world[hillHeight + j][i].add(ItemBlockSupplier.Blocks.dirt()); } } for (int j = hillHeight + 5; j < 250; j++) { - world[j][i].add(ItemBlockGenerator.Blocks.stone()); + world[j][i].add(ItemBlockSupplier.Blocks.stone()); } world[255][i].add(new Block("bedrock", SpriteLoader.SPRITES.BEDROCK)); @@ -87,7 +86,7 @@ public class Generation { for (int j = 0; j < 3; j++) { if (treeBase - j >= 0) { - world[treeBase - j - 1][i].add(ItemBlockGenerator.Blocks.oakLog()); + world[treeBase - j - 1][i].add(ItemBlockSupplier.Blocks.oakLog()); } } diff --git a/src/main/java/cz/jzitnik/game/SpriteLoader.java b/src/main/java/cz/jzitnik/game/SpriteLoader.java index 79e5774..f7e4fb0 100644 --- a/src/main/java/cz/jzitnik/game/SpriteLoader.java +++ b/src/main/java/cz/jzitnik/game/SpriteLoader.java @@ -1,7 +1,7 @@ package cz.jzitnik.game; import cz.jzitnik.game.sprites.*; -import cz.jzitnik.game.sprites.items.SimpleItem; +import cz.jzitnik.game.sprites.SimpleSprite; import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.SpriteList; @@ -19,10 +19,12 @@ public class SpriteLoader { OAK_LOG, OAK_LEAF, + OAK_PLANKS, // Items ITEM_DIRT, - ITEM_OAK_LOG + ITEM_OAK_LOG, + ITEM_OAK_PLANKS } public static final HashMap SPRITES_MAP = new HashMap<>(); @@ -37,9 +39,11 @@ public class SpriteLoader { SPRITES_MAP.put(SPRITES.BREAKING, new Breaking()); SPRITES_MAP.put(SPRITES.OAK_LOG, new OakLog()); SPRITES_MAP.put(SPRITES.OAK_LEAF, new OakLeaf()); + SPRITES_MAP.put(SPRITES.OAK_PLANKS, new SimpleSprite("oak_planks.ans")); - SPRITES_MAP.put(SPRITES.ITEM_DIRT, new SimpleItem("dirt.ans")); - SPRITES_MAP.put(SPRITES.ITEM_OAK_LOG, new SimpleItem("oak_log.ans")); + SPRITES_MAP.put(SPRITES.ITEM_DIRT, new SimpleSprite("items/dirt.ans")); + SPRITES_MAP.put(SPRITES.ITEM_OAK_LOG, new SimpleSprite("items/oak_log.ans")); + SPRITES_MAP.put(SPRITES.ITEM_OAK_PLANKS, new SimpleSprite("items/oak_planks.ans")); } public static SpriteList load() { diff --git a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipe.java b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipe.java index 5b73073..2eb113c 100644 --- a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipe.java +++ b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipe.java @@ -4,9 +4,11 @@ import cz.jzitnik.game.items.Item; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.function.Supplier; + @AllArgsConstructor @Getter public class CraftingRecipe { - private String[] recipe; - private Item item; + private String[][] recipe; + private Supplier itemSupplier; } diff --git a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java index d1ae117..29f0988 100644 --- a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java +++ b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java @@ -1,7 +1,18 @@ package cz.jzitnik.game.crafting; +import cz.jzitnik.game.items.ItemBlockSupplier; + +import java.util.ArrayList; import java.util.List; public class CraftingRecipeList { - private List recipes; + private static List recipes = new ArrayList<>(); + + static { + String[][] pattern = new String[9][9]; + for (int i = 0; i < 9; i++) { + pattern[i][i] = "oak_log"; + } + recipes.add(new CraftingRecipe(pattern, ItemBlockSupplier.Items::oakPlanks)); + } } diff --git a/src/main/java/cz/jzitnik/game/items/ItemBlockGenerator.java b/src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java similarity index 78% rename from src/main/java/cz/jzitnik/game/items/ItemBlockGenerator.java rename to src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java index 1c33987..18f06e4 100644 --- a/src/main/java/cz/jzitnik/game/items/ItemBlockGenerator.java +++ b/src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java @@ -7,7 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class ItemBlockGenerator { +public class ItemBlockSupplier { // This is necessary to not get infinite recursion private static class Helper { public static Item dirt(Block ref) { @@ -19,6 +19,9 @@ public class ItemBlockGenerator { public static Item oakLog(Block ref) { return new Item("oak_log", "Oak log", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_OAK_LOG, ref); } + public static Item oakPlanks(Block ref) { + return new Item("oak_log", "Oak planks", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_OAK_PLANKS, ref); + } } public static class Blocks { @@ -42,6 +45,11 @@ public class ItemBlockGenerator { block.setDrops(List.of(Helper.oakLog(block))); return block; } + public static Block oakPlanks() { + var block = new Block("oak_planks", SpriteLoader.SPRITES.OAK_PLANKS, 3, ItemType.AXE, new ArrayList<>()); + block.setDrops(List.of(Helper.oakPlanks(block))); + return block; + } } // I hate this but whatever @@ -49,11 +57,8 @@ public class ItemBlockGenerator { public static Item dirt() { return Helper.dirt(Blocks.dirt()); } - public static Item stone() { - return Helper.stone(Blocks.stone()); - } - public static Item oakLog() { - return Helper.stone(Blocks.stone()); + public static Item oakPlanks() { + return Helper.oakPlanks(Blocks.oakPlanks()); } } } diff --git a/src/main/java/cz/jzitnik/game/sprites/items/SimpleItem.java b/src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java similarity index 54% rename from src/main/java/cz/jzitnik/game/sprites/items/SimpleItem.java rename to src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java index 16a1550..8b79d05 100644 --- a/src/main/java/cz/jzitnik/game/sprites/items/SimpleItem.java +++ b/src/main/java/cz/jzitnik/game/sprites/SimpleSprite.java @@ -1,17 +1,17 @@ -package cz.jzitnik.game.sprites.items; +package cz.jzitnik.game.sprites; import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.Sprite; -public class SimpleItem extends Sprite { +public class SimpleSprite extends Sprite { private String resource; - public SimpleItem(String resource) { + public SimpleSprite(String resource) { this.resource = resource; } public String getSprite() { - return ResourceLoader.loadResource("items/" + resource).replaceAll("\033\\[38;5;1;48;5;16m", "\033[0m"); + return ResourceLoader.loadResource(resource).replaceAll("\033\\[38;5;1;48;5;16m", "\033[0m"); } public String getSprite(Enum key) { diff --git a/src/main/java/cz/jzitnik/game/ui/SmallCraftingTable.java b/src/main/java/cz/jzitnik/game/ui/SmallCraftingTable.java index 67ae7fd..e57c672 100644 --- a/src/main/java/cz/jzitnik/game/ui/SmallCraftingTable.java +++ b/src/main/java/cz/jzitnik/game/ui/SmallCraftingTable.java @@ -1,11 +1,8 @@ package cz.jzitnik.game.ui; -import cz.jzitnik.game.Generation; -import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.items.InventoryItem; import cz.jzitnik.game.items.Item; -import cz.jzitnik.game.items.ItemBlockGenerator; -import cz.jzitnik.game.items.ItemType; +import cz.jzitnik.game.items.ItemBlockSupplier; import cz.jzitnik.tui.SpriteList; import lombok.Getter; @@ -48,7 +45,7 @@ public class SmallCraftingTable { List sprites = inventory.getSprites(items, spriteList, inventory.getSelectedItemInv() - 29); - Optional craftedItem = Optional.of(ItemBlockGenerator.Items.dirt()); + Optional craftedItem = Optional.of(ItemBlockSupplier.Items.dirt()); String[] craftedSprite = craftedItem.isPresent() ? spriteList.getSprite(craftedItem.get().getSprite()).getSprite().split("\n") : null; diff --git a/src/main/resources/textures/items/oak_planks.ans b/src/main/resources/textures/items/oak_planks.ans new file mode 100644 index 0000000..2d70b01 --- /dev/null +++ b/src/main/resources/textures/items/oak_planks.ans @@ -0,0 +1,26 @@ +                                                   +                      ▒▒▒▒▒▒▒                      +                  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                  +              ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒              +          ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒          +      ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒      +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒░░   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒░░▒░▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░░▒▒▒▒▒▒▒▒▒▒░░░▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒▒▒▒▒▒▒▒▒▒░░░▒▒▒▒▒▒▒▒▒   +   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░▒▒▒▒▒▒▒▒▒▒░░░   +      ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒░░░░      +          ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒░░░          +              ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒▒▒              +                  ▒▒▒▒▒▒▒▒▒▒▒░░░░                  +                      ▒▒▒░░░░                      + \ No newline at end of file diff --git a/src/main/resources/textures/oak_planks.ans b/src/main/resources/textures/oak_planks.ans new file mode 100644 index 0000000..cc0c3f4 --- /dev/null +++ b/src/main/resources/textures/oak_planks.ans @@ -0,0 +1,26 @@ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ +▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ + \ No newline at end of file