private void CheckPlayerCanLoadToShip(IPlayer player, IReadOnlyCollection <IGood> goods, CargoShip cargoShip) { var goodType = goods.First().Type; if (!cargoShip.CanBeLoaded(goodType)) { throw new GameException($"{goodType} cannot be loaded to ship with capacity {cargoShip.Capacity}"); } var typedShip = GetCargoShipWithGoodTypeOrDefault(goodType); if (typedShip != null && typedShip != cargoShip) { throw new GameException( $"{goodType} barrels already loaded to ship with capacity {typedShip.Capacity}"); } if (typedShip == null && goods.Count > cargoShip.Capacity && Game.CargoShips.Exists(ship => ship.Capacity > cargoShip.Capacity && ship.CanBeLoaded(goodType))) { throw new GameException($"{goodType} must be loaded to a ship with more capacity"); } }