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); }
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); }