예제 #1
0
        public bool CanAcceptItem(IItemInstance item)
        {
            if (Config.HasMassLimit)
            {
                var curtMass = GetCurrentMass();
                var itemMass = item.GetMass();
                if (curtMass + itemMass > Config.MaxMass)
                {
                    return(false);
                }
            }

            if (!CanAcceptItemOfDef(item.ItemDef))
            {
                return(false);
            }

            return(Config.CanReceiveItems);
        }
예제 #2
0
        public bool CanTransferItemsToInventory(IItemInstance item, IInventory oldInventory, IInventory newInventory, int count)
        {
            if (!newInventory.CanAcceptItem(item))
            {
                return(false); // Item not accepted by new inventory
            }
            if (newInventory.Config.HasMassLimit && newInventory.GetCurrentMass() + item.GetMass() > newInventory.Config.MaxMass)
            {
                return(false); // Would put contaner over mass limit
            }
            if (!oldInventory.GetAllHeldItems().Where(x => x.Equals(item)).Any())
            {
                return(false); // Item not found in in old inventory
            }
            if (newInventory.HasItem(item.Id))
            {
                return(false); // Item already in new inventory
            }
            if (item.Count - count < 0)
            {
                return(false); // Can not transfer more than is in stack
            }
            var same = newInventory.GetAllHeldItems().Where(x => x.IsSame(item)).SingleOrDefault();

            if (same != null)
            {
                if (newInventory.Config.RespectsStackLimit && same.Count + count > item.ItemDef.StackLimit)
                {
                    return(false); // Would put new inventory over stack limit
                }
            }
            else
            {
                if (newInventory.Config.RespectsStackLimit && count > item.ItemDef.StackLimit)
                {
                    return(false); // Would put new inventory over stack limit
                }
            }

            return(true);
        }