From 9aa08dd68572209cb499322b027711698ddcc21d Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Thu, 13 Mar 2025 23:12:18 +0100 Subject: [PATCH] refactor: Rewritten smelting using annotations --- src/main/java/cz/jzitnik/game/Game.java | 3 +- .../cz/jzitnik/game/annotations/Fuel.java | 12 +++++ .../jzitnik/game/annotations/Smeltable.java | 12 +++++ .../java/cz/jzitnik/game/blocks/Furnace.java | 8 +-- .../jzitnik/game/entities/Dependencies.java | 2 + .../items/registry/items/BeefItem.java | 2 + .../items/registry/items/CoalBlockItem.java | 2 + .../items/registry/items/CoalItem.java | 2 + .../items/registry/items/CobblestoneItem.java | 2 + .../items/registry/items/DiamondOreItem.java | 2 + .../items/registry/items/GoldOreItem.java | 2 + .../items/registry/items/IronOreItem.java | 2 + .../items/registry/items/LavaBucketItem.java | 2 + .../items/registry/items/MuttonItem.java | 2 + .../items/registry/items/OakLogItem.java | 4 ++ .../items/registry/items/OakPlanksItem.java | 2 + .../items/registry/items/PorkchopItem.java | 2 + .../items/registry/items/StickItem.java | 2 + .../items/registry/items/WoodenAxeItem.java | 2 + .../items/registry/items/WoodenHoe.java | 2 + .../registry/items/WoodenPickaxeItem.java | 2 + .../registry/items/WoodenShovelItem.java | 2 + .../items/registry/items/WoodenSword.java | 2 + .../jzitnik/game/generation/Generation.java | 5 ++ .../services/grass/GrassGrowingLogic.java | 8 ++- .../cz/jzitnik/game/smelting/Smelting.java | 51 ++++++++++--------- .../jzitnik/game/smelting/SmeltingTest.java | 8 +-- 27 files changed, 114 insertions(+), 33 deletions(-) create mode 100644 src/main/java/cz/jzitnik/game/annotations/Fuel.java create mode 100644 src/main/java/cz/jzitnik/game/annotations/Smeltable.java diff --git a/src/main/java/cz/jzitnik/game/Game.java b/src/main/java/cz/jzitnik/game/Game.java index 380f5ce..7c3a545 100644 --- a/src/main/java/cz/jzitnik/game/Game.java +++ b/src/main/java/cz/jzitnik/game/Game.java @@ -239,7 +239,8 @@ public class Game implements Serializable { if (inventory.getItemInHand().isPresent() && inventory.getItemInHand().get().getToolVariant().isPresent() && block.getTool().isPresent() && block.getTool().get().equals(inventory.getItemInHand().get().getType()) - && toolVariants.contains(inventory.getItemInHand().get().getToolVariant().get()) && minedDirectly) { + && toolVariants.contains(inventory.getItemInHand().get().getToolVariant().get()) + && minedDirectly) { block.getDrops().forEach(inventory::addItem); } } diff --git a/src/main/java/cz/jzitnik/game/annotations/Fuel.java b/src/main/java/cz/jzitnik/game/annotations/Fuel.java new file mode 100644 index 0000000..deb7839 --- /dev/null +++ b/src/main/java/cz/jzitnik/game/annotations/Fuel.java @@ -0,0 +1,12 @@ +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 Fuel { + double value(); +} diff --git a/src/main/java/cz/jzitnik/game/annotations/Smeltable.java b/src/main/java/cz/jzitnik/game/annotations/Smeltable.java new file mode 100644 index 0000000..c49828c --- /dev/null +++ b/src/main/java/cz/jzitnik/game/annotations/Smeltable.java @@ -0,0 +1,12 @@ +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 Smeltable { + String value(); +} diff --git a/src/main/java/cz/jzitnik/game/blocks/Furnace.java b/src/main/java/cz/jzitnik/game/blocks/Furnace.java index 9fd2caa..966dbb5 100644 --- a/src/main/java/cz/jzitnik/game/blocks/Furnace.java +++ b/src/main/java/cz/jzitnik/game/blocks/Furnace.java @@ -127,7 +127,7 @@ public class Furnace implements RightClickHandler, Serializable { if (x > moveLeft && x <= moveLeft + CELL_WIDTH + BORDER_SIZE && y > 0 && y < CELL_HEIGHT && mouseEvent.getType() == MouseEvent.Type.Pressed) { InventoryItem selectedItem = game.getInventory().getSelectedItemNo(Optional.of(items)); - if (selectedItem != null && !Smelting.smeltingList.containsKey(selectedItem.getItem().getFirst().getId())) { + if (selectedItem != null && !game.getGameStates().dependencies.smelting.smeltingList.containsKey(selectedItem.getItem().getFirst().getId())) { return; } @@ -143,7 +143,7 @@ public class Furnace implements RightClickHandler, Serializable { } else if (x > moveLeft && x <= moveLeft + CELL_WIDTH + BORDER_SIZE && y > 2 * CELL_HEIGHT && y < 3 * CELL_HEIGHT && mouseEvent.getType() == MouseEvent.Type.Pressed) { InventoryItem selectedItem = game.getInventory().getSelectedItemNo(Optional.of(items)); - if (selectedItem != null && !Smelting.fuelList.containsKey(selectedItem.getItem().getFirst().getId())) { + if (selectedItem != null && !game.getGameStates().dependencies.smelting.fuelList.containsKey(selectedItem.getItem().getFirst().getId())) { return; } @@ -201,7 +201,7 @@ public class Furnace implements RightClickHandler, Serializable { } if (smelting) { - var supplier = Smelting.smeltingList.get(items[0].getItem().getFirst().getId()); + var supplier = game.getGameStates().dependencies.smelting.smeltingList.get(items[0].getItem().getFirst().getId()); if (outputItem == null) { outputItem = new InventoryItem(1, supplier.get()); } else { @@ -224,7 +224,7 @@ public class Furnace implements RightClickHandler, Serializable { Thread thread2 = new Thread(() -> { while (true) { Item fuel = items[1].getItem().getFirst(); - double smelts = Smelting.fuelList.get(fuel.getId()); + double smelts = game.getGameStates().dependencies.smelting.fuelList.get(fuel.getId()); items[1].decrease(); if (items[1].getAmount() == 0) { diff --git a/src/main/java/cz/jzitnik/game/entities/Dependencies.java b/src/main/java/cz/jzitnik/game/entities/Dependencies.java index 9a7061e..c5248fc 100644 --- a/src/main/java/cz/jzitnik/game/entities/Dependencies.java +++ b/src/main/java/cz/jzitnik/game/entities/Dependencies.java @@ -6,6 +6,7 @@ import cz.jzitnik.game.handlers.pickup.PickupHandlerProvider; import cz.jzitnik.game.handlers.place.PlaceHandler; import cz.jzitnik.game.mobs.EntityHurtAnimation; import cz.jzitnik.game.mobs.EntityKill; +import cz.jzitnik.game.smelting.Smelting; public class Dependencies { public PlaceHandler placeHandler = new PlaceHandler(); @@ -14,4 +15,5 @@ public class Dependencies { public PickupHandlerProvider pickupHandlerProvider = new PickupHandlerProvider(); public GameSaver gameSaver = new GameSaver(); public EventHandlerProvider eventHandlerProvider = new EventHandlerProvider(); + public Smelting smelting = new Smelting(); } diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/BeefItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/BeefItem.java index 344a6b2..697da22 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/BeefItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/BeefItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("steak") @ItemRegistry("beef") public class BeefItem extends Item { public BeefItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalBlockItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalBlockItem.java index 368ab6c..ea729b1 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalBlockItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/CoalBlockItem.java @@ -1,10 +1,12 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Fuel(80.0) @ItemRegistry("coal_block") public class CoalBlockItem extends Item { public CoalBlockItem() { 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 d1747ef..4e442e0 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 @@ -1,10 +1,12 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Fuel(8.0) @ItemRegistry("coal") public class CoalItem extends Item { public CoalItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/CobblestoneItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/CobblestoneItem.java index 40bb568..5f8a4d2 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/CobblestoneItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/CobblestoneItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("stone") @ItemRegistry("cobblestone") public class CobblestoneItem extends Item { public CobblestoneItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/DiamondOreItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/DiamondOreItem.java index e3c26d4..4961a9f 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/DiamondOreItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/DiamondOreItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("diamond") @ItemRegistry("diamond_ore") public class DiamondOreItem extends Item { public DiamondOreItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/GoldOreItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/GoldOreItem.java index bf8615b..d668a05 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/GoldOreItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/GoldOreItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("gold_ingot") @ItemRegistry("gold_ore") public class GoldOreItem extends Item { public GoldOreItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronOreItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronOreItem.java index ff3bed3..88dca67 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronOreItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronOreItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("iron_ingot") @ItemRegistry("iron_ore") public class IronOreItem extends Item { public IronOreItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/LavaBucketItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/LavaBucketItem.java index 3df78c0..97c5cfa 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/LavaBucketItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/LavaBucketItem.java @@ -1,10 +1,12 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Fuel(100.0) @ItemRegistry(value = "lava_bucket", block = "lava") public class LavaBucketItem extends Item { public LavaBucketItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/MuttonItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/MuttonItem.java index 8996c72..3302ec6 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/MuttonItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/MuttonItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("cooked_mutton") @ItemRegistry("mutton") public class MuttonItem extends Item { public MuttonItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakLogItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakLogItem.java index 91b2f3f..ad6658a 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakLogItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakLogItem.java @@ -1,10 +1,14 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("coal") +@Fuel(1.5) @ItemRegistry("oak_log") public class OakLogItem extends Item { public OakLogItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakPlanksItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakPlanksItem.java index 288c49e..53651da 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakPlanksItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/OakPlanksItem.java @@ -1,10 +1,12 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Fuel(1.5) @ItemRegistry("oak_planks") public class OakPlanksItem extends Item { public OakPlanksItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/PorkchopItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/PorkchopItem.java index 1d2c467..f04f316 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/PorkchopItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/PorkchopItem.java @@ -2,9 +2,11 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Smeltable("cooked_porkchop") @ItemRegistry("porkchop") public class PorkchopItem extends Item { public PorkchopItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/StickItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/StickItem.java index 5876df5..57b6d69 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/StickItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/StickItem.java @@ -1,10 +1,12 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; +@Fuel(0.5) @ItemRegistry("stick") public class StickItem extends Item { public StickItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenAxeItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenAxeItem.java index c3be839..b0c8762 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenAxeItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenAxeItem.java @@ -1,11 +1,13 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.entities.items.ToolVariant; +@Fuel(1.0) @ItemRegistry("wooden_axe") public class WoodenAxeItem extends Item { public WoodenAxeItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenHoe.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenHoe.java index 4d094a7..04e5471 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenHoe.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenHoe.java @@ -1,11 +1,13 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.entities.items.ToolVariant; +@Fuel(1.0) @ItemRegistry("wooden_hoe") public class WoodenHoe extends Item { public WoodenHoe() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenPickaxeItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenPickaxeItem.java index 5126395..c41c4f8 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenPickaxeItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenPickaxeItem.java @@ -1,11 +1,13 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.entities.items.ToolVariant; +@Fuel(1.0) @ItemRegistry("wooden_pickaxe") public class WoodenPickaxeItem extends Item { public WoodenPickaxeItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenShovelItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenShovelItem.java index 6134c40..2f25d52 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenShovelItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenShovelItem.java @@ -1,11 +1,13 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.annotations.ItemRegistry; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.entities.items.ToolVariant; +@Fuel(1.0) @ItemRegistry("wooden_shovel") public class WoodenShovelItem extends Item { public WoodenShovelItem() { diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenSword.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenSword.java index 33593ee..5050a44 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenSword.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/WoodenSword.java @@ -2,10 +2,12 @@ package cz.jzitnik.game.entities.items.registry.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Fuel; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemType; import cz.jzitnik.game.entities.items.ToolVariant; +@Fuel(1.0) @ItemRegistry("wooden_sword") public class WoodenSword extends Item { public WoodenSword() { diff --git a/src/main/java/cz/jzitnik/game/generation/Generation.java b/src/main/java/cz/jzitnik/game/generation/Generation.java index f9f48d6..a595538 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.ItemBlockSupplier; import cz.jzitnik.game.Game; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.sprites.Steve; @@ -32,6 +33,10 @@ 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/game/logic/services/grass/GrassGrowingLogic.java b/src/main/java/cz/jzitnik/game/logic/services/grass/GrassGrowingLogic.java index c33c887..0bd0733 100644 --- a/src/main/java/cz/jzitnik/game/logic/services/grass/GrassGrowingLogic.java +++ b/src/main/java/cz/jzitnik/game/logic/services/grass/GrassGrowingLogic.java @@ -30,13 +30,17 @@ public class GrassGrowingLogic implements CustomLogicInterface { List blocks = world[y][x]; if (blocks.stream().anyMatch(block -> block.getBlockId().equals("dirt"))) { // Dirt - if (world[y - 1][x].stream().allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air")) && random.nextInt(3) < 1 && isGrassBesides(world, x, y)) { + if (world[y - 1][x].stream() + .allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air")) + && random.nextInt(3) < 1 && isGrassBesides(world, x, y)) { world[y][x].removeIf(block -> block.getBlockId().equals("dirt")); world[y][x].add(ItemBlockSupplier.getBlock("grass")); } } else if (blocks.stream().anyMatch(block -> block.getBlockId().equals("grass"))) { // Grass - if (!world[y - 1][x].stream().allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air")) && random.nextInt(3) < 1) { + if (!world[y - 1][x].stream() + .allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air")) + && random.nextInt(3) < 1) { world[y][x].removeIf(block -> block.getBlockId().equals("grass")); world[y][x].add(ItemBlockSupplier.getBlock("dirt")); } diff --git a/src/main/java/cz/jzitnik/game/smelting/Smelting.java b/src/main/java/cz/jzitnik/game/smelting/Smelting.java index ca78171..b57e849 100644 --- a/src/main/java/cz/jzitnik/game/smelting/Smelting.java +++ b/src/main/java/cz/jzitnik/game/smelting/Smelting.java @@ -1,36 +1,41 @@ package cz.jzitnik.game.smelting; +import cz.jzitnik.game.annotations.Fuel; +import cz.jzitnik.game.annotations.ItemRegistry; +import cz.jzitnik.game.annotations.Smeltable; import cz.jzitnik.game.entities.items.Item; import cz.jzitnik.game.entities.items.ItemBlockSupplier; import java.util.HashMap; +import java.util.Set; import java.util.function.Supplier; +import org.reflections.Reflections; + public class Smelting { - public static final HashMap> smeltingList = new HashMap<>(); - static { - smeltingList.put("cobblestone", () -> ItemBlockSupplier.getItem("stone")); - smeltingList.put("porkchop", () -> ItemBlockSupplier.getItem("cooked_porkchop")); - smeltingList.put("mutton", () -> ItemBlockSupplier.getItem("cooked_mutton")); - smeltingList.put("iron_ore", () -> ItemBlockSupplier.getItem("iron_ingot")); - smeltingList.put("gold_ore", () -> ItemBlockSupplier.getItem("gold_ingot")); - smeltingList.put("oak_log", () -> ItemBlockSupplier.getItem("coal")); - smeltingList.put("beef", () -> ItemBlockSupplier.getItem("steak")); - smeltingList.put("diamond_ore", () -> ItemBlockSupplier.getItem("diamond")); + public final HashMap> smeltingList = new HashMap<>(); + public final HashMap fuelList = new HashMap<>(); + + public Smelting() { + register(); } - public static final HashMap fuelList = new HashMap<>(); - static { - fuelList.put("oak_log", 1.5); - fuelList.put("oak_planks", 1.5); - fuelList.put("coal", 8.0); - fuelList.put("coal_block", 80.0); - fuelList.put("wooden_sword", 1.0); - fuelList.put("wooden_pickaxe", 1.0); - fuelList.put("wooden_axe", 1.0); - fuelList.put("wooden_shovel", 1.0); - fuelList.put("wooden_hoe", 1.0); - fuelList.put("stick", 0.5); - fuelList.put("lava_bucket", 100.0); + private void register() { + Reflections reflections = new Reflections("cz.jzitnik.game.entities.items.registry.items"); + Set> handlerClasses = reflections + .getTypesAnnotatedWith(ItemRegistry.class); + + for (Class clazz : handlerClasses) { + var itemAnnotation = clazz.getAnnotation(ItemRegistry.class); + String id = itemAnnotation.value(); + if (clazz.isAnnotationPresent(Fuel.class)) { + var fuelAnnotation = clazz.getAnnotation(Fuel.class); + fuelList.put(id, fuelAnnotation.value()); + } + if (clazz.isAnnotationPresent(Smeltable.class)) { + var smeltableAnnotation = clazz.getAnnotation(Smeltable.class); + smeltingList.put(id, () -> ItemBlockSupplier.getItem(smeltableAnnotation.value())); + } + } } } diff --git a/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java b/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java index c1f4e1b..01616a2 100644 --- a/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java +++ b/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java @@ -13,16 +13,18 @@ public class SmeltingTest { @Test @DisplayName("Verity that all items in Smelting are actual items") void testAllItems() { - for (String item : Smelting.smeltingList.keySet()) { + Smelting smelting = new Smelting(); + + for (String item : smelting.smeltingList.keySet()) { assertDoesNotThrow(() -> ItemBlockSupplier.getItem(item), "Item " + item + "does not exist but is present as source in Smelting."); } - for (Supplier supplier : Smelting.smeltingList.values()) { + for (Supplier supplier : smelting.smeltingList.values()) { assertDoesNotThrow(supplier::get, "Item does not exist but is present as result in Smelting."); } - for (String fuel : Smelting.fuelList.keySet()) { + for (String fuel : smelting.fuelList.keySet()) { assertDoesNotThrow(() -> ItemBlockSupplier.getItem(fuel), "Item " + fuel + " does not exist but is present as fuel in Smelting."); }