TomatitoToho's picture
Upload src/engine/crafting/recipes.ts with huggingface_hub
b822dab verified
Raw
History Blame Contribute Delete
85.2 kB
// =============================================================
// 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);
}