From 47a170ccb82866cf3be134f81a025eb3045ee57f Mon Sep 17 00:00:00 2001 From: NovaFarma Dev Date: Thu, 11 Dec 2025 13:07:18 +0100 Subject: [PATCH] FEATURE: Bone Tools crafting recipes - pickaxe, axe, hoe, sword (Bone + Wood) --- index.html | 3 + src/data/CraftingRecipes.js | 187 ++++++++++++++++++++++++++++++++++++ 2 files changed, 190 insertions(+) create mode 100644 src/data/CraftingRecipes.js diff --git a/index.html b/index.html index 1705159..84275fb 100644 --- a/index.html +++ b/index.html @@ -71,6 +71,9 @@ + + + diff --git a/src/data/CraftingRecipes.js b/src/data/CraftingRecipes.js new file mode 100644 index 0000000..901f83c --- /dev/null +++ b/src/data/CraftingRecipes.js @@ -0,0 +1,187 @@ +/** + * CRAFTING RECIPES + * Defines all crafting recipes for basic items and tools + * Format: { id, name, ingredients: [{item, amount}], result: {item, amount}, category } + */ + +const CRAFTING_RECIPES = { + // ================================== + // BONE TOOLS (New!) + // ================================== + 'bone_pickaxe': { + id: 'bone_pickaxe', + name: 'Bone Pickaxe', + ingredients: [ + { item: 'bone', amount: 3 }, + { item: 'wood', amount: 2 } + ], + result: { item: 'bone_pickaxe', amount: 1 }, + category: 'tools', + description: 'Weak pickaxe made from bones. Better than nothing!' + }, + 'bone_axe': { + id: 'bone_axe', + name: 'Bone Axe', + ingredients: [ + { item: 'bone', amount: 3 }, + { item: 'wood', amount: 2 } + ], + result: { item: 'bone_axe', amount: 1 }, + category: 'tools', + description: 'Crude axe for chopping wood.' + }, + 'bone_hoe': { + id: 'bone_hoe', + name: 'Bone Hoe', + ingredients: [ + { item: 'bone', amount: 2 }, + { item: 'wood', amount: 2 } + ], + result: { item: 'bone_hoe', amount: 1 }, + category: 'tools', + description: 'Farming tool for tilling soil.' + }, + 'bone_sword': { + id: 'bone_sword', + name: 'Bone Sword', + ingredients: [ + { item: 'bone', amount: 2 }, + { item: 'wood', amount: 1 } + ], + result: { item: 'bone_sword', amount: 1 }, + category: 'weapons', + description: 'Sharp bone weapon. +5 damage.' + }, + + // ================================== + // BASIC TOOLS (Existing) + // ================================== + 'wooden_pickaxe': { + id: 'wooden_pickaxe', + name: 'Wooden Pickaxe', + ingredients: [ + { item: 'wood', amount: 3 }, + { item: 'stick', amount: 2 } + ], + result: { item: 'wooden_pickaxe', amount: 1 }, + category: 'tools', + description: 'Basic mining tool.' + }, + 'stone_pickaxe': { + id: 'stone_pickaxe', + name: 'Stone Pickaxe', + ingredients: [ + { item: 'stone', amount: 3 }, + { item: 'stick', amount: 2 } + ], + result: { item: 'stone_pickaxe', amount: 1 }, + category: 'tools', + description: 'Improved mining tool.' + }, + + // ================================== + // BASIC ITEMS + // ================================== + 'stick': { + id: 'stick', + name: 'Stick', + ingredients: [ + { item: 'wood', amount: 1 } + ], + result: { item: 'stick', amount: 4 }, + category: 'materials', + description: 'Basic crafting material.' + }, + 'torch': { + id: 'torch', + name: 'Torch', + ingredients: [ + { item: 'stick', amount: 1 }, + { item: 'coal', amount: 1 } + ], + result: { item: 'torch', amount: 4 }, + category: 'lighting', + description: 'Provides light in darkness.' + }, + + // ================================== + // BUILDINGS + // ================================== + 'chest': { + id: 'chest', + name: 'Chest', + ingredients: [ + { item: 'wood', amount: 8 } + ], + result: { item: 'chest', amount: 1 }, + category: 'storage', + description: 'Storage container.' + }, + 'furnace': { + id: 'furnace', + name: 'Furnace', + ingredients: [ + { item: 'stone', amount: 8 }, + { item: 'coal', amount: 4 } + ], + result: { item: 'furnace', amount: 1 }, + category: 'workstation', + description: 'Smelts ores into bars.' + } +}; + +/** + * Helper function to get recipe by ID + */ +function getCraftingRecipe(recipeId) { + return CRAFTING_RECIPES[recipeId] || null; +} + +/** + * Helper function to check if player has ingredients + */ +function canCraft(recipeId, playerInventory) { + const recipe = getCraftingRecipe(recipeId); + if (!recipe) return false; + + for (const ingredient of recipe.ingredients) { + const playerAmount = playerInventory.getItemCount(ingredient.item); + if (playerAmount < ingredient.amount) { + return false; // Missing ingredient + } + } + return true; +} + +/** + * Helper function to craft item (consumes ingredients) + */ +function craftItem(recipeId, playerInventory) { + if (!canCraft(recipeId, playerInventory)) { + console.warn('⚠️ Cannot craft - missing ingredients!'); + return false; + } + + const recipe = getCraftingRecipe(recipeId); + + // Consume ingredients + for (const ingredient of recipe.ingredients) { + playerInventory.removeItem(ingredient.item, ingredient.amount); + } + + // Add result + playerInventory.addItem(recipe.result.item, recipe.result.amount); + + console.log(`✅ Crafted ${recipe.result.amount}x ${recipe.name}`); + return true; +} + +// Export for use in other systems +if (typeof module !== 'undefined' && module.exports) { + module.exports = { + CRAFTING_RECIPES, + getCraftingRecipe, + canCraft, + craftItem + }; +}