extends Node @onready var inventory_system: Node = get_node("../InventorySystem") var recipes: Array = [] func _ready() -> void: recipes = [ {"id": &"wood", "name": "Wood", "out_count": 1, "inputs": {&"essence": 1}}, {"id": &"stone", "name": "Stone", "out_count": 1, "inputs": {&"essence": 2}}, {"id": &"iron", "name": "Iron", "out_count": 1, "inputs": {&"essence": 5}}, {"id": &"sword", "name": "Sword", "out_count": 1, "inputs": {&"iron": 3, &"wood": 1}}, ] func get_recipes() -> Array: return recipes func can_craft(player: Node, recipe: Dictionary) -> bool: for input_id in recipe.inputs.keys(): if inventory_system.get_amount(player, input_id) < recipe.inputs[input_id]: return false return true func craft(player: Node, recipe_id: StringName) -> bool: if not (multiplayer.is_server() or multiplayer.multiplayer_peer == null): request_craft.rpc_id(1, player.get_path(), recipe_id) return false var recipe: Dictionary = _find_recipe(recipe_id) if recipe.is_empty(): return false if not can_craft(player, recipe): return false for input_id in recipe.inputs.keys(): inventory_system.remove_item(player, input_id, recipe.inputs[input_id]) inventory_system.add_item(player, recipe.id, recipe.out_count) EventBus.item_crafted.emit(player, recipe.id) return true @rpc("any_peer", "reliable") func request_craft(path: NodePath, recipe_id: StringName) -> void: var player: Node = get_node_or_null(path) if player: craft(player, recipe_id) func _find_recipe(id: StringName) -> Dictionary: for r in recipes: if r.id == id: return r return {}