/// <summary> /// Resolves the ingredients that are used to their actual types in the world. /// </summary> /// <param name="world">The world accessor for data.</param> /// <param name="sourceForErrorLogging"></param> public void Resolve(IServerWorldAccessor world, string sourceForErrorLogging) { for (int i = 0; i < Ingredients.Length; i++) { Ingredients[i].Resolve(world, sourceForErrorLogging); } Output.Resolve(world, sourceForErrorLogging); }
public bool Resolve(IWorldAccessor world, string sourceForErrorLogging) { bool ok = true; for (int i = 0; i < Ingredients.Length; i++) { ok &= Ingredients[i].Resolve(world, sourceForErrorLogging); } ok &= Output.Resolve(world, sourceForErrorLogging); return(ok); }
/// <summary> /// Deserializes the alloy /// </summary> /// <param name="reader"></param> /// <param name="resolver"></param> public void FromBytes(BinaryReader reader, IWorldAccessor resolver) { Ingredients = new MetalAlloyIngredient[reader.ReadInt32()]; for (int i = 0; i < Ingredients.Length; i++) { Ingredients[i] = new MetalAlloyIngredient(); Ingredients[i].FromBytes(reader, resolver.ClassRegistry); Ingredients[i].Resolve(resolver, "[FromBytes]"); } Output = new JsonItemStack(); Output.FromBytes(reader, resolver.ClassRegistry); Output.Resolve(resolver, "[FromBytes]"); }
/// <summary> /// Turns Type, Code and Attributes into an IItemStack /// </summary> /// <param name="resolver"></param> public bool Resolve(IWorldAccessor resolver, string sourceForErrorLogging) { if (ReturnedStack != null) { ReturnedStack.Resolve(resolver, sourceForErrorLogging + " recipe with output " + Code); } if (Code.Path.Contains("*")) { IsWildCard = true; return(true); } if (Type == EnumItemClass.Block) { Block block = resolver.GetBlock(Code); if (block == null || block.IsMissing) { resolver.Logger.Warning("Failed resolving crafting recipe ingredient with code {0} in {1}", Code, sourceForErrorLogging); return(false); } ResolvedItemstack = new ItemStack(block, Quantity); } else { Item item = resolver.GetItem(Code); if (item == null || item.IsMissing) { resolver.Logger.Warning("Failed resolving crafting recipe ingredient with code {0} in {1}", Code, sourceForErrorLogging); return(false); } ResolvedItemstack = new ItemStack(item, Quantity); } if (Attributes != null) { IAttribute attributes = Attributes.ToAttribute(); if (attributes is ITreeAttribute) { ResolvedItemstack.Attributes = (ITreeAttribute)attributes; } } return(true); }
/// <summary> /// Deserializes the alloy /// </summary> /// <param name="reader"></param> /// <param name="resolver"></param> public void FromBytes(BinaryReader reader, IWorldAccessor resolver) { Code = reader.ReadString(); Ingredients = new BarrelRecipeIngredient[reader.ReadInt32()]; for (int i = 0; i < Ingredients.Length; i++) { Ingredients[i] = new BarrelRecipeIngredient(); Ingredients[i].FromBytes(reader, resolver); Ingredients[i].Resolve(resolver, "Barrel Recipe (FromBytes)"); } Output = new JsonItemStack(); Output.FromBytes(reader, resolver.ClassRegistry); Output.Resolve(resolver, "Barrel Recipe (FromBytes)"); SealHours = reader.ReadDouble(); }
/// <summary> /// Deserializes the alloy /// </summary> /// <param name="reader"></param> /// <param name="resolver"></param> public void FromBytes(BinaryReader reader, IWorldAccessor resolver) { Ingredient = new CraftingRecipeIngredient(); RecipeId = reader.ReadInt32(); Ingredient.FromBytes(reader, resolver); int len = reader.ReadInt32(); Pattern = new string[len][]; for (int i = 0; i < Pattern.Length; i++) { Pattern[i] = reader.ReadStringArray(); } Name = new AssetLocation(reader.ReadString()); Output = new JsonItemStack(); Output.FromBytes(reader, resolver.ClassRegistry); Output.Resolve(resolver, "[FromBytes]"); GenVoxels(); }