package cz.jzitnik.game.items; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.game.Block; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ItemBlockSupplier { // This is necessary to not get infinite recursion private static class Helper { public static Item dirt(Block ref) { return new Item("dirt", "Dirt block", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_DIRT, ref); } public static Item stone(Block ref) { return new Item("stone", "Stone block", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_DIRT, ref); } 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 { public static Block dirt() { var block = new Block("dirt", SpriteLoader.SPRITES.DIRT, 1, ItemType.SHOVEL, new ArrayList<>()); block.setDrops(List.of(Helper.dirt(block))); return block; } public static Block grass() { var block = new Block("grass", SpriteLoader.SPRITES.GRASS, 1, ItemType.SHOVEL, new ArrayList<>()); block.setDrops(List.of(Items.dirt())); return block; } public static Block stone() { var block = new Block("stone", SpriteLoader.SPRITES.STONE, 15, ItemType.PICKAXE, Arrays.stream(ToolVariant.values()).toList()); block.setDrops(List.of(Helper.stone(block))); return block; } public static Block oakLog() { var block = new Block("oak_log", SpriteLoader.SPRITES.OAK_LOG, 3, ItemType.AXE, new ArrayList<>()); 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 public static class Items { public static Item dirt() { return Helper.dirt(Blocks.dirt()); } public static Item oakPlanks() { return Helper.oakPlanks(Blocks.oakPlanks()); } } }