/// <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 CookingRecipeIngredient[reader.ReadInt32()]; for (int i = 0; i < Ingredients.Length; i++) { Ingredients[i] = new CookingRecipeIngredient(); Ingredients[i].FromBytes(reader, resolver.ClassRegistry); Ingredients[i].Resolve(resolver, "[FromBytes]"); } //NameComponentOrder = reader.ReadIntArray(); if (!reader.ReadBoolean()) { Shape = new CompositeShape() { Base = new AssetLocation(reader.ReadString()) }; } PerishableProps = new TransitionableProperties(); PerishableProps.FromBytes(reader, resolver.ClassRegistry); // CanBeServedInto = new JsonItemStack(); // CanBeServedInto.FromBytes(reader, resolver.ClassRegistry); // CanBeServedInto.Resolve(resolver, "[FromBytes]"); }
public bool TryCraftNow(ICoreAPI api, double nowSealedHours, ItemSlot[] inputslots) { if (SealHours > 0 && nowSealedHours < SealHours) { return(false); } var matched = pairInput(inputslots); ItemStack mixedStack = Output.ResolvedItemstack.Clone(); mixedStack.StackSize = getOutputSize(matched); if (mixedStack.StackSize < 0) { return(false); } // Carry over freshness TransitionableProperties[] props = mixedStack.Collectible.GetTransitionableProperties(api.World, mixedStack, null); TransitionableProperties perishProps = props != null && props.Length > 0 ? props[0] : null; if (perishProps != null) { CollectibleObject.CarryOverFreshness(api, inputslots, new ItemStack[] { mixedStack }, perishProps); } ItemStack remainStack = null; foreach (var val in matched) { if (val.Value.ConsumeQuantity != null) { remainStack = val.Key.Itemstack; remainStack.StackSize -= val.Value.Quantity * (mixedStack.StackSize / Output.StackSize); if (remainStack.StackSize <= 0) { remainStack = null; } break; } } // Slot 0: Input/Item slot // Slot 1: Liquid slot if (shouldBeInLiquidSlot(mixedStack)) { inputslots[0].Itemstack = remainStack; inputslots[1].Itemstack = mixedStack; } else { inputslots[1].Itemstack = remainStack; inputslots[0].Itemstack = mixedStack; } inputslots[0].MarkDirty(); inputslots[1].MarkDirty(); return(true); }