// ============================================================= // MINECRAFT CLONE - COMPREHENSIVE CRAFTING RECIPE SYSTEM // 100+ recipes covering all major categories // ============================================================= import { BLOCK_STONE, BLOCK_GRANITE, BLOCK_POLISHED_GRANITE, BLOCK_DIORITE, BLOCK_POLISHED_DIORITE, BLOCK_ANDESITE, BLOCK_POLISHED_ANDESITE, BLOCK_COBBLESTONE, BLOCK_GRAVEL, BLOCK_SAND, BLOCK_RED_SAND, BLOCK_CLAY, BLOCK_SANDSTONE, BLOCK_RED_SANDSTONE, BLOCK_SMOOTH_SANDSTONE, BLOCK_SMOOTH_RED_SANDSTONE, BLOCK_COAL_ORE, BLOCK_IRON_ORE, BLOCK_GOLD_ORE, BLOCK_DIAMOND_ORE, BLOCK_EMERALD_ORE, BLOCK_LAPIS_ORE, BLOCK_REDSTONE_ORE, BLOCK_COPPER_ORE, BLOCK_NETHER_GOLD_ORE, BLOCK_NETHER_QUARTZ_ORE, BLOCK_DEEPSLATE_COAL_ORE, BLOCK_DEEPSLATE_IRON_ORE, BLOCK_DEEPSLATE_GOLD_ORE, BLOCK_DEEPSLATE_DIAMOND_ORE, BLOCK_DEEPSLATE_EMERALD_ORE, BLOCK_DEEPSLATE_LAPIS_ORE, BLOCK_DEEPSLATE_REDSTONE_ORE, BLOCK_DEEPSLATE_COPPER_ORE, BLOCK_COAL_BLOCK, BLOCK_IRON_BLOCK, BLOCK_GOLD_BLOCK, BLOCK_DIAMOND_BLOCK, BLOCK_LAPIS_BLOCK, BLOCK_REDSTONE_BLOCK, BLOCK_RAW_IRON_BLOCK, BLOCK_RAW_GOLD_BLOCK, BLOCK_RAW_COPPER_BLOCK, BLOCK_OBSIDIAN, BLOCK_SLIME_BLOCK, BLOCK_OAK_LOG, BLOCK_OAK_PLANKS, BLOCK_SPRUCE_LOG, BLOCK_SPRUCE_PLANKS, BLOCK_BIRCH_LOG, BLOCK_BIRCH_PLANKS, BLOCK_JUNGLE_LOG, BLOCK_JUNGLE_PLANKS, BLOCK_DARK_OAK_LOG, BLOCK_DARK_OAK_PLANKS, BLOCK_ACACIA_LOG, BLOCK_ACACIA_PLANKS, BLOCK_MANGROVE_LOG, BLOCK_MANGROVE_PLANKS, BLOCK_CHERRY_LOG, BLOCK_CHERRY_PLANKS, BLOCK_PALE_OAK_LOG, BLOCK_PALE_OAK_PLANKS, BLOCK_WHITE_WOOL, BLOCK_ORANGE_WOOL, BLOCK_MAGENTA_WOOL, BLOCK_LIGHT_BLUE_WOOL, BLOCK_YELLOW_WOOL, BLOCK_LIME_WOOL, BLOCK_PINK_WOOL, BLOCK_GRAY_WOOL, BLOCK_LIGHT_GRAY_WOOL, BLOCK_CYAN_WOOL, BLOCK_PURPLE_WOOL, BLOCK_BLUE_WOOL, BLOCK_BROWN_WOOL, BLOCK_GREEN_WOOL, BLOCK_RED_WOOL, BLOCK_BLACK_WOOL, BLOCK_WHITE_CONCRETE_POWDER, BLOCK_ORANGE_CONCRETE_POWDER, BLOCK_MAGENTA_CONCRETE_POWDER, BLOCK_LIGHT_BLUE_CONCRETE_POWDER, BLOCK_YELLOW_CONCRETE_POWDER, BLOCK_LIME_CONCRETE_POWDER, BLOCK_PINK_CONCRETE_POWDER, BLOCK_GRAY_CONCRETE_POWDER, BLOCK_LIGHT_GRAY_CONCRETE_POWDER, BLOCK_CYAN_CONCRETE_POWDER, BLOCK_PURPLE_CONCRETE_POWDER, BLOCK_BLUE_CONCRETE_POWDER, BLOCK_BROWN_CONCRETE_POWDER, BLOCK_GREEN_CONCRETE_POWDER, BLOCK_RED_CONCRETE_POWDER, BLOCK_BLACK_CONCRETE_POWDER, BLOCK_TERRACOTTA, BLOCK_WHITE_TERRACOTTA, BLOCK_ORANGE_TERRACOTTA, BLOCK_MAGENTA_TERRACOTTA, BLOCK_LIGHT_BLUE_TERRACOTTA, BLOCK_YELLOW_TERRACOTTA, BLOCK_LIME_TERRACOTTA, BLOCK_PINK_TERRACOTTA, BLOCK_GRAY_TERRACOTTA, BLOCK_LIGHT_GRAY_TERRACOTTA, BLOCK_CYAN_TERRACOTTA, BLOCK_PURPLE_TERRACOTTA, BLOCK_BLUE_TERRACOTTA, BLOCK_BROWN_TERRACOTTA, BLOCK_GREEN_TERRACOTTA, BLOCK_RED_TERRACOTTA, BLOCK_BLACK_TERRACOTTA, BLOCK_WHITE_STAINED_GLASS, BLOCK_ORANGE_STAINED_GLASS, BLOCK_MAGENTA_STAINED_GLASS, BLOCK_LIGHT_BLUE_STAINED_GLASS, BLOCK_YELLOW_STAINED_GLASS, BLOCK_LIME_STAINED_GLASS, BLOCK_PINK_STAINED_GLASS, BLOCK_GRAY_STAINED_GLASS, BLOCK_LIGHT_GRAY_STAINED_GLASS, BLOCK_CYAN_STAINED_GLASS, BLOCK_PURPLE_STAINED_GLASS, BLOCK_BLUE_STAINED_GLASS, BLOCK_BROWN_STAINED_GLASS, BLOCK_GREEN_STAINED_GLASS, BLOCK_RED_STAINED_GLASS, BLOCK_BLACK_STAINED_GLASS, BLOCK_GLASS, BLOCK_BRICKS, BLOCK_STONE_BRICKS, BLOCK_CRACKED_STONE_BRICKS, BLOCK_NETHERRACK, BLOCK_SOUL_SAND, BLOCK_NETHER_BRICKS, BLOCK_CRACKED_NETHER_BRICKS, BLOCK_QUARTZ_BLOCK, BLOCK_CACTUS, BLOCK_SUGAR_CANE, BLOCK_WHEAT, BLOCK_RED_MUSHROOM, BLOCK_BROWN_MUSHROOM, BLOCK_CRAFTING_TABLE, BLOCK_FURNACE, BLOCK_BLAST_FURNACE, BLOCK_SMOKER, BLOCK_ANVIL, BLOCK_ENCHANTING_TABLE, BLOCK_BREWING_STAND, BLOCK_CAULDRON, BLOCK_STONECUTTER, BLOCK_SMITHING_TABLE, BLOCK_BOOKSHELF, BLOCK_REDSTONE_LAMP, BLOCK_REDSTONE_TORCH, BLOCK_TNT, BLOCK_LEVER, BLOCK_REPEATER, BLOCK_COMPARATOR, BLOCK_OBSERVER, BLOCK_PISTON, BLOCK_STICKY_PISTON, BLOCK_DISPENSER, BLOCK_DROPPER, BLOCK_HOPPER, BLOCK_RAIL, BLOCK_POWERED_RAIL, BLOCK_DETECTOR_RAIL, BLOCK_ACTIVATOR_RAIL, BLOCK_GLOWSTONE, BLOCK_JACK_O_LANTERN, BLOCK_TORCH, BLOCK_CAMPFIRE, BLOCK_SOUL_CAMPFIRE, BLOCK_BEACON, BLOCK_END_STONE, BLOCK_END_STONE_BRICKS, BLOCK_PUMPKIN, BLOCK_CARVED_PUMPKIN, BLOCK_MELON, BLOCK_HAY_BLOCK, BLOCK_IRON_BARS, BLOCK_LADDER, BLOCK_CAKE, BLOCK_IRON_DOOR, BLOCK_OAK_DOOR, BLOCK_OAK_FENCE, BLOCK_OAK_FENCE_GATE, BLOCK_SPRUCE_FENCE, BLOCK_SPRUCE_FENCE_GATE, BLOCK_BIRCH_FENCE, BLOCK_BIRCH_FENCE_GATE, BLOCK_JUNGLE_FENCE, BLOCK_JUNGLE_FENCE_GATE, BLOCK_DARK_OAK_FENCE, BLOCK_DARK_OAK_FENCE_GATE, BLOCK_ACACIA_FENCE, BLOCK_ACACIA_FENCE_GATE, BLOCK_MAGMA_BLOCK, BLOCK_MAGMA, } from '../constants'; // ============================================================= // ITEM IDs (non-block items use IDs >= 10000) // ============================================================= // Wooden tools: 10001-10005 export const ITEM_WOODEN_PICKAXE = 10001; export const ITEM_WOODEN_AXE = 10002; export const ITEM_WOODEN_SWORD = 10003; export const ITEM_WOODEN_SHOVEL = 10004; export const ITEM_WOODEN_HOE = 10005; // Stone tools: 10006-10010 export const ITEM_STONE_PICKAXE = 10006; export const ITEM_STONE_AXE = 10007; export const ITEM_STONE_SWORD = 10008; export const ITEM_STONE_SHOVEL = 10009; export const ITEM_STONE_HOE = 10010; // Iron tools: 10011-10015 export const ITEM_IRON_PICKAXE = 10011; export const ITEM_IRON_AXE = 10012; export const ITEM_IRON_SWORD = 10013; export const ITEM_IRON_SHOVEL = 10014; export const ITEM_IRON_HOE = 10015; // Gold tools: 10016-10020 export const ITEM_GOLD_PICKAXE = 10016; export const ITEM_GOLD_AXE = 10017; export const ITEM_GOLD_SWORD = 10018; export const ITEM_GOLD_SHOVEL = 10019; export const ITEM_GOLD_HOE = 10020; // Diamond tools: 10021-10025 export const ITEM_DIAMOND_PICKAXE = 10021; export const ITEM_DIAMOND_AXE = 10022; export const ITEM_DIAMOND_SWORD = 10023; export const ITEM_DIAMOND_SHOVEL = 10024; export const ITEM_DIAMOND_HOE = 10025; // Leather armor: 10031-10034 export const ITEM_LEATHER_HELMET = 10031; export const ITEM_LEATHER_CHESTPLATE = 10032; export const ITEM_LEATHER_LEGGINGS = 10033; export const ITEM_LEATHER_BOOTS = 10034; // Iron armor: 10035-10038 export const ITEM_IRON_HELMET = 10035; export const ITEM_IRON_CHESTPLATE = 10036; export const ITEM_IRON_LEGGINGS = 10037; export const ITEM_IRON_BOOTS = 10038; // Gold armor: 10039-10042 export const ITEM_GOLD_HELMET = 10039; export const ITEM_GOLD_CHESTPLATE = 10040; export const ITEM_GOLD_LEGGINGS = 10041; export const ITEM_GOLD_BOOTS = 10042; // Diamond armor: 10043-10046 export const ITEM_DIAMOND_HELMET = 10043; export const ITEM_DIAMOND_CHESTPLATE = 10044; export const ITEM_DIAMOND_LEGGINGS = 10045; export const ITEM_DIAMOND_BOOTS = 10046; // Misc items: 10050+ export const ITEM_STICK = 10050; export const ITEM_COAL = 10051; export const ITEM_IRON_INGOT = 10052; export const ITEM_GOLD_INGOT = 10053; export const ITEM_DIAMOND_GEM = 10054; export const ITEM_EMERALD = 10055; export const ITEM_LAPIS_LAZULI = 10056; export const ITEM_REDSTONE_DUST = 10057; export const ITEM_QUARTZ = 10058; export const ITEM_NETHERITE_INGOT = 10059; export const ITEM_COPPER_INGOT = 10060; // Food items: 10070+ export const ITEM_BREAD = 10070; export const ITEM_APPLE = 10071; export const ITEM_COOKED_PORKCHOP = 10072; export const ITEM_RAW_PORKCHOP = 10073; export const ITEM_COOKED_BEEF = 10074; export const ITEM_RAW_BEEF = 10075; export const ITEM_COOKED_CHICKEN = 10076; export const ITEM_RAW_CHICKEN = 10077; export const ITEM_COOKED_MUTTON = 10078; export const ITEM_RAW_MUTTON = 10079; export const ITEM_COOKED_COD = 10080; export const ITEM_RAW_COD = 10081; export const ITEM_COOKED_SALMON = 10082; export const ITEM_RAW_SALMON = 10083; export const ITEM_GOLDEN_APPLE = 10084; export const ITEM_COOKIE = 10085; export const ITEM_MUSHROOM_STEW = 10086; export const ITEM_SUGAR = 10087; export const ITEM_WHEAT_SEEDS = 10088; export const ITEM_MELON_SLICE = 10089; export const ITEM_PUMPKIN_PIE = 10090; export const ITEM_COCOA_BEANS = 10091; export const ITEM_BLAZE_ROD = 10092; export const ITEM_BLAZE_POWDER = 10093; export const ITEM_ENDER_PEARL = 10094; export const ITEM_EYE_OF_ENDER = 10095; export const ITEM_FIRE_CHARGE = 10096; export const ITEM_GUNPOWDER = 10097; export const ITEM_STRING = 10098; export const ITEM_LEATHER = 10099; export const ITEM_PAPER = 10100; export const ITEM_BOOK = 10101; export const ITEM_BOWL = 10102; export const ITEM_BUCKET = 10103; export const ITEM_WATER_BUCKET = 10104; export const ITEM_LAVA_BUCKET = 10105; export const ITEM_MILK_BUCKET = 10106; export const ITEM_PAINTING = 10107; export const ITEM_ITEM_FRAME = 10108; export const ITEM_GLOWSTONE_DUST = 10109; export const ITEM_FLINT = 10110; export const ITEM_FLINT_AND_STEEL = 10111; export const ITEM_COMPASS = 10112; export const ITEM_CLOCK = 10113; export const ITEM_MAP = 10114; export const ITEM_SHEARS = 10115; export const ITEM_BONE = 10116; export const ITEM_BONE_MEAL = 10117; export const ITEM_ARROW = 10118; export const ITEM_BOW = 10119; export const ITEM_SHIELD = 10120; export const ITEM_NAME_TAG = 10121; export const ITEM_SADDLE = 10122; export const ITEM_LEAD = 10123; export const ITEM_MINECART = 10124; export const ITEM_CHEST_MINECART = 10125; export const ITEM_TNT_MINECART = 10126; export const ITEM_HOPPER_MINECART = 10127; export const ITEM_BOAT = 10128; export const ITEM_IRON_NUGGET = 10129; export const ITEM_GOLD_NUGGET = 10130; export const ITEM_NETHER_BRICK = 10131; export const ITEM_NETHER_STAR = 10132; export const ITEM_CLAY_BALL = 10133; export const ITEM_BRICK_ITEM = 10134; export const ITEM_CHARCOAL = 10135; export const ITEM_DANDELION_YELLOW = 10136; export const ITEM_ROSE_RED = 10137; export const ITEM_LAPIS_DYE = 10138; export const ITEM_CACTUS_GREEN = 10139; export const ITEM_INK_SAC = 10140; export const ITEM_COCOA_DYE = 10141; export const ITEM_BONE_MEAL_DYE = 10142; export const ITEM_EGG = 10150; // Missing block IDs that recipes need (not in constants yet) // These will be defined here as virtual block IDs for recipe purposes const BLOCK_CHEST = 600; const BLOCK_GLASS_PANE = 601; const BLOCK_OAK_SLAB = 602; const BLOCK_COBBLESTONE_SLAB = 603; const BLOCK_STONE_SLAB = 604; const BLOCK_STONE_BRICK_SLAB = 605; const BLOCK_BRICK_SLAB = 606; const BLOCK_OAK_STAIRS = 607; const BLOCK_COBBLESTONE_STAIRS = 608; const BLOCK_STONE_STAIRS = 609; const BLOCK_STONE_BRICK_STAIRS = 610; const BLOCK_BRICK_STAIRS = 611; const BLOCK_COBBLESTONE_WALL = 612; const BLOCK_STONE_BRICK_WALL = 613; const BLOCK_BRICK_WALL = 614; const BLOCK_WHITE_BANNER = 615; const BLOCK_WHITE_BED = 616; const BLOCK_BLACK_BED = 617; const BLOCK_RED_BED = 618; const BLOCK_BLUE_BED = 619; const BLOCK_GREEN_BED = 620; const BLOCK_YELLOW_BED = 621; const BLOCK_BROWN_BED = 622; const BLOCK_CYAN_BED = 623; const BLOCK_LIGHT_GRAY_BED = 624; const BLOCK_GRAY_BED = 625; const BLOCK_PINK_BED = 626; const BLOCK_LIME_BED = 627; const BLOCK_PURPLE_BED = 628; const BLOCK_MAGENTA_BED = 629; const BLOCK_LIGHT_BLUE_BED = 630; const BLOCK_ORANGE_BED = 631; const BLOCK_SPRUCE_PLANK_SLAB = 632; const BLOCK_BIRCH_PLANK_SLAB = 633; const BLOCK_JUNGLE_PLANK_SLAB = 634; const BLOCK_DARK_OAK_PLANK_SLAB = 635; const BLOCK_ACACIA_PLANK_SLAB = 636; const BLOCK_SPRUCE_STAIRS = 637; const BLOCK_BIRCH_STAIRS = 638; const BLOCK_JUNGLE_STAIRS = 639; const BLOCK_DARK_OAK_STAIRS = 640; const BLOCK_ACACIA_STAIRS = 641; const BLOCK_POLISHED_GRANITE_SLAB = 642; const BLOCK_POLISHED_DIORITE_SLAB = 643; const BLOCK_POLISHED_ANDESITE_SLAB = 644; const BLOCK_SANDSTONE_SLAB = 645; const BLOCK_RED_SANDSTONE_SLAB = 646; const BLOCK_NETHER_BRICK_SLAB = 647; const BLOCK_QUARTZ_SLAB = 648; const BLOCK_POLISHED_GRANITE_STAIRS = 649; const BLOCK_POLISHED_DIORITE_STAIRS = 650; const BLOCK_POLISHED_ANDESITE_STAIRS = 651; const BLOCK_SANDSTONE_STAIRS = 652; const BLOCK_RED_SANDSTONE_STAIRS = 653; const BLOCK_NETHER_BRICK_STAIRS = 654; const BLOCK_QUARTZ_STAIRS = 655; const BLOCK_NETHER_BRICK_WALL = 656; const BLOCK_ENDER_CHEST = 657; const BLOCK_TRAPPED_CHEST = 658; const BLOCK_LOOM_BLOCK = 659; // ============================================================= // TYPE DEFINITIONS // ============================================================= export interface CraftingRecipe { id: string; name: string; pattern: (number | null)[][]; // 3x3 grid of block/item IDs, null = empty result: { id: number; count: number }; type: 'crafting_table' | 'stonecutter' | 'furnace' | 'smithing'; } export interface SmeltingRecipe { input: number; output: number; cookTime: number; // in ticks (20 ticks = 1 second) xp: number; } // ============================================================= // CRAFTING RECIPES // ============================================================= const P = BLOCK_OAK_PLANKS; // shorthand for recipes using oak planks const ST = BLOCK_STONE; // shorthand for stone const CO = BLOCK_COBBLESTONE; // shorthand for cobblestone const IR = ITEM_IRON_INGOT; // shorthand for iron ingot const GO = ITEM_GOLD_INGOT; // shorthand for gold ingot const DI = ITEM_DIAMOND_GEM; // shorthand for diamond const SK = ITEM_STICK; // shorthand for stick const CL = ITEM_COAL; // shorthand for coal const WO = BLOCK_WHITE_WOOL; // shorthand for white wool export const craftingRecipes: CraftingRecipe[] = [ // ============================================================= // BASIC CRAFTING (1-15) // ============================================================= { id: 'oak_planks', name: 'Oak Planks', pattern: [[BLOCK_OAK_LOG, null, null], [null, null, null], [null, null, null]], result: { id: BLOCK_OAK_PLANKS, count: 4 }, type: 'crafting_table', }, { id: 'spruce_planks', name: 'Spruce Planks', pattern: [[BLOCK_SPRUCE_LOG, null, null], [null, null, null], [null, null, null]], result: { id: BLOCK_SPRUCE_PLANKS, count: 4 }, type: 'crafting_table', }, { id: 'birch_planks', name: 'Birch Planks', pattern: [[BLOCK_BIRCH_LOG, null, null], [null, null, null], [null, null, null]], result: { id: BLOCK_BIRCH_PLANKS, count: 4 }, type: 'crafting_table', }, { id: 'jungle_planks', name: 'Jungle Planks', pattern: [[BLOCK_JUNGLE_LOG, null, null], [null, null, null], [null, null, null]], result: { id: BLOCK_JUNGLE_PLANKS, count: 4 }, type: 'crafting_table', }, { id: 'dark_oak_planks', name: 'Dark Oak Planks', pattern: [[BLOCK_DARK_OAK_LOG, null, null], [null, null, null], [null, null, null]], result: { id: BLOCK_DARK_OAK_PLANKS, count: 4 }, type: 'crafting_table', }, { id: 'acacia_planks', name: 'Acacia Planks', pattern: [[BLOCK_ACACIA_LOG, null, null], [null, null, null], [null, null, null]], result: { id: BLOCK_ACACIA_PLANKS, count: 4 }, type: 'crafting_table', }, { id: 'sticks', name: 'Sticks', pattern: [ [P, null, null], [P, null, null], [null, null, null], ], result: { id: ITEM_STICK, count: 4 }, type: 'crafting_table', }, { id: 'crafting_table', name: 'Crafting Table', pattern: [ [P, P, null], [P, P, null], [null, null, null], ], result: { id: BLOCK_CRAFTING_TABLE, count: 1 }, type: 'crafting_table', }, { id: 'chest', name: 'Chest', pattern: [ [P, P, P], [P, null, P], [P, P, P], ], result: { id: BLOCK_CHEST, count: 1 }, type: 'crafting_table', }, { id: 'furnace', name: 'Furnace', pattern: [ [CO, CO, CO], [CO, null, CO], [CO, CO, CO], ], result: { id: BLOCK_FURNACE, count: 1 }, type: 'crafting_table', }, { id: 'stone_bricks', name: 'Stone Bricks', pattern: [ [ST, ST, null], [ST, ST, null], [null, null, null], ], result: { id: BLOCK_STONE_BRICKS, count: 4 }, type: 'crafting_table', }, { id: 'polished_granite', name: 'Polished Granite', pattern: [ [BLOCK_GRANITE, BLOCK_GRANITE, null], [BLOCK_GRANITE, BLOCK_GRANITE, null], [null, null, null], ], result: { id: BLOCK_POLISHED_GRANITE, count: 4 }, type: 'crafting_table', }, { id: 'polished_diorite', name: 'Polished Diorite', pattern: [ [BLOCK_DIORITE, BLOCK_DIORITE, null], [BLOCK_DIORITE, BLOCK_DIORITE, null], [null, null, null], ], result: { id: BLOCK_POLISHED_DIORITE, count: 4 }, type: 'crafting_table', }, { id: 'polished_andesite', name: 'Polished Andesite', pattern: [ [BLOCK_ANDESITE, BLOCK_ANDESITE, null], [BLOCK_ANDESITE, BLOCK_ANDESITE, null], [null, null, null], ], result: { id: BLOCK_POLISHED_ANDESITE, count: 4 }, type: 'crafting_table', }, { id: 'sandstone', name: 'Sandstone', pattern: [ [BLOCK_SAND, BLOCK_SAND, null], [BLOCK_SAND, BLOCK_SAND, null], [null, null, null], ], result: { id: BLOCK_SANDSTONE, count: 4 }, type: 'crafting_table', }, // ============================================================= // WOODEN TOOLS (16-20) // ============================================================= { id: 'wooden_pickaxe', name: 'Wooden Pickaxe', pattern: [ [P, P, P], [null, SK, null], [null, SK, null], ], result: { id: ITEM_WOODEN_PICKAXE, count: 1 }, type: 'crafting_table', }, { id: 'wooden_axe', name: 'Wooden Axe', pattern: [ [P, P, null], [P, SK, null], [null, SK, null], ], result: { id: ITEM_WOODEN_AXE, count: 1 }, type: 'crafting_table', }, { id: 'wooden_sword', name: 'Wooden Sword', pattern: [ [P, null, null], [P, null, null], [SK, null, null], ], result: { id: ITEM_WOODEN_SWORD, count: 1 }, type: 'crafting_table', }, { id: 'wooden_shovel', name: 'Wooden Shovel', pattern: [ [P, null, null], [SK, null, null], [SK, null, null], ], result: { id: ITEM_WOODEN_SHOVEL, count: 1 }, type: 'crafting_table', }, { id: 'wooden_hoe', name: 'Wooden Hoe', pattern: [ [P, P, null], [null, SK, null], [null, SK, null], ], result: { id: ITEM_WOODEN_HOE, count: 1 }, type: 'crafting_table', }, // ============================================================= // STONE TOOLS (21-25) // ============================================================= { id: 'stone_pickaxe', name: 'Stone Pickaxe', pattern: [ [CO, CO, CO], [null, SK, null], [null, SK, null], ], result: { id: ITEM_STONE_PICKAXE, count: 1 }, type: 'crafting_table', }, { id: 'stone_axe', name: 'Stone Axe', pattern: [ [CO, CO, null], [CO, SK, null], [null, SK, null], ], result: { id: ITEM_STONE_AXE, count: 1 }, type: 'crafting_table', }, { id: 'stone_sword', name: 'Stone Sword', pattern: [ [CO, null, null], [CO, null, null], [SK, null, null], ], result: { id: ITEM_STONE_SWORD, count: 1 }, type: 'crafting_table', }, { id: 'stone_shovel', name: 'Stone Shovel', pattern: [ [CO, null, null], [SK, null, null], [SK, null, null], ], result: { id: ITEM_STONE_SHOVEL, count: 1 }, type: 'crafting_table', }, { id: 'stone_hoe', name: 'Stone Hoe', pattern: [ [CO, CO, null], [null, SK, null], [null, SK, null], ], result: { id: ITEM_STONE_HOE, count: 1 }, type: 'crafting_table', }, // ============================================================= // IRON TOOLS (26-30) // ============================================================= { id: 'iron_pickaxe', name: 'Iron Pickaxe', pattern: [ [IR, IR, IR], [null, SK, null], [null, SK, null], ], result: { id: ITEM_IRON_PICKAXE, count: 1 }, type: 'crafting_table', }, { id: 'iron_axe', name: 'Iron Axe', pattern: [ [IR, IR, null], [IR, SK, null], [null, SK, null], ], result: { id: ITEM_IRON_AXE, count: 1 }, type: 'crafting_table', }, { id: 'iron_sword', name: 'Iron Sword', pattern: [ [IR, null, null], [IR, null, null], [SK, null, null], ], result: { id: ITEM_IRON_SWORD, count: 1 }, type: 'crafting_table', }, { id: 'iron_shovel', name: 'Iron Shovel', pattern: [ [IR, null, null], [SK, null, null], [SK, null, null], ], result: { id: ITEM_IRON_SHOVEL, count: 1 }, type: 'crafting_table', }, { id: 'iron_hoe', name: 'Iron Hoe', pattern: [ [IR, IR, null], [null, SK, null], [null, SK, null], ], result: { id: ITEM_IRON_HOE, count: 1 }, type: 'crafting_table', }, // ============================================================= // GOLD TOOLS (31-35) // ============================================================= { id: 'gold_pickaxe', name: 'Gold Pickaxe', pattern: [ [GO, GO, GO], [null, SK, null], [null, SK, null], ], result: { id: ITEM_GOLD_PICKAXE, count: 1 }, type: 'crafting_table', }, { id: 'gold_axe', name: 'Gold Axe', pattern: [ [GO, GO, null], [GO, SK, null], [null, SK, null], ], result: { id: ITEM_GOLD_AXE, count: 1 }, type: 'crafting_table', }, { id: 'gold_sword', name: 'Gold Sword', pattern: [ [GO, null, null], [GO, null, null], [SK, null, null], ], result: { id: ITEM_GOLD_SWORD, count: 1 }, type: 'crafting_table', }, { id: 'gold_shovel', name: 'Gold Shovel', pattern: [ [GO, null, null], [SK, null, null], [SK, null, null], ], result: { id: ITEM_GOLD_SHOVEL, count: 1 }, type: 'crafting_table', }, { id: 'gold_hoe', name: 'Gold Hoe', pattern: [ [GO, GO, null], [null, SK, null], [null, SK, null], ], result: { id: ITEM_GOLD_HOE, count: 1 }, type: 'crafting_table', }, // ============================================================= // DIAMOND TOOLS (36-40) // ============================================================= { id: 'diamond_pickaxe', name: 'Diamond Pickaxe', pattern: [ [DI, DI, DI], [null, SK, null], [null, SK, null], ], result: { id: ITEM_DIAMOND_PICKAXE, count: 1 }, type: 'crafting_table', }, { id: 'diamond_axe', name: 'Diamond Axe', pattern: [ [DI, DI, null], [DI, SK, null], [null, SK, null], ], result: { id: ITEM_DIAMOND_AXE, count: 1 }, type: 'crafting_table', }, { id: 'diamond_sword', name: 'Diamond Sword', pattern: [ [DI, null, null], [DI, null, null], [SK, null, null], ], result: { id: ITEM_DIAMOND_SWORD, count: 1 }, type: 'crafting_table', }, { id: 'diamond_shovel', name: 'Diamond Shovel', pattern: [ [DI, null, null], [SK, null, null], [SK, null, null], ], result: { id: ITEM_DIAMOND_SHOVEL, count: 1 }, type: 'crafting_table', }, { id: 'diamond_hoe', name: 'Diamond Hoe', pattern: [ [DI, DI, null], [null, SK, null], [null, SK, null], ], result: { id: ITEM_DIAMOND_HOE, count: 1 }, type: 'crafting_table', }, // ============================================================= // LEATHER ARMOR (41-44) // ============================================================= { id: 'leather_helmet', name: 'Leather Helmet', pattern: [ [ITEM_LEATHER, ITEM_LEATHER, ITEM_LEATHER], [ITEM_LEATHER, null, ITEM_LEATHER], [null, null, null], ], result: { id: ITEM_LEATHER_HELMET, count: 1 }, type: 'crafting_table', }, { id: 'leather_chestplate', name: 'Leather Chestplate', pattern: [ [ITEM_LEATHER, null, ITEM_LEATHER], [ITEM_LEATHER, ITEM_LEATHER, ITEM_LEATHER], [ITEM_LEATHER, ITEM_LEATHER, ITEM_LEATHER], ], result: { id: ITEM_LEATHER_CHESTPLATE, count: 1 }, type: 'crafting_table', }, { id: 'leather_leggings', name: 'Leather Leggings', pattern: [ [ITEM_LEATHER, ITEM_LEATHER, ITEM_LEATHER], [ITEM_LEATHER, null, ITEM_LEATHER], [ITEM_LEATHER, null, ITEM_LEATHER], ], result: { id: ITEM_LEATHER_LEGGINGS, count: 1 }, type: 'crafting_table', }, { id: 'leather_boots', name: 'Leather Boots', pattern: [ [ITEM_LEATHER, null, ITEM_LEATHER], [ITEM_LEATHER, null, ITEM_LEATHER], [null, null, null], ], result: { id: ITEM_LEATHER_BOOTS, count: 1 }, type: 'crafting_table', }, // ============================================================= // IRON ARMOR (45-48) // ============================================================= { id: 'iron_helmet', name: 'Iron Helmet', pattern: [ [IR, IR, IR], [IR, null, IR], [null, null, null], ], result: { id: ITEM_IRON_HELMET, count: 1 }, type: 'crafting_table', }, { id: 'iron_chestplate', name: 'Iron Chestplate', pattern: [ [IR, null, IR], [IR, IR, IR], [IR, IR, IR], ], result: { id: ITEM_IRON_CHESTPLATE, count: 1 }, type: 'crafting_table', }, { id: 'iron_leggings', name: 'Iron Leggings', pattern: [ [IR, IR, IR], [IR, null, IR], [IR, null, IR], ], result: { id: ITEM_IRON_LEGGINGS, count: 1 }, type: 'crafting_table', }, { id: 'iron_boots', name: 'Iron Boots', pattern: [ [IR, null, IR], [IR, null, IR], [null, null, null], ], result: { id: ITEM_IRON_BOOTS, count: 1 }, type: 'crafting_table', }, // ============================================================= // GOLD ARMOR (49-52) // ============================================================= { id: 'gold_helmet', name: 'Gold Helmet', pattern: [ [GO, GO, GO], [GO, null, GO], [null, null, null], ], result: { id: ITEM_GOLD_HELMET, count: 1 }, type: 'crafting_table', }, { id: 'gold_chestplate', name: 'Gold Chestplate', pattern: [ [GO, null, GO], [GO, GO, GO], [GO, GO, GO], ], result: { id: ITEM_GOLD_CHESTPLATE, count: 1 }, type: 'crafting_table', }, { id: 'gold_leggings', name: 'Gold Leggings', pattern: [ [GO, GO, GO], [GO, null, GO], [GO, null, GO], ], result: { id: ITEM_GOLD_LEGGINGS, count: 1 }, type: 'crafting_table', }, { id: 'gold_boots', name: 'Gold Boots', pattern: [ [GO, null, GO], [GO, null, GO], [null, null, null], ], result: { id: ITEM_GOLD_BOOTS, count: 1 }, type: 'crafting_table', }, // ============================================================= // DIAMOND ARMOR (53-56) // ============================================================= { id: 'diamond_helmet', name: 'Diamond Helmet', pattern: [ [DI, DI, DI], [DI, null, DI], [null, null, null], ], result: { id: ITEM_DIAMOND_HELMET, count: 1 }, type: 'crafting_table', }, { id: 'diamond_chestplate', name: 'Diamond Chestplate', pattern: [ [DI, null, DI], [DI, DI, DI], [DI, DI, DI], ], result: { id: ITEM_DIAMOND_CHESTPLATE, count: 1 }, type: 'crafting_table', }, { id: 'diamond_leggings', name: 'Diamond Leggings', pattern: [ [DI, DI, DI], [DI, null, DI], [DI, null, DI], ], result: { id: ITEM_DIAMOND_LEGGINGS, count: 1 }, type: 'crafting_table', }, { id: 'diamond_boots', name: 'Diamond Boots', pattern: [ [DI, null, DI], [DI, null, DI], [null, null, null], ], result: { id: ITEM_DIAMOND_BOOTS, count: 1 }, type: 'crafting_table', }, // ============================================================= // BUILDING BLOCKS - SLABS (57-68) // ============================================================= { id: 'oak_slab', name: 'Oak Slab', pattern: [ [null, null, null], [null, null, null], [P, P, P], ], result: { id: BLOCK_OAK_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'cobblestone_slab', name: 'Cobblestone Slab', pattern: [ [null, null, null], [null, null, null], [CO, CO, CO], ], result: { id: BLOCK_COBBLESTONE_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'stone_slab', name: 'Stone Slab', pattern: [ [null, null, null], [null, null, null], [ST, ST, ST], ], result: { id: BLOCK_STONE_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'stone_brick_slab', name: 'Stone Brick Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS], ], result: { id: BLOCK_STONE_BRICK_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'brick_slab', name: 'Brick Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_BRICKS, BLOCK_BRICKS, BLOCK_BRICKS], ], result: { id: BLOCK_BRICK_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'sandstone_slab', name: 'Sandstone Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_SANDSTONE, BLOCK_SANDSTONE, BLOCK_SANDSTONE], ], result: { id: BLOCK_SANDSTONE_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'nether_brick_slab', name: 'Nether Brick Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_NETHER_BRICKS, BLOCK_NETHER_BRICKS, BLOCK_NETHER_BRICKS], ], result: { id: BLOCK_NETHER_BRICK_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'quartz_slab', name: 'Quartz Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_QUARTZ_BLOCK, BLOCK_QUARTZ_BLOCK, BLOCK_QUARTZ_BLOCK], ], result: { id: BLOCK_QUARTZ_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'polished_granite_slab', name: 'Polished Granite Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_POLISHED_GRANITE, BLOCK_POLISHED_GRANITE, BLOCK_POLISHED_GRANITE], ], result: { id: BLOCK_POLISHED_GRANITE_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'polished_diorite_slab', name: 'Polished Diorite Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_POLISHED_DIORITE, BLOCK_POLISHED_DIORITE, BLOCK_POLISHED_DIORITE], ], result: { id: BLOCK_POLISHED_DIORITE_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'polished_andesite_slab', name: 'Polished Andesite Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_POLISHED_ANDESITE, BLOCK_POLISHED_ANDESITE, BLOCK_POLISHED_ANDESITE], ], result: { id: BLOCK_POLISHED_ANDESITE_SLAB, count: 6 }, type: 'crafting_table', }, { id: 'red_sandstone_slab', name: 'Red Sandstone Slab', pattern: [ [null, null, null], [null, null, null], [BLOCK_RED_SANDSTONE, BLOCK_RED_SANDSTONE, BLOCK_RED_SANDSTONE], ], result: { id: BLOCK_RED_SANDSTONE_SLAB, count: 6 }, type: 'crafting_table', }, // ============================================================= // BUILDING BLOCKS - STAIRS (69-78) // ============================================================= { id: 'oak_stairs', name: 'Oak Stairs', pattern: [ [P, null, null], [P, P, null], [P, P, P], ], result: { id: BLOCK_OAK_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'cobblestone_stairs', name: 'Cobblestone Stairs', pattern: [ [CO, null, null], [CO, CO, null], [CO, CO, CO], ], result: { id: BLOCK_COBBLESTONE_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'stone_stairs', name: 'Stone Stairs', pattern: [ [ST, null, null], [ST, ST, null], [ST, ST, ST], ], result: { id: BLOCK_STONE_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'stone_brick_stairs', name: 'Stone Brick Stairs', pattern: [ [BLOCK_STONE_BRICKS, null, null], [BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS, null], [BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS], ], result: { id: BLOCK_STONE_BRICK_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'brick_stairs', name: 'Brick Stairs', pattern: [ [BLOCK_BRICKS, null, null], [BLOCK_BRICKS, BLOCK_BRICKS, null], [BLOCK_BRICKS, BLOCK_BRICKS, BLOCK_BRICKS], ], result: { id: BLOCK_BRICK_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'sandstone_stairs', name: 'Sandstone Stairs', pattern: [ [BLOCK_SANDSTONE, null, null], [BLOCK_SANDSTONE, BLOCK_SANDSTONE, null], [BLOCK_SANDSTONE, BLOCK_SANDSTONE, BLOCK_SANDSTONE], ], result: { id: BLOCK_SANDSTONE_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'nether_brick_stairs', name: 'Nether Brick Stairs', pattern: [ [BLOCK_NETHER_BRICKS, null, null], [BLOCK_NETHER_BRICKS, BLOCK_NETHER_BRICKS, null], [BLOCK_NETHER_BRICKS, BLOCK_NETHER_BRICKS, BLOCK_NETHER_BRICKS], ], result: { id: BLOCK_NETHER_BRICK_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'quartz_stairs', name: 'Quartz Stairs', pattern: [ [BLOCK_QUARTZ_BLOCK, null, null], [BLOCK_QUARTZ_BLOCK, BLOCK_QUARTZ_BLOCK, null], [BLOCK_QUARTZ_BLOCK, BLOCK_QUARTZ_BLOCK, BLOCK_QUARTZ_BLOCK], ], result: { id: BLOCK_QUARTZ_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'polished_granite_stairs', name: 'Polished Granite Stairs', pattern: [ [BLOCK_POLISHED_GRANITE, null, null], [BLOCK_POLISHED_GRANITE, BLOCK_POLISHED_GRANITE, null], [BLOCK_POLISHED_GRANITE, BLOCK_POLISHED_GRANITE, BLOCK_POLISHED_GRANITE], ], result: { id: BLOCK_POLISHED_GRANITE_STAIRS, count: 4 }, type: 'crafting_table', }, { id: 'red_sandstone_stairs', name: 'Red Sandstone Stairs', pattern: [ [BLOCK_RED_SANDSTONE, null, null], [BLOCK_RED_SANDSTONE, BLOCK_RED_SANDSTONE, null], [BLOCK_RED_SANDSTONE, BLOCK_RED_SANDSTONE, BLOCK_RED_SANDSTONE], ], result: { id: BLOCK_RED_SANDSTONE_STAIRS, count: 4 }, type: 'crafting_table', }, // ============================================================= // BUILDING BLOCKS - WALLS (80-82) // ============================================================= { id: 'cobblestone_wall', name: 'Cobblestone Wall', pattern: [ [CO, CO, CO], [CO, CO, CO], [null, null, null], ], result: { id: BLOCK_COBBLESTONE_WALL, count: 6 }, type: 'crafting_table', }, { id: 'stone_brick_wall', name: 'Stone Brick Wall', pattern: [ [BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS], [BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS, BLOCK_STONE_BRICKS], [null, null, null], ], result: { id: BLOCK_STONE_BRICK_WALL, count: 6 }, type: 'crafting_table', }, { id: 'brick_wall', name: 'Brick Wall', pattern: [ [BLOCK_BRICKS, BLOCK_BRICKS, BLOCK_BRICKS], [BLOCK_BRICKS, BLOCK_BRICKS, BLOCK_BRICKS], [null, null, null], ], result: { id: BLOCK_BRICK_WALL, count: 6 }, type: 'crafting_table', }, // ============================================================= // BUILDING BLOCKS - FENCES & DOORS (83-90) // ============================================================= { id: 'oak_fence', name: 'Oak Fence', pattern: [ [P, SK, P], [P, SK, P], [null, null, null], ], result: { id: BLOCK_OAK_FENCE, count: 3 }, type: 'crafting_table', }, { id: 'oak_fence_gate', name: 'Oak Fence Gate', pattern: [ [SK, P, SK], [SK, P, SK], [null, null, null], ], result: { id: BLOCK_OAK_FENCE_GATE, count: 1 }, type: 'crafting_table', }, { id: 'spruce_fence', name: 'Spruce Fence', pattern: [ [BLOCK_SPRUCE_PLANKS, SK, BLOCK_SPRUCE_PLANKS], [BLOCK_SPRUCE_PLANKS, SK, BLOCK_SPRUCE_PLANKS], [null, null, null], ], result: { id: BLOCK_SPRUCE_FENCE, count: 3 }, type: 'crafting_table', }, { id: 'birch_fence', name: 'Birch Fence', pattern: [ [BLOCK_BIRCH_PLANKS, SK, BLOCK_BIRCH_PLANKS], [BLOCK_BIRCH_PLANKS, SK, BLOCK_BIRCH_PLANKS], [null, null, null], ], result: { id: BLOCK_BIRCH_FENCE, count: 3 }, type: 'crafting_table', }, { id: 'jungle_fence', name: 'Jungle Fence', pattern: [ [BLOCK_JUNGLE_PLANKS, SK, BLOCK_JUNGLE_PLANKS], [BLOCK_JUNGLE_PLANKS, SK, BLOCK_JUNGLE_PLANKS], [null, null, null], ], result: { id: BLOCK_JUNGLE_FENCE, count: 3 }, type: 'crafting_table', }, { id: 'dark_oak_fence', name: 'Dark Oak Fence', pattern: [ [BLOCK_DARK_OAK_PLANKS, SK, BLOCK_DARK_OAK_PLANKS], [BLOCK_DARK_OAK_PLANKS, SK, BLOCK_DARK_OAK_PLANKS], [null, null, null], ], result: { id: BLOCK_DARK_OAK_FENCE, count: 3 }, type: 'crafting_table', }, { id: 'acacia_fence', name: 'Acacia Fence', pattern: [ [BLOCK_ACACIA_PLANKS, SK, BLOCK_ACACIA_PLANKS], [BLOCK_ACACIA_PLANKS, SK, BLOCK_ACACIA_PLANKS], [null, null, null], ], result: { id: BLOCK_ACACIA_FENCE, count: 3 }, type: 'crafting_table', }, { id: 'oak_door', name: 'Oak Door', pattern: [ [P, P, null], [P, P, null], [P, P, null], ], result: { id: BLOCK_OAK_DOOR, count: 3 }, type: 'crafting_table', }, { id: 'iron_door', name: 'Iron Door', pattern: [ [IR, IR, null], [IR, IR, null], [IR, IR, null], ], result: { id: BLOCK_IRON_DOOR, count: 3 }, type: 'crafting_table', }, // ============================================================= // REDSTONE (91-106) // ============================================================= { id: 'redstone_torch', name: 'Redstone Torch', pattern: [ [ITEM_REDSTONE_DUST, null, null], [SK, null, null], [null, null, null], ], result: { id: BLOCK_REDSTONE_TORCH, count: 1 }, type: 'crafting_table', }, { id: 'repeater', name: 'Repeater', pattern: [ [null, BLOCK_REDSTONE_TORCH, null], [ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST], [ST, ST, ST], ], result: { id: BLOCK_REPEATER, count: 1 }, type: 'crafting_table', }, { id: 'comparator', name: 'Comparator', pattern: [ [null, BLOCK_REDSTONE_TORCH, null], [BLOCK_REDSTONE_TORCH, ITEM_REDSTONE_DUST, BLOCK_REDSTONE_TORCH], [ST, ST, ST], ], result: { id: BLOCK_COMPARATOR, count: 1 }, type: 'crafting_table', }, { id: 'piston', name: 'Piston', pattern: [ [P, P, P], [CO, IR, CO], [CO, ITEM_REDSTONE_DUST, CO], ], result: { id: BLOCK_PISTON, count: 1 }, type: 'crafting_table', }, { id: 'sticky_piston', name: 'Sticky Piston', pattern: [ [BLOCK_SLIME_BLOCK, null, null], [BLOCK_PISTON, null, null], [null, null, null], ], result: { id: BLOCK_STICKY_PISTON, count: 1 }, type: 'crafting_table', }, { id: 'dispenser', name: 'Dispenser', pattern: [ [CO, CO, CO], [CO, null, CO], [CO, BLOCK_REDSTONE_TORCH, CO], ], result: { id: BLOCK_DISPENSER, count: 1 }, type: 'crafting_table', }, { id: 'dropper', name: 'Dropper', pattern: [ [CO, CO, CO], [CO, null, CO], [CO, CO, CO], ], result: { id: BLOCK_DROPPER, count: 1 }, type: 'crafting_table', }, { id: 'observer', name: 'Observer', pattern: [ [CO, CO, CO], [ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST], [ST, ST, ST], ], result: { id: BLOCK_OBSERVER, count: 1 }, type: 'crafting_table', }, { id: 'hopper', name: 'Hopper', pattern: [ [IR, null, IR], [IR, null, IR], [null, IR, null], ], result: { id: BLOCK_HOPPER, count: 1 }, type: 'crafting_table', }, { id: 'lever', name: 'Lever', pattern: [ [null, CO, null], [null, SK, null], [null, null, null], ], result: { id: BLOCK_LEVER, count: 1 }, type: 'crafting_table', }, { id: 'tnt', name: 'TNT', pattern: [ [ITEM_GUNPOWDER, BLOCK_SAND, ITEM_GUNPOWDER], [BLOCK_SAND, ITEM_GUNPOWDER, BLOCK_SAND], [ITEM_GUNPOWDER, BLOCK_SAND, ITEM_GUNPOWDER], ], result: { id: BLOCK_TNT, count: 1 }, type: 'crafting_table', }, { id: 'redstone_lamp', name: 'Redstone Lamp', pattern: [ [null, ITEM_REDSTONE_DUST, null], [ITEM_REDSTONE_DUST, BLOCK_GLOWSTONE, ITEM_REDSTONE_DUST], [null, ITEM_REDSTONE_DUST, null], ], result: { id: BLOCK_REDSTONE_LAMP, count: 1 }, type: 'crafting_table', }, { id: 'rail', name: 'Rail', pattern: [ [IR, null, IR], [IR, SK, IR], [IR, null, IR], ], result: { id: BLOCK_RAIL, count: 16 }, type: 'crafting_table', }, { id: 'powered_rail', name: 'Powered Rail', pattern: [ [GO, null, GO], [GO, SK, GO], [GO, ITEM_REDSTONE_DUST, GO], ], result: { id: BLOCK_POWERED_RAIL, count: 6 }, type: 'crafting_table', }, { id: 'detector_rail', name: 'Detector Rail', pattern: [ [IR, null, IR], [IR, BLOCK_REDSTONE_TORCH, IR], [IR, null, IR], ], result: { id: BLOCK_DETECTOR_RAIL, count: 6 }, type: 'crafting_table', }, { id: 'activator_rail', name: 'Activator Rail', pattern: [ [IR, null, IR], [IR, SK, IR], [IR, BLOCK_REDSTONE_TORCH, IR], ], result: { id: BLOCK_ACTIVATOR_RAIL, count: 6 }, type: 'crafting_table', }, // ============================================================= // DECORATION (107-122) // ============================================================= { id: 'white_bed', name: 'White Bed', pattern: [ [WO, WO, WO], [P, P, P], [null, null, null], ], result: { id: BLOCK_WHITE_BED, count: 1 }, type: 'crafting_table', }, { id: 'black_bed', name: 'Black Bed', pattern: [ [BLOCK_BLACK_WOOL, BLOCK_BLACK_WOOL, BLOCK_BLACK_WOOL], [P, P, P], [null, null, null], ], result: { id: BLOCK_BLACK_BED, count: 1 }, type: 'crafting_table', }, { id: 'red_bed', name: 'Red Bed', pattern: [ [BLOCK_RED_WOOL, BLOCK_RED_WOOL, BLOCK_RED_WOOL], [P, P, P], [null, null, null], ], result: { id: BLOCK_RED_BED, count: 1 }, type: 'crafting_table', }, { id: 'blue_bed', name: 'Blue Bed', pattern: [ [BLOCK_BLUE_WOOL, BLOCK_BLUE_WOOL, BLOCK_BLUE_WOOL], [P, P, P], [null, null, null], ], result: { id: BLOCK_BLUE_BED, count: 1 }, type: 'crafting_table', }, { id: 'green_bed', name: 'Green Bed', pattern: [ [BLOCK_GREEN_WOOL, BLOCK_GREEN_WOOL, BLOCK_GREEN_WOOL], [P, P, P], [null, null, null], ], result: { id: BLOCK_GREEN_BED, count: 1 }, type: 'crafting_table', }, { id: 'painting', name: 'Painting', pattern: [ [SK, SK, SK], [SK, WO, SK], [SK, SK, SK], ], result: { id: ITEM_PAINTING, count: 1 }, type: 'crafting_table', }, { id: 'item_frame', name: 'Item Frame', pattern: [ [SK, SK, SK], [SK, null, SK], [SK, SK, SK], ], result: { id: ITEM_ITEM_FRAME, count: 1 }, type: 'crafting_table', }, { id: 'glass_panes', name: 'Glass Panes', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [null, null, null], ], result: { id: BLOCK_GLASS_PANE, count: 16 }, type: 'crafting_table', }, { id: 'white_banner', name: 'White Banner', pattern: [ [WO, WO, WO], [WO, WO, WO], [null, SK, null], ], result: { id: BLOCK_WHITE_BANNER, count: 1 }, type: 'crafting_table', }, { id: 'ladder', name: 'Ladder', pattern: [ [SK, null, SK], [SK, SK, SK], [SK, null, SK], ], result: { id: BLOCK_LADDER, count: 3 }, type: 'crafting_table', }, { id: 'iron_bars', name: 'Iron Bars', pattern: [ [IR, IR, IR], [IR, IR, IR], [null, null, null], ], result: { id: BLOCK_IRON_BARS, count: 16 }, type: 'crafting_table', }, { id: 'bookshelf', name: 'Bookshelf', pattern: [ [P, P, P], [ITEM_BOOK, ITEM_BOOK, ITEM_BOOK], [P, P, P], ], result: { id: BLOCK_BOOKSHELF, count: 1 }, type: 'crafting_table', }, { id: 'torch', name: 'Torch', pattern: [ [CL, null, null], [SK, null, null], [null, null, null], ], result: { id: BLOCK_TORCH, count: 4 }, type: 'crafting_table', }, { id: 'torch_charcoal', name: 'Torch (Charcoal)', pattern: [ [ITEM_CHARCOAL, null, null], [SK, null, null], [null, null, null], ], result: { id: BLOCK_TORCH, count: 4 }, type: 'crafting_table', }, { id: 'jack_o_lantern', name: 'Jack o\'Lantern', pattern: [ [BLOCK_TORCH, null, null], [BLOCK_PUMPKIN, null, null], [null, null, null], ], result: { id: BLOCK_JACK_O_LANTERN, count: 1 }, type: 'crafting_table', }, { id: 'campfire', name: 'Campfire', pattern: [ [SK, null, SK], [SK, CL, SK], [CO, CO, CO], ], result: { id: BLOCK_CAMPFIRE, count: 1 }, type: 'crafting_table', }, // ============================================================= // FOOD (123-132) // ============================================================= { id: 'bread', name: 'Bread', pattern: [ [null, null, null], [BLOCK_WHEAT, BLOCK_WHEAT, BLOCK_WHEAT], [null, null, null], ], result: { id: ITEM_BREAD, count: 1 }, type: 'crafting_table', }, { id: 'cake', name: 'Cake', pattern: [ [ITEM_MILK_BUCKET, ITEM_MILK_BUCKET, ITEM_MILK_BUCKET], [ITEM_SUGAR, ITEM_EGG, ITEM_SUGAR], [BLOCK_WHEAT, BLOCK_WHEAT, BLOCK_WHEAT], ], result: { id: BLOCK_CAKE, count: 1 }, type: 'crafting_table', }, { id: 'cookie', name: 'Cookie', pattern: [ [BLOCK_WHEAT, ITEM_COCOA_BEANS, BLOCK_WHEAT], [null, null, null], [null, null, null], ], result: { id: ITEM_COOKIE, count: 8 }, type: 'crafting_table', }, { id: 'golden_apple', name: 'Golden Apple', pattern: [ [GO, GO, GO], [GO, ITEM_APPLE, GO], [GO, GO, GO], ], result: { id: ITEM_GOLDEN_APPLE, count: 1 }, type: 'crafting_table', }, { id: 'pumpkin_pie', name: 'Pumpkin Pie', pattern: [ [null, ITEM_SUGAR, null], [BLOCK_PUMPKIN, ITEM_EGG, null], [null, null, null], ], result: { id: ITEM_PUMPKIN_PIE, count: 1 }, type: 'crafting_table', }, { id: 'mushroom_stew', name: 'Mushroom Stew', pattern: [ [BLOCK_RED_MUSHROOM, null, null], [BLOCK_BROWN_MUSHROOM, null, null], [ITEM_BOWL, null, null], ], result: { id: ITEM_MUSHROOM_STEW, count: 1 }, type: 'crafting_table', }, { id: 'sugar', name: 'Sugar', pattern: [ [BLOCK_SUGAR_CANE, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_SUGAR, count: 1 }, type: 'crafting_table', }, { id: 'bowl', name: 'Bowl', pattern: [ [P, null, P], [null, P, null], [null, null, null], ], result: { id: ITEM_BOWL, count: 4 }, type: 'crafting_table', }, { id: 'paper', name: 'Paper', pattern: [ [BLOCK_SUGAR_CANE, BLOCK_SUGAR_CANE, BLOCK_SUGAR_CANE], [null, null, null], [null, null, null], ], result: { id: ITEM_PAPER, count: 3 }, type: 'crafting_table', }, { id: 'book', name: 'Book', pattern: [ [ITEM_PAPER, null, null], [ITEM_PAPER, null, null], [ITEM_PAPER, ITEM_LEATHER, null], ], result: { id: ITEM_BOOK, count: 1 }, type: 'crafting_table', }, // ============================================================= // NETHER-RELATED (133-141) // ============================================================= { id: 'fire_charge', name: 'Fire Charge', pattern: [ [null, ITEM_BLAZE_POWDER, null], [null, ITEM_COAL, null], [null, ITEM_GUNPOWDER, null], ], result: { id: ITEM_FIRE_CHARGE, count: 3 }, type: 'crafting_table', }, { id: 'blaze_powder', name: 'Blaze Powder', pattern: [ [ITEM_BLAZE_ROD, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_BLAZE_POWDER, count: 2 }, type: 'crafting_table', }, { id: 'eye_of_ender', name: 'Eye of Ender', pattern: [ [ITEM_BLAZE_POWDER, null, null], [ITEM_ENDER_PEARL, null, null], [null, null, null], ], result: { id: ITEM_EYE_OF_ENDER, count: 1 }, type: 'crafting_table', }, { id: 'nether_bricks', name: 'Nether Bricks', pattern: [ [ITEM_NETHER_BRICK, ITEM_NETHER_BRICK, ITEM_NETHER_BRICK], [ITEM_NETHER_BRICK, ITEM_NETHER_BRICK, ITEM_NETHER_BRICK], [null, null, null], ], result: { id: BLOCK_NETHER_BRICKS, count: 1 }, type: 'crafting_table', }, { id: 'nether_brick_fence', name: 'Nether Brick Fence', pattern: [ [ITEM_NETHER_BRICK, ITEM_NETHER_BRICK, ITEM_NETHER_BRICK], [ITEM_NETHER_BRICK, ITEM_NETHER_BRICK, ITEM_NETHER_BRICK], [null, null, null], ], result: { id: BLOCK_NETHER_BRICK_WALL, count: 6 }, type: 'crafting_table', }, { id: 'quartz_block', name: 'Quartz Block', pattern: [ [ITEM_QUARTZ, ITEM_QUARTZ, null], [ITEM_QUARTZ, ITEM_QUARTZ, null], [null, null, null], ], result: { id: BLOCK_QUARTZ_BLOCK, count: 4 }, type: 'crafting_table', }, { id: 'magma_block', name: 'Magma Block', pattern: [ [BLOCK_MAGMA, BLOCK_MAGMA, null], [BLOCK_MAGMA, BLOCK_MAGMA, null], [null, null, null], ], result: { id: BLOCK_MAGMA_BLOCK, count: 4 }, type: 'crafting_table', }, { id: 'end_stone_bricks', name: 'End Stone Bricks', pattern: [ [BLOCK_END_STONE, BLOCK_END_STONE, null], [BLOCK_END_STONE, BLOCK_END_STONE, null], [null, null, null], ], result: { id: BLOCK_END_STONE_BRICKS, count: 4 }, type: 'crafting_table', }, { id: 'ender_chest', name: 'Ender Chest', pattern: [ [null, ITEM_ENDER_PEARL, null], [null, BLOCK_CHEST, null], [null, BLOCK_OBSIDIAN, null], ], result: { id: BLOCK_ENDER_CHEST, count: 1 }, type: 'crafting_table', }, // ============================================================= // DYE-RELATED - STAINED GLASS (142-157) // ============================================================= { id: 'white_stained_glass', name: 'White Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_BONE_MEAL_DYE, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_WHITE_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'orange_stained_glass', name: 'Orange Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_COCOA_DYE, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_ORANGE_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'magenta_stained_glass', name: 'Magenta Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_BONE_MEAL_DYE, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_MAGENTA_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'yellow_stained_glass', name: 'Yellow Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_DANDELION_YELLOW, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_YELLOW_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'lime_stained_glass', name: 'Lime Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_CACTUS_GREEN, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_LIME_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'pink_stained_glass', name: 'Pink Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_BONE_MEAL_DYE, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_PINK_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'gray_stained_glass', name: 'Gray Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_INK_SAC, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_GRAY_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'cyan_stained_glass', name: 'Cyan Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_CACTUS_GREEN, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_CYAN_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'purple_stained_glass', name: 'Purple Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_INK_SAC, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_PURPLE_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'blue_stained_glass', name: 'Blue Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_LAPIS_DYE, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_BLUE_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'brown_stained_glass', name: 'Brown Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_COCOA_BEANS, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_BROWN_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'green_stained_glass', name: 'Green Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_CACTUS_GREEN, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_GREEN_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'red_stained_glass', name: 'Red Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_ROSE_RED, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_RED_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, { id: 'black_stained_glass', name: 'Black Stained Glass', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_INK_SAC, BLOCK_GLASS], [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], ], result: { id: BLOCK_BLACK_STAINED_GLASS, count: 8 }, type: 'crafting_table', }, // ============================================================= // DYE-RELATED - COLORED WOOL (158-163) // ============================================================= { id: 'orange_wool', name: 'Orange Wool', pattern: [ [null, null, null], [null, WO, null], [null, ITEM_COCOA_DYE, null], ], result: { id: BLOCK_ORANGE_WOOL, count: 1 }, type: 'crafting_table', }, { id: 'red_wool', name: 'Red Wool', pattern: [ [null, null, null], [null, WO, null], [null, ITEM_ROSE_RED, null], ], result: { id: BLOCK_RED_WOOL, count: 1 }, type: 'crafting_table', }, { id: 'yellow_wool', name: 'Yellow Wool', pattern: [ [null, null, null], [null, WO, null], [null, ITEM_DANDELION_YELLOW, null], ], result: { id: BLOCK_YELLOW_WOOL, count: 1 }, type: 'crafting_table', }, { id: 'green_wool', name: 'Green Wool', pattern: [ [null, null, null], [null, WO, null], [null, ITEM_CACTUS_GREEN, null], ], result: { id: BLOCK_GREEN_WOOL, count: 1 }, type: 'crafting_table', }, { id: 'black_wool', name: 'Black Wool', pattern: [ [null, null, null], [null, WO, null], [null, ITEM_INK_SAC, null], ], result: { id: BLOCK_BLACK_WOOL, count: 1 }, type: 'crafting_table', }, { id: 'blue_wool', name: 'Blue Wool', pattern: [ [null, null, null], [null, WO, null], [null, ITEM_LAPIS_DYE, null], ], result: { id: BLOCK_BLUE_WOOL, count: 1 }, type: 'crafting_table', }, // ============================================================= // DYE-RELATED - CONCRETE POWDER (164-171) // ============================================================= { id: 'white_concrete_powder', name: 'White Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_BONE_MEAL_DYE, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_WHITE_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'orange_concrete_powder', name: 'Orange Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_COCOA_DYE, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_ORANGE_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'red_concrete_powder', name: 'Red Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_ROSE_RED, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_RED_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'yellow_concrete_powder', name: 'Yellow Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_DANDELION_YELLOW, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_YELLOW_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'green_concrete_powder', name: 'Green Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_CACTUS_GREEN, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_GREEN_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'black_concrete_powder', name: 'Black Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_INK_SAC, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_BLACK_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'blue_concrete_powder', name: 'Blue Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_LAPIS_DYE, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_BLUE_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, { id: 'brown_concrete_powder', name: 'Brown Concrete Powder', pattern: [ [BLOCK_SAND, BLOCK_SAND, BLOCK_SAND], [BLOCK_SAND, ITEM_COCOA_BEANS, BLOCK_SAND], [BLOCK_GRAVEL, BLOCK_GRAVEL, BLOCK_GRAVEL], ], result: { id: BLOCK_BROWN_CONCRETE_POWDER, count: 8 }, type: 'crafting_table', }, // ============================================================= // DYE-RELATED - TERRACOTTA (172-179) // ============================================================= { id: 'white_terracotta', name: 'White Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_BONE_MEAL_DYE, null], ], result: { id: BLOCK_WHITE_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'orange_terracotta', name: 'Orange Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_COCOA_DYE, null], ], result: { id: BLOCK_ORANGE_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'red_terracotta', name: 'Red Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_ROSE_RED, null], ], result: { id: BLOCK_RED_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'yellow_terracotta', name: 'Yellow Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_DANDELION_YELLOW, null], ], result: { id: BLOCK_YELLOW_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'green_terracotta', name: 'Green Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_CACTUS_GREEN, null], ], result: { id: BLOCK_GREEN_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'black_terracotta', name: 'Black Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_INK_SAC, null], ], result: { id: BLOCK_BLACK_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'blue_terracotta', name: 'Blue Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_LAPIS_DYE, null], ], result: { id: BLOCK_BLUE_TERRACOTTA, count: 8 }, type: 'crafting_table', }, { id: 'brown_terracotta', name: 'Brown Terracotta', pattern: [ [null, null, null], [null, BLOCK_TERRACOTTA, null], [null, ITEM_COCOA_BEANS, null], ], result: { id: BLOCK_BROWN_TERRACOTTA, count: 8 }, type: 'crafting_table', }, // ============================================================= // STORAGE & UTILITY BLOCKS (180-192) // ============================================================= { id: 'coal_block', name: 'Coal Block', pattern: [ [CL, CL, CL], [CL, CL, CL], [CL, CL, CL], ], result: { id: BLOCK_COAL_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'iron_block', name: 'Iron Block', pattern: [ [IR, IR, IR], [IR, IR, IR], [IR, IR, IR], ], result: { id: BLOCK_IRON_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'gold_block', name: 'Gold Block', pattern: [ [GO, GO, GO], [GO, GO, GO], [GO, GO, GO], ], result: { id: BLOCK_GOLD_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'diamond_block', name: 'Diamond Block', pattern: [ [DI, DI, DI], [DI, DI, DI], [DI, DI, DI], ], result: { id: BLOCK_DIAMOND_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'lapis_block', name: 'Lapis Block', pattern: [ [ITEM_LAPIS_LAZULI, ITEM_LAPIS_LAZULI, ITEM_LAPIS_LAZULI], [ITEM_LAPIS_LAZULI, ITEM_LAPIS_LAZULI, ITEM_LAPIS_LAZULI], [ITEM_LAPIS_LAZULI, ITEM_LAPIS_LAZULI, ITEM_LAPIS_LAZULI], ], result: { id: BLOCK_LAPIS_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'redstone_block', name: 'Redstone Block', pattern: [ [ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST], [ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST], [ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST, ITEM_REDSTONE_DUST], ], result: { id: BLOCK_REDSTONE_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'hay_bale', name: 'Hay Bale', pattern: [ [BLOCK_WHEAT, BLOCK_WHEAT, BLOCK_WHEAT], [BLOCK_WHEAT, BLOCK_WHEAT, BLOCK_WHEAT], [null, null, null], ], result: { id: BLOCK_HAY_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'melon_block', name: 'Melon Block', pattern: [ [ITEM_MELON_SLICE, ITEM_MELON_SLICE, ITEM_MELON_SLICE], [ITEM_MELON_SLICE, ITEM_MELON_SLICE, ITEM_MELON_SLICE], [ITEM_MELON_SLICE, ITEM_MELON_SLICE, ITEM_MELON_SLICE], ], result: { id: BLOCK_MELON, count: 1 }, type: 'crafting_table', }, // ============================================================= // UTILITY CRAFTING - DECOMPOSITION & MISC (193-206) // ============================================================= { id: 'coal_from_block', name: 'Coal (from Block)', pattern: [ [BLOCK_COAL_BLOCK, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_COAL, count: 9 }, type: 'crafting_table', }, { id: 'iron_ingot_from_block', name: 'Iron Ingot (from Block)', pattern: [ [BLOCK_IRON_BLOCK, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_IRON_INGOT, count: 9 }, type: 'crafting_table', }, { id: 'gold_ingot_from_block', name: 'Gold Ingot (from Block)', pattern: [ [BLOCK_GOLD_BLOCK, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_GOLD_INGOT, count: 9 }, type: 'crafting_table', }, { id: 'diamond_from_block', name: 'Diamond (from Block)', pattern: [ [BLOCK_DIAMOND_BLOCK, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_DIAMOND_GEM, count: 9 }, type: 'crafting_table', }, { id: 'redstone_from_block', name: 'Redstone (from Block)', pattern: [ [BLOCK_REDSTONE_BLOCK, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_REDSTONE_DUST, count: 9 }, type: 'crafting_table', }, { id: 'iron_nugget', name: 'Iron Nugget', pattern: [ [IR, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_IRON_NUGGET, count: 9 }, type: 'crafting_table', }, { id: 'iron_ingot_from_nuggets', name: 'Iron Ingot (from Nuggets)', pattern: [ [ITEM_IRON_NUGGET, ITEM_IRON_NUGGET, ITEM_IRON_NUGGET], [ITEM_IRON_NUGGET, ITEM_IRON_NUGGET, ITEM_IRON_NUGGET], [ITEM_IRON_NUGGET, ITEM_IRON_NUGGET, ITEM_IRON_NUGGET], ], result: { id: ITEM_IRON_INGOT, count: 1 }, type: 'crafting_table', }, { id: 'gold_nugget', name: 'Gold Nugget', pattern: [ [GO, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_GOLD_NUGGET, count: 9 }, type: 'crafting_table', }, { id: 'gold_ingot_from_nuggets', name: 'Gold Ingot (from Nuggets)', pattern: [ [ITEM_GOLD_NUGGET, ITEM_GOLD_NUGGET, ITEM_GOLD_NUGGET], [ITEM_GOLD_NUGGET, ITEM_GOLD_NUGGET, ITEM_GOLD_NUGGET], [ITEM_GOLD_NUGGET, ITEM_GOLD_NUGGET, ITEM_GOLD_NUGGET], ], result: { id: ITEM_GOLD_INGOT, count: 1 }, type: 'crafting_table', }, { id: 'bone_meal', name: 'Bone Meal', pattern: [ [ITEM_BONE, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_BONE_MEAL, count: 3 }, type: 'crafting_table', }, { id: 'brick_item', name: 'Brick', pattern: [ [ITEM_CLAY_BALL, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_BRICK_ITEM, count: 1 }, type: 'furnace', }, { id: 'bricks_block', name: 'Bricks', pattern: [ [ITEM_BRICK_ITEM, ITEM_BRICK_ITEM, null], [ITEM_BRICK_ITEM, ITEM_BRICK_ITEM, null], [null, null, null], ], result: { id: BLOCK_BRICKS, count: 4 }, type: 'crafting_table', }, { id: 'nether_brick_item', name: 'Nether Brick', pattern: [ [BLOCK_NETHERRACK, null, null], [null, null, null], [null, null, null], ], result: { id: ITEM_NETHER_BRICK, count: 1 }, type: 'furnace', }, // ============================================================= // TOOLS & EQUIPMENT (207-218) // ============================================================= { id: 'bucket', name: 'Bucket', pattern: [ [IR, null, IR], [null, IR, null], [null, null, null], ], result: { id: ITEM_BUCKET, count: 1 }, type: 'crafting_table', }, { id: 'flint_and_steel', name: 'Flint and Steel', pattern: [ [IR, null, null], [null, ITEM_FLINT, null], [null, null, null], ], result: { id: ITEM_FLINT_AND_STEEL, count: 1 }, type: 'crafting_table', }, { id: 'compass', name: 'Compass', pattern: [ [null, IR, null], [IR, ITEM_REDSTONE_DUST, IR], [null, IR, null], ], result: { id: ITEM_COMPASS, count: 1 }, type: 'crafting_table', }, { id: 'clock', name: 'Clock', pattern: [ [null, GO, null], [GO, ITEM_REDSTONE_DUST, GO], [null, GO, null], ], result: { id: ITEM_CLOCK, count: 1 }, type: 'crafting_table', }, { id: 'shears', name: 'Shears', pattern: [ [null, IR, null], [IR, null, null], [null, null, null], ], result: { id: ITEM_SHEARS, count: 1 }, type: 'crafting_table', }, { id: 'bow', name: 'Bow', pattern: [ [null, SK, ITEM_STRING], [SK, null, ITEM_STRING], [null, SK, ITEM_STRING], ], result: { id: ITEM_BOW, count: 1 }, type: 'crafting_table', }, { id: 'arrows', name: 'Arrows', pattern: [ [ITEM_FLINT, null, null], [SK, null, null], [ITEM_STRING, null, null], ], result: { id: ITEM_ARROW, count: 4 }, type: 'crafting_table', }, { id: 'shield', name: 'Shield', pattern: [ [P, IR, P], [P, P, P], [null, P, null], ], result: { id: ITEM_SHIELD, count: 1 }, type: 'crafting_table', }, { id: 'lead', name: 'Lead', pattern: [ [ITEM_STRING, ITEM_STRING, null], [ITEM_STRING, ITEM_LEATHER, null], [null, null, ITEM_STRING], ], result: { id: ITEM_LEAD, count: 2 }, type: 'crafting_table', }, { id: 'minecart', name: 'Minecart', pattern: [ [IR, null, IR], [IR, IR, IR], [null, null, null], ], result: { id: ITEM_MINECART, count: 1 }, type: 'crafting_table', }, { id: 'boat', name: 'Boat', pattern: [ [P, null, P], [P, P, P], [null, null, null], ], result: { id: ITEM_BOAT, count: 1 }, type: 'crafting_table', }, { id: 'chest_minecart', name: 'Chest Minecart', pattern: [ [BLOCK_CHEST, null, null], [ITEM_MINECART, null, null], [null, null, null], ], result: { id: ITEM_CHEST_MINECART, count: 1 }, type: 'crafting_table', }, { id: 'tnt_minecart', name: 'TNT Minecart', pattern: [ [BLOCK_TNT, null, null], [ITEM_MINECART, null, null], [null, null, null], ], result: { id: ITEM_TNT_MINECART, count: 1 }, type: 'crafting_table', }, { id: 'hopper_minecart', name: 'Hopper Minecart', pattern: [ [BLOCK_HOPPER, null, null], [ITEM_MINECART, null, null], [null, null, null], ], result: { id: ITEM_HOPPER_MINECART, count: 1 }, type: 'crafting_table', }, // ============================================================= // WORKSTATION & UTILITY BLOCKS (221-232) // ============================================================= { id: 'blast_furnace', name: 'Blast Furnace', pattern: [ [IR, IR, IR], [IR, BLOCK_FURNACE, IR], [CO, CO, CO], ], result: { id: BLOCK_BLAST_FURNACE, count: 1 }, type: 'crafting_table', }, { id: 'smoker', name: 'Smoker', pattern: [ [null, P, null], [P, BLOCK_FURNACE, P], [null, P, null], ], result: { id: BLOCK_SMOKER, count: 1 }, type: 'crafting_table', }, { id: 'stonecutter', name: 'Stonecutter', pattern: [ [null, IR, null], [null, ST, null], [ST, ST, ST], ], result: { id: BLOCK_STONECUTTER, count: 1 }, type: 'crafting_table', }, { id: 'smithing_table', name: 'Smithing Table', pattern: [ [IR, IR, null], [P, P, null], [P, P, null], ], result: { id: BLOCK_SMITHING_TABLE, count: 1 }, type: 'crafting_table', }, { id: 'enchanting_table', name: 'Enchanting Table', pattern: [ [null, ITEM_BOOK, null], [DI, BLOCK_OBSIDIAN, DI], [BLOCK_OBSIDIAN, BLOCK_OBSIDIAN, BLOCK_OBSIDIAN], ], result: { id: BLOCK_ENCHANTING_TABLE, count: 1 }, type: 'crafting_table', }, { id: 'brewing_stand', name: 'Brewing Stand', pattern: [ [ITEM_BLAZE_ROD, null, null], [CO, CO, CO], [null, null, null], ], result: { id: BLOCK_BREWING_STAND, count: 1 }, type: 'crafting_table', }, { id: 'cauldron', name: 'Cauldron', pattern: [ [IR, null, IR], [IR, null, IR], [IR, IR, IR], ], result: { id: BLOCK_CAULDRON, count: 1 }, type: 'crafting_table', }, { id: 'anvil', name: 'Anvil', pattern: [ [BLOCK_IRON_BLOCK, BLOCK_IRON_BLOCK, BLOCK_IRON_BLOCK], [null, IR, null], [IR, IR, IR], ], result: { id: BLOCK_ANVIL, count: 1 }, type: 'crafting_table', }, { id: 'beacon', name: 'Beacon', pattern: [ [BLOCK_GLASS, BLOCK_GLASS, BLOCK_GLASS], [BLOCK_GLASS, ITEM_NETHER_STAR, BLOCK_GLASS], [BLOCK_OBSIDIAN, BLOCK_OBSIDIAN, BLOCK_OBSIDIAN], ], result: { id: BLOCK_BEACON, count: 1 }, type: 'crafting_table', }, { id: 'trapped_chest', name: 'Trapped Chest', pattern: [ [null, BLOCK_REDSTONE_TORCH, null], [null, BLOCK_CHEST, null], [null, null, null], ], result: { id: BLOCK_TRAPPED_CHEST, count: 1 }, type: 'crafting_table', }, { id: 'loom', name: 'Loom', pattern: [ [ITEM_STRING, ITEM_STRING, null], [P, P, null], [P, P, null], ], result: { id: BLOCK_LOOM_BLOCK, count: 1 }, type: 'crafting_table', }, { id: 'smooth_sandstone', name: 'Smooth Sandstone', pattern: [ [BLOCK_SANDSTONE, BLOCK_SANDSTONE, null], [BLOCK_SANDSTONE, BLOCK_SANDSTONE, null], [null, null, null], ], result: { id: BLOCK_SMOOTH_SANDSTONE, count: 4 }, type: 'crafting_table', }, ]; // ============================================================= // SMELTING RECIPES // ============================================================= export const smeltingRecipes: SmeltingRecipe[] = [ // Ores to ingots/items { input: BLOCK_IRON_ORE, output: ITEM_IRON_INGOT, cookTime: 200, xp: 0.7 }, { input: BLOCK_GOLD_ORE, output: ITEM_GOLD_INGOT, cookTime: 200, xp: 1.0 }, { input: BLOCK_COAL_ORE, output: ITEM_COAL, cookTime: 200, xp: 0.1 }, { input: BLOCK_DIAMOND_ORE, output: ITEM_DIAMOND_GEM, cookTime: 200, xp: 1.0 }, { input: BLOCK_REDSTONE_ORE, output: ITEM_REDSTONE_DUST, cookTime: 200, xp: 0.7 }, { input: BLOCK_LAPIS_ORE, output: ITEM_LAPIS_LAZULI, cookTime: 200, xp: 0.2 }, // Deepslate ores { input: BLOCK_DEEPSLATE_IRON_ORE, output: ITEM_IRON_INGOT, cookTime: 200, xp: 0.7 }, { input: BLOCK_DEEPSLATE_GOLD_ORE, output: ITEM_GOLD_INGOT, cookTime: 200, xp: 1.0 }, { input: BLOCK_DEEPSLATE_COAL_ORE, output: ITEM_COAL, cookTime: 200, xp: 0.1 }, { input: BLOCK_DEEPSLATE_DIAMOND_ORE, output: ITEM_DIAMOND_GEM, cookTime: 200, xp: 1.0 }, { input: BLOCK_DEEPSLATE_REDSTONE_ORE, output: ITEM_REDSTONE_DUST, cookTime: 200, xp: 0.7 }, { input: BLOCK_DEEPSLATE_LAPIS_ORE, output: ITEM_LAPIS_LAZULI, cookTime: 200, xp: 0.2 }, { input: BLOCK_DEEPSLATE_COPPER_ORE, output: ITEM_COPPER_INGOT, cookTime: 200, xp: 0.7 }, { input: BLOCK_DEEPSLATE_EMERALD_ORE, output: ITEM_EMERALD, cookTime: 200, xp: 1.0 }, // Other ores { input: BLOCK_COPPER_ORE, output: ITEM_COPPER_INGOT, cookTime: 200, xp: 0.7 }, { input: BLOCK_EMERALD_ORE, output: ITEM_EMERALD, cookTime: 200, xp: 1.0 }, { input: BLOCK_NETHER_GOLD_ORE, output: ITEM_GOLD_INGOT, cookTime: 200, xp: 1.0 }, { input: BLOCK_NETHER_QUARTZ_ORE, output: ITEM_QUARTZ, cookTime: 200, xp: 0.2 }, // Blocks from smelting { input: BLOCK_COBBLESTONE, output: BLOCK_STONE, cookTime: 200, xp: 0.1 }, { input: BLOCK_STONE, output: BLOCK_SMOOTH_SANDSTONE, cookTime: 200, xp: 0.1 }, { input: BLOCK_SAND, output: BLOCK_GLASS, cookTime: 200, xp: 0.1 }, { input: BLOCK_CLAY, output: BLOCK_TERRACOTTA, cookTime: 200, xp: 0.35 }, { input: ITEM_CLAY_BALL, output: ITEM_BRICK_ITEM, cookTime: 200, xp: 0.3 }, { input: BLOCK_NETHERRACK, output: ITEM_NETHER_BRICK, cookTime: 200, xp: 0.1 }, { input: BLOCK_CACTUS, output: ITEM_CACTUS_GREEN, cookTime: 200, xp: 0.2 }, { input: BLOCK_OAK_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_SPRUCE_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_BIRCH_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_JUNGLE_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_DARK_OAK_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_ACACIA_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_MANGROVE_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_CHERRY_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_PALE_OAK_LOG, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_OAK_PLANKS, output: ITEM_CHARCOAL, cookTime: 200, xp: 0.15 }, { input: BLOCK_PUMPKIN, output: BLOCK_CARVED_PUMPKIN, cookTime: 200, xp: 0.1 }, // Food smelting { input: ITEM_RAW_PORKCHOP, output: ITEM_COOKED_PORKCHOP, cookTime: 200, xp: 0.35 }, { input: ITEM_RAW_BEEF, output: ITEM_COOKED_BEEF, cookTime: 200, xp: 0.35 }, { input: ITEM_RAW_CHICKEN, output: ITEM_COOKED_CHICKEN, cookTime: 200, xp: 0.35 }, { input: ITEM_RAW_MUTTON, output: ITEM_COOKED_MUTTON, cookTime: 200, xp: 0.35 }, { input: ITEM_RAW_COD, output: ITEM_COOKED_COD, cookTime: 200, xp: 0.35 }, { input: ITEM_RAW_SALMON, output: ITEM_COOKED_SALMON, cookTime: 200, xp: 0.35 }, // Raw ore blocks to ingots { input: BLOCK_RAW_IRON_BLOCK, output: ITEM_IRON_INGOT, cookTime: 200, xp: 0.7 }, { input: BLOCK_RAW_GOLD_BLOCK, output: ITEM_GOLD_INGOT, cookTime: 200, xp: 1.0 }, { input: BLOCK_RAW_COPPER_BLOCK, output: ITEM_COPPER_INGOT, cookTime: 200, xp: 0.7 }, // Smooth blocks { input: BLOCK_SANDSTONE, output: BLOCK_SMOOTH_SANDSTONE, cookTime: 200, xp: 0.1 }, { input: BLOCK_RED_SANDSTONE, output: BLOCK_SMOOTH_RED_SANDSTONE, cookTime: 200, xp: 0.1 }, { input: BLOCK_STONE_BRICKS, output: BLOCK_CRACKED_STONE_BRICKS, cookTime: 200, xp: 0.1 }, { input: BLOCK_NETHER_BRICKS, output: BLOCK_CRACKED_NETHER_BRICKS, cookTime: 200, xp: 0.1 }, ]; // ============================================================= // PATTERN MATCHING HELPERS // ============================================================= /** * Normalizes a pattern by trimming away empty rows and columns, * returning the minimal bounding box of non-null cells. */ function normalizePattern(pattern: (number | null)[][]): (number | null)[][] { // Find bounds of non-null cells let minRow = pattern.length; let maxRow = -1; let minCol = 3; let maxCol = -1; for (let r = 0; r < pattern.length; r++) { for (let c = 0; c < pattern[r].length; c++) { if (pattern[r][c] !== null) { minRow = Math.min(minRow, r); maxRow = Math.max(maxRow, r); minCol = Math.min(minCol, c); maxCol = Math.max(maxCol, c); } } } if (maxRow === -1) return []; // Empty pattern const result: (number | null)[][] = []; for (let r = minRow; r <= maxRow; r++) { const row: (number | null)[] = []; for (let c = minCol; c <= maxCol; c++) { row.push(pattern[r]?.[c] ?? null); } result.push(row); } return result; } /** * Checks if two patterns match by comparing their normalized forms. * This allows patterns to be placed anywhere in the 3x3 grid. */ function patternsMatch( a: (number | null)[][], b: (number | null)[][] ): boolean { const normA = normalizePattern(a); const normB = normalizePattern(b); if (normA.length !== normB.length) return false; for (let r = 0; r < normA.length; r++) { if (normA[r].length !== normB[r].length) return false; for (let c = 0; c < normA[r].length; c++) { if (normA[r][c] !== normB[r][c]) return false; } } return true; } /** * Count the items in a pattern, grouping by ID. */ function countPatternItems(pattern: (number | null)[][]): Map { const counts = new Map(); for (const row of pattern) { for (const cell of row) { if (cell !== null) { counts.set(cell, (counts.get(cell) || 0) + 1); } } } return counts; } /** * Checks if two patterns match shapelessly (same ingredients, any arrangement). */ function shapelessMatch( a: (number | null)[][], b: (number | null)[][] ): boolean { const countsA = countPatternItems(a); const countsB = countPatternItems(b); if (countsA.size !== countsB.size) return false; let match = true; countsA.forEach((count, id) => { if (countsB.get(id) !== count) { match = false; } }); return match; } // Shapeless recipes - these IDs use shapeless matching const SHAPELESS_RECIPE_IDS = new Set([ 'fire_charge', 'eye_of_ender', 'blaze_powder', 'bone_meal', 'sugar', 'mushroom_stew', 'coarse_dirt', // hypothetical ]); // ============================================================= // EXPORTED FUNCTIONS // ============================================================= /** * Matches a 3x3 pattern against all recipes. * Returns the result if a match is found, or null. * Patterns are normalized so placement within the grid doesn't matter. * Some recipes use shapeless matching. */ export function getCraftingResult( pattern: (number | null)[][] ): { id: number; count: number } | null { // Check against all crafting_table recipes for (const recipe of craftingRecipes) { if (recipe.type === 'furnace') continue; // furnace recipes handled separately if (SHAPELESS_RECIPE_IDS.has(recipe.id)) { if (shapelessMatch(pattern, recipe.pattern)) { return { id: recipe.result.id, count: recipe.result.count }; } } else { if (patternsMatch(pattern, recipe.pattern)) { return { id: recipe.result.id, count: recipe.result.count }; } } } return null; } /** * Returns all crafting recipes. */ export function getAllRecipes(): CraftingRecipe[] { return [...craftingRecipes]; } /** * Returns the smelting result for a given input item/block ID. */ export function getSmeltingResult( input: number ): { output: number; cookTime: number; xp: number } | null { const recipe = smeltingRecipes.find((r) => r.input === input); if (recipe) { return { output: recipe.output, cookTime: recipe.cookTime, xp: recipe.xp }; } return null; } /** * Finds all recipes that produce the given item ID. */ export function getRecipesForItem(itemId: number): CraftingRecipe[] { return craftingRecipes.filter((r) => r.result.id === itemId); } /** * Finds all smelting recipes that produce the given item ID. */ export function getSmeltingRecipesForItem( itemId: number ): SmeltingRecipe[] { return smeltingRecipes.filter((r) => r.output === itemId); } /** * Get all recipes of a specific type. */ export function getRecipesByType( type: CraftingRecipe['type'] ): CraftingRecipe[] { return craftingRecipes.filter((r) => r.type === type); } /** * Get a recipe by its unique ID string. */ export function getRecipeById(id: string): CraftingRecipe | undefined { return craftingRecipes.find((r) => r.id === id); }