diff --git a/src/main/java/cz/jzitnik/game/SpriteLoader.java b/src/main/java/cz/jzitnik/game/SpriteLoader.java index de42cff..e691847 100644 --- a/src/main/java/cz/jzitnik/game/SpriteLoader.java +++ b/src/main/java/cz/jzitnik/game/SpriteLoader.java @@ -28,7 +28,8 @@ public class SpriteLoader { OBSIDIAN, SAND, HAYBALE, - + GRAVEL, + // Flowers etc GRASS_BUSH, POPPY, @@ -50,7 +51,7 @@ public class SpriteLoader { IRON_ORE, GOLD_ORE, DIAMOND_ORE, - + COAL_BLOCK, IRON_BLOCK, GOLD_BLOCK, @@ -100,6 +101,7 @@ public class SpriteLoader { ITEM_OBSIDIAN, ITEM_SAND, ITEM_HAYBALE, + ITEM_GRAVEL, // Tall Flowers ITEM_LILAC, @@ -119,7 +121,7 @@ public class SpriteLoader { ITEM_IRON_INGOT, ITEM_GOLD_INGOT, DIAMOND, - + // Work Items ITEM_CRAFTING_TABLE, ITEM_CHEST, @@ -203,6 +205,7 @@ public class SpriteLoader { SPRITES_MAP.put(SPRITES.OBSIDIAN, new SimpleSprite("obsidian.ans")); SPRITES_MAP.put(SPRITES.SAND, new SimpleSprite("sand.ans")); SPRITES_MAP.put(SPRITES.HAYBALE, new SimpleSprite("haybale.ans")); + SPRITES_MAP.put(SPRITES.GRAVEL, new SimpleSprite("gravel.ans")); // Ores SPRITES_MAP.put(SPRITES.COAL_ORE, new SimpleSprite("coal_ore.ans")); @@ -283,6 +286,7 @@ public class SpriteLoader { SPRITES_MAP.put(SPRITES.ITEM_OBSIDIAN, new SimpleSprite("items/obsidian.ans")); SPRITES_MAP.put(SPRITES.ITEM_SAND, new SimpleSprite("items/sand.ans")); SPRITES_MAP.put(SPRITES.ITEM_HAYBALE, new SimpleSprite("items/haybale.ans")); + SPRITES_MAP.put(SPRITES.ITEM_GRAVEL, new SimpleSprite("items/gravel.ans")); // Tall flowers SPRITES_MAP.put(SPRITES.ITEM_LILAC, new SimpleSprite("items/lilac.ans")); diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/GravelBlock.java b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/GravelBlock.java new file mode 100644 index 0000000..51be7d5 --- /dev/null +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/GravelBlock.java @@ -0,0 +1,17 @@ +package cz.jzitnik.game.entities.items.registry.blocks.blocks; + +import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.BlockRegistry; +import cz.jzitnik.game.annotations.FallingBlock; +import cz.jzitnik.game.entities.Block; +import cz.jzitnik.game.entities.items.ItemType; + +import java.util.ArrayList; + +@FallingBlock +@BlockRegistry("gravel") +public class GravelBlock extends Block { + public GravelBlock() { + super("gravel", SpriteLoader.SPRITES.GRAVEL, 1, ItemType.SHOVEL, new ArrayList<>()); + } +} diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/OakLeavesBlock.java b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/OakLeavesBlock.java index 5d5cc00..0affae4 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/OakLeavesBlock.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/blocks/OakLeavesBlock.java @@ -2,11 +2,13 @@ package cz.jzitnik.game.entities.items.registry.blocks.blocks; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.BlockRegistry; +import cz.jzitnik.game.annotations.Flamable; import cz.jzitnik.game.entities.Block; import cz.jzitnik.game.entities.items.ItemType; import java.util.ArrayList; +@Flamable @BlockRegistry("oak_leaves") public class OakLeavesBlock extends Block { public OakLeavesBlock() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/ores/coal/CoalBlock.java b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/ores/coal/CoalBlock.java index ae9c250..de52114 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/ores/coal/CoalBlock.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/ores/coal/CoalBlock.java @@ -2,12 +2,14 @@ package cz.jzitnik.game.entities.items.registry.blocks.ores.coal; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.BlockRegistry; +import cz.jzitnik.game.annotations.Flamable; import cz.jzitnik.game.entities.Block; import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.entities.items.ToolVariant; import java.util.Arrays; +@Flamable @BlockRegistry("coal_block") public class CoalBlock extends Block { public CoalBlock() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/ChestBlock.java b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/ChestBlock.java index a440bc0..327cc16 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/ChestBlock.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/ChestBlock.java @@ -2,12 +2,14 @@ package cz.jzitnik.game.entities.items.registry.blocks.work; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.BlockRegistry; +import cz.jzitnik.game.annotations.Flamable; import cz.jzitnik.game.blocks.Chest; import cz.jzitnik.game.entities.Block; import cz.jzitnik.game.entities.items.ItemType; import java.util.ArrayList; +@Flamable @BlockRegistry("chest") public class ChestBlock extends Block { public ChestBlock() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/CraftingTableBlock.java b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/CraftingTableBlock.java index 26673dd..7a17755 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/CraftingTableBlock.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/work/CraftingTableBlock.java @@ -2,11 +2,13 @@ package cz.jzitnik.game.entities.items.registry.blocks.work; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.BlockRegistry; +import cz.jzitnik.game.annotations.Flamable; import cz.jzitnik.game.entities.Block; import cz.jzitnik.game.entities.items.ItemType; import java.util.ArrayList; +@Flamable @BlockRegistry("crafting_table") public class CraftingTableBlock extends Block { public CraftingTableBlock() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/blocks/GravelItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/blocks/GravelItem.java new file mode 100644 index 0000000..01b2444 --- /dev/null +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/blocks/GravelItem.java @@ -0,0 +1,13 @@ +package cz.jzitnik.game.entities.items.registry.items.blocks; + +import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.entities.items.Item; +import cz.jzitnik.game.entities.items.ItemType; + +@ItemRegistry("gravel") +public class GravelItem extends Item { + public GravelItem() { + super("gravel", "Gravel", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_GRAVEL); + } +} diff --git a/src/main/java/cz/jzitnik/game/generation/Generation.java b/src/main/java/cz/jzitnik/game/generation/Generation.java index 3e71350..3a8fc58 100644 --- a/src/main/java/cz/jzitnik/game/generation/Generation.java +++ b/src/main/java/cz/jzitnik/game/generation/Generation.java @@ -1,6 +1,7 @@ package cz.jzitnik.game.generation; import cz.jzitnik.game.entities.Block; +import cz.jzitnik.game.entities.items.InventoryItem; import cz.jzitnik.game.entities.items.ItemBlockSupplier; import cz.jzitnik.game.Game; import cz.jzitnik.game.SpriteLoader; @@ -34,8 +35,7 @@ public class Generation { world[terrainHeight[256] - 1][256].add(steveBlock2); world[terrainHeight[256] - 2][256].add(steveBlock); - game.getInventory().addItem(ItemBlockSupplier.getItem("flint")); - game.getInventory().addItem(ItemBlockSupplier.getItem("iron_ingot")); + game.getInventory().addItem(new InventoryItem(64, ItemBlockSupplier.getItem("gravel"))); } private static void initializeWorld(List[][] world) { diff --git a/src/main/java/cz/jzitnik/game/handlers/place/handlers/GravelMiningHandler.java b/src/main/java/cz/jzitnik/game/handlers/place/handlers/GravelMiningHandler.java new file mode 100644 index 0000000..bcbdb5c --- /dev/null +++ b/src/main/java/cz/jzitnik/game/handlers/place/handlers/GravelMiningHandler.java @@ -0,0 +1,42 @@ +package cz.jzitnik.game.handlers.place.handlers; + +import cz.jzitnik.game.annotations.PlaceHandler; +import cz.jzitnik.game.entities.Block; +import cz.jzitnik.game.Game; +import cz.jzitnik.game.entities.items.ItemBlockSupplier; +import cz.jzitnik.game.handlers.place.CustomPlaceHandler; + +import java.util.Random; + +@PlaceHandler("gravel") +public class GravelMiningHandler implements CustomPlaceHandler { + @Override + public boolean place(Game game, int x, int y) { + var blocks = game.getWorld()[y][x]; + var inventory = game.getInventory(); + + blocks.add(inventory.getItemInHand().get().getBlock().get()); + blocks.removeAll(blocks.stream().filter(Block::isFlowing).toList()); + + inventory.decreaseItemInHand(); + + return true; + } + + @Override + public boolean mine(Game game, int x, int y) { + var blocks = game.getWorld()[y][x]; + + blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air") && !i.isMob()).toList()); + + Random random = new Random(); + int percentage = random.nextInt(100); + + if (percentage < 10) { + game.getInventory().addItem(ItemBlockSupplier.getItem("flint")); + return false; + } + + return true; + } +} diff --git a/src/main/java/cz/jzitnik/game/handlers/tooluse/handlers/FlintAndSteelUse.java b/src/main/java/cz/jzitnik/game/handlers/tooluse/handlers/FlintAndSteelUse.java index 759917b..0600449 100644 --- a/src/main/java/cz/jzitnik/game/handlers/tooluse/handlers/FlintAndSteelUse.java +++ b/src/main/java/cz/jzitnik/game/handlers/tooluse/handlers/FlintAndSteelUse.java @@ -8,10 +8,10 @@ import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.handlers.tooluse.ToolUseHandler; @ToolUse(ItemType.FLINT_AND_STEEL) -public class FlintAndSteelUse implements ToolUseHandler{ +public class FlintAndSteelUse implements ToolUseHandler { - @Override - public void handle(Game game, int x, int y) { + @Override + public void handle(Game game, int x, int y) { var blocks = game.getWorld()[y][x]; for (Block block : blocks) { @@ -19,5 +19,5 @@ public class FlintAndSteelUse implements ToolUseHandler{ block.setOnFire(true); } } - } + } } diff --git a/src/main/java/cz/jzitnik/game/logic/services/falling/FallingLogic.java b/src/main/java/cz/jzitnik/game/logic/services/falling/FallingLogic.java index 61d0819..caf76e1 100644 --- a/src/main/java/cz/jzitnik/game/logic/services/falling/FallingLogic.java +++ b/src/main/java/cz/jzitnik/game/logic/services/falling/FallingLogic.java @@ -28,11 +28,7 @@ public class FallingLogic implements CustomLogicInterface { var blocks = world[y][x]; if (world[y+1][x].stream().anyMatch(block -> block.getClass().isAnnotationPresent(BreaksFalling.class))) { - var fallingBlocks = blocks.stream().filter(block -> block.getClass().isAnnotationPresent(FallingBlock.class)).toList(); - for (Block block : fallingBlocks) { - blocks.remove(block); - game.getInventory().addItem(block.getDrops()); - } + blocks.removeIf(block -> block.getClass().isAnnotationPresent(FallingBlock.class)); } if (!world[y+1][x].stream().allMatch(block -> block.isGhost())) { diff --git a/src/main/resources/textures/gravel.ans b/src/main/resources/textures/gravel.ans new file mode 100644 index 0000000..3f8e8ac --- /dev/null +++ b/src/main/resources/textures/gravel.ans @@ -0,0 +1,25 @@ +                    +                      +                  +                   +                   +                  +               +                 +                   +                 +               +                 +                  +                  +                +                 +                  +                   +                  +                  +                  +                +              +               +               diff --git a/src/main/resources/textures/items/gravel.ans b/src/main/resources/textures/items/gravel.ans new file mode 100644 index 0000000..9219653 --- /dev/null +++ b/src/main/resources/textures/items/gravel.ans @@ -0,0 +1,25 @@ +                                                  +                                             +                                        +                                    +                           +                             +                         +                       +                          +                     +                            +                          +                         +                           +                         +                           +                          +                         +                         +                            +                                 +                                     +                                         +                                              +