Example #1
0
        /// <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]");
        }
Example #2
0
        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);
        }