Spaces:
Sleeping
Sleeping
| // ============================================================= | |
| // 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<number, number> { | |
| const counts = new Map<number, number>(); | |
| 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); | |
| } | |