private static CraftingTreeCompoundItem CreateRootCompoundItem(MinecraftItem mcItem, CraftingRecipe rootRecipe, int requiredAmount, int currentAmount) { rootRecipe.Ingredients = _craftingRecipeRepository.GetIngredientsByRecipeId(rootRecipe.Id).ToList(); rootRecipe.Ingredients.ToList().ForEach(x => x = MinecraftIdConversion(x)); List <ICraftingTreeItem> ingredients = new List <ICraftingTreeItem>(); foreach (var ingredient in rootRecipe.Ingredients) { var childMCItem = _minecraftItemRepository.GetMinecraftItemById(ingredient.Id); var childItem = CreateChildItem(childMCItem, rootRecipe, ingredient.Count, 0); ingredients.Add(childItem); } var rootItem = new CraftingTreeCompoundItem(item: mcItem, requiredAmount: requiredAmount, ingredients: ingredients, recipeResultCount: rootRecipe.ResultCount, currentAmount: currentAmount, parent: null); ingredients.ForEach(x => x.Parent = rootItem); return(rootItem); }
private static ICraftingTreeItem CreateChildItem(MinecraftItem mcItem, CraftingRecipe parentRecipe, int requiredAmount, int currentAmount) { ICraftingTreeItem childItem; var createSimpleItem = true; var recipe = _craftingRecipeRepository.GetRecipesByMinecraftId(mcItem.MinecraftId).FirstOrDefault(); var smeltingRecipe = _smeltingRecipes.FirstOrDefault(x => x.ResultId == mcItem.Id); if (smeltingRecipe != null) { var recipeAmount = parentRecipe.Ingredients.Where(x => x.Id == mcItem.Id).First().Count; childItem = CreateSmeltingItem(mcItem, smeltingRecipe, requiredAmount, currentAmount, recipeAmount: recipeAmount); return(childItem); } if (recipe != null) { recipe.Ingredients = _craftingRecipeRepository.GetIngredientsByRecipeId(recipe.Id).ToList(); recipe.Ingredients.ToList().ForEach(x => x = MinecraftIdConversion(x)); createSimpleItem = recipe.Ingredients.Select(x => x.IngredientMinecraftId).Contains(parentRecipe.ResultMinecraftId); } if (createSimpleItem) { var recipeAmount = parentRecipe.Ingredients.Where(x => x.Id == mcItem.Id).First().Count; childItem = new CraftingTreeSimpleItem(item: mcItem, recipeAmount: recipeAmount, currentAmount: currentAmount); } else { List <ICraftingTreeItem> ingredients = new List <ICraftingTreeItem>(); foreach (var ingredient in recipe.Ingredients) { var childMCItem = _minecraftItemRepository.GetMinecraftItemById(ingredient.Id); var ingredientItem = CreateChildItem(childMCItem, recipe, ingredient.Count, 0); ingredients.Add(ingredientItem); } var recipeAmount = parentRecipe.Ingredients.Where(x => x.Id == mcItem.Id).First().Count; childItem = new CraftingTreeCompoundItem(item: mcItem, ingredients: ingredients, recipeResultCount: recipe.ResultCount, recipeAmount: recipeAmount, currentAmount: currentAmount); ingredients.ForEach(x => x.Parent = childItem as ICraftingTreeCompoundItem); } return(childItem); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jsonObject = JObject.Load(reader); var itemReader = jsonObject.CreateReader(); ICraftingTreeItem item = new CraftingTreeSimpleItem(); var hasIngredients = jsonObject.TryGetValue("Ingredients", out JToken ingredientsValue); if (hasIngredients) { item = new CraftingTreeCompoundItem(); } serializer.Populate(itemReader, item); return(item); }
private static ICraftingTreeItem CreateSmeltingIngredient(MinecraftItem mcItem, int currentAmount) { ICraftingTreeItem childItem; var createSimpleItem = true; var recipe = _craftingRecipeRepository.GetRecipesByMinecraftId(mcItem.MinecraftId).FirstOrDefault(); if (recipe != null) { createSimpleItem = false; } if (createSimpleItem) { var recipeAmount = 1; childItem = new CraftingTreeSimpleItem(item: mcItem, recipeAmount: recipeAmount, currentAmount: currentAmount, isSmeltingIngredient: true); } else { recipe.Ingredients = _craftingRecipeRepository.GetIngredientsByRecipeId(recipe.Id); recipe.Ingredients.ToList().ForEach(x => x = MinecraftIdConversion(x)); List <ICraftingTreeItem> ingredients = new List <ICraftingTreeItem>(); foreach (var ingredient in recipe.Ingredients) { var childMCItem = _minecraftItemRepository.GetMinecraftItemById(ingredient.Id); var ingredientItem = CreateChildItem(childMCItem, recipe, ingredient.Count, 0); ingredients.Add(ingredientItem); } var recipeAmount = 1; childItem = new CraftingTreeCompoundItem(item: mcItem, ingredients: ingredients, recipeResultCount: recipe.ResultCount, recipeAmount: recipeAmount, currentAmount: currentAmount, isSmeltingIngredient: true); ingredients.ForEach(x => x.Parent = childItem as ICraftingTreeCompoundItem); } return(childItem); }
private static CraftingTreeCompoundItem CreateSmeltingItem(MinecraftItem mcItem, SmeltingRecipe smeltingRecipe, int requiredAmount, int currentAmount, ICraftingTreeCompoundItem parent = null, int recipeAmount = 1) { List <ICraftingTreeItem> ingredients = new List <ICraftingTreeItem>(); var smeltingIngredientMCItem = _minecraftItemRepository.GetMinecraftItemById(smeltingRecipe.IngredientId); var smeltingIngredientItem = CreateSmeltingIngredient(smeltingIngredientMCItem, currentAmount); ingredients.Add(smeltingIngredientItem); var smeltingItem = new CraftingTreeCompoundItem(item: mcItem, requiredAmount: requiredAmount, ingredients: ingredients, recipeResultCount: 1, recipeAmount: recipeAmount, currentAmount: currentAmount, parent: parent); smeltingIngredientItem.Parent = smeltingItem; return(smeltingItem); }