From 0aa161361b7b7443ec00b8185a58e7fb32f68ea2 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Fri, 14 Mar 2025 10:30:40 +0100 Subject: [PATCH] feat: Implemented break on place --- src/main/java/cz/jzitnik/game/Game.java | 10 ++++++++-- .../cz/jzitnik/game/annotations/BreaksByPlace.java | 11 +++++++++++ .../items/registry/blocks/GrassBushBlock.java | 2 ++ .../java/cz/jzitnik/game/generation/Generation.java | 5 ----- .../jzitnik/tui/ScreenMovingCalculationProvider.java | 4 ---- 5 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 src/main/java/cz/jzitnik/game/annotations/BreaksByPlace.java diff --git a/src/main/java/cz/jzitnik/game/Game.java b/src/main/java/cz/jzitnik/game/Game.java index 7c3a545..f83b90b 100644 --- a/src/main/java/cz/jzitnik/game/Game.java +++ b/src/main/java/cz/jzitnik/game/Game.java @@ -10,6 +10,7 @@ import cz.jzitnik.game.handlers.place.CustomPlaceHandler; import cz.jzitnik.game.mobs.EntitySpawnProvider; import cz.jzitnik.game.sprites.Breaking; import cz.jzitnik.game.sprites.Steve; +import cz.jzitnik.game.annotations.BreaksByPlace; import cz.jzitnik.game.blocks.Chest; import cz.jzitnik.game.blocks.Furnace; import cz.jzitnik.game.ui.Window; @@ -374,11 +375,12 @@ public class Game implements Serializable { x, y)) { screenRenderer.render(this); } - ; + return; } - if (!blocks.stream().allMatch(block -> block.getBlockId().equals("air") || block.isFlowing())) { + if (!blocks.stream().allMatch(block -> block.getBlockId().equals("air") || block.isFlowing() + || block.getClass().isAnnotationPresent(BreaksByPlace.class))) { RightClickHandlerProvider.handle(x, y, this, screenRenderer); screenRenderer.render(this); return; @@ -392,7 +394,10 @@ public class Game implements Serializable { CustomPlaceHandler placeHandler = gameStates.dependencies.placeHandler.get(item.getId()); + var blocksRemove = blocks.stream().filter(block -> block.getClass().isAnnotationPresent(BreaksByPlace.class)).toList(); + if (placeHandler.place(this, x, y)) { + blocks.removeAll(blocksRemove); gameStates.dependencies.eventHandlerProvider.handlePlace(screenRenderer, this, x, y); screenRenderer.render(this); } @@ -402,6 +407,7 @@ public class Game implements Serializable { if (window != Window.WORLD) { return; } + inventory.setItemInhHandIndex(slot); screenRenderer.render(this); } diff --git a/src/main/java/cz/jzitnik/game/annotations/BreaksByPlace.java b/src/main/java/cz/jzitnik/game/annotations/BreaksByPlace.java new file mode 100644 index 0000000..4699958 --- /dev/null +++ b/src/main/java/cz/jzitnik/game/annotations/BreaksByPlace.java @@ -0,0 +1,11 @@ +package cz.jzitnik.game.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface BreaksByPlace { +} diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/GrassBushBlock.java b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/GrassBushBlock.java index a92166c..4f55337 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/GrassBushBlock.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/blocks/GrassBushBlock.java @@ -4,6 +4,7 @@ import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.BlockDropPercentage; import cz.jzitnik.game.annotations.BlockRegistry; import cz.jzitnik.game.annotations.BreakableByWater; +import cz.jzitnik.game.annotations.BreaksByPlace; import cz.jzitnik.game.annotations.BreaksFalling; import cz.jzitnik.game.annotations.CustomDrop; import cz.jzitnik.game.annotations.PlaceOnSolid; @@ -12,6 +13,7 @@ import cz.jzitnik.game.entities.Block; @PlaceOnSolid @BreakableByWater @BreaksFalling +@BreaksByPlace @CustomDrop(tool = "shears", drops = "grass_bush") @BlockDropPercentage(13) @BlockRegistry(value = "grass_bush", drops = "wheat_seeds") diff --git a/src/main/java/cz/jzitnik/game/generation/Generation.java b/src/main/java/cz/jzitnik/game/generation/Generation.java index a595538..f9f48d6 100644 --- a/src/main/java/cz/jzitnik/game/generation/Generation.java +++ b/src/main/java/cz/jzitnik/game/generation/Generation.java @@ -1,7 +1,6 @@ package cz.jzitnik.game.generation; import cz.jzitnik.game.entities.Block; -import cz.jzitnik.game.entities.items.ItemBlockSupplier; import cz.jzitnik.game.Game; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.sprites.Steve; @@ -33,10 +32,6 @@ public class Generation { // Spawn player at a valid starting point world[terrainHeight[256] - 1][256].add(steveBlock2); world[terrainHeight[256] - 2][256].add(steveBlock); - - game.getInventory().addItem(ItemBlockSupplier.getItem("furnace")); - game.getInventory().addItem(ItemBlockSupplier.getItem("coal")); - game.getInventory().addItem(ItemBlockSupplier.getItem("mutton")); } private static void initializeWorld(List[][] world) { diff --git a/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java b/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java index 52acf53..ff01083 100644 --- a/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java +++ b/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java @@ -22,7 +22,3 @@ public class ScreenMovingCalculationProvider { return new int[] { startX, endX, startY, endY }; } } - -class Something { - -}