public void FinishCrafting(ItemCraftTask task) { --task.amount; ++task.numCrafted; ulong skin = ItemDefinition.FindSkin(task.blueprint.targetItem.itemid, task.skinID); Item byItemId = ItemManager.CreateByItemID(task.blueprint.targetItem.itemid, 1, skin); byItemId.amount = task.blueprint.amountToCreate; if (byItemId.hasCondition && (double)task.conditionScale != 1.0) { byItemId.maxCondition *= task.conditionScale; byItemId.condition = byItemId.maxCondition; } byItemId.OnVirginSpawn(); foreach (ItemAmount ingredient in task.blueprint.ingredients) { int amount = (int)ingredient.amount; if (task.takenItems != null) { foreach (Item takenItem in task.takenItems) { if (Object.op_Equality((Object)takenItem.info, (Object)ingredient.itemDef)) { int num = Mathf.Min(takenItem.amount, amount); takenItem.UseItem(amount); amount -= num; } } } } Analytics.Crafting(task.blueprint.targetItem.shortname, task.skinID); task.owner.Command("note.craft_done", (object)task.taskUID, (object)1, (object)task.amount); Interface.CallHook("OnItemCraftFinished", (object)task, (object)byItemId); if (task.instanceData != null) { byItemId.instanceData = task.instanceData; } if (!string.IsNullOrEmpty(task.blueprint.UnlockAchievment)) { task.owner.GiveAchievement(task.blueprint.UnlockAchievment); } if (task.owner.inventory.GiveItem(byItemId, (ItemContainer)null)) { task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)byItemId.amount); } else { ItemContainer itemContainer = this.containers.First <ItemContainer>(); task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)byItemId.amount); task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)-byItemId.amount); byItemId.Drop(itemContainer.dropPosition, itemContainer.dropVelocity, (Quaternion)null); } }